簡體   English   中英

Apache Jena是否支持基於OWL限制的推理?

[英]Does Apache Jena support reasoning over OWL restrictions?

此處列出的Jena的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:zeusPerson的實例,因為它不滿足年齡的minCardinality限制。

關於我在這里做錯的任何建議嗎? 圍繞rdfs:domain的推理是否覆蓋了有關限制類的推理?

對此的解釋實際上是因為我在考慮OWL和RDF推斷時犯了一個菜鳥錯誤。

簡單的解釋(如注釋中指出的那樣)是,屬性上的rdfs:domain 足以使推斷者確定該實體是Person 如果實體是name的主題,則它是Person ,QED的實例

但是,這導致了另一個問題。 限制類明確指出,除非具有nameage否則它不是人。 那么,為什么這不是邏輯上的矛盾呢? 我有一條數據說宙斯一個Person ,另一條數據說他不是 ,不是嗎?

好吧,不。 因為即使我之前已經遇到過很多次,但我還是再次絆倒了Open World推理模型。 也就是說,所有推論都是基於您實際上沒有所有事實的假設而發生的,並且即使系統沒有明確斷言它們是真實的,事情也可能是真實的。

換句話說,僅僅因為我的數據沒有明確指出宙斯有age ,並不意味着他沒有age 其他人可以隨時提出自己的年齡。

因此,一般來說, minCardinality約束實際上無法通過開放世界推理來強制執行或檢查。

maxCardinality是另一maxCardinality ,在相似情況下確實會導致不一致的本體錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM