2014-09-11 2 views
0

필자는 Protege를 사용하여 작은 온톨로지를 만들었습니다.SPARQL을 사용하는 개인에게 특정 클래스를 표시하려면 어떻게합니까?

클래스 A, 클래스 B 및 클래스 C로 시작합니다. 클래스 C에는 서브 클래스 x, y 및 z가 포함되어 있습니다. 이 온톨로지를 사용하는 개인은 두 클래스에 속합니다. 첫 번째 클래스는 A 또는 B이고 두 번째 클래스는 C의 하위 클래스 중 하나입니다.

속성 H가있는 모든 개체를 검색하려고합니다. x 또는 y 클래스의 일부이지만 z는 포함하지 않습니다. 나는 다음과 같은 쿼리 것을 할 수 있었다 :

SELECT ?individual 
    WHERE {?individual ont:hasH ?individual. 
     FILTER(NOT EXISTS { ?individual rdf:type ont:z })} 

이 쿼리는 내가 원하는 것을 (ONT 내 온톨로지의 접두사입니다). 그러나이 개인들에게 그들이 x 또는 y 클래스의 일부인지 여부를 알고 싶습니다. X 이후

SELECT ?individual ?class 
    WHERE {?individual ont:hasH ?individual. 
     FILTER(NOT EXISTS { ?individual rdf:type ont:z }) ?class rdf:type ont:C} 

와 y 내가 선택한 개인의 클래스 C가 무엇인지 알아야 할 사항, 클래스 C에 속하는 : 나는 아무 소용이 다음에 내 쿼리를 변경 시도했습니다. 내가 어떻게 할 수 있니?

가 (. 내가 SPARQL에 완전히 새로운 해요 명심하시기 바랍니다)

답변

2

당신이 말하는 문제 혼란을 조금 할 몇 가지 : 나는 클래스 A로 시작

, 클래스 B 및 클래스 C를 포함합니다. 클래스 C는 하위 클래스 x, y 및 z를 포함합니다.

...

X 이후

와 y는 클래스 C에 속하는,

우리는 일반적으로 클래스 서브 클래스를 포함 말을하지 않습니다; 클래스에는 하위 클래스가 있거나 하나의 클래스는 다른 클래스의 하위 클래스라고 할 수 있습니다. A가 B의 하위 클래스 인 경우 일부 i가 A (즉, 트리플 [i rdf : 유형 A]) 일 때마다 i도 B가됩니다 (즉, 우리는 트리플 [i rdf : 유형 B ]).

어쨌든 ont : hasH 속성이 있고 ont : z, ont : x 또는 ont : y :

인지 여부에 관계없이 각 개인에 대해 다음을 수행 할 수 있습니다.
SELECT ?individual ?class WHERE { 
    #-- The first part, which you already provided, ensures that 
    #-- ?individual has a value for ont:hasH, and does not have 
    #-- type ont:z . 
    ?individual ont:hasH ?individual. 
    FILTER(NOT EXISTS { ?individual rdf:type ont:z }) 

    #-- Since each of these individuals also has type ont:x or 
    #-- ont:y, you can bind a variable to ont:x and ont:y and 
    #-- match against it, too. For each result, ?xy will be 
    #-- bound to either ont:X or ont:y, depending on what type 
    #-- ?individual has. 
    values ?xy { ont:x ont:y } 
    ?individual rdf:type ?xy 
} 
+0

이 세부적인 설명에 감사드립니다! '값'키워드는 내가 찾고있는 키워드입니다. – kormak

+0

[SPARQL 1.1 사양] (http://www.w3.org/TR/sparql11-query/)에서 자세한 내용을 볼 수 있습니다. 일반적으로 사용중인 도구의 사양이나 설명서는 최소한으로 훑어 보는 것이 좋습니다. 당신은 그것에 대해 모든 것을 암기 할 필요가 없지만, 문제가 생겼을 때 "나는 내가 여기 * 유용 할 수도있는 것을 보았다고 생각한다"고 말하면서 씨앗을 심는 것이 매우 도움이된다. –

관련 문제