OWL Онтология: как написать определение класса дополнения? - PullRequest
0 голосов
/ 21 февраля 2019

Размышляющему не удается классифицировать классы под классом A, который определен как дополнение к другому классу B.

Я создал минимальный пример онтологии OWL (на основе известного примера пиццы) в протеже 5 дляпроиллюстрируем эту проблему.

Существует два класса пиццы: Американа и Сохо: первый с мясной начинкой, а второй с овощной.Затем существует два класса: вегетарианская пицца, определенная как пицца с овощной начинкой, и не вегетарианская пицца как пицца, не являющаяся вегетарианской пиццей.Сохо правильно классифицируется как вегетарианская пицца, но Американа не классифицируется как не вегетарианская пицца.

Может кто-нибудь объяснить, что не так?

Вот код:

<?xml version="1.0"?>
<Ontology xmlns="http://www.w3.org/2002/07/owl#"
 xml:base="http://www.pizza.com/ontologies/pizza-minimal.owl"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:xml="http://www.w3.org/XML/1998/namespace"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 ontologyIRI="http://www.pizza.com/ontologies/pizza-minimal.owl"
 versionIRI="http://www.pizza.com/ontologies/pizza-minimal.owl/v1.0">
<Prefix name="" IRI="http://www.pizza.com/ontologies/pizza-minimal.owl"/>
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
    <ObjectProperty IRI="#isToppingOf"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#hasTopping"/>
</Declaration>
<Declaration>
    <Class IRI="#NonVegetarianPizza"/>
</Declaration>
<Declaration>
    <Class IRI="#SohoPizza"/>
</Declaration>
<Declaration>
    <Class IRI="#VegetableTopping"/>
</Declaration>
<Declaration>
    <Class IRI="#VegetarianPizza"/>
</Declaration>
<Declaration>
    <Class IRI="#Pizza"/>
</Declaration>
<Declaration>
    <Class IRI="#MeatTopping"/>
</Declaration>
<Declaration>
    <Class IRI="#PizzaTopping"/>
</Declaration>
<Declaration>
    <Class IRI="#AmericanaPizza"/>
</Declaration>
<EquivalentClasses>
    <Class IRI="#NonVegetarianPizza"/>
    <ObjectIntersectionOf>
        <Class IRI="#Pizza"/>
        <ObjectComplementOf>
            <Class IRI="#VegetarianPizza"/>
        </ObjectComplementOf>
    </ObjectIntersectionOf>
</EquivalentClasses>
<EquivalentClasses>
    <Class IRI="#VegetarianPizza"/>
    <ObjectIntersectionOf>
        <Class IRI="#Pizza"/>
        <ObjectAllValuesFrom>
            <ObjectProperty IRI="#hasTopping"/>
            <Class IRI="#VegetableTopping"/>
        </ObjectAllValuesFrom>
    </ObjectIntersectionOf>
</EquivalentClasses>
<SubClassOf>
    <Class IRI="#AmericanaPizza"/>
    <Class IRI="#Pizza"/>
</SubClassOf>
<SubClassOf>
    <Class IRI="#AmericanaPizza"/>
    <ObjectSomeValuesFrom>
        <ObjectProperty IRI="#hasTopping"/>
        <Class IRI="#MeatTopping"/>
    </ObjectSomeValuesFrom>
</SubClassOf>
<SubClassOf>
    <Class IRI="#AmericanaPizza"/>
    <ObjectAllValuesFrom>
        <ObjectProperty IRI="#hasTopping"/>
        <Class IRI="#MeatTopping"/>
    </ObjectAllValuesFrom>
</SubClassOf>
<SubClassOf>
    <Class IRI="#MeatTopping"/>
    <Class IRI="#PizzaTopping"/>
</SubClassOf>
<SubClassOf>
    <Class IRI="#SohoPizza"/>
    <Class IRI="#Pizza"/>
</SubClassOf>
<SubClassOf>
    <Class IRI="#SohoPizza"/>
    <ObjectSomeValuesFrom>
        <ObjectProperty IRI="#hasTopping"/>
        <Class IRI="#VegetableTopping"/>
    </ObjectSomeValuesFrom>
</SubClassOf>
<SubClassOf>
    <Class IRI="#SohoPizza"/>
    <ObjectAllValuesFrom>
        <ObjectProperty IRI="#hasTopping"/>
        <Class IRI="#VegetableTopping"/>
    </ObjectAllValuesFrom>
</SubClassOf>
<SubClassOf>
    <Class IRI="#VegetableTopping"/>
    <Class IRI="#PizzaTopping"/>
</SubClassOf>
<InverseObjectProperties>
    <ObjectProperty IRI="#hasTopping"/>
    <ObjectProperty IRI="#isToppingOf"/>
</InverseObjectProperties>
<ObjectPropertyDomain>
    <ObjectProperty IRI="#hasTopping"/>
    <Class IRI="#Pizza"/>
</ObjectPropertyDomain>
<ObjectPropertyRange>
    <ObjectProperty IRI="#hasTopping"/>
    <Class IRI="#PizzaTopping"/>
</ObjectPropertyRange>
</Ontology>

1 Ответ

0 голосов
/ 21 февраля 2019

Этот пример является частью стандартного учебника по OWL, см. здесь .Очевидно, учебник немного противоречив.

Объявление VegetableTopping значением Disjoint With MeatTopping решает проблему.

...