java - 提取个人 bibo :Articles from RDF document

标签 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 元素。

最佳答案

首先,我可以要求对您的问题做一些澄清吗?我认为您要问的是将每个 bibo:Article 条目拆分到它自己的文档中,对吧?

顺便说一句注意,这与拆分每个第一级节点不同,因为 RDF/XML 不是规范序列化,即相同的 RDF 可能由多个不同的 RDF/XML 文档序列化,并且不能保证它们永远是第一级节点。

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

使用 SPARQL 查询

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

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

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

使用模型 API

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

关于java - 提取个人 bibo :Articles from RDF document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219886/

相关文章:

json - 返回已解析 JSON 的全局函数?

json - 从 .Net Core 2.1 Web API 中的 JSON DateTime 响应中删除时间组件

java - 类型不匹配 : inferred type is KClass<GenderStatistics> but Class<TypeVariable(T)! >!预计

java - 如何用java制作字典?

sql-server - 从 Nvarchar(MAX) 返回 XML 数据

python - 添加 xsi :type and envelope namespace when using SUDS

json - 将 json null 解码为 NullString 的指针

java - FutureTask 保持活跃

java - 如何通过java以键值对的形式在android中添加复选框?

json - Sage 50 SData XML 到 JSON POST 请求