protege5.0中定义类之间的关系
Posted
技术标签:
【中文标题】protege5.0中定义类之间的关系【英文标题】:define relationship between classes in protege5.0 【发布时间】:2020-09-25 05:42:30 【问题描述】:我正在使用 Protege 工具构建我的本体,并且我已经定义了我的类和个人。 现在,我想添加类之间的关系。但是,我读过:
object 属性定义实例之间的关系,但是在 OWL 中我们可以 使用限制来定义类之间的关系
你能举个例子来帮助理解吗?
我的问题:
我有class1
和class2
,我需要在这些类之间建立一个“相反的”关系。
你能帮忙吗?
【问题讨论】:
【参考方案1】:您可以按照以下步骤操作:
(1) 创建类Class1
和Class2
。
<owl:Class rdf:about="http://henrietteharmse.com/tutorial/DomainRangeExample#Class1"/>
<owl:Class rdf:about="http://henrietteharmse.com/tutorial/DomainRangeExample#Class2"/>
(2) 定义一个对象属性,比如related
,域为Class1
,范围为Class2
:
<owl:ObjectProperty rdf:about="http://henrietteharmse.com/tutorial/DomainRangeExample#related">
<rdfs:domain rdf:resource="http://henrietteharmse.com/tutorial/DomainRangeExample#Class1"/>
<rdfs:range rdf:resource="http://henrietteharmse.com/tutorial/DomainRangeExample#Class2"/>
</owl:ObjectProperty>
说明
这表明,如果个体 a
通过对象属性 related
与个体 b
相关联,则 a
将被假定为 Class1
类型,b
将被假定为 Class2
类型.
(3) 定义另一个对象属性,比如inverseRelated
,它是related
的倒数:
<owl:ObjectProperty rdf:about="http://henrietteharmse.com/tutorial/DomainRangeExample#inverseRelated">
<owl:inverseOf rdf:resource="http://henrietteharmse.com/tutorial/DomainRangeExample#related"/>
</owl:ObjectProperty>
说明
这表明,如果个体 a
通过对象属性 inverseRelated
与个体 b
相关联,则将假定 a
的类型为 Class2
,并且假定 b
的类型为 Class1
.
(4) 通过inverseRelated
对象属性定义2 个个体,例如individual1
和individual2
和individual1
到individual2
:
<owl:NamedIndividual rdf:about="http://henrietteharmse.com/tutorial/DomainRangeExample#individual1">
<DomainRangeExample:inverseRelated rdf:resource="http://henrietteharmse.com/tutorial/DomainRangeExample#individual2"/>
</owl:NamedIndividual>
<owl:NamedIndividual rdf:about="http://henrietteharmse.com/tutorial/DomainRangeExample#individual2"/>
(5) 如果您现在对您的本体运行推理器(即在 Protege 中),您将看到individual1
被推断为Class2
类型,而individual2
为Class1
类型。
【讨论】:
感谢您的回复,我认为这个建议很有用,但对我来说不是,因为我只是想定义该关系来注释我的文档(不使用推理器),例如:我已经定义了两个类 "good" 和 "bad" ,如果我的文档有一个像 "I'm not so good today" 这样的句子,并且在我的本体(通过 protege 构建)中搜索但加载到 GATE 工具后,我会发现2个重要标记:“not”和“good”,所以程序应该从本体中得到与“good”相反的类,最终结果是“bad” 我找到了一些代码,但它是用 OWL2 编写的:考虑 A 类和 B 类(我使用的是海龟语法)
:A rdf:type owl:Class .
:B rdf:type owl:Class .
您可以将 A 和 B 定义为不相交的(类之间的关系),这意味着如果一个元素是其中之一,则它不能在另一个中。
:A owl:disjointWith :B .
如果查询例如:
not B
你获得类A。它也适用于个人。
【讨论】:
感谢您的回复,这是一个简单的解决方案,我会尝试一下,但是如果我不在 protege 中使用查询,我如何才能达到“B”的反面,我必须通过以下方式找到该关系java代码! @SuznCB 这是一个全新的问题,您可以单独发布。在此期间,请参阅 java 代码 github.com/owlcs/owlapi/wiki/DL-Queries-with-a-real-reasoner 的此示例。您仍然可以通过代码传递查询“not B”。以上是关于protege5.0中定义类之间的关系的主要内容,如果未能解决你的问题,请参考以下文章