通过Jena Library从RDF / XML文档中提取URI

时间:2012-10-10 09:54:52

标签: rdf jena

我想从RDF / XML文档中取出所有URI。在Jena Library中将RDF / XML转换为Model Class,然后为每个Model class语句提取每个主题,谓词和对象的URI(非null)对我有用吗?

    Model read = ModelFactory.createDefaultModel().read(my_url);
    StmtIterator si;
    si = read.listStatements();

其中url是RDF / XML Web文档..

1 个答案:

答案 0 :(得分:2)

正如Javadoc所说,listStatements()会列出模型中的所有陈述 - 即三元组。

如果要列出所有的URI,则需要考虑它们在RDF模型中的位置。您可能想要也可能不想要所有这些。对于给定的三元组,T,由主语,谓词和宾语组成:

  • T的主题将具有URI,除非它是匿名资源(bNode)
  • T的谓词将有一个URI
  • 如果T的对象是资源而不是文字,并且如果它不是bNode,那么T的对象将具有URI

所以(未经测试的代码):

Set<String> uris = new HashSet<String>();
for (StmtIterator i = model.listStatements(); i.hasNext(); ) {
    Statement s = i.next();
    if (!s.getSubject().isAnon()) {
        uris.add( s.getSubject().getURI() );
    }
    uris.add( s.getPredicate().getURI() );
    if (s.getObject().isResource() && !s.getResource().isAnon()) {
        uris.add( s.getResource().getURI() );
    }
}