查询wikidata的“财产约束”

时间:2018-02-09 15:36:08

标签: sparql wikidata

TL; DR
如何查询(sparql)属性的属性?

或..
因此,作为我项目的一部分,我需要在wikidata中找到具有任何时间限制的属性,具体说明“开始时间”和“结束时间”。 我试过这个问题:

SELECT DISTINCT ?prop WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?person wdt:P31 wd:Q5.
  ?person ?prop ?statement.
  ?statement pq:P580 ?starttime.
  ?statement pq:P582 ?endtime.
}
LIMIT 200

**是的,属性应该与人类有关 无论如何,我确实得到了一些好的结果,如:
http://www.wikidata.org/prop/P26
http://www.wikidata.org/prop/P39
但我也得到一些肯定错误的其他属性。

所以,基本上我要做的是获取具有属性约束(P2302)的属性列表 - 允许限定符约束(Q21510851)以及开始时间(P580)和结束时间(P582) 甚至是可能的: 我尝试了一些查询:

SELECT DISTINCT ?property ?propertyLabel ?propertyDescription ?subpTypeOf ?subpTypeOfLabel 
WHERE
{
    ?property rdf:type wikibase:Property .

    ?property wdt:P2302  ?subpTypeOf.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }   
}

但没有得到我想要的结果。 甚至可以查询这类东西吗?

由于

1 个答案:

答案 0 :(得分:0)

Qualifiers也用于属性页面。您的第二个查询应该是:

SELECT DISTINCT ?prop ?propLabel {
  ?prop p:P2302 [ ps:P2302 wd:Q21510851 ; pq:P2306 wd:P580, wd:P582 ] ;
        p:P2302 [ ps:P2302 wd:Q21503250 ; pq:P2308 wd:Q5 ; pq:P2309 wd:Q21503252 ] .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }   
} ORDER BY ASC(xsd:integer(strafter(str(?prop), concat(str(wd:), "P"))))

Try it!

您的第一个查询是正确的,但请注意,这是一个“原样”查询。例如,wd:P410没有相应的约束,但请查看wd:Q83855