在描述逻辑中,有一个称为“rolification”的概念(OWL 和规则,第 3.2 节)。它将概念(类)转换为角色(属性)。例如,当我们 rolify 时R(x)
,我们得到r(x,x)
。这种技术对于在 DL 中表达一些规则很有用。
我们如何在 OWL 2 中做到这一点?OWL 2 规范中似乎没有直接支持 rolification 。
在描述逻辑中,有一个称为“rolification”的概念(OWL 和规则,第 3.2 节)。它将概念(类)转换为角色(属性)。例如,当我们 rolify 时R(x)
,我们得到r(x,x)
。这种技术对于在 DL 中表达一些规则很有用。
我们如何在 OWL 2 中做到这一点?OWL 2 规范中似乎没有直接支持 rolification 。
您链接到的论文的第 3.2 节说:
确实有可能将此规则转换为 OWL 2——然而这涉及到一种我们称之为 rolification 的转换:概念A的 rolification 是由公理 A ≡ ∃RA .Self 定义的(新)角色R A。有了 rolification,我们现在可以用公理表达规则 (1) ...</p>
OWL2 不支持直接表达象Elephant(x) ∧ Mouse(y) → bigThan(x,y)这样的公理。据我了解,您手动使用论文描述的 rolification 过程来生成可以直接在 OWL2 中表达的新公理。
至于具体的过程,如果你想表达象Elephant(x) ∧ Mouse(y) → bigThan(x,y),你首先将类Elephant和Mouse类化。这意味着您引入了新的角色(属性)R Elephant和R Mouse(但您不删除类Elephant和Mouse)。这些新角色使得R Elephant (x,x)当且仅当Elephant(x)。这是通过添加公理来强制执行的
大象 ≡ ∃R大象.Self
鼠标 ≡ ∃R鼠标.Self
每一个都可以在 OWL2 中表达。有了这两个公理,您终于添加了子属性链公理
R大象• topObjectProperty • R鼠标⊑ 大于
这在 OWL2 中也可以表达。因为对于任何大象e和任何老鼠m,我们有
R大象(e,e)
顶部对象属性(e,m)
R鼠标(米,米)
然后通过子属性链公理,我们有
大于(e,m)
这正是我们想要表达的。
在 Protege 接受的输入语法中,这些公理写成如下。
Elephant EquivalentTo R_Elephant some Self
Mouse EquivalentTo R_Mouse some Self
R_Elephant o topObjectProperty o R_mouse SubPropertyOf largeThan
在 Protege 中,它们如下所示。
在 N3 中:
@prefix : <http://www.example.org/rolification#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:Elephant
a owl:Class ;
owl:equivalentClass
[ a owl:Restriction ;
owl:hasSelf "true"^^xsd:boolean ;
owl:onProperty :R_Elephant
] .
:R_Elephant
a owl:ObjectProperty .
:biggerThan
a owl:ObjectProperty ;
owl:propertyChainAxiom
(:R_Elephant owl:topObjectProperty :R_Mouse) .
:Mouse
a owl:Class ;
owl:equivalentClass
[ a owl:Restriction ;
owl:hasSelf "true"^^xsd:boolean ;
owl:onProperty :R_Mouse
] .
<http://www.example.org/rolification>
a owl:Ontology .
:R_Mouse
a owl:ObjectProperty .
在 RDF/XML 中:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns="http://www.example.org/rolification#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://www.example.org/rolification"/>
<owl:Class rdf:about="http://www.example.org/rolification#Elephant">
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="http://www.example.org/rolification#R_Elephant"/>
</owl:onProperty>
<owl:hasSelf rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</owl:hasSelf>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
<owl:Class rdf:about="http://www.example.org/rolification#Mouse">
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="http://www.example.org/rolification#R_Mouse"/>
</owl:onProperty>
<owl:hasSelf rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</owl:hasSelf>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
<owl:ObjectProperty rdf:about="http://www.example.org/rolification#biggerThan">
<owl:propertyChainAxiom rdf:parseType="Collection">
<owl:ObjectProperty rdf:about="http://www.example.org/rolification#R_Elephant"/>
<rdf:Description rdf:about="http://www.w3.org/2002/07/owl#topObjectProperty"/>
<owl:ObjectProperty rdf:about="http://www.example.org/rolification#R_Mouse"/>
</owl:propertyChainAxiom>
</owl:ObjectProperty>
</rdf:RDF>