2016-06-15 6 views
3

한다고 가정 나는 다음과 같은 RDF 데이터가 :모델 검사 로직 쿼리를 SPARQL 쿼리로 변환하는 방법은 무엇입니까?

@prefix : <urn:ex:> 

:m :A "a" 
:m :A "b" 
:m :A "c" 
:m :B "a" 
:m :B "b" 

무엇 SPARQL 질의하는 것은 내가 RDF 모델은 다음과 같은 논리적 인 공식을 만족하는지 확인하는 데 사용할 수있는?

∀x A(X) → B(x) 
+0

참조 : http://stackoverflow.com/questions/25256452/is-it-possible-to-express-a-recursive-definition-in-sparql. –

+1

정확하게 수행하는 방법을 설명하는 사양이 있습니다. http://docs.stardog.com/icv/icv-specification.html – Michael

답변

4

SPARQL은 조건부 또는 보편적 인 정량화가 있지만 existentials를 (어떤이를? 일치 않음) 가지고 있지 않으며, (암시) 함께하고합니다 ('부재'의미에서) 부정.

그래서 질문을 다시 :

∀x A(x) → B(x) ⇒ 
∀x ¬ (A(x) ∧ ¬ B(x)) ⇒ 
¬ ∃x A(x) ∧ ¬ B(x) 

을하고는 거의 SPARQL이 할 수있는 일이야 : 제약의 위반이있는 경우

# Is there anything of type A but not B? 
ASK { 
    { ?x a :A } MINUS { ?x a :B } 
} 

이 쿼리는 사실를 반환합니다.

+1

[** minus **] (https : // www. w3.org/TR/sparql11-query/#neg-minus). 나는 ** 기본적으로 ** 존재하지 않는 ** (예 :'? xa : A. filter not exist {? xa : B}') 경향이 있습니다. 왜냐하면 ** 빼기 **는 때때로 약간 놀랄 수 있기 때문입니다. 항상 같은 결과를 산출합니다). 그러나 이것은 ** 마이너스 **. –

+1

의 올바른 사용의 좋은 예입니다. "false가 반환되면 테스트가 통과했습니다."라는 말에 한 가지 더주의하십시오. 이는 절대적으로 맞지만 생각하기 쉽습니다 "제약 조건 위반이있는 경우 쿼리는 * 참 *을 반환합니다." –

+1

텍스트 도난 :-) 예, 빼기가 더 좋았지 만 필자는 필터를 사용하기를 좋아합니다. 존재하지 않습니다. – user205512