2013-03-06 5 views
2

간단한 SWRL 규칙을 테스트하려고합니다. 내 온톨로지에는 RuralArea와 City의 두 하위 클래스가있는 LivingPlace 클래스가 3 개 있습니다. LivingPlace는 범위 불린을 가진 hasProperty hasProperty 도메인입니다.dataProperty 값을 추측하는 swrl 규칙

Pellet 추론을 사용하여 다음 규칙을 테스트 할 때 LivingPlace의 구성원으로 만든 개인도 RuralArea의 구성원으로 추측됩니다.

LivingPlace (? LP), hasHospital는 (? LP, false)를 → RuralArea (? LP)는

그러나, 내가 정말하고 싶은 것은이 추론의 반대입니다.

RuralArea (? LP) → hasHospital (?, 거짓 LP)

내가 형 RuralArea의 개인을 만들 때마다, 나는 펠렛 거짓의 hasHospital을 추론하고자합니다. 어떻게해야합니까?

답변

2

여기에 설명 된대로 클래스가있는 최소 온톨로지가 있습니다. 즉, LivingPlace 클래스에는 City 및 RuralArea라는 두 개의 직접적인 하위 클래스가 있습니다. 이 유형의 RuralArea의 하나 개인 ruralArea1는, 그리고 온톨로지 (거짓? X 등) SWRL 규칙

RuralArea (? x)를 → hasHospital

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns="http://example.org/places#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
    xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <owl:Ontology rdf:about="http://example.org/places"/> 
    <owl:Class rdf:about="http://example.org/places#LivingPlace"/> 
    <owl:Class rdf:about="http://example.org/places#City"> 
    <rdfs:subClassOf rdf:resource="http://example.org/places#LivingPlace"/> 
    </owl:Class> 
    <owl:Class rdf:about="http://example.org/places#RuralArea"> 
    <rdfs:subClassOf rdf:resource="http://example.org/places#LivingPlace"/> 
    </owl:Class> 
    <owl:DatatypeProperty rdf:about="http://example.org/places#hasHospital"> 
    <rdfs:domain rdf:resource="http://example.org/places#LivingPlace"/> 
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/> 
    </owl:DatatypeProperty> 
    <swrl:Imp> 
    <swrl:body> 
     <swrl:AtomList> 
     <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/> 
     <rdf:first> 
      <swrl:ClassAtom> 
      <swrl:classPredicate rdf:resource="http://example.org/places#RuralArea"/> 
      <swrl:argument1> 
       <swrl:Variable rdf:about="urn:swrl#x"/> 
      </swrl:argument1> 
      </swrl:ClassAtom> 
     </rdf:first> 
     </swrl:AtomList> 
    </swrl:body> 
    <swrl:head> 
     <swrl:AtomList> 
     <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/> 
     <rdf:first> 
      <swrl:DatavaluedPropertyAtom> 
      <swrl:argument2 rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean" 
      >false</swrl:argument2> 
      <swrl:propertyPredicate rdf:resource="http://example.org/places#hasHospital"/> 
      <swrl:argument1 rdf:resource="urn:swrl#x"/> 
      </swrl:DatavaluedPropertyAtom> 
     </rdf:first> 
     </swrl:AtomList> 
    </swrl:head> 
    </swrl:Imp> 
    <owl:NamedIndividual rdf:about="http://example.org/places#ruralArea1"> 
    <rdf:type rdf:resource="http://example.org/places#RuralArea"/> 
    </owl:NamedIndividual> 
</rdf:RDF> 

I을 포함 상기 피보호자 4.x의 추론이 온톨로지를로드하여 추론으로 펠렛을 사용하고, 또한 (this message on the Protégé OWL mailing list에서 논의 된 바와 같이) 데이터 타입 속성에 대한 추론이 UI에 displyed되도록 그

ruralArea1 hasHospital false 
012,351 다음 스크린 샷과 같이

이 표시됩니다.

inference displayed in the Protege UI

펠렛이 추론을 그릴 수 있다는 것을 볼 수있는 또 다른 방법은 SPARQL을 사용하여 요청하는 것입니다. 예를 들어, query.sparql

prefix : <http://example.org/places#> 

select ?s ?o where { 
    ?s :hasHospital ?o 
} 

에 저장된 SPARQL 쿼리와 pellet 명령 행 도구를 사용하여, 우리는 이러한 결과를 얻을 :

실제로에 SWRL을 필요로하지 않습니다 그것은 지적 가치가
$ pellet query -q query.sparql ./places.owl 
Query Results (1 answers): 
s   | o            
============================================================ 
ruralArea1 | false^^http://www.w3.org/2001/XMLSchema#boolean 

이 특별한 추론을해라. 당신은 단순히 말할 수

RuralArea subClassOf (거짓 hasHospital 값)

과 같은 결과를 얻을 수 있습니다. Protégé에서 다음 스크린 샷처럼 보입니다. 이것은 SWRL을 지원하지 않는 OWL 추론자를 사용하는 경우에도 동일한 결과를 제공한다는 장점이 있습니다.

OWL restriction accomplishing the same effect as the SWRL rule

+0

환경 설정에서 데이터 유형 어설 션을 활성화하는 것이 주요 개념이었습니다. 감사 – alex