我正在尝试构造一个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:”前缀/谓词通常使用的名称空间,因此也许需要以某种方式将其重新转换为其他类型/名称空间。但是我不确定这是否重要。
也许可以使用过滤器或其他查询后的技巧来做到这一点,但是我在第二个示例中写的内容(将我的个人项目保留在图表中)似乎是可取的。而且,我绝对希望将其保留在单个查询中。
任何帮助都将受到欢迎。我进行了大量搜索,但没有找到一个示例来解决在同一查询中将主题转换为谓词的情况。谢谢!