2013-01-06 16 views
0

首先,我使用Protege 4創建了我自己的樣本本體。我的實際目標是開發一種語義Web應用程序,它可以從對象屬性中獲益,爲用戶提供一些東西。創建我的本體之後,我將添加動態數據,因此我需要使用* Jena API *。爲了演示,我創建了示例實例。但是當我嘗試檢索結果時,我什麼都沒有。無法使用Jena檢索owl的結果

也許我錯過了我的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> 
+0

重複的在http://answers.semanticweb.com/questions/20229/unable-to-retrieve-results-from-owl-using-jena。 –

回答

0

此答案也在the duplicate on answers.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ş" | 
--------------------------------- 
+0

在answers.semanticweb處詢問的是我的問題。謝謝。 – talha06

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

你需要一個#與基本URI同意:

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

而且你不需要

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

您與model提供的數據。

+0

非常感謝您的回覆;我通過您的建議更改了代碼,但它仍然是一樣的。 – talha06

+0

嘗試在構建之後和查詢之前打印出模型,以確保數據與查詢的期望相匹配。你不需要閱讀本體 - 這是一個只有數據的問題。 – AndyS

+0

但我在本體中定義了對象和數據屬性。我只需要創建一個本體模型並通過這個模型加載數據。當我打印出模型時,我確切地看到了我在本體中定義的內容。請你能指導我如何實現我的目標? – talha06