use*_*165 4 properties owl protege
我要做的是创建一个接受和识别数字间隔的数据类型属性.例如,假设我有"温度"属性.在本体中,我想创建2个子属性"hot"和"cold".炎热的温度是20-30,冷的是0-19.我现在正在做的是将一些属性设置为lowerlim和upperlim.但有没有更方便的方式直接通过属性表达间隔?因此,当我查询例如"23"时,它会识别出它的"热".有小费吗?
先感谢您
这在OWL中非常简单,但是你所期待的那种推论可能与我现在解释的推论有点不同.
在OWL中,您可以定义对数据类型属性的限制(如前所示).
但是,需要数据类型推理来推断某些具有特定数据类型值的资源/个人属于某个类.请注意,并非所有推理实现都支持这一点,但我会专注于Pellet,它确实如此.
为了演示,我将创建一个小的OWL本体.我将用OWL/XML语法编写它.这将是漫长的,但希望能够解释它是如何完成的.
首先,定义一个名为" reified "的类Temp
:
<Declaration>
<Class IRI="#Temp"/>
</Declaration>
Run Code Online (Sandbox Code Playgroud)
接下来,两个子类调用Hot
和Cold
:
<Declaration>
<Class IRI="#Hot"/>
</Declaration>
<SubClassOf>
<Class IRI="#Hot"/>
<Class IRI="#Temp"/>
</SubClassOf>
<Declaration>
<Class IRI="#Cold"/>
</Declaration>
<SubClassOf>
<Class IRI="#Cold"/>
<Class IRI="#Temp"/>
</SubClassOf>
Run Code Online (Sandbox Code Playgroud)
现在,我们可以定义我们的数据类型属性,名为tempDegC
:
<Declaration>
<DataProperty IRI="#tempDegC"/>
</Declaration>
Run Code Online (Sandbox Code Playgroud)
我还将创建一些使用此属性的人,如下所示:
<Declaration>
<NamedIndividual IRI="#x"/>
</Declaration>
<DataPropertyAssertion>
<DataProperty IRI="#tempDegC"/>
<NamedIndividual IRI="#x"/>
<Literal datatypeIRI="&xsd;double">13.5</Literal>
</DataPropertyAssertion>
<Declaration>
<NamedIndividual IRI="#y"/>
</Declaration>
<DataPropertyAssertion>
<DataProperty IRI="#tempDegC"/>
<NamedIndividual IRI="#y"/>
<Literal datatypeIRI="&xsd;double">23.4</Literal>
</DataPropertyAssertion>
Run Code Online (Sandbox Code Playgroud)
请注意,我没有声明哪个类x
或y
属于哪个类,只是它们具有tempDegC
某些xsd:double
值.
如果我们在此时要求推理人对本体进行分类,我们就不会看到任何新的推论.
我们想要的是推理器自动推断x
属于类Cold
,y
属于类Hot
.
我们可以通过限制类的定义Cold
和Hot
数据类型属性来实现这一点tempDegC
,如下所示:
<EquivalentClasses>
<Class IRI="#Cold"/>
<DataSomeValuesFrom>
<DataProperty IRI="#tempDegC"/>
<DatatypeRestriction>
<Datatype abbreviatedIRI="xsd:double"/>
<FacetRestriction facet="&xsd;maxInclusive">
<Literal datatypeIRI="&xsd;double">19.0</Literal>
</FacetRestriction>
</DatatypeRestriction>
</DataSomeValuesFrom>
</EquivalentClasses>
Run Code Online (Sandbox Code Playgroud)
这里,该公理定义Cold
为" 任意具有的实例tempDegC
与xsd:double
值是<= 19
".
同样,我们可以限制Hot
如下:
<EquivalentClasses>
<Class IRI="#Hot"/>
<DataSomeValuesFrom>
<DataProperty IRI="#tempDegC"/>
<DatatypeRestriction>
<Datatype abbreviatedIRI="xsd:double"/>
<FacetRestriction facet="&xsd;maxInclusive">
<Literal datatypeIRI="&xsd;double">30.0</Literal>
</FacetRestriction>
<FacetRestriction facet="&xsd;minExclusive">
<Literal datatypeIRI="&xsd;double">19.0</Literal>
</FacetRestriction>
</DatatypeRestriction>
</DataSomeValuesFrom>
</EquivalentClasses>
Run Code Online (Sandbox Code Playgroud)
这里,该公理定义Hot
为" 任意具有实例tempDegC
有xsd:double
值,它是> 19
与<= 30
".
现在,根据这些定义,要求推理器对本体进行分类,推断出两个新的陈述:
x : Cold
y : Hot
说明
获得这些推论的关键是使用EquivalentClasses
来定义对类Cold
和Hot
类的限制.通过使用EquivalentClasses
而不是SubClassOf
,我们说任何具有tempdegC
指定范围内的东西属于类.
但是,如果我们要用来SubClassOf
定义上面的限制Cold
和Hot
类,那么这只会限制约束的实例Cold
和Hot
遵守约束,即所谓的必要条件,因为所有实例都必须遵守限制.
相反,EquivalentClasses
定义了必要和所谓的充分条件:不仅所有实例(必然)都必须遵守限制,但如果任何个人(例如或)满足限制,他们也是成员就足够了.正是这个充分的条件,推理者用来推断和.x
y
x : Cold
y : Hot
这里是完整示例本体的链接.尝试将其加载到Protege中并使用Pellet推理器插件对其进行分类.
请注意,我尝试使用HermiT和FaCT ++对此本体进行分类,否则无法产生推断,抛出异常,表明它们不支持此类数据类型推理.