Конвертировать или перевести файл RDF / XML в формат JSON-LD - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь проанализировать документ в формате RDF / XML в JSON-LD, чтобы создать его. Все они используют Node.js и не используют 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, я считаю, что должно быть более простое решение, которое могло бы привести меня от А к В.

Как я могу разобрать мой документ RDF / XML в документ JSON-LD без использования rdflib таким образом?

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете использовать 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 пользовательскими анализаторами для вашего типа данных, используя jsonld.regiserRDFParser (https://www.npmjs.com/package/jsonld#custom-rdf-parser).. Хотя вы, вероятно, также использовали бы rdflib для этой задачи.

...