-
Notifications
You must be signed in to change notification settings - Fork 307
Expand file tree
/
Copy pathparse.js
More file actions
86 lines (78 loc) · 2.37 KB
/
parse.js
File metadata and controls
86 lines (78 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
exports.parseHandler = parseHandler;
exports.convertToTurtle = convertToTurtle;
var N3 = require('n3');
var jsonld = require('jsonld');
var async = require('async');
var debug = require('./debug').parse;
function parseHandler(req, res, next) {
convertToTurtle(req.text, req, function(err, result) {
if (!err) {
req.convertedText = result;
} else {
debug("Error parsing request: " + err);
}
return next();
});
}
function convertToTurtle(rawDocument, req,
convertCallback) {
if (req.is('application/ld+json') ||
req.is('application/nquads') || req.is('application/n-quads')) {
var contentType = req.get('content-type').split(';')[0].trim();
parse(rawDocument, contentType, convertCallback);
} else {
convertCallback(null, rawDocument);
}
}
function parse(rawDocument, contentType, convertCallback) {
var n3Parser = N3.Parser();
var n3Writer;
var triples = [];
var prefixes = {};
if (contentType === 'application/ld+json') {
var jsonDocument;
try {
jsonDocument = JSON.parse(rawDocument);
} catch (err) {
convertCallback(err, null);
}
jsonld.toRDF(jsonDocument, {
format: 'application/nquads'
}, nquadCallback);
} else if (contentType === 'application/nquads' ||
contentType === 'application/n-quads') {
nquadCallback(null, rawDocument);
} else {
convertCallback(new Error("Wrong content type"), null);
}
function nquadCallback(err, nquads) {
if (err) {
debug("Error parsing nquads: " + err);
convertCallback(err, null);
}
try {
n3Parser.parse(nquads, tripleCallback, prefixCallback);
} catch (err) {
convertCallback(err, null);
}
}
function tripleCallback(err, triple, prefixes) {
if (err) {
convertCallback(err, null);
}
if (triple) {
triples.push(triple);
} else {
n3Writer = N3.Writer({
prefixes: prefixes
});
for (var i = 0; i < triples.length; i++) {
n3Writer.addTriple(triples[i]);
}
n3Writer.end(convertCallback);
}
}
function prefixCallback(prefix, iri) {
prefixes[prefix] = iri;
}
}