속성 정의를위한 모범 사례?

Nov 23 2020

OWL / RDFS의 문제는 여러 범위와 도메인을 정의함으로써 추론자가 인스턴스 (도메인 또는 범위로 정의 됨)를 도메인 또는 해당 속성의 범위에 대해 정의 된 모든 클래스의 유형으로 분류한다는 것입니다.

그 문제를 극복 할 수있는 가능한 해결책은 무엇입니까?

  • 한 가지 방법은 SHACL을 사용하는 것입니다. 그러나 이제 시각화 도구는 더 이상 작동하지 않습니다.

짧은 예 :

:ClassA a owl:Class .
:ClassB a owl:Class .
:ClassC a owl:Class .

:hasClassC a owl:ObjectProperty ;
    rdfs:domain :ClassA, :ClassB;
    rdfs:range :ClassC .

:instanceA a :ClassA ;
    :hasClassC instanceC .
:instanceC a :ClassC .

문제 : 추론 출력 :

:instanceA a :ClassB .

SHACL을 사용한 해결 방법 :

:ClassA a owl:Class, sh:NodeShape ;
  sh:property  :ClassA-hasClassC .

:ClassA-hasClassC  rdf:type  sh:PropertyShape ;
  sh:path   :hasClassC ;
  sh:class  :ClassC .

:ClassB a owl:Class, sh:NodeShape ;
  sh:property  :ClassB-hasClassC .

:ClassB-hasClassC  rdf:type  sh:PropertyShape ;
  sh:path   :hasClassC ;
  sh:class  :ClassC .

답변

3 HenrietteHarmse Nov 24 2020 at 15:22

SHACL에서이 문제를 해결 한 방법은 두 가지 다른 모양을 갖는 것입니다. 하나는 언제 ClassA도메인이고 다른 하나 ClassB는 도메인이 언제 입니다.

OWL에서 비슷한 것을 얻으려면 두 가지 개체 속성이 필요합니다. 하나는 언제 ClassA도메인이고 다른 하나 ClassB는 도메인입니다.

:classAHasClassC a owl:ObjectProperty ;
  rdfs:domain :ClassA;
  rdfs:range :ClassC .

:classBHasClassC a owl:ObjectProperty ;
  rdfs:domain :ClassB;
  rdfs:range :ClassC .

:instanceA a :ClassA ;
  :classAHasClassC instanceC .

이 훨씬 더 명확하게하려면 속성 그 부모 속성과 상태를 추가 할 수 있습니다 classAHasClassCclassBHasClassC해체 있습니다 :

:hasClassC a owl:ObjectProperty

:classAHasClassC a owl:ObjectProperty ;
  rdfs:subPropertyOf :hasClassC;
  rdfs:domain :ClassA;
  rdfs:range :ClassC .

:classBHasClassC a owl:ObjectProperty ;
  rdfs:subPropertyOf :hasClassC;
  owl:propertyDisjointWith :classAHasClassC
  rdfs:domain :ClassB;
  rdfs:range :ClassC .

마지막으로, 만든 일반적인 실수는 당신이있는 경우에 그 생각 ClassA, ClassB의 도메인으로는 hasClassC이 도메인의 결합을 의미하는, ClassA하고 ClassB. 대신 무엇을 ClassA, ClassB의미하는 것은 도메인이 때문이다 교차로ClassAClassB. 공용체를 사용하도록 지정하려면 다음을 사용해야합니다.

rdfs:domain [ rdf:type owl:Class ;
  owl:unionOf (:ClassA
               :ClassB
              )
            ] ;