2016-11-22 18 views
1

현재 더 큰 온톨로지를 작성/수정하고 있습니다. 내가 제한 사항을 정의하는 문제가 있었다로서 나는 매우 짧은 예제를 빌드 : 나는 클래스와 클래스와 IslandCountry로 EuropeanCountry 있습니다 Protege의 추론자가 제한/카디널리티로 작동하지 않습니다.

<owl:Class rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Country"/> 
</owl:Class> 



<!-- http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry --> 

<owl:Class rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Country"/> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#borders"/> 
      <owl:maxQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">0</owl:maxQualifiedCardinality> 
      <owl:onClass rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"/> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
</owl:Class> 

당신은 내가 Protege는에 "maxQualifiedCardinality"제한을 설정할 볼 수 있듯이. 나는 어떤 사람들과를 만들 경우 (C1, C2, 독일은 EuropeanCountry는 섬 IslandCountry입니다입니다)과 경계의 속성을 관련 :

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Island"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"/> 
    <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C1"/> 
    <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C2"/> 
    <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Germany"/> 
</owl:NamedIndividual> 

나는 3을 설정할 수 없습니다 것을 소라 추론에 의해 슬로우 오류가 섬에 이웃. 이제 라인을 바꾼다면

<owl:maxQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxQualifiedCardinality> 

(카디널리티 1) 예제 에서처럼 이웃을 세 개 설정하면 아무런 오류가 발생하지 않습니다. 아무도 이것을 설명하고 바라건대 한 클래스가 x 클래스를 가져야한다는 제한을 작성할 수 있습니까? (이 경우,이 섬에는 2 개의 이웃이 있어야하고 세 번째는 추론자가 오류를 던져야합니다) ? 여러분의 도움과 친절 감사에 대한

감사합니다, 편집

tanktoo : 내가 지금 AllDifferent 모든 개인을 추가 한 : 그것은 지금 위의 제한과 협력

<rdf:Description> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AllDifferent"/> 
    <owl:distinctMembers rdf:parseType="Collection"> 
     <rdf:Description rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C1"/> 
     <rdf:Description rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C2"/> 
     <rdf:Description rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Germany"/> 
    </owl:distinctMembers> 
</rdf:Description> 

및 reasoner는 maxCardinality가 1 일 때 3 국경 국가를 설정할 수 없다고 알려줍니다. 이제 제한을 다음으로 변경했습니다 :

개 이웃이 있기 때문에 추론이 errro을 감지이 경우

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/tanktoo 
/ontologies/2016/10/untitled-ontology-81#Island"> 
     <rdf:type rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"/> 
     <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C1"/> 
     <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C2"/> 
     <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Germany"/> 
    </owl:NamedIndividual> 

:

<owl:Class rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Country"/> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#borders"/> 
      <owl:minQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:minQualifiedCardinality> 
      <owl:onClass rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"/> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#borders"/> 
      <owl:maxQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">2</owl:maxQualifiedCardinality> 
      <owl:onClass rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"/> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
</owl:Class> 

나는 지금 미만 1 개 또는 2 개 이상의 이웃을 설정하면 추론이 오류를 감지 것으로 기대한다. 나는 이제 모든 이웃을 삭제하면 섬 경계 0 개국의 추론자가 저에게 오류를주지 않습니다. 누군가 왜 나를 설명 할 수 있을까요? 이 도구의 말씀 인 경우

덕분에 당신의 도움 :)

+0

전체 예외를 확인하는 것이 좋습니다. 나는 HermiT가 당신이 제공 한 온톨로지에 어떤 에러도 던질 수 있다고 생각하지 않습니다. – AKSW

+0

maxQualifiedCardinality를 0으로 설정하면 허미트가 작동하지 않는다는 오류 메시지가 아니라는 메시지가 표시됩니다. – tanktoo

답변

4

을 위해 그때,이 섬

3 개 이웃을 설정할 수 없습니다 것을 소라 추론에 의해 슬로우 오류가 그것은 실수입니다. 허락하신다면, 당신은 접경하는 나라의 이름을 3 가지 주셨습니다. 그러나 이것들은 3 개국의 이름이라고는 말할 수 없습니다. 그들은 "프랑스", "프랑스 공화국", "République française"와 같은 동일한 국가의 여러 이름이 될 수 있습니다.

추론자가 동일한 이름인지 여부를 알 수 없으므로 두 번째 경우의 일관성을 감지 할 수 없습니다. 그러나 첫 번째 경우에는 적어도 무언가에 대한 이름이 있어야한다는 것은 엄밀히 말해서 0 점 이상이라는 것을 의미하므로 불일치가 감지된다는 것은 의미가 있습니다.당신이 국가가 2 개 이상의 이웃을 가질 때 추론이 감지되었는지 확인하고 싶은 경우

, 당신은 명시 적으로 국가가 다른 것을 말해야 할 것 :

ex:C1 owl:differentFrom ex:C2, ex:Germany . 
ex:C2 owl:differentFrom ex:Germany . 

나 :

[] a owl:AllDifferent; 
    owl:members (ex:C1 ex:C2 ex:Germany) . 

제자시, 개인 탭에서 개인이 다른 것을 지정할 수 있습니다.

+0

안녕하세요, 귀하의 답변에 감사드립니다. 나는 다른 이름을 가진 모든 것이 다르기를 기대했다. (이것은 새로운 사람들이 기존의 모든 것 (다른 많은 일이있을 수 있음)과는 분명히 다르다. 이제는 AllDifferent와 maxCardinality로 작업하는 예제를 얻었지만 추가 minCardinality 1을 설정하고 maxCardinality를 2로 설정하면 추론자가 3 개 이상의 경계 국가를 설정하면 사례를 감지합니다. 경계 국가를 설정하지 않으면 아무 것도 감지하지 못합니다. 이유는 무엇입니까? 아이디어가 있습니까? 감사! – tanktoo

+0

OWL에는 고유 이름 가정이 없기 때문에 이름이 다른 엔티티를 의미하지는 않습니다. – AKSW

+0

이 키워드 주셔서 감사합니다. 그래서 모든 인스턴스를 AllDifferent에 추가해야합니다. – tanktoo