2010-06-01 8 views
2

다음 DBpedia 쿼리에서 UNION을 단일 패턴으로 통합하는 방법이 있습니까?SPARQL 엔티티는 select 쿼리 내부에 목록을 표시합니다.

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의 목록 (또는 "다중 세트"또는 "백")을 정의하는 방법이 있습니까?

답변

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) 

.

는 (I 1.1은 'IN'기능을 가진 느낌 SPARQL을했다,하지만 난 초안에 표시되지 않습니다)

+0

, 어쩌면 뭔가를 할 수 이 버전은 이후 버전에서 추가 될 것입니다. 설명과 제안에 감사드립니다. 관련 메모에서 쿼리 변수에 단일 URI를 할당하고 해당 변수를 쿼리의 다른 위치에 사용하는 방법이 있습니까? – wynz

+0

표준 SPARQL 1.0에서 no. 일부 시스템에서는 변수를 미리 바인딩 할 수 있습니다. SPARQL 1.1 및 일부 시스템에서 예. 예 : http://www.semanticoverflow.com/questions/925/927#927. 서브 SELECT를 사용하는 SELECT는 SPARQL 1.1에서 확실히 작동합니다. LET에 들어갈 수 있습니다. – user205512

+0

아, 물론 {... FILTER (? var = )} 같은 효과가 있습니다. – user205512

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