Рассуждение дополнения в OWL и Protege

Недавно я создал небольшую онтологию для практики. В моей онтологии существует класс EmployedPerson, определенный одним правилом SWRL: Person (? X), (worksin min 1 Place) (? X) -> EmployedPerson (? X).

Также у меня есть еще один класс UnEmployedPerson, определенный выражением класса: Equivalent to (Person and (not (EmployedPerson))), что означает, что UnEmployedPerson является дополнением к EmployedPerson.

Оба упомянутых класса (EmployedPerson и UnEmployedPerson) являются подклассами класса Person, а параметр person установлен как «EmployedPerson или UnEmployedPerson». В классе Person три человека: Иван, Ленка и Мартин. Все люди разные.

Другой класс Place имеет индивидуальное приложение «WorksApplication». Свойство объекта worksin связывает класс Person и класс Place.

В моей онтологии есть две аксиомы: Ленка работает в приложении Works. Мартин работает в приложении Works. После рассуждений Пеллета и HermiT, Ленка и Мартин могут быть выведены как члены EmployedPerson на основе правила SWRL.

Поскольку Иван не принадлежит к EmployedPerson, а UnEmployedPerson является дополнением к EmployedPerson, поэтому Эван должен быть выведен как член класса UnEmployedPerson.

Но на самом деле, после рассуждений Пелле и Отшельника, Иван не может быть выведен из класса UnEmployedPerson. Результат не оправдал моих ожиданий. Что-то не так с моей ОНТОЛОГИЕЙ, или я пренебрегаю эффектом OWA? Пожалуйста, помогите мне разобраться с этой проблемой, я хочу, чтобы Иван был выведен из класса UnEmployedPerson !!

Вот моя онтология, демонстрирующая это поведение:

<Declaration>
    <Class IRI="#Adult"/>
</Declaration>
<Declaration>
    <Class IRI="#EmployedPerson"/>
</Declaration>
<Declaration>
    <Class IRI="#Parent"/>
</Declaration>
<Declaration>
    <Class IRI="#Person"/>
</Declaration>
<Declaration>
    <Class IRI="#Place"/>
</Declaration>
<Declaration>
    <Class IRI="#UnemployedPerson"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#wokrsin"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Ivan"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Lenka"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Martin"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#TreatHighBloodSugar"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#worksapplication"/>
</Declaration>
<EquivalentClasses>
    <Class IRI="#Person"/>
    <ObjectUnionOf>
        <Class IRI="#EmployedPerson"/>
        <Class IRI="#UnemployedPerson"/>
    </ObjectUnionOf>
</EquivalentClasses>
<EquivalentClasses>
    <Class IRI="#UnemployedPerson"/>
    <ObjectIntersectionOf>
        <Class IRI="#Person"/>
        <ObjectComplementOf>
            <Class IRI="#EmployedPerson"/>
        </ObjectComplementOf>
    </ObjectIntersectionOf>
</EquivalentClasses>
<SubClassOf>
    <Class IRI="#Adult"/>
    <Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
    <Class IRI="#EmployedPerson"/>
    <Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
    <Class IRI="#Parent"/>
    <Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
    <Class IRI="#UnemployedPerson"/>
    <Class IRI="#Person"/>
</SubClassOf>
<DisjointClasses>
    <Class IRI="#Person"/>
    <Class IRI="#Place"/>
</DisjointClasses>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Ivan"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Lenka"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Martin"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Place"/>
    <NamedIndividual IRI="#worksapplication"/>
</ClassAssertion>
<DifferentIndividuals>
    <NamedIndividual IRI="#Ivan"/>
    <NamedIndividual IRI="#Lenka"/>
</DifferentIndividuals>
<DifferentIndividuals>
    <NamedIndividual IRI="#Ivan"/>
    <NamedIndividual IRI="#Martin"/>
</DifferentIndividuals>
<DifferentIndividuals>
    <NamedIndividual IRI="#Ivan"/>
    <NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<DifferentIndividuals>
    <NamedIndividual IRI="#Lenka"/>
    <NamedIndividual IRI="#Martin"/>
</DifferentIndividuals>
<DifferentIndividuals>
    <NamedIndividual IRI="#Lenka"/>
    <NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<DifferentIndividuals>
    <NamedIndividual IRI="#Martin"/>
    <NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#wokrsin"/>
    <NamedIndividual IRI="#Lenka"/>
    <NamedIndividual IRI="#worksapplication"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#wokrsin"/>
    <NamedIndividual IRI="#Martin"/>
    <NamedIndividual IRI="#worksapplication"/>
</ObjectPropertyAssertion>
<DLSafeRule>
    <Body>
        <ClassAtom>
            <Class IRI="#Person"/>
            <Variable abbreviatedIRI="var:x"/>
        </ClassAtom>
        <ClassAtom>
            <ObjectMinCardinality cardinality="1">
                <ObjectProperty IRI="#wokrsin"/>
                <Class IRI="#Place"/>
            </ObjectMinCardinality>
            <Variable abbreviatedIRI="var:x"/>
        </ClassAtom>
    </Body>
    <Head>
        <ClassAtom>
            <Class IRI="#EmployedPerson"/>
            <Variable abbreviatedIRI="var:x"/>
        </ClassAtom>
    </Head>
</DLSafeRule>


person Sven Hazard    schedule 28.02.2015    source источник


Ответы (1)


0) Вместо использования правила SWRL вы можете использовать GCI

Person and (works min 1 Place) subClassOf EmployedPerson.

Это позволит вам использовать средства рассуждений, которые не поддерживают SWRL, также работают с классами (а не только с указанными лицами) и обеспечивают лучшую производительность в целом.

1) Это действительно результат OWA. Мы не знаем, Ivan есть ли где работать или нет. Поскольку мы не знаем, есть ли рабочее место, мы не могли сделать вывод, что он EmployedPerson. Поскольку мы не знаем, нет ли рабочего места, мы не смогли сделать вывод, что он UnEmployedPerson. Тот факт, что Person полностью покрывается EmployedPerson и UnEmployedPerson, здесь не имеет значения: мы до сих пор не знаем (и не можем сделать вывод из-за OWA), что это за Person, и не можем отклонить ни один вариант.

person Dmitry Tsarkov    schedule 28.02.2015
comment
Большое спасибо! Это мне действительно помогает! Я думаю, мне нужно изучить GCI, чтобы улучшить производительность моей онтологии. Вот мое обновление. 1. В своей онтологии я установил Ivan как not (worksin worksapplication), а класс place равным {worksapplication}. Я хочу, чтобы place был закрытым классом, в котором был только член worksapplication, а Ivan где-то не работал. Но не помогло, хорошего результата не получилось2. Я установил правило SWRL, Person(?p), (wokrsin max 0 Place)(?p) -> UnemployedPerson(?p), и, наконец, оно работает! Ivan в конечном итоге считается членом UnemployedPerson! Огромное спасибо! - person Sven Hazard; 02.03.2015