Поддерживает ли 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
это другая история, и в аналогичной ситуации она приводит к противоречивой ошибке онтологии.