首页 > 解决方案 > 维基数据 SPARQL 查询。并非结果中的所有属性

问题描述

谁能帮我理解为什么 ?sEnd 属性对于这里的最后一条记录是空的?

SELECT ?sLabel ?sStart ?sEnd
WHERE {
BIND(wd:Q32522 as ?p).
?s wdt:P26 ?p .
OPTIONAL { ?s p:P26 [pq:P580 ?sStart] }
OPTIONAL { ?s p:P26 [pq:P582 ?sEnd] }
SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' }
}

基本上,我要检索的是 Jennifer Aniston 的配偶的婚姻开始和结束日期。

提前致谢!

标签: sparqlwikidata

解决方案


问题似乎是您正在查询 Jennifer Aniston 的配偶的结婚日期,而不是直接查询她的结婚日期。

您的查询返回一些奇怪的结果,原因有两个:

1.布拉德皮特第二次结婚,安吉丽娜朱莉(2014-19)。因此,您的查询也会返回这些日期。

2. Justin Theroux 和 Jennifer Aniston 的数据不一致(这是一个维基数据问题)。特别是,正如@UninformedUser 所指出的,贾斯汀的页面没有他们结婚的结束日期。詹妮弗安妮斯顿关于她与贾斯汀婚姻的数据比他的数据更具体,并且有开始和结束日期。

推理是可以用来处理这类问题的东西,一些三联商店有它。

尽管如此,您需要的查询是:

SELECT ?spouseLabel ?sStart ?sEnd
WHERE {
BIND(wd:Q32522 as ?person).
?person p:P26 ?marriage .
?marriage pq:P580 ?sStart ;
         ps:P26 ?spouse .
OPTIONAL{?marriage pq:P582 ?sEnd}
                     
SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' }
}

这给出了所需的结果。请注意,婚礼属性的名称空间会根据对象的不同而变化。请参阅此处了解更多信息。


推荐阅读