12

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

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

什么时候应该使用 -->

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

在我的 sparql 查询中。有人可以解释这些中的每一个是什么意思,有什么区别?

4

3 回答 3

10

命名空间中的事物p:用于选择语句。命名空间中的事物wdt:用于选择实体。实体选择wdt:允许您简化或汇总涉及语句选择的更复杂的查询。

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

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

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". }
}

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

所以,这有点复杂!wdt:命名空间应该使这种查询更简单。该示例可以重写为:

SELECT ?graffiti ?graffitiLabel
WHERE
{
    ?graffiti wdt:P31 wd:Q17514 . # entities that are graffiti
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

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

  • 这种技术只适用于本质上是对还是错的陈述,比如是否涂鸦。(“t”wdt:代表“真实”)。
  • 有时,可用的信息wdt:只是缺少一些事实。以我的经验,p:ps:查询通常会返回比wdt:查询更多的结果。
于 2019-08-16T21:11:16.033 回答
0

它们只是 XML 命名空间前缀,基本上是完整 URI 的快捷方式。所以给定 wdt:Apples,完整的 URI 是http://www.wikidata.org/prop/direct/Apples并且给定 p:fruitType URI 是http://www.wikidata.org/prop/fruitType

前缀/命名空间没有其他含义,它们只是定义具有 URL 格式的事物名称的方法。然而,诸如在http://www.wikidata.org/prop/中定义属性的约定对于区分术语的含义很有用,因此“直接”也可能是属性的子类型(在这种情况下必须使用维基百科转储)。

对于细节,您需要希望作者已经公开了一些命名约定,或者陷入“是 p:P51 还是 p:P15 还是 wdt:P51?”的循环。由于语义技术的“语义”已经丢失,因此可能会带来好运。

于 2016-03-15T23:49:15.793 回答
0

如果您在https://www.wikidata.org/wiki/Q76访问 Barack Obama 的 Wikidata 项目页面并向下滚动,您会看到“配偶”属性的条目P26维基数据配偶

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

SELECT ?spouse WHERE {
  wd:Q76 p:P26 ?s .
  ?s ps:P26 ?spouse .
}

该变量?s是一个抽象语句节点(又名白盒)。

您可以使用以下方法在查询正文中仅使用一个三元组获得相同的信息wdt:

SELECT ?spouse WHERE {
  wd:Q76 wdt:P26 ?spouse .
}

那你为什么要使用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 .
}
于 2021-10-10T21:31:05.390 回答