查询WikiData,p和wdt默认前缀之间的区别

Bah*_*har 8 rdf sparql wikidata

我是wikidata的新手,我不知道何时应该使用->

wdt前缀(http://www.wikidata.org/prop/direct/

当我应该使用->

p前缀(http://www.wikidata.org/prop/)。

在我的sparql查询中。有人可以解释这些含义是什么吗?有什么区别?

Joh*_*ner 9

在物联网p:的命名空间用来选择语句。在物联网wdt:的命名空间用来选择的entites。实体选择与wdt:允许您简化或总结涉及语句选择的更复杂的查询。

当您看到 a 时,p:您通常会看到 aps:pq:紧随其后。这是因为您很少需要语句列表;您通常想了解有关这些陈述的一些信息

这个例子是一个两步过程,向你展示了维基数据中的所有涂鸦:

SELECT ?graffiti ?graffitiLabel
WHERE
{
    ?graffiti p:P31 ?statement .  # entities that are statements
    ?statement ps:P31 wd:Q17514 . # which state something is graffiti
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Run Code Online (Sandbox Code Playgroud)

P31这里使用了两个不同版本的属性,位于不同的命名空间中。每个版本都对其如何连接到其他项目有不同的期望。p:命名空间中的事物将实体连接到语句,ps:命名空间中的事物将语句连接到值。在示例中,p:P31用于选择关于实体的语句。实体将是涂鸦,但我们直到下一行才指定, whereps:P31用于选择语句的值(主题),指定这些值应该是涂鸦。

所以,这有点复杂!该wdt:命名空间应该做出这种查询假笑的。该示例可以重写为:

SELECT ?graffiti ?graffitiLabel
WHERE
{
    ?graffiti wdt:P31 wd:Q17514 . # entities that are graffiti
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Run Code Online (Sandbox Code Playgroud)

这现在缩短了一行,因为我们不再寻找关于涂鸦的陈述,而是寻找涂鸦本身。对偶p:ps:链接用wdt:相同P31属性的一个版本进行总结。但是,请注意:

  • 这种技术仅适用于本质上是真或假的陈述,例如涂鸦与否。(“t”中的“t”wdt:代表“真实”)。
  • wdt:有时,可获得的信息只是缺少一些事实。根据我的经验,通常 a p:andps:查询会返回比wdt:查询多一些的结果。

  • “wdt: 命名空间中的事物用于选择实体。” 不。`wdt:` 前缀也可以像 `wdt:P1082` 一样选择文字。 (2认同)

iro*_*on9 7

如果您转到巴拉克·奥巴马 (Barack Obama) 的维基数据项目页面https://www.wikidata.org/wiki/Q76并向下滚动,您会看到“配偶”属性的条目P26维基数据配偶

p:前缀视为访问图像右侧整个白框的一种方式。为了获取白盒内的信息,您需要更深入地挖掘。为了获取信息的主要部分(“米歇尔·奥巴马”),您可以将p:前缀与ps:前缀组合起来,如下所示:

SELECT ?spouse WHERE {
  wd:Q76 p:P26 ?s .
  ?s ps:P26 ?spouse .
}
Run Code Online (Sandbox Code Playgroud)

该变量?s是一个抽象语句节点(也称为白框)。

您只需使用查询正文中的一个三元组即可获得相同的信息wdt:

SELECT ?spouse WHERE {
  wd:Q76 wdt:P26 ?spouse .
}
Run Code Online (Sandbox Code Playgroud)

那么你为什么要使用呢p:?您可能已经注意到,白框还包含元信息(“开始时间”和“结婚地点”)。为了获取元信息,您可以将p:前缀与pq:前缀结合起来。以下示例查询返回所有信息以及语句节点:

SELECT ?s ?spouse ?time ?place WHERE {
  wd:Q76 p:P26 ?s .
  ?s ps:P26 ?spouse .
  ?s pq:P580 ?time .
  ?s pq:P2842 ?place .
}
Run Code Online (Sandbox Code Playgroud)