Как выразить числовые интервалы в свойстве типа данных в онтологии?
Я пытаюсь создать свойство типа данных, которое принимает и распознает числовые интервалы. Например, допустим, у меня есть свойство "температура". В онтологии я хочу создать 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++, которые в противном случае не смогли сделать выводы, выдавая исключения, указывая, что они не поддерживают такие рассуждения типов данных.