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

时间:2014-05-06 08:44:28

标签: properties owl protege

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

提前谢谢

1 个答案:

答案 0 :(得分:8)

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

在OWL中,您可以定义对数据类型属性的限制(如I've shown before)。

但是,推断需要数据类型推理,某些具有特定数据类型值的资源/个人属于某个类。请注意,并非所有推理器实现都支持此功能,但我会专注于Pellet,这样做。

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

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

<Declaration>
    <Class IRI="#Temp"/>
</Declaration>

接下来,有两个名为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>

现在,我们可以定义我们的数据类型属性,名为tempDegC

<Declaration>
    <DataProperty IRI="#tempDegC"/>
</Declaration>

我还会创建一些使用此属性的人,如下所示:

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

请注意,我没有断言哪个类xy属于,只是他们有tempDegCxsd:double个值

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

我们想要的是推理者自动推断x属于班级Cold,而y属于班级Hot

我们可以通过在数据类型属性Cold方面限制类HottempDegC定义来实现此目的,如下所示:

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

此处,此公理将Cold定义为任何实例,其tempDegC的{​​{1}}值为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>

此处,此公理将Hot定义为任何实例,其tempDegC的{​​{1}}值为xsd:double > 19<= 30

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

x : Cold

y : Hot

<强>解释

获得这些推论的关键是使用EquivalentClasses来定义ColdHot类的限制。使用EquivalentClasses代替SubClassOf,我们说的是指定范围内带有tempdegC任何属于类。

但是,如果我们使用SubClassOf来定义上述ColdHot类的限制,则只会限制Cold和{{的实例1}}遵守约束,即所谓的必要的条件,因为所有实例都必须遵守限制。

相比之下,Hot定义了必要的和所谓的足够的条件:不仅所有实例(必须)都必须遵守限制,但它是足够的,如果任何个人(例如EquivalentClassesx)符合限制,那么他们也是成员。这是足够的条件,推理者用来推断yx : Cold

指向full example ontology is here的链接。尝试将其加载到Protege并使用Pellet reasoner plugin对其进行分类。

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