簡體   English   中英

無法使用耶拿(Jena)從貓頭鷹中檢索結果

[英]Unable to retrieve results from owl using Jena

首先,我使用Protege 4創建了自己的樣本本體。 我的實際目標是開發一個語義Web應用程序,該應用程序將從對象屬性中受益,以便為用戶提供某些東西。 創建本體后,我將添加動態數據,因此需要使用* Jena API * 為了演示,我創建了示例實例。 但是,當我嘗試檢索結果時,我什么也沒得到。

也許我的SPARQL查詢中缺少某些內容。

private static final String baseUri = "http://www.semanticweb.org/ontologies/alisveris.owl#";

private static void modelReadFile(String filename, Model model) {
    try {
        File f = new File(filename);
        FileReader fr = new FileReader(f);
        model.read(fr, baseUri);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}


private static void printModel(Model model) {
    String queryString =
        "PREFIX lib: <http://www.semanticweb.com/ontologies/alisveris.owl>" +
        "SELECT ?name ?surname " +
        "FROM <http://www.semanticweb.com/ontologies/alisveris.owl>" +
        "WHERE {" +
        "?name lib:take \"JavaProgramming\" " +
        "}";
    System.out.println(queryString);
    Query query = QueryFactory.create(queryString);
    QueryExecution qe = QueryExecutionFactory.create(query, model);
    ResultSet results = qe.execSelect();
    ResultSetFormatter.out(System.out, results, query);
    qe.close();
}


public static void main(String[] args) {
    Model model = ModelFactory.createDefaultModel();
    modelReadFile("/home/talha/ontologies/alisveris.owl", model);

    // Create properties for the different types of relationship to represent
    Property take = model.createProperty(baseUri, "take");
    Property isTakenBy = model.createProperty(baseUri, "isTakenBy");
    Property published = model.createProperty(baseUri, "published");
    Property publishedBy = model.createProperty(baseUri, "publishedBy");

    // User data properties
    Property userId = model.createProperty(baseUri, "userId");
    Property name = model.createProperty(baseUri, "name");
    Property surname = model.createProperty(baseUri, "surname");
    Property username = model.createProperty(baseUri, "username");
    Property password = model.createProperty(baseUri, "password");
    Property gender = model.createProperty(baseUri, "gender");
    Property age = model.createProperty(baseUri, "age");
    // Publisher data properties
    Property publisherId = model.createProperty(baseUri, "publisherId");
    Property publisherName = model.createProperty(baseUri, "publisherName");
    // Book data properties
    Property bookId = model.createProperty(baseUri, "bookId");
    Property bookName = model.createProperty(baseUri, "bookName");
    Property bookGenre = model.createProperty(baseUri, "bookGenre");
    Property pageCount = model.createProperty(baseUri, "pageCount");
    Property isbn = model.createProperty(baseUri, "isbn");
    Property bookRating = model.createProperty(baseUri, "bookRating");


    Resource talha = model.createResource(baseUri + "Talha");
    Resource javaProgramming = model.createResource(baseUri + "JavaProgramming");
    // and so on for other family members

    talha.addProperty(userId, "1");
    talha.addProperty(name, "Talha");
    talha.addProperty(surname, "Kabakuş");
    talha.addProperty(username, "talhak");
    talha.addProperty(password, "00");
    talha.addProperty(gender, "1");
    talha.addProperty(age, "23");


    javaProgramming.addProperty(bookId, "1");
    javaProgramming.addProperty(publisherId, "1");
    javaProgramming.addProperty(bookName, "Java Programming");
    javaProgramming.addProperty(bookGenre, "1");
    javaProgramming.addProperty(pageCount, "200");
    javaProgramming.addProperty(isbn, "121321312");
    javaProgramming.addProperty(bookRating, "3");

    // Add properties to adam describing relationships to other family members
    talha.addProperty(take, javaProgramming);

    Statement s = ResourceFactory.createStatement(talha, take, javaProgramming);
    model.add(s); // add the statement (triple) to the model
    printModel(model);
}

這是我得到的結果:

------------------
| name | surname |
==================
------------------

最后是我的樣本本體:

<?xml version="1.0"?>


<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
    <!ENTITY alisveris "http://www.semanticweb.org/ontologies/alisveris.owl#" >
]>


<rdf:RDF xmlns="http://www.semanticweb.org/ontologies/alisveris.owl#"
     xml:base="http://www.semanticweb.org/ontologies/alisveris.owl"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:alisveris="http://www.semanticweb.org/ontologies/alisveris.owl#">
    <owl:Ontology rdf:about="http://www.semanticweb.org/ontologies/alisveris.owl"/>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Object Properties
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#isTakenBy -->

    <owl:ObjectProperty rdf:about="&alisveris;isTakenBy">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
        <rdfs:range rdf:resource="&alisveris;User"/>
    </owl:ObjectProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#published -->

    <owl:ObjectProperty rdf:about="&alisveris;published">
        <rdfs:range rdf:resource="&alisveris;Book"/>
        <rdfs:domain rdf:resource="&alisveris;Publisher"/>
    </owl:ObjectProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#publishedBy -->

    <owl:ObjectProperty rdf:about="&alisveris;publishedBy">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
        <rdfs:range rdf:resource="&alisveris;Publisher"/>
        <owl:inverseOf rdf:resource="&alisveris;published"/>
    </owl:ObjectProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#take -->

    <owl:ObjectProperty rdf:about="&alisveris;take">
        <rdfs:range rdf:resource="&alisveris;Book"/>
        <rdfs:domain rdf:resource="&alisveris;User"/>
        <owl:inverseOf rdf:resource="&alisveris;isTakenBy"/>
    </owl:ObjectProperty>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Data properties
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#age -->

    <owl:DatatypeProperty rdf:about="&alisveris;age">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#bookGenre -->

    <owl:DatatypeProperty rdf:about="&alisveris;bookGenre">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#bookId -->

    <owl:DatatypeProperty rdf:about="&alisveris;bookId">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#bookName -->

    <owl:DatatypeProperty rdf:about="&alisveris;bookName">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#bookRating -->

    <owl:DatatypeProperty rdf:about="&alisveris;bookRating">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#gender -->

    <owl:DatatypeProperty rdf:about="&alisveris;gender">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#isbn -->

    <owl:DatatypeProperty rdf:about="&alisveris;isbn">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#name -->

    <owl:DatatypeProperty rdf:about="&alisveris;name">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#pageCount -->

    <owl:DatatypeProperty rdf:about="&alisveris;pageCount">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#password -->

    <owl:DatatypeProperty rdf:about="&alisveris;password">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#publisherId -->

    <owl:DatatypeProperty rdf:about="&alisveris;publisherId">
        <rdfs:domain rdf:resource="&alisveris;Book"/>
        <rdfs:domain rdf:resource="&alisveris;Publisher"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#publisherName -->

    <owl:DatatypeProperty rdf:about="&alisveris;publisherName">
        <rdfs:domain rdf:resource="&alisveris;Publisher"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#rating -->

    <owl:DatatypeProperty rdf:about="&alisveris;rating"/>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#surname -->

    <owl:DatatypeProperty rdf:about="&alisveris;surname">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#userId -->

    <owl:DatatypeProperty rdf:about="&alisveris;userId">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#username -->

    <owl:DatatypeProperty rdf:about="&alisveris;username">
        <rdfs:domain rdf:resource="&alisveris;User"/>
    </owl:DatatypeProperty>



    <!-- 
    ///////////////////////////////////////////////////////////////////////////////////////
    //
    // Classes
    //
    ///////////////////////////////////////////////////////////////////////////////////////
     -->




    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#Book -->

    <owl:Class rdf:about="&alisveris;Book">
        <owl:disjointWith rdf:resource="&alisveris;Publisher"/>
    </owl:Class>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#Female -->

    <owl:Class rdf:about="&alisveris;Female">
        <rdfs:subClassOf rdf:resource="&alisveris;Gender"/>
        <owl:disjointWith rdf:resource="&alisveris;Male"/>
    </owl:Class>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#Gender -->

    <owl:Class rdf:about="&alisveris;Gender"/>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#Male -->

    <owl:Class rdf:about="&alisveris;Male">
        <rdfs:subClassOf rdf:resource="&alisveris;Gender"/>
    </owl:Class>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#Publisher -->

    <owl:Class rdf:about="&alisveris;Publisher">
        <rdfs:subClassOf rdf:resource="&owl;Thing"/>
    </owl:Class>



    <!-- http://www.semanticweb.org/ontologies/alisveris.owl#User -->

    <owl:Class rdf:about="&alisveris;User"/>
</rdf:RDF>
PREFIX lib: <http://www.semanticweb.com/ontologies/alisveris.owl>

您需要一個#來同意baseURI:

PREFIX lib: <http://www.semanticweb.com/ontologies/alisveris.owl#>

你也不需要

FROM <http://www.semanticweb.com/ontologies/alisveris.owl>

您正在使用model提供數據。

此答案也在answer.semanticweb.com的副本中

您的查詢需要一個三元組,其中的對象是文字"JavaProgramming" ,但是代碼Resource javaProgramming = model.createResource(baseUri + "JavaProgramming"); 創建資源。 您需要查詢資源而不是字符串。 除了本體代碼之外,您創建的模型是這樣的(注意,我們看到的是:JavaProgramming ,而不是"JavaProgramming" ):

@prefix :      <http://www.semanticweb.org/ontologies/alisveris.owl#> .

:JavaProgramming  :bookGenre  "1" ;
        :bookId       "1" ;
        :bookName     "Java Programming" ;
        :bookRating   "3" ;
        :isbn         "121321312" ;
        :pageCount    "200" ;
        :publisherId  "1" .

:Talha  :age       "23" ;
        :gender    "1" ;
        :name      "Talha" ;
        :password  "00" ;
        :surname   "Kabakuş" ;
        :take      :JavaProgramming ;
        :userId    "1" ;
        :username  "talhak" .

使用此數據,您可以運行以下查詢(使用:JavaProgramming )並獲得以下結果。

prefix :      <http://www.semanticweb.org/ontologies/alisveris.owl#>

select ?student ?name ?surname where {
  ?student :take :JavaProgramming ;
           :name ?name ;
           :surname ?surname .
}
---------------------------------
| student | name    | surname   |
=================================
| :Talha  | "Talha" | "Kabakuş" |
---------------------------------

暫無
暫無

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

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