【发布时间】:2016-10-25 17:31:28
【问题描述】:
我需要选择 “分类单元等级 (P105)” 的 “物种 (Q7432)” 的 实体 label 匹配文字字符串,例如“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)中标签的词法形式 ) 有语言标签,所以我需要一种方法来获得任何语言的Literal Equality。
我尝试了一些可能的解决方案,但没有找到任何不会导致以下结果的查询:
超时消息com.bigdata.bop.engine.QueryTimeoutException: Query deadline is expired
这里是我尝试过的列表(..我总是得到 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 我不明白language ranges 或```通配符`` 是否能在某些方面有所帮助。
编辑
我使用 virtuoso 查询编辑器在 DbPedia 中成功测试了一个类似的查询(没有超时): https://dbpedia.org/sparql 默认数据集名称(Graph 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
我仍然对了解我在 Wikidata 上遇到的性能问题以及最好使用的语法非常感兴趣。
【问题讨论】:
-
什么是超时?三联店?你用的是哪家三联店?是 Blazegraph 还是 Virtuoso?
-
@AKSW 我正在使用query.wikidata.org(刚刚编辑了我的问题,感谢您的评论)我会尽快在 dbpedia virtuoso dbpedia.org/sparql 上尝试相同的操作,但我现在不知道是否可能,因为不知道dbpedia有没有相同的数据
-
@FrancoRondini,看看this answer。似乎
?entity wdt:P171+ wd:Q25314 .之类的内容适合您的情况。 -
@Stanislav Kralin 你是对的!我尝试了几个查询,在 51294 毫秒内产生 8 个结果,在 41284 毫秒内产生 2 个结果(使用 DISTINCT 子句)——虽然不是那么快,但都满足我的要求。如果你想发布你的答案,我会接受。感谢您的建议。