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

我使用Equivalence属性声明类A等同于类B。类B等同于类C。然后我使用推理器(粒子)确定类A等同于类C。

这种可传递的关系在Protege中非常有效。我可以看到黄色的A类相当于C类,反之亦然。

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

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

我不知道我在想什么。我还尝试通过Protege的“活动本体选项卡”将导出的文件导入到我的原始本体中,然后执行“文件->将推断的公理导出为本体”,但是输出文件仍然不包含推断的三元组。当在Protege中加载并使用推理机时,推理有效,但是我希望Protege在OWL文件中导出此推理。

可能吗?我花了很多时间在此上,并在Internet上四处张望,但没有找到任何解决方案。我错过了一步吗?

顺便说一句,我使用了最新的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:如果在“文件->将推断的公理导出为本体”的最后一步中选择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 vs OWL问题?

更新2:我收到以下关于Protege Dev列表的答复。似乎推断的公理不是设计为以RDF / XML格式保存的。

“ OWL RDF / XML语法不支持等效类之类的n进制构造函数,因为所有内容都应使用三重形表示(由于RDF)。在您的示例中,推断的公理EquivalentClasses(ABC)在RDF [1]中序列化(请参见表1)至

猫头鹰:等效类B。

Bowl:等效类C。

其他格式,例如OWL / XML或OWL Functional-style语法,均支持n元公理。这与您观察到的一致。

另外,在相关说明上,请考虑到推论公理生成器不会保存推理机生成的所有推论公理。例如,如果您的本体具有公理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

最佳答案

我明白你的意思。您希望在导出的本体中看到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中重新打开后:

java - 在Protege中导出推断的公理-LMLPHP

可能是错误,也可能是预期的行为。您应该首先在Protege邮件列表中询问。

关于java - 在Protege中导出推断的公理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46887456/

10-12 03:00