Почему мой выводчик OWL не дает ожидаемых результатов?
Привет, Семантическая паутина,
Я не ожидаю иметь <rdf:type rdf:resource='#Tsunami'>
в NamedIndividual: instance_Dromen после вывода приведенного ниже кода OWL. Каким-то образом что-то не так с несоответствием между #Huis и #Auto, или, может быть, я не правильно использую комплемент Of? В результате логического вывода NamedIndividual: instance_Dromen имеет следующий вывод:
-
<rdf:Description rdf:about="http://www.almfluss.com/rdf/0.1/Ontology.owl#instance_Dromen">
<owl:sameAs rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#instance_Dromen"/>
<rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Wielen"/>
<rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Auto"/>
<rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Onderstel"/>
<rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Tsunami"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<rdf:type rdf:resource="http://www.almfluss.com/rdf/0.1/Ontology.owl#Dromen"/>
</rdf:Description>
Код OWL, который я использую в качестве ввода для логического вывода:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY swrl "http://www.w3.org/2003/11/swrl#" >
<!ENTITY swrlb "http://www.w3.org/2003/11/swrlb#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY Ontology201210 "http://www.almfluss.com/rdf/0.1/Ontology.owl#" >
]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.almfluss.com/rdf/0.1/Ontology.owl#"
xmlns:Ontology201210="http://www.almfluss.com/rdf/0.1/Ontology.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:swrl="http://www.w3.org/2003/11/swrl#"
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xml:base="http://www.almfluss.com/rdf/0.1/Ontology.owl#">
<owl:DatatypeProperty rdf:about="#hasValue"/>
<owl:Class rdf:about="#Dromen">
<owl:equivalentClass>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<rdf:Description rdf:about="#Huis"/>
<rdf:Description rdf:about="#Auto"/>
</owl:unionOf>
</owl:Class>
</owl:equivalentClass>
<owl:equivalentClass>
<owl:Class>
<owl:complementOf rdf:resource="#Werkloos"/>
</owl:Class>
</owl:equivalentClass>
<owl:equivalentClass>
<owl:Class>
<owl:complementOf rdf:resource="#Arbeidsongeschikt"/>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
<owl:NamedIndividual rdf:about="#instance_Dromen">
<rdf:type rdf:resource="#Wielen"/>
<rdf:type rdf:resource="#Onderstel"/>
</owl:NamedIndividual>
<owl:Class rdf:about="#Huis">
<owl:equivalentClass>
<owl:Class>
<owl:complementOf rdf:resource="#Tsunami"/>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
<owl:NamedIndividual rdf:about="#instance_Huis"/>
<owl:Class rdf:about="#Auto">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="#Wielen"/>
<rdf:Description rdf:about="#Onderstel"/>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<owl:disjointWith rdf:resource="#Huis"/>
</owl:Class>
<owl:NamedIndividual rdf:about="#instance_Auto"/>
<owl:Class rdf:about="#Werkloos">
<owl:equivalentClass>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<rdf:Description rdf:about="#ZelfOntslag"/>
<rdf:Description rdf:about="#Ontslagen"/>
</owl:unionOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
<owl:NamedIndividual rdf:about="#instance_Werkloos"/>
<owl:Class rdf:about="#Arbeidsongeschikt"/>
<owl:NamedIndividual rdf:about="#instance_Arbeidsongeschikt"/>
<owl:Class rdf:about="#Wielen"/>
<owl:NamedIndividual rdf:about="#instance_Wielen"/>
<owl:Class rdf:about="#Onderstel"/>
<owl:NamedIndividual rdf:about="#instance_Onderstel"/>
<owl:Class rdf:about="#Ontslagen"/>
<owl:NamedIndividual rdf:about="#instance_Ontslagen"/>
<owl:Class rdf:about="#ZelfOntslag"/>
<owl:NamedIndividual rdf:about="#instance_ZelfOntslag"/>
<owl:Class rdf:about="#Tsunami"/>
<owl:NamedIndividual rdf:about="#instance_Tsunami"/>
</rdf:RDF>
Я надеюсь, что кто-нибудь может мне помочь.
Заранее спасибо.
С уважением, Мартейн ван дер Плаат
3 ответа
Ваш instance_Dromen
(назови это i
отныне для краткости) определяется как тип Wielen
и типа Onderstel
, Аргументация, которая приводит к тому, что это тип Tsunami
как следует:
- вы определили класс
Auto
быть эквивалентным пересечениюWielen
а такжеOnderstel
, следовательноi
Предполагается, чтобы иметь типAuto
, - поскольку
i
имеет типAuto
мы знаем, что это не типHuis
(поскольку эти два класса определены как непересекающиеся). - поскольку
Tsunami
определяется как дополнениеHuis
(то есть все, что не являетсяHuis
этоTsunami
), а такжеi
не типHuis
мы можем сделать вывод, чтоi
этоTsunami
,
Проще говоря, то, как моделируется ваша онтология, ведет к каждому Auto
быть Tsunami
,
Ваша онтология довольно беспорядочная, например, вы сказали, что Auto не связана с Huis, но что Dromen эквивалентен союзу Huis & Auto.
Если вы пишете это от руки, остановитесь. Получите Protege 4 и используйте его для создания своей онтологии. Помимо упрощения написания онтологии, он интегрируется с различными аргументами, поэтому вы можете проверить согласованность и выполнимость прямо в графическом интерфейсе. И вы также сможете использовать объяснения, чтобы рассказать вам, почему был сделан конкретный вывод.
Наконец, это почти всегда тот случай, когда вы хотите subClassOf, а не эквивалентный. Эквивалентность в отношениях идет в обоих направлениях, что не так часто, как задумал автор.
Я согласен с тем, что написал @Michael. Несколько общих замечаний о представлении кода OWL как части вопроса (Stackru):
- используйте читабельный синтаксис, то есть избегайте XML и избегайте RDF (вы использовали оба...), поскольку оба излишне многословны для общения между человеком и человеком
- объясните свое намерение за каждой аксиомой на простом английском
- использовать английские имена сущностей (среди пользователей Stackru широко не говорят на голландском)
- удалить ненужные вещи (например, префиксы пространства имен SWRL в этом случае)
После этих изменений у вас может остаться всего несколько строк кода, и проблема с ним может сразу же стать видимой...