在下面的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”)?
答案 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'功能,但我没有在草稿中看到它)