我有一个这种格式的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
元素。
答案 0 :(得分:1)
首先,我可以要求对你的问题做一些澄清吗?我想您要问的是将每个bibo:Article
条目拆分成自己的文档吗?
除了注意之外,这与拆分每个第一级节点不同,因为RDF / XML不是规范序列化,即同一个RDF可以由多个不同的RDF / XML文档序列化,不能保证它们永远是第一级节点。
现在尝试回答你的问题,有两种主要方法可以实现你的目标。
首先发出SELECT
查询以检索所有文章实例,然后针对每个结果问题对文章URI发出DESCRIBE
查询,该查询将为您提供仅包含该URI信息的新Jena模型。 / p>
请注意,如果您愿意,可以通过创建自定义DESCRIBE
来准确更改DescribeHandler
查询的方式,但这可能有点过分。
然后,您可以将每个DESCRIBE
查询的结果序列化为新文档。
使用listStatements()
方法(采用搜索条件的重载)首先查找文章,然后类似于第一个解决方案问题,进一步调用每个发现的文章URI以查找有关它的语句。这些可以添加到新模型中并根据需要进行序列化。