加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

SPARQL匹配文字与** ANY **语言标签没有遇到超时

发布时间:2020-12-14 04:44:07 所属栏目:大数据 来源:网络整理
导读:我需要选择具有“物种(Q7432)”的“分类等级(P105)”的实体,其具有与诸如“Topinambur”之类的文字字符串匹配的标签. 我在https://query.wikidata.org上测试查询; 这个查询很好,并以令人满意的响应时间将实体返回给我: PREFIX wd: http://www.wikidata.org/
我需要选择具有“物种(Q7432)”的“分类等级(P105)”的实体,其具有与诸如“Topinambur”之类的文字字符串匹配的标签.

我在https://query.wikidata.org上测试查询;
这个查询很好,并以令人满意的响应时间将实体返回给我:

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE {
  ?entity rdfs:label "Topinambur"@de . 
  ?entity wdt:P105 wd:Q7432.
}
LIMIT 100

这里的问题是我的必要条件是不指定语言,但底层数据集(wikidata)中标签的词法形式有语言标签,所以我需要一种方法来获得任何语言的文字平等.

我尝试了一些可能的解决方案,但我没有找到任何不会导致以下结果的查询:
TIMEOUT消息com.bigdata.bop.engine.QueryTimeoutException:查询截止日期已过期

在这里我尝试的列表(..我总是得到TIMEOUT):

1)基于this answer我试过:

SELECT * WHERE {
  ?entity rdfs:label ?label FILTER ( str( ?label ) = "Topinambur") . 
  ?entity wdt:P105 wd:Q7432.
}
LIMIT 100

2)根据我尝试的其他一些文档:

SELECT * WHERE {
  ?entity wdt:P105 wd:Q7432.
  ?entity rdfs:label ?label FILTER regex(?label,"^Topinambur")  .  
}
LIMIT 100

3)和

SELECT * WHERE {
      ?entity wdt:P105 wd:Q7432.
      ?entity rdfs:label ?label .
      FILTER langMatches( lang(?label),"*" )
      FILTER (?label = "Topinambur")
   }
   LIMIT 100

我正在寻找的是一个高性能的解决方案或一些SPARQL语法,它不会结束TIMEOUT消息.

PS:参考http://www.rfc-editor.org/rfc/bcp/bcp47.txt我不明白语言范围或““wildcards“在某种程度上是否有帮助.

编辑

我通过使用virtuoso查询编辑器在DbPedia中成功测试了(没有下降超时)类似的查询:
https://dbpedia.org/sparql
默认数据集名称(图形IRI):http://dbpedia.org

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?resource 
WHERE { 
 ?resource rdfs:label ?label .  FILTER ( str( ?label ) = "Topinambur").
 ?resource rdf:type dbo:Species
 }
LIMIT 100

我仍然非常有兴趣了解我在维基数据上遇到的性能问题以及使用的最佳语法.

解决方法

This answer提出三种选择:

>更具体.
在你的情况下,?实体wdt:P171 wd:Q25314模式似乎具有足够的选择性.
> Wait直到他们实施全文搜索.
>使用采石场(example query).

另一种选择是在wikidata.dbpedia.org使用Virtuoso全文搜索功能:

SELECT ?s WHERE { 
   ?resource rdfs:label ?label .
   ?label bif:contains "'topinambur'" .
   BIND ( IRI ( REPLACE ( STR(?resource),"http://wikidata.dbpedia.org/resource","http://www.wikidata.org/entity"
                        )
              ) AS ?s
        )
}

Try it!

似乎即使是下面的查询也可以在wikidata.dbpedia.org上运行而不会陷入超时:

PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?resource WHERE { 
   ?resource rdfs:label ?label .
   FILTER ( STR(?label) = "Topinambur" ) .
}

Try it!

两小时前我在removed上发表了关于维基数据的声明:

wd:Q161378 rdfs:label "topinambur"@ru .

我不是植物学家,但是’topinambur’在Russian绝对不是一个词.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读