我目前正在撰写关于学术图书馆基于本体的知识库的硕士论文。为此,我尝试将专业音乐库的领域知识建模为本体,随后可以将领域知识转移到本体中。 我使用 Protégé(版本 5.6.1)作为此工具。但我觉得我在某些方面还缺乏一定的基本认识。 问题是不相交的类是否可以具有共同的数据属性。
一个例子: 我有两个班级:图书馆和图书馆团队。 “图书馆”类具有数据属性“电话号码”,它指的是一般服务电话号码。除其他外,“图书馆团队”类具有数据属性“姓氏”和“名字”,这两个属性对于该类来说都是单独的。同时,还有数据属性“电话号码”,但这次指的是团队成员的个人电话号码。 这两个类是脱节的。这意味着团队成员类中的任何个体不能同时是库类中的个体。尽管如此,我的建模中的类目前共享电话号码属性。
现在的问题是:从本体论的角度来看,这个程序是否允许?或者我是否必须为两个类分别建模“电话号码”属性?
我使用了 HermiT(版本 1.4.3)和 Pellet 两个推理器作为测试,当我创建具有相应属性的“Library Team”类的个体时,这两个推理器都会发出错误。我认为这与类的不相交有关,快速的双重检查已经证实了这一点。尽管如此,在我看来,如果可能的话,在其他类中重用类的属性而不是重新定义它们似乎更有意义。如果这确实不可能,我将不得不重构我的整个本体,现在我希望这不是必要的。
长话短说:谁能解释我的推理错误?
提前致谢, 维拉
不相交的类可以共享对象和/或数据属性。
您似乎具有面向对象编程背景。在编程中,类具有属性(或属性)。然而,在OWL(本体语言)中,属性不属于类,而是用于表达类之间的关系(对象属性)或表达类与数据类型之间的关系(数据属性)。我在这里详细讨论了 OO 和 OWL 之间的区别。
造成不一致的原因可能有很多,如果没有看到你的本体,就很难准确地知道其原因。猜测是您对导致问题的属性有域和/或范围限制。
假设您有类
Library
和 Team
,它们是不相交的,并且您有一个数据属性 telephone
,并且您已将它们定义如下:
DataProperty: telephone
Class: Library
SubClassOf:
telephone some xsd:string
Class: Team
DisjointWith: Library
SubClassOf:
telephone some xsd:string
这本身不会导致不一致。然而,当你如下定义
telephone
时,会导致不一致:
DataProperty: telephone
Domain: Library, Team
这会导致不一致。
Domain: Library, Team
公理告诉推理者,每当一个个体通过 telephone
连接到另一个个体时,它必须推断出第一个个体是 Library
类型,并且 是 Team
类型。因此出现了不一致。有2种可能的解决方案:
Domain: Library, Team
公理。这是迄今为止最常见的处理原因。
TelephoneDomain
等效的
Library or Team
类很有用。那么
telephone
定义如下:
DataProperty: telephone
Domain: TelephoneDomain
Domain: TelephoneDomain
而不是 (b)
Domain: Library or Team
的主要优点是 (a) 会给我推断,但 (b) 不会,因为
Library or Team
是一个匿名类。请参阅我的StackOverflow 关于匿名类的答案。