我需要一些关于OWL语法的帮助。我有一个名为“人物”的合成人口类。 Person包含填充信息,PersonWithinAdminRegion是另一个类表示person类的子组。例如' Person'课程包含有关美国所有人的信息。 FloridaPerson或MiamiPerson可以作为PersonWithinAdminRegion的一个例子。基本上,PersonWithinAdminRegion是超组Person的子组。它不是子类,因为子类继承了超类的属性并添加了更多。在我的情况下情况并非如此。我的问题是如何用OWL语法显示超组的子组?
Person a owl:Class.
PersonWithinAdminRegion ? ?
答案 0 :(得分:3)
OWL中没有继承。因此,子类不会继承任何属性。子类层次结构是一种只包含一个语义的包含层次结构:子类的成员是(超级)类的成员。一个例子:
:Person a owl:Class .
:PersonWithinAdminRegion a owl:Class .
:PersonWithinAdminRegion rdfs:subClassOf :Person .
:FloridaPerson a :PersonWithinAdminRegion .
由此可以推断:
:FloridaPerson a :Person .
就是这样。不会推断出任何其他属性或值。例如。 RDFS和OWL语义更像是集合论(分类)而不是面向对象的类定义。
所以看起来上面的内容会为你提供你想要的语义。如果你想深入了解包容层次结构,请说:
:PersonInFloridaRegion rdfs:subClassOf :PersonWithinAdminRegion .
:p1 a :PersonInFloridaRegion .
...然后你就可以推断:
:p1 a :PersonWithinAdminRegion .
:p1 a :Person .
......等等。
答案 1 :(得分:1)
尽管我仍然不确定您的建模视角,以及Person
是否有某些属性,但PersonWithinAdminRegion
却没有。这是一个解决方案的想法。
您可以创建一个通用类Person
,以及subclass
USAPerson
,然后PersonWithinAdminRegion
,subclass
Persons
同时也是PersonWithinAdminRegion
的兄弟姐妹。因此:
USAPerosn
和PersonWithinAdminRegion
都是Person
; Persons
将包含USAPersons
,因此在制作Person
的子集时,您仍然可以控制USAPerosn
; PersonWithinAdminRegion
仍然无法拥有USAPerson
拥有的属性。
Person a owl:Class
USAPerson a owl:Class
PersonWithinAdminRegion a owl:Class
USAPerson rdfs:subClassOf Peron
PersonWithinAdminRegion rdfs:subClassOf Peron
希望这有帮助。