2

我想从 RDF/XML 文档中提取所有 URI。将 RDF/XML 转换为 Jena 库中的模型类,然后为该模型类的每个语句提取每个主题、谓词和宾语的 URI(非 null)对我有用吗?

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

其中 url 是 RDF/XML Web 文档。

4

1 回答 1

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() );
    }
}
于 2012-10-10T10:19:29.527 回答