【发布时间】:2019-01-04 17:46:34
【问题描述】:
我正在尝试将 RDF/XML 格式的文档解析为 JSON-LD 以便对其进行构图。全部使用 Node.js,不使用任何 Web 服务 API(一个不太常见的解决方案)。
我觉得我快到了,但至少可以说我目前的方法有点笨拙。将图表放入 rdflib 存储然后再次查询它会给我一个奇怪的响应,其中包含一些标题并且图表中没有真正的上下文。因此,doc[5]['@graph'] 位于中间。
var fs = require('fs')
var $rdf = require('rdflib')
var jsonld = require('jsonld')
var path = 'path_to_rdf_file'
const frame = {}
fs.readFile(path, 'utf8', function (err, data) {
var uri = 'https://some.other.uri'
var store = $rdf.graph()
$rdf.parse(data, store, uri, 'application/rdf+xml')
var a = $rdf.serialize(null, store, uri, 'application/n-quads')
jsonld.fromRDF(a, { format: 'application/n-quads' }, (err, doc) => {
jsonld.flatten(doc[5]['@graph'], (err, flattened) => {
console.log(flattened)
jsonld.frame(flattened, frame, (err, framed) => {
resolve(framed)
})
})
})
})
由于所有 RDF 和链接数据包都在 npm 周围浮动,我认为肯定有一个更简单的解决方案可以让我从 A 转到 B。
如何在不使用 rdflib 的情况下将我的 RDF/XML 文档解析为 JSON-LD 文档?
【问题讨论】:
-
使用
rdflib有什么问题 - 我的意思是,它是为使用 RDF 而设计的 API。你还想怎么做?您必须为 RDF/XML 实现自己的解析器,这很重要,并为解析的 RDF 三元组实现序列化器。 -
好吧,我在这个例子中的主要反对意见是它在调用 $rdf.serialize 时返回了一些额外的数据。另外,我希望像 jsonld.fromRDF 函数这样的东西可以接受 RDF/XML
-
好的,我想我明白了。现在,您使用
rdflib解析RDF/XML,然后您必须将其转换为n-quads,然后才能使用来自jsonldAPI 的RDF 解析器 -
我猜你不是第一个问这个问题的人:见github.com/digitalbazaar/jsonld.js/issues/255 - 看起来未来将是一个新的Javascript库RDF.js,它与RDF-Ext、N3.js和rdflib.js 。检查 Github 存储库。大多数部分已经存在,至少我可以看到 RDF/XML 解析器和 JsonLD 序列化器,即 Sink
-
谢谢。我将怀着极大的兴趣关注这一发展。
标签: node.js rdf json-ld format-conversion rdf-xml