プロパティを定義するためのベストプラクティス?
Nov 23 2020
OWL / RDFSに関する私の問題は、複数の範囲とドメインを定義することにより、推論システムがインスタンス(ドメインまたは範囲として定義される)を、そのプロパティのドメインまたは範囲に対して定義されたすべてのクラスのタイプとして分類することです。
その問題を克服するための可能な解決策は何ですか?
- 1つの方法は、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でこれを解決する方法は、2つの異なる形状を使用することです。1つClassA
はドメインである場合、もう1つはドメインである場合ClassB
です。
OWLで同様のことを実現するには、2つのオブジェクトプロパティが必要です。1つClassA
はドメインである場合、もう1つはドメインである場合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
)
] ;