2

在下面的 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 规范提到了一些关于 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”)?

4

2 回答 2

7

在 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") 
}
于 2015-03-14T04:37:00.397 回答
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”功能,但我在草稿中没有看到它)

于 2010-06-01T14:33:16.760 回答