我的数据库中有以下数据:
@prefix geo: <http://www.opengis.net/ont/geosparql#> .
@prefix p: <http://www.wikidata.org/prop/> .
@prefix ps: <http://www.wikidata.org/prop/statement/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix wd: <http://www.wikidata.org/entity/> .
@prefix wds: <http://www.wikidata.org/entity/statement/> .
@prefix wdt: <http://www.wikidata.org/prop/direct/> .
wd:Q4472 rdfs:label
"Aulesti"@en ;
p:P625 wds:q4472-589D5F6B-FC8C-4584-9546-89A2930F141A ;
wdt:P625 "Point(-2.5628139 43.296423)"^^geo:wktLiteral .
wds:q4472-589D5F6B-FC8C-4584-9546-89A2930F141A ps:P625 "Point(-2.5628139 43.296423)"^^geo:wktLiteral .
如您所见,位置信息存在两次。它是来自维基数据的样本,经常发生这种情况。但有时只有其中一个存在,而且不知道是哪一个。
通常情况下,我会使用以下查询收集它们:
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
SELECT ?place ?coord WHERE {
?place wdt:P625 ?coord
OPTIONAL {
?place p:P625 ?itemLocation .
?itemLocation ps:P625 ?coord .
}
}
作为一个人,我会选择最短的路径,当没有?coord
时,我必须走?itemLocation
的长路。
耶拿使用哪种策略?
从两种不同的关系中获取相同结果值是否合适?
我应该查询两次吗?
你还有其他选择吗?
答案 0 :(得分:2)
这取决于您想要的数据。我认为如果你想要最相关的值,你应该只使用?place wdt:P625 ?coord
。请参阅以下说明。
前缀wdt
代表direct relationship PREFIX wdt: <http://www.wikidata.org/prop/direct/>
;这与维基数据代表知识的方式有关。 Wikidata最初不是RDF格式,因此,应该调整一些建模方法以在RDF中表示这些数据。
在某种意义上使用的method类似于RDF具体化,您可能需要将(元)信息添加到s p o
形式的语句(三元组)中,例如,源,作者,陈述时间等。维基数据需要一种方法来建立多值属性的多个值之间的排序。例如,美国的人口可能在2008年发行,例如290万和2016年至310亿。因此,人口属性可能有两个不同的值。维基数据提供ranking,在查询直接值时更喜欢2016年值(310)和2008(290)值。当您使用带有属性名称的wdt
前缀时,您将查询直接值,这些值在其他值之间具有最高排名(您应该阅读this)。否则(p
前缀),您与自定义的维基数据模型匹配以表示RDF中的数据,请参阅示例this query。
使用wdt
前缀查询属性时,您将获得两项好处;首先,您跳过详尽的语法来访问属性作为主题,并为每个属性获得最佳排名值。我认为这也是表现明智的决定。