首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RDF/XML文件转换为JSON-LD格式

将RDF/XML文件转换为JSON-LD格式
EN

Stack Overflow用户
提问于 2019-01-05 01:46:35
回答 1查看 1.2K关注 0票数 1

我正在尝试将RDF/XML格式的文档解析为JSON-LD,以便对其进行框架构建。全部使用Node.js,不使用任何web服务API(这是一种不太常见的解决方案)。

我觉得我就快做到了,但至少可以说,我目前的方法感觉很笨拙。将图放入rdflib存储中,然后再次查询它,会得到一个奇怪的响应,其中包含一些头文件,而图中没有实际的上下文。因此,中间有doc[5]['@graph']的东西。

代码语言:javascript
复制
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文档?

EN

回答 1

Stack Overflow用户

发布于 2019-02-25 12:50:24

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

代码语言:javascript
复制
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来完成此任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54043762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档