gpt4 book ai didi

node.js - 将 RDF/XML 文件转换或转换为 JSON-LD 格式

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:35 24 4
gpt4 key购买 nike

我正在尝试将 RDF/XML 格式的文档解析为 JSON-LD 以便构建它。全部使用 Node.js,不使用任何 Web 服务 API(一个不太罕见的解决方案)。

我觉得我已经快到了,但至少可以说我目前的方法感觉很笨拙。将图表放入 rdflib 存储中,然后再次查询它会得到一个奇怪的响应,其中包含一些 header ,并且图表中没有真正的上下文。因此,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)
})
})
})
})

由于 npm 周围漂浮着所有 RDF 和链接数据包,我认为一定有一个更简单的解决方案可以让我从 A 到 B。

如何在不使用 rdflib 的情况下将 RDF/XML 文档解析为 JSON-LD 文档?

最佳答案

您可以使用rdflib直接序列化到application/ld+json(rdflib内部使用jsonld模块)。

var fs = require('fs')
var $rdf = require('rdflib')
var jsonld = require('jsonld')

var path = 'path_to_rdf_file'

const frame = {}

const toJSONLD = (data, uri, mimeType) => {
return new Promise((resolve, reject) => {
var store = $rdf.graph()
$rdf.parse(data, store, uri, mimeType)
$rdf.serialize(null, store, uri, 'application/ld+json', (err, jsonldData) => {
if (err) return reject(err);
resolve(JSON.parse(jsonldData))
})
})
}

fs.readFile(path, 'utf8', function (err, data) {
var uri = 'https://some.other.uri'
toJSONLD(data, uri, 'application/rdf+xml')
.then((doc) => {
jsonld.flatten(doc[5]['@graph'], (err, flattened) => {
console.log(flattened)
jsonld.frame(flattened, frame, (err, framed) => {
resolve(framed)
})
})
})
})

另一种方法是使用 jsonld.regiserRDFParser ( https://www.npmjs.com/package/jsonld#custom-rdf-parser ) 为 jsonld 配备适合您数据类型的自定义解析器。尽管您也可能会使用 rdflib 来完成此任务。

关于node.js - 将 RDF/XML 文件转换或转换为 JSON-LD 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com