在Protege

时间:2017-10-23 10:43:33

标签: java owl ontology protege inference

我正在学习本体和Protege工具。我创建了3个A,B和C类的基本本体。

我使用Equivalence属性来声明类A相当于类B.类B相当于类C.然后我使用推理器(Pellet)来确定类A相当于类C.

这种传递关系在Protege中完美运作。我可以看到黄色,A类相当于C类,反之亦然。

我想从Protege工具中导出这个推断的公理。我转到“文件 - >导出推断的Axioms作为本体”并在第一个屏幕上选择所有选项,而不是在第二个屏幕上选择任何选项。最后,我将文件保存为RDF / XML语法中的OWL。

现在当我打开这个新文件时,我没有看到任何关于推断公理的三元组,即A类相当于C类。事实上,它与我原来的本体论完全相同。

我不知道我错过了什么。我还尝试通过Protege的“活动本体选项卡”将导出的文件导入到我的原始本体中,然后将“文件 - >导出推断的公理作为本体”导出,但输出文件仍然不包含推断的三元组。当加载到Protege和推理器时,推理可以工作,但我希望Protege在OWL文件中导出这个推理。

有可能吗?我花了很多时间在这上面,并在互联网上环顾四周,但没有找到任何解决方案。我错过了一步吗?

顺便说一句,我使用了最新的Protege版本5.2,并且还尝试了4.3版以查看是否存在错误,但结果是一样的。

由于

我使用的本体就是这个。

    

///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////





<!-- http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#A -->

<owl:Class rdf:about="http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#A">
    <owl:equivalentClass rdf:resource="http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#B"/>
</owl:Class>

<!-- http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#B -->

<owl:Class rdf:about="http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#B">
    <owl:equivalentClass rdf:resource="http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#C"/>
</owl:Class>

<!-- http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#C -->

<owl:Class rdf:about="http://www.semanticweb.org/sesa388470/ontologies/2017/9/23/untitled-ontology-110#C"/>

更新1 :如果我在“文件 - &gt;导出推断的公理作为本体”的最后一步中选择OWL / XML作为本体格式,我可以在生成的本体文件中看到以下内容。

<Declaration>
    <Class IRI="#A"/>
</Declaration>
<Declaration>
    <Class IRI="#C"/>
</Declaration>
<Declaration>
    <Class IRI="#B"/>
</Declaration>
<EquivalentClasses>
    <Class IRI="#A"/>
    <Class IRI="#B"/>
    <Class IRI="#C"/>
</EquivalentClasses>

以前我是以RDF / XML格式导出本体。至少我可以看到A,B和C是等价的类。也许是RDF与OWL问题?

更新2:我在Protege Dev列表中收到了以下回复。似乎推断的公理不是按照设计以RDF / XML格式保存的。

OWL RDF / XML语法不支持n-ary构造函数,例如等价类,因为所有内容都应使用三元组表示(因为RDF)。在您的示例中,推断的公理EquivalentClasses(ABC)在RDF中被序列化[1](见表1)

猫头鹰:equivalentClass B。

B owl:equivalentClass C。

其他格式,如OWL / XML或OWL功能样式语法支持n-ary公理。这与你观察到的一致。

此外,在相关说明中,请考虑推断的公理生成器不保存由推理器产生的所有推断公理。例如,如果你的本体具有公理A subClassOf B和B subClassOf C那么推断的公理A subClassOf C将不会被保存,因为它遵循其他(推断的)公理A subClassOf B和B subClassOf C.只有非冗余的推断公理(不遵循其他推断公理的原因)得以保存。这是因为可能有太多推断的公理。“

[1] https://www.w3.org/TR/owl2-mapping-to-rdf/#Translation_of_Axioms_without_Annotations

1 个答案:

答案 0 :(得分:1)

我明白你的意思。你希望在导出的本体中看到A和C之间的等价类公理,对吗?

我可以重现它。看起来Protege编辑器假设它已经是一个断言的公理。至少,当我再次打开本体时,编辑器在类层次结构树中将其呈现为:

输入本体:

@prefix : <http://www.semanticweb.org/user/ontologies/2017/9/untitled-ontology-3#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.semanticweb.org/user/ontologies/2017/9/untitled-ontology-3> .

<http://www.semanticweb.org/user/ontologies/2017/9/untitled-ontology-3> rdf:type owl:Ontology .

#################################################################
#    Classes
#################################################################

###  http://www.semanticweb.org/user/ontologies/2017/9/untitled-ontology-3#A
:A rdf:type owl:Class ;
   owl:equivalentClass :B .


###  http://www.semanticweb.org/user/ontologies/2017/9/untitled-ontology-3#B
:B rdf:type owl:Class ;
   owl:equivalentClass :C .


###  http://www.semanticweb.org/user/ontologies/2017/9/untitled-ontology-3#C
:C rdf:type owl:Class .


###  Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi

导出推断的公理并在Protege中重新打开:

enter image description here

它可能是一个错误,也可能是预期的行为。你应该先在Protege邮件列表上询问。