我想从两个初始种子(wd:Q963和wd:Q42320)开始,检索具有相同类型(类)的实例的所有不同对象属性。首先,我要求这些种子的类型(也许是子类型)。其次,检索同一类种子的所有实例。第三,检索实例的属性。最后,我想检索这些属性的描述以及可能的替代标签。我的查询如下:
String
问题是我的实际查询需要花费大量时间,并且在公共的Wikidata端点中失败。有没有人可以提供一些提示来优化这样的查询?
答案 0 :(得分:2)
说实话,我无法理解您的查询目的。我想你对语义相似性或类似的东西很感兴趣。
基本上,您可以减少连接数,仅使用嵌套SELECT DITINCT
检索唯一的wdt-predicates。
SELECT ?property ?claimPredicateLabel ?claimPredicateDescription
WHERE {
hint:Query hint:optimizer "None" .
{
SELECT DISTINCT ?property {
VALUES (?s) {(wd:Q963) (wd:Q42320)}
?s wdt:P31/^(wdt:P31|wdt:P279) ?instances .
?instances ?property ?unknown .
}
}
?claimPredicate wikibase:directClaim ?property .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
即使使用SERVICE wikibase:label
,这也足够快(~3s)。
此外,您FILTER(strstarts(str(?property),str(wdt:)))
之后don't need ?claimPredicate wikibase:directClaim ?property
。
对于hint:Query hint:optimizer "None"
,此提示强制Blazegraph遵循标准bottom-up评估顺序。在此特定查询中,hint:Query hint:optimizer "Runtime"
或hint:SubQuery hint:runOnce true
应also工作。