2012-12-03 46 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