2013-05-30 101 views
0

我已經建立了一個網絡爬蟲,收集數據並將其存儲在rdf/xml文件中,現在我想將這些數據映射到我的java對象...我該怎麼做?將RDF/XML數據映射到java對象

我發現這段代碼對我來說可能是有用的,但我似乎無法正確使用它......它從我的rdf/xml文件中收集主語,謂詞和對象,但我可以用我的java的指定的對象,我不知道如何...我用Google搜索了很多,但存在的arent這個多少有用的東西,所以幫傢伙!d

StmtIterator iter = rdfGraph.listStatements(); 
    while (iter.hasNext()) { 

      Statement stmt  = iter.nextStatement(); // get next statement 
      Resource subject = stmt.getSubject(); 
      //System.out.print(subject.getNameSpace() + subject.getLocalName());// get the subject 
      Property predicate = stmt.getPredicate(); 
      //System.out.print(" " + predicate.getNameSpace() + predicate.getLocalName());// get the predicate 
      RDFNode object = stmt.getObject();  // get the object 
      //System.out.println(" " + object.toString() + "\n"); 
      System.out.println(subject + " | "+predicate + " | " + object); 

     } 

這是我的RDF文件的一部分...

<rdf:Description rdf:nodeID="A12"> 
<schema:reviewRating rdf:nodeID="A13"/> 
<schema:description>descriptiooooon</schema:description> 
<schema:datePublished>2012-02-22</schema:datePublished> 
<schema:author>Nick M.</schema:author> 
<rdf:type rdf:resource="http://schema.org/Review"/> 
</rdf:Description> 

我想用這個java對象來代表它..這是我的課...

@Namespace(Constants.SCHEMA) 
@RdfType("Review") 
public class Review extends Thing{ 

@RdfProperty(Constants.SCHEMA + "author") 
private String author; 

@RdfProperty(Constants.SCHEMA + "reviewRating") 
private Rating reviewRating; 

@RdfProperty(Constants.SCHEMA + "datePublished") 
private Date datePublished; 

@RdfProperty(Constants.SCHEMA + "description") 
private String description; 

    } 

回答

0

好了,你還沒有告訴我們什麼

我可以用我的Java指定對象表示這個數據,

實際上是指,因爲你沒有描述你的Java對象。

經過猜測,我認爲問題在於,您一次只能訪問RDF模型的內容一個三元組(Statement)。這是相當低級的訪問模式。您需要首先識別的是具有相同主題URI的三元組表示關於相同RDF資源的信息。所以,有一兩件事你可以做的是遍歷模型的科目,然後列出它們的屬性:

ResourceIterator i = rdfGraph.listSubjects(); 
while (i.hasNext()) { 
    Resource s = i.next(); 
    System.out.println("Graph contains subject " + s); 
    for (StmtIterator j = s.listProperties(); j.hasNext();) { 
    Statement t = j.next(); 
    System.out.println(" with property " + t.getPredicate() + 
         " ---> " + t.getObject()); 
    } 
} 

這將使你在圖形報表的組合的基本層次感。實際上,你可能只想從某個rdf:type的資源開始,這很容易做到。

這將是一個更常見的使用RDF數據的基本模式。如果您確實需要將圖中的資源映射到Java對象,請參閱JenaBean這樣的項目。但請注意,該代碼是相當古老的,可能需要適應當前版本的Jena。

+0

ian你能幫助我更多與此?我添加了一塊我的rdf/xml和java類... – Andrej

+0

任何幫助嗎?我真的堅持這個... – Andrej

+0

嗨安德烈,抱歉不要早日迴應,我一直很忙。它看起來像你分享的代碼是一些JenaBean代碼 - 我把鏈接放在我原來的答案中。正如我之前所說,JenaBean不是一個積極維護的項目,因此它可能不適用於當前版本的Jena。我的建議是忘記將資源投入到Java bean中,然後使用我建議的代碼示例使用RDF模型API。如果您不確定如何做到這一點,我建議您向Jena用戶列表發送更完整的代碼示例。有關如何執行此操作,請參閱http://jena.apache.org/help_and_support/index.html。 –