select查询中的SPARQL实体列表

select查询中的SPARQL实体列表,sparql,Sparql,在下面的DBpedia查询中,是否有方法将联合合并到单个模式中 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

在下面的DBpedia查询中,是否有方法将联合合并到单个模式中

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") 
}
前缀属性:
前缀res:
选择不同的?语言?标签
何处{
{res:西班牙道具:语言?语言}
联合
{res:France道具:语言?语言}
联合
{res:Italy prop:language?language}
?语言rdfs:标签?标签。
筛选器语言匹配(语言(?标签),“en”)
}
文章提到了一些关于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") 
}
前缀属性:
前缀res:
选择不同的?语言?标签
何处{
(res:西班牙res:法国res:意大利)道具:语言?语言
?语言rdfs:标签?标签。
筛选器语言匹配(语言(?标签),“en”)
}
有没有一种方法可以在SELECT查询中定义这样的URI列表(或“multiset”或“bag”)

(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”特性,但我在草稿中没有看到它)

在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") 
}

这是不幸的,也许类似的东西会在以后的版本中添加。谢谢你的澄清和建议。请注意,有没有一种方法可以将单个URI分配给查询变量,并在查询中的其他位置使用该变量?在标准SPARQL 1.0中,没有,尽管您可以在某些系统中预绑定变量。在SPARQL 1.1和一些系统中,是的。见例。带有子选择的选择肯定会在SPARQL 1.1中工作。当然,{…FILTER(?var=)}也有同样的效果。