Как выразить числовые интервалы в свойстве типа данных в онтологии?

Я пытаюсь создать свойство типа данных, которое принимает и распознает числовые интервалы. Например, допустим, у меня есть свойство "температура". В онтологии я хочу создать 2 под-свойства "горячий" и "холодный". Горячей будет температура 20-30, а холодной 0-19. В данный момент я делаю некоторые свойства, установленные как нижний и верхний. Но есть ли более удобный способ выразить интервалы непосредственно через свойство? Так что, когда я запрашиваю, например, "23", он распознает его "горячий". Какие-нибудь советы?

заранее спасибо

1 ответ

В OWL это довольно просто, однако ожидаемые вами выводы могут немного отличаться от тех, которые я сейчас объясню.

В OWL вы можете определить ограничения на свойства типа данных (как я уже показал ранее).

Тем не менее, рассуждение о типе данных необходимо для того, чтобы вывести, что некоторый ресурс / индивид с определенным значением типа данных принадлежит какому-либо классу. Обратите внимание, что не все реализации разумного решения поддерживают это, однако я сосредоточусь на Pellet, который делает.

Для демонстрации я создам небольшую онтологию OWL. Я напишу это в синтаксисе OWL/XML. Это будет долго, но, надеюсь, объясню, как это делается.

Во-первых, определите " reified " класс с именем Temp:

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

Далее, два подкласса под названием 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>

Теперь мы можем определить наше свойство типа данных, называемое 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>

Обратите внимание, что я не утверждал, какой класс 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>

Здесь эта аксиома определяет 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>

Здесь эта аксиома определяет 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 Concement.

Обратите внимание, что я попытался классифицировать эту онтологию с помощью HermiT и FaCT++, которые в противном случае не смогли сделать выводы, выдавая исключения, указывая, что они не поддерживают такие рассуждения типов данных.

Другие вопросы по тегам