在 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
,将其倒数称为 invR
。 R
和 invR
是什么意思?它基本上表明,当我们域中的 2 个人通过 R
相关时,他们也通过 invR
相关。也就是说,如果我们有 R(1, 2)
,那么 invR(2, 1)
也成立。
声明 A subClassOf invR some B
意味着 A
中的每个个体都通过 invR
与 B
中的至少 1 个个体相关。因此,如果我们有 invR(5, 2)
和 invR(7, 3)
,我们也会有 R(2, 5)
和 R(3, 7)
。但是,这一般说 关于 class B
。 R(6, 0)
完全有可能成立。因此推理者无法推断出 B hasFunctionalParent A
.
获取 B
和 Z
用于查询“找到 hasFunctionalParent some B
的超级 classes”(即“超级classes”进行查询时必须在 Protege 中勾选)您必须声明 isFunctionalParentOf
具有域 A
和范围 B
。这表明每当 2 个人 x
和 y
通过 isFunctionalParentOf
相关时,我们可以假设 x
是 A
的实例并且 y
是B
.
的实例
最后,您会注意到您需要使用 Protege 中的 DL 查询选项卡才能进行此推断。特别是在推理后它没有显示为推理的一部分。这是为什么?这是因为 Protege 仅显示 named classes 的推论。 hasFunctionalParent some B
是一个匿名的 class,因此没有显示此推论。在 Protege 中制作此节目的一个技巧是添加一个任意概念,例如 X
,您将其设置为等同于 hasFunctionalParent some B
。如果您现在 运行 作为推理者,Protege 将推断出 X subClassOf B
.
我创建了关系 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
,将其倒数称为 invR
。 R
和 invR
是什么意思?它基本上表明,当我们域中的 2 个人通过 R
相关时,他们也通过 invR
相关。也就是说,如果我们有 R(1, 2)
,那么 invR(2, 1)
也成立。
声明 A subClassOf invR some B
意味着 A
中的每个个体都通过 invR
与 B
中的至少 1 个个体相关。因此,如果我们有 invR(5, 2)
和 invR(7, 3)
,我们也会有 R(2, 5)
和 R(3, 7)
。但是,这一般说 关于 class B
。 R(6, 0)
完全有可能成立。因此推理者无法推断出 B hasFunctionalParent A
.
获取 B
和 Z
用于查询“找到 hasFunctionalParent some B
的超级 classes”(即“超级classes”进行查询时必须在 Protege 中勾选)您必须声明 isFunctionalParentOf
具有域 A
和范围 B
。这表明每当 2 个人 x
和 y
通过 isFunctionalParentOf
相关时,我们可以假设 x
是 A
的实例并且 y
是B
.
最后,您会注意到您需要使用 Protege 中的 DL 查询选项卡才能进行此推断。特别是在推理后它没有显示为推理的一部分。这是为什么?这是因为 Protege 仅显示 named classes 的推论。 hasFunctionalParent some B
是一个匿名的 class,因此没有显示此推论。在 Protege 中制作此节目的一个技巧是添加一个任意概念,例如 X
,您将其设置为等同于 hasFunctionalParent some B
。如果您现在 运行 作为推理者,Protege 将推断出 X subClassOf B
.