Я намагаюся створити тип данихвластивість, що приймає та розпізнає числові інтервали. Наприклад, скажімо, у мене є властивість "температура". В онтології я хочу створити 2 підвластивості "гарячий" і "холодний". Гарячою буде температура 20-30, а холодною 0-19. На даний момент я роблю те, що деякі властивості встановлюються як нижня і верхня. Але чи є більш зручний спосіб виразити інтервали безпосередньо через власність? Так що коли я запитую, наприклад, "23", він розпізнає його "гарячий". Будь-які поради?
Заздалегідь спасибі
Відповіді:
8 для відповіді № 1Це досить просто у OWL, однак висновки, яких ви очікуєте, можуть дещо відрізнятися від тих, які я зараз поясню.
У OWL ви можете визначити обмеження щодо властивостей типу даних (як Я вже показував раніше)
Однак для обґрунтування типу даних потрібно infer що якийсь ресурс / особа з конкретне значення типу даних належить до якогось класу. Зауважте, що не всі реалізатори реагентів підтримують це, однак я зупинюсь на цьому Пеллет, що робить.
Для демонстрації я створив невелику онтологію OWL. Випишу її в синтаксисі OWL / XML. Це буде довго, але, сподіваємось, пояснить, як це робиться.
По-перше, визначте "реіфікований"клас називається 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
.
Посилання на повний приклад онтології тут. Спробуйте завантажити його в Протеж і класифікуйте його за допомогою Плагін для відновлення гранул.
Зверніть увагу, що я намагався класифікувати цю онтологію за HermiT і Факт ++ які в іншому випадку не змогли створити умовиводи, викинувши винятки, вказуючи, що вони не підтримують подібні міркування щодо типу даних.