在用于查询维基数据的示例之一中,我发现了以下查询,其中在SELECT之后的行中包含p:P6/v:P6。是什么意思?
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX v: <http://www.wikidata.org/prop/statement/>
SELECT ?p ?w ?l ?wl WHERE {
wd:Q30 p:P6/v:P6 ?p . #-- This line
?p wdt:P26 ?w .
OPTIONAL {
?p rdfs:label ?l filter (lang(?l) = "en") .
}
OPTIONAL {
?w rdfs:label ?wl filter (lang(?wl) = "en").
}
}
这是 SPARQL 1.1 属性路径的 SequencePath 风格。
wd:Q30 p:P6/v:P6 ?p .
意味着有一个三元组
(wd:Q30, p:P6, ?x)
,还有另一个三元组(?x, v:P6, ?p)
,而不需要明确地写(或命名)中间节点?x
。换句话说,它说:“可以通过从 ?p
开始,遵循属性 wd:Q30
,然后属性 p:P6
来找到 v:P6
。
只是为了提供一个带有一些直观上下文的清晰的实例,查询服务上当前可用的示例之一是列出“纽约市出生的人类”:
#Humans born in New York City
#title: Humans born in New York City
SELECT DISTINCT ?item ?itemLabel ?itemDescription ?sitelinks
WHERE {
?item wdt:P31 wd:Q5; # Any instance of a human
wdt:P19/wdt:P131* wd:Q60; # Who was born in any value (eg. a hospital)
# that has the property of 'administrative area of' New York City or New York City itself.
# Note that using wdt:P19 wd:Q60; # Who was born in New York City.
# Doesn't include humans with the birth place listed as a hospital
# or an administrative area or other location of New York City.
wikibase:sitelinks ?sitelinks.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
ORDER BY DESC(?sitelinks)
所以这行:
wdt:P19/wdt:P131* wd:Q60
分解为:
wdt:P19
:出生地wdt:P131
:位于行政领土实体内wd:Q60
:纽约市因此,我们理解这意味着:
(place of birth) is (located in the administrative territorial entity) of (New York city)
作为奖励,
*
也有解释:星号在此 SPARQL 查询中意味着什么? 表示:“执行 /wdt:P131
”一次或多次。通过这种方式,我们可以找到所有被标记为出生的人类,例如在以下任一情况下:
/wdt:P131
一次)/wdt:P131
两次)