Open
Description
Running the code below logs an equivalent of this RDF-star (notice that 2nd and 3rd quads are missing the 4th "graph" element):
<http://foo/bob> <http://foo/knows> <http://foo/alice> <http://foo/graphid> .
<<<http://foo/bob> <http://foo/knows> <http://foo/alice> <http://foo/graphid>>> <http://foo/accordingTo> <http://foo/alice> .
<http://foo/bob> <http://foo/claims> <<<http://foo/bob> <http://foo/knows> <http://foo/alice> <http://foo/graphid>>> .
But it seems that this RDF-star is expected:
<http://foo/bob> <http://foo/knows> <http://foo/alice> <http://foo/graphid> .
<<<http://foo/bob> <http://foo/knows> <http://foo/alice> <http://foo/graphid>>> <http://foo/accordingTo> <http://foo/alice> <http://foo/graphid> .
<http://foo/bob> <http://foo/claims> <<<http://foo/bob> <http://foo/knows> <http://foo/alice> <http://foo/graphid>>> <http://foo/graphid> .
const { Readable } = require('stream');
const { JsonLdParser } = require('jsonld-streaming-parser');
// This is example 6 from https://json-ld.github.io/json-ld-star/#example-reversing-annotations
// modified by wrapping everything into a "@graph"
const document = {
"@context": {
"@base": "http://foo/",
"@vocab": "http://foo/",
"accordingTo": {"@type": "@id"},
"claimedBy": {"@reverse": "http://foo/claims", "@type": "@id"}
},
"@id": "graphid",
"@graph": {
"@id": "bob",
"knows": {
"@id": "alice",
"@annotation": {
"accordingTo": "alice",
"claimedBy": "bob"
}
}
}
};
const input = new Readable.from([ JSON.stringify(document) ]);
const parser = (new JsonLdParser()).import(input);
parser.on('data', (quad) => {
console.log(quad);
});
new Promise((resolve, reject) => {
parser.on('end', resolve);
parser.on('error', reject);
});
Exact output
Quad {
termType: 'Quad',
value: '',
subject: NamedNode { termType: 'NamedNode', value: 'http://foo/bob' },
predicate: NamedNode { termType: 'NamedNode', value: 'http://foo/knows' },
object: NamedNode { termType: 'NamedNode', value: 'http://foo/alice' },
graph: NamedNode { termType: 'NamedNode', value: 'http://foo/graphid' }
}
Quad {
termType: 'Quad',
value: '',
subject: Quad {
termType: 'Quad',
value: '',
subject: NamedNode { termType: 'NamedNode', value: 'http://foo/bob' },
predicate: NamedNode { termType: 'NamedNode', value: 'http://foo/knows' },
object: NamedNode { termType: 'NamedNode', value: 'http://foo/alice' },
graph: NamedNode { termType: 'NamedNode', value: 'http://foo/graphid' }
},
predicate: NamedNode { termType: 'NamedNode', value: 'http://foo/accordingTo' },
object: NamedNode { termType: 'NamedNode', value: 'http://foo/alice' },
graph: DefaultGraph { termType: 'DefaultGraph', value: '' }
}
Quad {
termType: 'Quad',
value: '',
subject: NamedNode { termType: 'NamedNode', value: 'http://foo/bob' },
predicate: NamedNode { termType: 'NamedNode', value: 'http://foo/claims' },
object: Quad {
termType: 'Quad',
value: '',
subject: NamedNode { termType: 'NamedNode', value: 'http://foo/bob' },
predicate: NamedNode { termType: 'NamedNode', value: 'http://foo/knows' },
object: NamedNode { termType: 'NamedNode', value: 'http://foo/alice' },
graph: NamedNode { termType: 'NamedNode', value: 'http://foo/graphid' }
},
graph: DefaultGraph { termType: 'DefaultGraph', value: '' }
}