2

我需要帮助才能使用 Jena 框架从 RDF 中获取一些信息。我有这样的 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>
</rdf:RDF>

现在我的想法是从 ts:Entity 中取出 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 我该怎么做耶拿???

4

2 回答 2

3

您应该使用SPARQL来查询您的模型,而不是遍历所有语句。Jena 提供了一个很好的教程,介绍如何将 SPARQL 与他们的 API 一起使用。

于 2012-12-03T17:17:40.390 回答
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。

于 2012-12-03T20:53:25.800 回答