SPARQL 属性路径中的斜杠意味着什么?

问题描述 投票:0回答:2

用于查询维基数据的示例之一中,我发现了以下查询,其中在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"). 
   }
 }
rdf sparql wikidata
2个回答
21
投票

这是 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


0
投票

只是为了提供一个带有一些直观上下文的清晰的实例,查询服务上当前可用的示例之一是列出“纽约市出生的人类”

#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
    两次)
© www.soinside.com 2019 - 2024. All rights reserved.