从同一个类的实例中检索属性及其描述

时间:2018-03-22 02:08:46

标签: properties query-optimization sparql union wikidata

我想从两个初始种子(wd:Q963和wd:Q42320)开始,检索具有相同类型(类)的实例的所有不同对象属性。首先,我要求这些种子的类型(也许是子类型)。其次,检索同一类种子的所有实例。第三,检索实例的属性。最后,我想检索这些属性的描述以及可能的替代标签。我的查询如下:

String

问题是我的实际查询需要花费大量时间,并且在公共的Wikidata端点中失败。有没有人可以提供一些提示来优化这样的查询?

1 个答案:

答案 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" . }
}

Try it!

即使使用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 truealso工作。