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

Properties 从同一类的实例检索属性及其描述,properties,query-optimization,sparql,union,wikidata,Properties,Query Optimization,Sparql,Union,Wikidata,我希望检索具有相同类型(类)的实例的所有不同对象属性,从两个初始种子(wd:Q963和wd:Q42320)开始。首先,我询问这类种子的类型(可能还有子类型)。其次,检索同一类种子的所有实例。第三,检索实例的属性。最后,我想检索这些属性的描述,如果可能的话,还有其他标签。我的质询如下: select distinct ?property ?description ?label where{ { wd:Q963 wdt:P31 ?typesSubject . ?ins

我希望检索具有相同类型(类)的实例的所有不同对象属性,从两个初始种子(wd:Q963和wd:Q42320)开始。首先,我询问这类种子的类型(可能还有子类型)。其次,检索同一类种子的所有实例。第三,检索实例的属性。最后,我想检索这些属性的描述,如果可能的话,还有其他标签。我的质询如下:

select distinct ?property ?description ?label where{
  {     
    wd:Q963 wdt:P31 ?typesSubject . 
    ?instancesS (wdt:P31|wdt:P279) ?typesSubject .
    ?instancesS ?property ?unknown .
  }
 UNION
  { 
    wd:Q42320 wdt:P31 ?typesObject . 
    ?instancesO (wdt:P31|wdt:P279) ?typesObject . 
    ?unknown ?property ?instancesO . 
  }

 ?claimPredicate wikibase:directClaim ?property . 
 ?claimPredicate schema:description ?description .  
 ?claimPredicate rdfs:label ?label .  

   FILTER(strstarts(str(?property),str(wdt:)))
   FILTER(strstarts(str(?unknown),str(wd:)))

   FILTER(LANG(?description) = "en").  
   FILTER(LANG(?label) = "en"). 

}

问题是我的实际查询需要很多时间,并且在公共Wikidata端点中失败。有人能给我一些提示来优化这样的查询吗

老实说,我不明白你问的目的。我想你对语义相似或类似的东西感兴趣

基本上,您可以减少连接的数量,只检索具有嵌套
SELECT DITINCT
的唯一wdt谓词

SELECT?property?clainPredicateLabel?clainPredicateDescription
在哪里{
提示:查询提示:优化器“无”。
{  
选择DISTINCT?属性{
值(?s){(wd:Q963)(wd:Q42320)}
?s wdt:P31/^(wdt:P31 | wdt:P279)?实例。
?实例?属性?未知。
}
}
?ClainIndicate wikibase:directClaim?属性。
服务wikibase:标签{bd:serviceParam wikibase:语言“en”。}
}

即使使用
服务wikibase:label
,这也足够快(~3s)

此外,您还可以在
之后过滤(strstarts(str(?property),str(wdt:))
?claimpirecte wikibase:directClaim?property



对于
提示:查询提示:优化器“无”
,此提示强制Blazegraph遵循标准的求值顺序。在这个特定的查询中,
hint:query hint:optimizer“Runtime”
hint:SubQuery hint:runOnce true
应该可以工作。

407
属性的检索在~3s:
select distinct?属性中{{instancesS(wdt:P31 | wdt:P279)/^wdt:P31 wd:Q963。?instancesS?属性?未知。过滤器(strstarts(str(?property),str(wdt:))}联合{实例so(wdt:P31 | wdt:P279)/^wdt:P31 wd:Q42320。?未知?属性?实例so.FILTER(strstarts(str(?未知),str(wd:)}
问题在于与索赔的联接hank you@AKSW,你是对的,我不知道如何解决此类联接问题。非常感谢你@Stanislav,查询提示帮助很大。此外,我还将指令
(GROUP_CONCAT(?alternative;separator=“|”)作为?altLabel)
?claimpirecte skos:altLabel?alternative.
分组,以便获得同一行中每个属性的所有可能的替代标签