2012-04-15 3 views
4

RDF 파일에 rdf:collection이 있습니다. 한 저자의 콜렉션을 가지고있을 때 다음 쿼리는 아무것도 반환하지 않습니다. 그러나 쿼리는 두 명 이상의 작성자에게 적용되지만 두 명의 작성자 만 반환합니다. 모든 저자를 쓰려면 어떻게해야합니까?rdf : sparql의 컬렉션

<bibo:authorList rdf:parseType="Collection"> 
<rdf:Description rdf:about="http://openlibrary.org/authors/OL113143A"/> 
<rdf:Description rdf:about="http://openlibrary.org/authors/OL6784959A"/> 
</bibo:authorList> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX dc: <http://purl.org/dc/terms/> 

select ?title ?author ?author2 
where { 
    ?x dc:title ?title . 

    ?x bibo:authorList ?object. 
    ?object rdf:first ?name. 
    ?name rdf:value ?author. 

    ?object rdf:rest ?object2. 
    ?object2 rdf:first ?name2. 
    ?name2 rdf:value ?author2 . 
} 

답변

5

귀하의 문제는 당신이 그렇게 결과가 RDF 목록의 길이에 따라 달라집니다 반 재귀 뭔가하려고하는 것입니다. 서면으로 작성된 쿼리는 길이가 2 이상인 목록에 대해서만 작동하며 길이가 1 인 목록은 쿼리의 두 번째 부분이 아무 것도 일치하지 않기 때문에 작동하지 않습니다. 당신이 가장 좋은 방법은 지금과 같은 속성 경로입니다 컬렉션을 액세스하려면

(SPARQL 1.1 필요) :

SELECT * WHERE 
{ 
    ?list rdf:rest*/rdf:first ?member . 
} 

당신은 당신이 맞는 볼 귀하의 질의에 맞게이 일반적인 패턴을 적용 할 수 있습니다.

+0

나를 위해 SPARQL 쿼리에 ARC2를 사용하므로 그러한 요청이 없습니다. ARC2는 SPARQL 1.1의 하위 쿼리를 지원하지 않습니다. SPARQL 1.0을 사용하여 쿼리를 작성하는 방법 ARC2 SPARQL 1.1에 설치하는 방법은 무엇입니까? - –

+0

@Magdalena ARC2는 SPARQL 1.1을 지원하지 않으므로 ARC2를 사용하는 경우이 쿼리를 사용할 수 없습니다 – RobV

+0

컬렉션 대신 무엇을 사용할 수 있습니까? Arc2가 필요하고 내 컬렉션을 대체 할 무언가가 필요합니다. –