SPARQL实体在选择查询中列出

时间:2010-06-01 11:51:49

标签: sparql

在下面的DBpedia查询中,有没有办法将UNION合并为一个模式?

PREFIX prop: <http://resedia.org/ontology/>
PREFIX res: <http://resedia.org/resource/>
SELECT DISTINCT ?language ?label 
WHERE { 
  {res:Spain prop:language ?language} 
    UNION
  {res:France prop:language ?language}
    UNION
  {res:Italy prop:language ?language}
  ?language rdfs:label ?label .
  FILTER langMatches(lang(?label), "en") 
}

SPARQL spec提到了一些关于RDF集合的内容,但我并不真正理解它所描述的内容。似乎以下语法应该有效,但事实并非如此。

PREFIX prop: <http://resedia.org/ontology/>
PREFIX res: <http://resedia.org/resource/>
SELECT DISTINCT ?language ?label 
WHERE { 
  (res:Spain res:France res:Italy) prop:language ?language
  ?language rdfs:label ?label .
  FILTER langMatches(lang(?label), "en") 
}

有没有办法在SELECT查询中定义这样的URI列表(或“multiset”或“bag”)?

2 个答案:

答案 0 :(得分:6)

在SPARQL 1.1中,您可以执行

SELECT DISTINCT ?language ?label 
WHERE {
  ?country prop:language ?language .
  ?language rdfs:label ?label .
  VALUES ?country { res:Spain res:France res:Italy }
  FILTER langMatches(lang(?label), "en") 
}

答案 1 :(得分:2)

简单回答:不。

(res:Spain res:France res:Italy) prop:language ?language

表示'匹配包含西班牙,法国和意大利的列表有一种语言',即列表本身有一种语言。

你可以这样做:

?country prop:language ?language . ?language rdfs:label ?label . 
FILTER ( ?country == res:Spain || ?country == res:France || ?country == res:Italy )

更短,但可能更慢。

(我有一种感觉SPARQL 1.1有'IN'功能,但我没有在草稿中看到它)

相关问题