如何在本体中的datatype属性中表示数值区间?

use*_*165 4 properties owl protege

我要做的是创建一个接受和识别数字间隔的数据类型属性.例如,假设我有"温度"属性.在本体中,我想创建2个子属性"hot"和"cold".炎热的温度是20-30,冷的是0-19.我现在正在做的是将一些属性设置为lowerlim和upperlim.但有没有更方便的方式直接通过属性表达间隔?因此,当我查询例如"23"时,它会识别出它的"热".有小费吗?

先感谢您

sha*_*rky 8

这在OWL中非常简单,但是你所期待的那种推论可能与我现在解释的推论有点不同.

在OWL中,您可以定义对数据类型属性的限制(如前所示).

但是,需要数据类型推理来推断某些具有特定数据类型值的资源/个人属于某个类.请注意,并非所有推理实现都支持这一点,但我会专注于Pellet,它确实如此.

为了演示,我将创建一个小的OWL本体.我将用OWL/XML语法编写它.这将是漫长的,但希望能够解释它是如何完成的.

首先,定义一个名为" reified "的类Temp:

<Declaration>
    <Class IRI="#Temp"/>
</Declaration>
Run Code Online (Sandbox Code Playgroud)

接下来,两个子类调用HotCold:

<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)

请注意,我没有声明哪个类xy属于哪个类,只是它们具有tempDegC某些xsd:double值.

如果我们在此时要求推理人对本体进行分类,我们就不会看到任何新的推论.

我们想要的是推理器自动推断x属于类Cold,y属于类Hot.

我们可以通过限制类的定义ColdHot数据类型属性来实现这一点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" 任意具有的实例tempDegCxsd: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" 任意具有实例tempDegCxsd:double值,它是> 19<= 30".

现在,根据这些定义,要求推理器对本体进行分类,推断出两个新的陈述:

x : Cold

y : Hot

说明

获得这些推论的关键是使用EquivalentClasses来定义对类ColdHot类的限制.通过使用EquivalentClasses而不是SubClassOf,我们说任何具有tempdegC指定范围内的东西属于类.

但是,如果我们要用来SubClassOf定义上面的限制ColdHot类,那么这只会限制约束的实例ColdHot遵守约束,即所谓的必要条件,因为所有实例都必须遵守限制.

相反,EquivalentClasses定义了必要和所谓的充分条件:不仅所有实例(必然)都必须遵守限制,但如果任何个人(例如或)满足限制,他们也是成员就足够了.正是这个充分的条件,推理者用来推断和.xyx : Coldy : Hot

这里是完整示例本体的链接.尝试将其加载到Protege中并使用Pellet推理器插件对其进行分类.

请注意,我尝试使用HermiTFaCT ++对此本体进行分类,否则无法产生推断,抛出异常,表明它们不支持此类数据类型推理.