【发布时间】:2017-10-23 10:43:32
【问题描述】:
我正在学习本体和 Protege 工具。我创建了 3 个 A、B 和 C 类的基本本体。
我用Equivalence属性说明A类等价于B类,B类等价于C类,然后我用推理器(Pellet)判断A类等价于C类。
这种传递关系在 Protege 中完美运行。我可以用黄色看到 A 类相当于 C 类,反之亦然。
我想从 Protege 工具中导出这个推断的公理。我转到“文件 -> 将推断公理导出为本体”并在第一个屏幕上选择所有选项,在第二个屏幕上不选择任何选项。最后,我将文件保存为 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:如果我在“文件 -> 将推断公理导出为本体”的最后一步中选择 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 元构造函数,因为一切都应该使用三元组表示(因为 RDF)。在您的示例中,推断的公理 EquivalentClasses(A B C) 在 RDF 中序列化[1](见表 1)至
A owl:equivalentClass B .
B owl:equivalentClass C .
其他格式,如 OWL/XML 或 OWL 函数式语法支持 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
【问题讨论】:
-
按预期为我工作。可以分享本体吗?你确定推理的时候没有异常(右上方有红色的错误提示)?
-
@AKSW,我已经用本体更新了这个问题。没有例外。 Pellet 推理器工作正常,没有任何异常。
-
现在,我明白你的意思了。您希望在导出的本体中看到 A 和 C 之间的等价类公理,对吧?
-
是的,这就是我希望在生成的 OWL 文件中看到的内容。
-
-> Protege 邮件列表。你可以在这里链接到问题,这样他们也可以在这里回答。
标签: java owl ontology protege inference