2014-07-07 2 views
2

참깨에서 시작한 쿼리 중에 추론을 "제거"하기위한 해결책을 찾고 있습니다. 내가 인스턴스하는 NamedIndividual를 가지고 있고, 나는 그 예 그것이 클래스의 URI 원하는 을 :참깨 : 쿼리 중에 추론을 제거하는 방법은 무엇입니까?

SELECT DISTINCT ?uri WHERE { 
     <http://www.semanticweb.org/ontotest#myInstance> rdf:type ?uri . 
     FILTER (?uri rdf:type owl:Class)   
    } 

문제는이 나는 "기본 자바 스토어 RDF 스키마"저장소를 사용해야하고 나는이 쿼리를이 나는 추론 때문에 하나가 아닌 severals URI (좋은 URI)를 얻는다. 온톨로지의 수퍼 클래스를 얻으면 인스턴스의 클래스와 링크가 없습니다. 저장소를 변경하지 않고 올바른 결과를 얻으려면 어떻게해야합니까?

답변

0

일부 개인이 인스턴스 인 가장 구체적인 클래스를 반환하려는 것 같습니다. ThomasFrancart's answer은 유추를 사용하지 않도록 설정하는 방법을 설명하지만 가장 구체적인 인스턴스를 추론하기 위해 유추가 필요할 수 있기 때문에 유추를 원하지 않을 수 있습니다. 예를 들어, 관계가있는 클래스 계층 구조가있을 수 있습니다.

SeniorCitizen & sqsubseteq; 사람
사람 ⊓ hasAge 일부 정수 [> = 60] & sqsubseteq; SeniorCitizen

데이터 :

존 RDF : 유형의 사람
존 hasAge 그리고 62

당신이 추론을 사용하지 않으면, 당신은 존임을 알 수 없습니다 SeniorCitizen입니다. 비록 Person보다 더 구체적인 클래스입니다. 실제로 유추를 사용하도록 설정하는 것처럼 들리지만 가장 구체적인 클래스 만 반환하는 것처럼 들립니다. 이 같은 쿼리와 함께이 작업을 수행 할 수 있습니다

select ?class where { 
    :myInstance rdf:type ?class . 
    filter not exists { 
    ?subclass rdfs:subClassOf* ?class . 
    :myInstance rdf:type ?subclass . 
    filter (?subclass != ?class) 
    } 
} 

?class 같은 :myInstance 그 값들을 찾기 위해 말한다는 ?class의 요소이지만, ?class 자체보다 (다른 ?class의 서브 클래스의 ?subclass이 아니에요 경우에만)에 :myInstance도 속합니다. 인스턴스는 여러 개의 가장 구체적인 클래스를 가질 수 있습니다.

참조 :

+0

내 문제에 대한 올바른 쿼리를 찾지 못했지만 함수 setIncludeInferred가 실행되었습니다. – user3661334