2012-12-03 81 views
2

我需要一個幫助,通過Jena框架從RDF獲取一些信息。 我有一個RDF內容是這樣的:RDF/XML Jena getValue

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:ts="http://www.test.com/testModel.owl#"> 
<ts:Entity rdf:ID="1234_test"> 
<....> 
</ts> 
</rdf:RDF> 

現在我的想法是擺脫來自TS的ID:實體。這是我的代碼:

Model model = ModelFactory.createDefaultModel(); 
InputStream requestBody = new ByteArrayInputStream(request.getBytes()); 
String BASE = "http://www.test.com/testModel.owl#"; 
model.read(requestBody,BASE); 
requestBody.close(); 

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

     Statement stmt  = iter.nextStatement(); // get next statement 
     Resource subject = stmt.getSubject();  // get the subject 
     Property predicate = stmt.getPredicate(); // get the predicate 
     RDFNode object = stmt.getObject();  // get the object 

      System.out.println(subject + " | "+predicate); 

    } 

唯一的問題,在這種情況下,是,我有滾動的所有聲明。有一種方法可以直接從ts:Entity獲取ID嗎?也許在獲取資源之前以及與該資源相關的ID的值之後。

預先感謝幫助。


對不起,我又在這裏,因爲我有一個類似的問題,例如,如果我有這樣的RDF:

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:ts="http://www.test.com/testModel.owl#"> 
<ts:Entity rdf:ID="1234_test"> 
    <ts:Resource> 
     <ts:testProp rdf:datatype="http://www.w3.org/2001/XMLSchema#string">test_ID_test</ts:testProp> 
</ts> 
</ts> 
</rdf:RDF> 

我怎麼能提取值test_ID_test ???如果我想使用SPARQL,我該如何處理jena?

回答

2

如何:

Resource ENTITY_TYPE = model.getResource("http://www.test.com/testModel.owl#Entity"); 
StmtIterator iter = model.listStatements(null, RDF.type, ENTITY_TYPE); 
while (iter.hasNext()) { 
    String entityID = iter.next().getSubject().getURI(); 
    System.out.println(entityID); 
} 

這將讓每個實體的URI。

+0

非常感謝你......唯一的錯誤是:String entityID = iter.nextStatement()。getSubject()。getURI();因爲你需要獲得主題的聲明。 – Asp1de

+0

我爲提問者留下了進一步的改進:-) – user205512

3

您應該使用SPARQL查詢您的模型,而不是迭代所有語句。 Jena在如何使用SPARQL和他們的API方面提供了很好的tutorial

+0

我想我會說你*可以*也可以使用SPARQL來查詢你的模型。在我的代碼中,大約50%的時間使用SPARQL,其餘時間直接使用模型(或OntModel)API。這完全取決於代碼的最清晰程度。如果您想要探索的RDF屬性鏈變得更長,那麼使用SPARQL查詢方法的複雜性往往不會像API那樣快地增加。另一方面,在API調用中的分離可以比在SPARQL查詢中更清楚。 –

+0

謝謝,也許可能是另一種方法! – Asp1de

+0

對不起,你能給我一個例子如何使SPARQL查詢提取rdf:ID? – Asp1de