Является ли свойство объекта функциональным?

Я использую OWL-API 5 для загрузки всех аксиом свойств объекта в моей онтологии следующим образом:

File ontology = new File("examples/ontology.owl");
File individual = new File("examples/individuals.owl");
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

IRI documentIRI = IRI.create(ontology);
IRI ontologyIRI = IRI.create("http://www.semanticweb.org/2020/0/test");

SimpleIRIMapper mapper = new SimpleIRIMapper(ontologyIRI, documentIRI);
manager.getIRIMappers().add(mapper);

OWLOntology kb = manager.loadOntologyFromOntologyDocument(individual);

Stream<OWLObjectPropertyAssertionAxiom> objectPropertyAxioms = kb.axioms(AxiomType.OBJECT_PROPERTY_ASSERTION);
objectPropertyAxioms.forEach(axiom -> {
    System.out.println("Found object property axiom " + axiom);

    OWLIndividual object = axiom.getObject();
    OWLIndividual subject = axiom.getSubject();
    OWLObjectPropertyExpression property = axiom.getProperty();
});

Возвращает:

Found object property axiom ObjectPropertyAssertion(<http://www.semanticweb.org/2020/0/test#Q> <http://www.semanticweb.org/2020/0/test#x> <http://www.semanticweb.org/2020/0/test#y>)

Теперь я хотел бы определить, является ли свойство функциональным. Это то, что я пробовал до сих пор:

if (EntitySearcher.isFunctional(property, kb)) {
    LOGGER.debug("Property " + property + " is declared as functional");
} else {
    LOGGER.debug("Property " + property + " is NOT declared as functional");
}

Возвращает:

Property <http://www.semanticweb.org/2020/0/test#Q> is NOT declared as functional

Я думаю, что EntitySearcher.isFunctional(p,o) ищет аксиомы свойств функциональных объектов, которые делают указанные функционал свойства объекта, который, кажется, не существует в моей онтологии (т. е. ontology.axioms(AxiomType.FUNCTIONAL_OBJECT_PROPERTY) ничего не возвращает).


Вот что у меня есть в моей онтологии:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.semanticweb.org/2020/0/test#" xml:base="http://www.semanticweb.org/2020/0/test" xmlns:owl="http://www.w3.org/2002/07/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#">
    <owl:Ontology rdf:about="http://www.semanticweb.org/2020/0/test"/>

    <owl:ObjectProperty rdf:about="http://www.semanticweb.org/2020/0/test#Q">
        <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    </owl:ObjectProperty>
</rdf:RDF>

И физические лица:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.semanticweb.org/2020/0/test#" xmlns:owl="http://www.w3.org/2002/07/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#">
    <owl:Ontology rdf:about="">
        <owl:imports rdf:resource="http://www.semanticweb.org/2020/0/test"/>
    </owl:Ontology>

    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/2020/0/test#x">
        <Q rdf:resource="http://www.semanticweb.org/2020/0/test#y"/>
    </owl:NamedIndividual>

    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/2020/0/test#y"/>
</rdf:RDF>

(Оба файла были созданы с помощью Protegé 5.5.0). Какие-либо предложения? Спасибо.


person benhid    schedule 08.07.2020    source источник
comment
почему вы предполагаете, что свойство является функциональным? В вашей онтологии нет такой аксиомы, и она не может быть выведена стандартным OWL-рассуждающим, использующим дедуктивное рассуждение. Если вы говорите о ваших данных экземпляра, где есть только одно такое утверждение свойства для отдельного x, тогда вам нужно прочитать о допущении открытого мира в OWL, и даже это ничего не изменит, вывод, который вы хотите, достижим только с помощью индуктивного рассуждения, т. е. от частного к чему-то общему. Просто мои два цента...   -  person UninformedUser    schedule 08.07.2020
comment
чтобы было ясно, я не вообще ничего не пытаюсь сделать, я просто не хочу читать файл и извлекать аксиому свойства функционального объекта   -  person benhid    schedule 09.07.2020
comment
но тогда метод, который вы вызываете, будет работать с данными выборки... до тех пор, пока переменная Java property указывает правильное свойство объекта с правильным URI http://www.semanticweb.org/2020/0/test#Q - также, вы уверены, что загрузили правильную онтологию?   -  person UninformedUser    schedule 09.07.2020
comment
да, я загрузил правильную онтологию (проверено дважды, ха-ха), и я обновил первое сообщение, чтобы более подробно указать, как я импортирую свою онтологию (может быть, это как-то связано с моей проблемой?)   -  person benhid    schedule 09.07.2020
comment
вы никогда не упоминали импорт онтологий... используйте isFunctional со вторым аргументом, являющимся закрытием импорта вашей онтологии   -  person UninformedUser    schedule 09.07.2020


Ответы (1)


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

Я считаю, что в вашей онтологии достаточно информации для этого.

Чтобы предоставить полный пример:

<?xml version="1.0"?>
<rdf:RDF xmlns="http://www.semanticweb.org/2020/0/test#" xml:base="http://www.semanticweb.org/2020/0/test" xmlns:owl="http://www.w3.org/2002/07/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#" xmlns:test="http://www.semanticweb.org/owlapi/test#">
    <owl:Ontology rdf:about="http://www.semanticweb.org/2020/0/test"/>
    <owl:ObjectProperty rdf:about="http://www.semanticweb.org/owlapi/test#Q">
        <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    </owl:ObjectProperty>
    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/owlapi/test#x">
        <test:Q rdf:resource="http://www.semanticweb.org/owlapi/test#y"/>
    </owl:NamedIndividual>
    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/owlapi/test#y"/>
</rdf:RDF>

С помощью этой онтологии EntitySearcher возвращает true при проверке функциональных свойств.

Изменить: в вашем обновленном вопросе вы используете kb.axioms(AxiomType), вам нужно сказать, чтобы он включал импорт.

person Ignazio    schedule 08.07.2020
comment
Попробовал ваш пример - работает без нареканий! Но в моем случае это не работает, когда онтология хранится в виде отдельных файлов (ABox и TBox). Я обновил первое сообщение, чтобы предоставить полный код. - person benhid; 09.07.2020