使用SPARQL查找Wikidata属性,并在同一查询中使用它们(或:将主题用作谓词)

时间:2019-05-26 01:58:16

标签: sparql wikidata

我正在尝试构造一个Wikidata查询,以查找用于给定Wikidata项目的某种特定类型的所有属性。具体来说,我想要一个指向各个组织的机构标识符的链接列表。

我首先找到了属于一种授权记录的所有属性,以及它们的标签,链接模式等。这很好用:

SELECT ?auth ?authLabel ?desc ?linkPattern ?countryLabel ?remoteID WHERE {
 ?auth wdt:P31 wd:Q19595382; # Properties of type "person authority"
   schema:description ?desc; # Plain-english description
   wdt:P1630 ?linkPattern . # Link pattern
 OPTIONAL { ?auth wdt:P17 ?country. } # Country of origin, if you have it
 FILTER((LANG(?desc)) = "en")
 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

这为我提供了Wikidata中每个人权限的列表及其辅助信息,这是一个很好的起点。但是,我想要的是此列表,但仅显示特定人的记录。

我认为这可行,因为Wikidata SPARQL查询应该能够将变量作为谓词处理:


SELECT ?auth ?authLabel ?desc ?linkPattern ?countryLabel ?remoteID WHERE {
  ?auth wdt:P31 wd:Q19595382;
    schema:description ?desc;
    wdt:P1630 ?linkPattern .
    wd:Q5145349 ?auth ?remoteID . # <-- Authority record property must appear in person Q5145349 (Colin McCahon)
  OPTIONAL { ?auth wdt:P17 ?country. }
  FILTER((LANG(?desc)) = "en")
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

但是这将返回零结果。没有错误,只是空的。

我唯一得到的线索是,即使它们是 属性,属性ID的列表也会返回“ wd:”前缀,而不是“ wdt:”前缀/谓词通常使用的名称空间,因此也许需要以某种方式将其重新转换为其他类型/名称空间。但是我不确定这是否重要。

也许可以使用过滤器或其他查询后的技巧来做到这一点,但是我在第二个示例中写的内容(将我的个人项目保留在图表中)似乎是可取的。而且,我绝对希望将其保留在单个查询中。

任何帮助都将受到欢迎。我进行了大量搜索,但没有找到一个示例来解决在同一查询中将主题转换为谓词的情况。谢谢!

0 个答案:

没有答案