在 SPARQL 中对 属性 使用 FILTER

Using FILTER on property in SPARQL

如何 select 所有以特定前缀开头的属性,例如wdt:?我想获取与某个项目相关的所有属性,但对 schema:rdf:p: 等不感兴趣。

SELECT DISTINCT ?p
WHERE {
  wd:Q2 ?p ?entity.
}

此查询将 return 所有 属性。我尝试使用 FILTER(STRSTARTS(?p, "wdt:"))FILTER(STRSTARTS(str(?p), "wdt:"))FILTER(STRSTARTS(xsd:string(?p), "wdt:")) 来检查 属性 是否以 wdt: 开头,但结果始终为空。

wdt: 是一个前缀,意味着它是一种缩写较长内容的方式。

wdt:P31 实际上存储为

http://www.wikidata.org/prop/direct/P31

原则上,您会在查询中指定不同的前缀,如下所示:

PREFIX hello: <http://www.wikidata.org/prop/direct/>

然后您将 hello:P31 作为您的 属性。

所以尝试使用这个:

SELECT DISTINCT ?p
WHERE {
  wd:Q2 ?p ?entity.
FILTER(STRSTARTS(STR(?p), "http://www.wikidata.org/prop/direct/"))

}

有关前缀的更多信息:https://en.wikibooks.org/wiki/SPARQL/Prefixes

列出每个前缀的解释:https://www.mediawiki.org/wiki/Wikibase/Indexing/RDF_Dump_Format#Prefixes_used

完整的前缀列表:https://www.mediawiki.org/wiki/Wikibase/Indexing/RDF_Dump_Format#Full_list_of_prefixes