속성 정의를위한 모범 사례?
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 .
이 훨씬 더 명확하게하려면 속성 그 부모 속성과 상태를 추가 할 수 있습니다 classAHasClassC
및 classBHasClassC
해체 있습니다 :
: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
의미하는 것은 도메인이 때문이다 교차로 의 ClassA
와 ClassB
. 공용체를 사용하도록 지정하려면 다음을 사용해야합니다.
rdfs:domain [ rdf:type owl:Class ;
owl:unionOf (:ClassA
:ClassB
)
] ;