Това, което се опитвам да направя, е да създам тип даннисвойство, което приема и разпознава числови интервали. Например, нека кажем, че имам свойството "температура". В онтологията искам да създам 2 суб-свойства "горещи" и "студени". Горещи биха били температури 20-30 и студени 0-19. Това, което правя в момента е, че някои свойства са определени като по-ниски и горни. Но има ли по-удобен начин за изразяване на интервалите директно през имота? Така че, когато попитам например "23", тя ще разпознае "горещата". Някакви съвети?
Благодаря ви предварително
Отговори:
8 за отговор № 1Това е доста лесно в OWL, но видовете изводи, които очаквате, може да са малко по-различни от тези, които сега ще обясня.
В OWL можете да дефинирате ограничения за свойствата на типа данни (като Показвах преди).
Въпреки това се изисква разсъждение за типа данни загатвам че някой ресурс / индивид с конкретна стойност на типа данни принадлежи към някакъв клас. Обърнете внимание, че не всички реализационни решения поддържат това, но аз ще се съсредоточа върху топче, което прави.
За да демонстрирам, аз ще създам малка 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
като "който и да е инстанция, която има a 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
като "който и да е инстанция, която има a 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
.
Връзка към пълен пример онтология е тук, Опитайте да го заредите протеже и я класифицирайте с помощта на Плъгин за обосновка на пелети.
Имайте предвид, че се опитах да класифицирам тази онтология с отшелник и фактът ++ които в противен случай не успяха да направят изводи, хвърляйки изключения, посочвайки, че не поддържат такива аргументи на типа данни.