在 Protege 中推断逆 属性

Inferring Inverse Property in Protege

我创建了关系 A 'is functional parent of' B 并将 'has functional parent' 定义为 'is functional parent of' 的反函数。 'A''B' 都是 'chemical entity'.

的子类

我想让 Protege 推断 B 'has functional parent' A。查询 'has functional parent' some A 失败。

错误 #1:不了解开放世界

我意识到 some 暗示并非所有 B 都与 'has functional parent''A' 有关系。 然而,查询'chemical entity' and 'has functional parent'仍然失败。

我的 ontology 没有实例。我希望查询能找到子类。

海龟文件

@prefix : <http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10#> .
@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/michaelchary/ontologies/2020/8/untitled-ontology-10> .

<http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10> rdf:type owl:Ontology .

#################################################################
#    Object Properties
#################################################################

###  http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10#hasFunctionalParent
:hasFunctionalParent rdf:type owl:ObjectProperty ;
                     owl:inverseOf :isFunctionalParentOf .


###  http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10#isFunctionalParentOf
:isFunctionalParentOf rdf:type owl:ObjectProperty .


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

###  http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10#A
:A rdf:type owl:Class ;
   rdfs:subClassOf :Z ,
                   [ rdf:type owl:Restriction ;
                     owl:onProperty :isFunctionalParentOf ;
                     owl:someValuesFrom :B
                   ] .


###  http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10#B
:B rdf:type owl:Class ;
   rdfs:subClassOf :Z .


###  http://www.semanticweb.org/michaelchary/ontologies/2020/8/untitled-ontology-10#Z
:Z rdf:type owl:Class .


###  Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi

根据您在 ontology 中陈述的公理,推理者绝对无法从中推导出 B hasFunctionalParent A

要理解为什么会这样,即使您的 ontology 不包括任何明确的个人,从个人的角度思考也会有所帮助。当推理器​​ 运行 时,它会尝试根据 ontology 中的公理生成模型。模型由遵循您的 ontology.

公理的生成个体组成

为了说明的目的,让我们假设个人的宇宙由以下数字组成:

域 = {0, 1, 2, 3, 4, 5, 6, 7},

Z = {1, 2, 3, 5, 6, 7},

A = {5, 7}

B = {2, 3, 6}

然后你有一个对象 属性 hasFunctionalParent 及其逆。简而言之,我将 hasFunctionalParent 称为 R,将其倒数称为 invRRinvR 是什么意思?它基本上表明,当我们域中的 2 个人通过 R 相关时,他们也通过 invR 相关。也就是说,如果我们有 R(1, 2),那么 invR(2, 1) 也成立。

声明 A subClassOf invR some B 意味着 A 中的每个个体都通过 invRB 中的至少 1 个个体相关。因此,如果我们有 invR(5, 2)invR(7, 3),我们也会有 R(2, 5)R(3, 7)。但是,这一般说 关于 class BR(6, 0) 完全有可能成立。因此推理者无法推断出 B hasFunctionalParent A.

获取 BZ 用于查询“找到 hasFunctionalParent some B 的超级 classes”(即“超级classes”进行查询时必须在 Protege 中勾选)您必须声明 isFunctionalParentOf 具有域 A 和范围 B。这表明每当 2 个人 xy 通过 isFunctionalParentOf 相关时,我们可以假设 xA 的实例并且 yB.

的实例

最后,您会注意到您需要使用 Protege 中的 DL 查询选项卡才能进行此推断。特别是在推理后它没有显示为推理的一部分。这是为什么?这是因为 Protege 仅显示 named classes 的推论。 hasFunctionalParent some B 是一个匿名的 class,因此没有显示此推论。在 Protege 中制作此节目的一个技巧是添加一个任意概念,例如 X,您将其设置为等同于 hasFunctionalParent some B。如果您现在 运行 作为推理者,Protege 将推断出 X subClassOf B.