I OWL 我想对某个类仅允许一个或另一个子类的情况进行建模。我想建立一个限制模型,允许属性只能像
(A XOR B) OR (some general superclass)
那样链接到多个实例
X p A1 .
X p A2 .
X p M . # OK
Y p K .
Y p A3 .
Y p B1 . #Not ok, A and B linked.
具体例子:
我有一辆班级推车,每辆推车正好有 n 个座位。
有两种类型的座位(成人、儿童)以及未指定数量的其他部分,这是座位的超类。它们都是通过
:hasPart
关系联系在一起的。
:Cart a owl:Class .
:Part o owl:Class .
:hasPart a owl:ObjectProperty;
:rdfs:domain :Part .
:Seat a owl:Class ; rdfs:subClassOf :Part .
:AdultSeat a owlClass; rdfs:subClassOf :Seat .
:ChildSeat a owlClass; rdfs:subClassOf :Seat .
[a owl:AllDisjointClasses; owl:members ( .<every class>. )]
# some other parts
通过 OWL,我现在想对购物车可以有 AdultSeats x 或 ChildSeats 进行建模。
我认为我需要两个相反的限制来模拟
但是,鉴于我拥有它们,我仍然想知道如何将
:hasPart
限制为其中一种情况,同时仍然允许链接其他部分。
disjointWith
: 指定它
:AdultSeat owl:disjoinWith :ChildSeat.
这意味着
Seat
可以是 AdultSeat
或 ChildSet
,但不能同时是两者。
您可以使用相同的方法来介绍
CartWithOnlyAdultSeats
和 CartWithOnlyChildSeats
类。