node.js - 将 RDF/XML 文件转换或翻译成 JSON-LD 格式
问题描述
我正在尝试将 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
toapplication/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)
})
})
})
})
另一种方法是使用(https://www.npmjs.com/package/jsonld#custom-rdf-parser)jsonld
为您的数据类型配备自定义解析器。尽管您也可能会用于此任务。jsonld.regiserRDFParser
rdflib
推荐阅读
- python - 使用 Quickfix Python 创建 FIX 消息
- html - 使用具有选择器值的变量作为字符串Angular呈现html内容
- javascript - 声音结束时的 Adobe Animate HTML5
- java - Java while 循环堆栈 - 阻塞
- laravel - 如果任何一个用户接到呼叫,立即呼叫用户并断开其他呼叫
- php - apple pay in payfrort return 执行服务失败?
- discord - 如何使用 discord.py 获得加入的用户名和头像 url?
- ios - 分隔线 UITableView
- sas - 选项应该在其中有一个数据文件。它在做什么?
- reactjs - 在 React 组件中导入对象后,TypeScript 给出“对象可能未定义”错误