2011-12-20 4 views
9

저는 SPARQL의 초보자이며 전이 관계를 반환 할 수있는 쿼리가 있는지 궁금합니다. 예를 들어, 아래의 n3 파일은 "a is sameas c"또는 그 행을 따르는 값을 반환하는 쿼리를 원합니다. 감사합니다SPARQL 질의 전이

@prefix : <http://websitename.com/links/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

:a owl:sameas :b. 
:b owl:sameas :c. 

답변

13

당신이 적절하게 사용할 수 SPARQL 1.1 엔진을 사용하는 경우는 재산 경로를 사용할 수 있습니다, 당신은 그래서 당신이이 기능을 지원하는 자사의 ARQ 엔진을 사용한다고 가정 질문 예나 태그했습니다.

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * 
WHERE 
{ 
    ?x owl:sameAs+ ?y 
} 

주 술어 후 +, 그것은 하나/더 많은 단계로 구성 관계를 찾아야 것을 나타 내기 위해서 (때문에) 사용 :

그래서 당신은 다음과 같은 쿼리를 작성할 수 있습니다.

속성 경로 구문은 here이며 매우 정규 표현식입니다. 이 쿼리를 사용하는 유일한 단점은 경로가 얼마나 오래되었거나 중간 노드가 무엇인지에 대한 정보를 얻지 못한다는 것입니다.

+0

다시 도움을 청합니다. SPARQL 구문의 링크를 확실히 확인하려고합니다. – Sam

+3

쿼리하는 것이 OWL 추론, 특히 transitivity를 포함하는 OWL의 프로필을 지원하고 TransitiveProperty로 속성을 정의한 경우 특수 SPARQL이 필요하지 않습니다 구문을 사용하면 속성을 정상적으로 사용할 수 있으며 추론자가 올바른 작업을 수행합니다. – Michael

4

귀하의 경우에 RobV's answer은 정확한 반면, 나는 올빼미 : sameAs의 양방향 특성을 언급 할 가치가 있다고 생각합니다.

은의이하여 예제를 확장하자 간단한 owl:sameAs+:e을 찾기 위해 충분하지 않을 경우에

:a owl:sameAs :d. 
:e owl:sameAs :d. 

, 그래서 어쩌면 전체 등가 트리를 찾을 수 (owl:sameAs|^owl:sameAs)+ 같은 것을 사용합니다. 끝점에 따라 루프가 발생할 수 있습니다.

또한 구현 고유의 확장은 Virtuoso 같이 owl:sameAs 추론을 처리 할 수있을 수 있습니다 :

DEFINE input:same-as "yes" 
select * where { :a ?p ?o. } 

?p:b, :c, :d:e 발행하는 ?o를 반환.