Поддерживает ли Apache Jena обоснование ограничений OWL?

Перечисленные здесь возможности рассуждения OWL Йены, по-видимому, означают, что Jena поддерживает вывод над классами ограничений.

Однако я не наблюдаю, чтобы это было правдой. В частности, у меня есть объект, который, как обнаружено, принадлежит к определенному классу, даже если в нем отсутствует свойство, которое должно присутствовать ограничение с minCardinality.

Однако я не уверен, что делаю что-то не так, мой OWL немного ржавый.

Мои данные:

<?xml version="1.0"?>
<rdf:RDF xmlns      = "http://www.example.com/people#"
         xml:base   = "http://www.example.com/people#"
         xmlns:owl  = "http://www.w3.org/2002/07/owl#"
         xmlns:rdf  = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#"
         xmlns:xsd  = "http://www.w3.org/2001/XMLSchema#">

    <owl:DatatypeProperty rdf:ID="name">
        <rdfs:domain rdf:resource="#Person"/>
        <rdfs:range rdf:resource="xsd:string"/>
    </owl:DatatypeProperty>

    <owl:DatatypeProperty rdf:ID="age">
        <rdfs:domain rdf:resource="#Person"/>
        <rdfs:range rdf:resource="xsd:nonNegativeInteger"/>
    </owl:DatatypeProperty>

    <owl:Class rdf:ID="Person">
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#name"/>
                <owl:cardinality rdf:datatype="xsd:nonNegativeInteger">1</owl:cardinality>
            </owl:Restriction>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Restriction>
                <owl:onProperty rdf:resource="#age"/>
                <owl:cardinality rdf:datatype="xsd:nonNegativeInteger">1</owl:cardinality>
            </owl:Restriction>
        </rdfs:subClassOf>
    </owl:Class>

    <!-- Is a person, because it's got a name and age -->
    <rdf:Description rdf:about="#john">
        <name>John</name>
        <age rdf:datatype="xsd:nonNegativeInteger">42</age>
    </rdf:Description>

    <!-- Should not be a person, because it's missing an age -->
    <rdf:Description rdf:about="#zeus">
        <name>Zeus</name>
    </rdf:Description>

</rdf:RDF>

Мой код:

 public static void main(String args[]) {
        System.out.println("hello world");

        OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF);

        model.read("src/main/resources/sample.owl");

        String queryString =
                "PREFIX ppl:  <http://www.example.com/people#>" +
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
                "SELECT ?obj " +
                "WHERE {" +
                "  ?obj rdf:type ppl:Person ." +
                "}";

        Query query = QueryFactory.create(queryString);
        QueryExecution qe = QueryExecutionFactory.create(query, model);
        ResultSet results = qe.execSelect();
        ResultSetFormatter.out(System.out, results, query);
        qe.close();   
    }

Это выводит:

------------
| obj      |
============
| ppl:john |
| ppl:zeus |
------------

Я бы не ожидал ppl:zeus быть примером Person, потому что это не удовлетворяет ограничению minCardinality по возрасту.

Любой совет, что я здесь делаю не так? Рассуждает rdfs:domain переопределить рассуждения вокруг класса ограничения?

1 ответ

Решение

Объяснение этому на самом деле, потому что я сделал ошибку новичка, думая о выводах OWL и RDF.

Простое объяснение (как указано в комментариях) заключается в том, что rdfs:domain на имущество достаточно для логического вывода, чтобы решить, что объект является Person, Если субъект является субъектом name тогда это пример PersonКЭД

Это приводит к другому вопросу, однако. Класс ограничения четко утверждает, что это не человек, если у него нет name и age, Так почему же это не логическое несоответствие? У меня есть один кусок данных, который говорит, что Зевс является Personи еще один фрагмент данных, который говорит, что это не так, не так ли?

Ну нет. Потому что, несмотря на то, что я сталкивался с этим много раз раньше, я снова споткнулся о модели рассуждений в открытом мире. Это означает, что все выводы происходят с предположением, что у вас на самом деле нет всех фактов, и что все может быть правдой, даже если система явно не утверждала их как истинные.

Другими словами, просто потому, что мои данные не указывают явно, что у Зевса есть age, не значит, что нет. Кто-то еще может прийти и утверждать возраст в любое время.

Как таковой, в общем, minCardinality ограничения не могут быть применены или проверены с помощью открытого мышления.

maxCardinality это другая история, и в аналогичной ситуации она приводит к противоречивой ошибке онтологии.

Другие вопросы по тегам