提取个人bibo:来自RDF文档的文章

时间:2013-06-20 17:20:20

标签: java xml json rdf jena

我有一个这种格式的RDF / XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:ags="http://purl.org/agmes/1.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:bibo="http://purl.org/ontology/bibo/" xmlns:dct="http://purl.org/dc/terms/">
  <bibo:Article rdf:about="http://xxxxx/NO8500391">
    <dct:identifier>NO8500391</dct:identifier>
    ...
  </bibo:Article>
  <bibo:Article rdf:about="http://xxxxx/NO8500523">
    ...
  </bibo:Article>
  <bibo:Article rdf:about="http://xxxxx/NO8500496">
  ...
  </bibo:Article>
</rdf:RDF>

正如您所看到的,在单个RDF / XML文件中,有许多bibo:Article个,可能是数千个。我想要的是使用Apache Jena提取每篇文章并将其转换为RDF / JSON(我知道如何编写模型),因此我可以为每篇文章提供单独的文档,然后将它们全部导入到像CouchDB或Elasticsearch执行搜索。

如何提取模型中的每篇文章(Jena)? 我想的脏方法是将文件作为XML处理并提取每个bibo:Article元素。

1 个答案:

答案 0 :(得分:1)

首先,我可以要求对你的问题做一些澄清吗?我想您要问的是将每个bibo:Article条目拆分成自己的文档吗?

除了注意之外,这与拆分每个第一级节点不同,因为RDF / XML不是规范序列化,即同一个RDF可以由多个不同的RDF / XML文档序列化,不能保证它们永远是第一级节点。

现在尝试回答你的问题,有两种主要方法可以实现你的目标。

使用SPARQL查询

首先发出SELECT查询以检索所有文章实例,然后针对每个结果问题对文章URI发出DESCRIBE查询,该查询将为您提供仅包含该URI信息的新Jena模型。 / p>

请注意,如果您愿意,可以通过创建自定义DESCRIBE来准确更改DescribeHandler查询的方式,但这可能有点过分。

然后,您可以将每个DESCRIBE查询的结果序列化为新文档。

使用Model API

使用listStatements()方法(采用搜索条件的重载)首先查找文章,然后类似于第一个解决方案问题,进一步调用每个发现的文章URI以查找有关它的语句。这些可以添加到新模型中并根据需要进行序列化。