@faubulous/mentor-rdf-serializers 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +582 -0
- package/dist/base-serializer.d.ts +63 -0
- package/dist/base-serializer.d.ts.map +1 -0
- package/dist/base-serializer.js +144 -0
- package/dist/base-serializer.js.map +1 -0
- package/dist/base-token-formatter.d.ts +225 -0
- package/dist/base-token-formatter.d.ts.map +1 -0
- package/dist/base-token-formatter.js +521 -0
- package/dist/base-token-formatter.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonld/serializer.d.ts +99 -0
- package/dist/jsonld/serializer.d.ts.map +1 -0
- package/dist/jsonld/serializer.js +282 -0
- package/dist/jsonld/serializer.js.map +1 -0
- package/dist/n3/formatter.d.ts +105 -0
- package/dist/n3/formatter.d.ts.map +1 -0
- package/dist/n3/formatter.js +444 -0
- package/dist/n3/formatter.js.map +1 -0
- package/dist/n3/serializer.d.ts +103 -0
- package/dist/n3/serializer.d.ts.map +1 -0
- package/dist/n3/serializer.js +134 -0
- package/dist/n3/serializer.js.map +1 -0
- package/dist/nquads/formatter.d.ts +44 -0
- package/dist/nquads/formatter.d.ts.map +1 -0
- package/dist/nquads/formatter.js +116 -0
- package/dist/nquads/formatter.js.map +1 -0
- package/dist/nquads/serializer.d.ts +38 -0
- package/dist/nquads/serializer.d.ts.map +1 -0
- package/dist/nquads/serializer.js +70 -0
- package/dist/nquads/serializer.js.map +1 -0
- package/dist/ntriples/formatter.d.ts +44 -0
- package/dist/ntriples/formatter.d.ts.map +1 -0
- package/dist/ntriples/formatter.js +116 -0
- package/dist/ntriples/formatter.js.map +1 -0
- package/dist/ntriples/serializer.d.ts +38 -0
- package/dist/ntriples/serializer.d.ts.map +1 -0
- package/dist/ntriples/serializer.js +79 -0
- package/dist/ntriples/serializer.js.map +1 -0
- package/dist/sorting/index.d.ts +5 -0
- package/dist/sorting/index.d.ts.map +1 -0
- package/dist/sorting/index.js +5 -0
- package/dist/sorting/index.js.map +1 -0
- package/dist/sorting/strategies.d.ts +46 -0
- package/dist/sorting/strategies.d.ts.map +1 -0
- package/dist/sorting/strategies.js +259 -0
- package/dist/sorting/strategies.js.map +1 -0
- package/dist/sparql/formatter.d.ts +103 -0
- package/dist/sparql/formatter.d.ts.map +1 -0
- package/dist/sparql/formatter.js +764 -0
- package/dist/sparql/formatter.js.map +1 -0
- package/dist/token-serializer.d.ts +96 -0
- package/dist/token-serializer.d.ts.map +1 -0
- package/dist/token-serializer.js +456 -0
- package/dist/token-serializer.js.map +1 -0
- package/dist/trig/formatter.d.ts +99 -0
- package/dist/trig/formatter.d.ts.map +1 -0
- package/dist/trig/formatter.js +418 -0
- package/dist/trig/formatter.js.map +1 -0
- package/dist/trig/serializer.d.ts +39 -0
- package/dist/trig/serializer.d.ts.map +1 -0
- package/dist/trig/serializer.js +170 -0
- package/dist/trig/serializer.js.map +1 -0
- package/dist/turtle/formatter.d.ts +56 -0
- package/dist/turtle/formatter.d.ts.map +1 -0
- package/dist/turtle/formatter.js +325 -0
- package/dist/turtle/formatter.js.map +1 -0
- package/dist/turtle/serializer.d.ts +87 -0
- package/dist/turtle/serializer.d.ts.map +1 -0
- package/dist/turtle/serializer.js +343 -0
- package/dist/turtle/serializer.js.map +1 -0
- package/dist/types.d.ts +323 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +157 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +446 -0
- package/dist/utils.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Quad } from '@rdfjs/types';
|
|
2
|
+
import type { ISerializer, Rdf12Quad, SerializationResult, SerializerOptions, RdfSyntax as RdfSyntaxType } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* JSON-LD specific options.
|
|
5
|
+
*/
|
|
6
|
+
export interface JsonLdSerializerOptions extends SerializerOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Whether to use @type shorthand instead of rdf:type.
|
|
9
|
+
* Default: true
|
|
10
|
+
*/
|
|
11
|
+
useTypeShorthand?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether to use @id shorthand instead of full IRI objects.
|
|
14
|
+
* Default: true
|
|
15
|
+
*/
|
|
16
|
+
useIdShorthand?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to compact arrays with single items.
|
|
19
|
+
* Default: true
|
|
20
|
+
*/
|
|
21
|
+
compactArrays?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to embed @context in the output.
|
|
24
|
+
* Default: true
|
|
25
|
+
*/
|
|
26
|
+
embedContext?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* JSON indentation spaces (default: 2).
|
|
29
|
+
*/
|
|
30
|
+
jsonIndent?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Serializer for JSON-LD format.
|
|
34
|
+
*
|
|
35
|
+
* JSON-LD is a JSON-based format for Linked Data that can be used
|
|
36
|
+
* both as RDF and as plain JSON.
|
|
37
|
+
*
|
|
38
|
+
* Supports RDF 1.2 features including:
|
|
39
|
+
* - Triple terms via @id references
|
|
40
|
+
* - Base direction in language tags
|
|
41
|
+
*
|
|
42
|
+
* @see https://www.w3.org/TR/json-ld11/
|
|
43
|
+
*/
|
|
44
|
+
export declare class JsonLdSerializer implements ISerializer {
|
|
45
|
+
readonly syntax: RdfSyntaxType;
|
|
46
|
+
/**
|
|
47
|
+
* Serializes a single quad to JSON-LD format.
|
|
48
|
+
*/
|
|
49
|
+
serializeQuad(quad: Quad | Rdf12Quad, options?: JsonLdSerializerOptions): string;
|
|
50
|
+
/**
|
|
51
|
+
* Serializes multiple quads to JSON-LD format.
|
|
52
|
+
*/
|
|
53
|
+
serialize(quads: Iterable<Quad | Rdf12Quad>, options?: JsonLdSerializerOptions): string;
|
|
54
|
+
/**
|
|
55
|
+
* Formats quads to JSON-LD with detailed result.
|
|
56
|
+
*/
|
|
57
|
+
format(quads: Iterable<Quad | Rdf12Quad>, options?: JsonLdSerializerOptions): SerializationResult;
|
|
58
|
+
/**
|
|
59
|
+
* Builds the @context object from prefixes.
|
|
60
|
+
*/
|
|
61
|
+
private buildContext;
|
|
62
|
+
/**
|
|
63
|
+
* Builds a graph node containing all quads.
|
|
64
|
+
*/
|
|
65
|
+
private buildGraph;
|
|
66
|
+
/**
|
|
67
|
+
* Builds the content of a graph (array of nodes).
|
|
68
|
+
*/
|
|
69
|
+
private buildGraphContent;
|
|
70
|
+
/**
|
|
71
|
+
* Builds a JSON-LD node from a subject and its quads.
|
|
72
|
+
*/
|
|
73
|
+
private buildNode;
|
|
74
|
+
/**
|
|
75
|
+
* Builds a JSON-LD value from an RDF term.
|
|
76
|
+
*/
|
|
77
|
+
private buildValue;
|
|
78
|
+
/**
|
|
79
|
+
* Builds a JSON-LD literal value.
|
|
80
|
+
*/
|
|
81
|
+
private buildLiteralValue;
|
|
82
|
+
/**
|
|
83
|
+
* Builds a JSON-LD representation of a triple term (RDF 1.2).
|
|
84
|
+
*/
|
|
85
|
+
private buildTripleTermValue;
|
|
86
|
+
/**
|
|
87
|
+
* Compacts an IRI using prefixes.
|
|
88
|
+
*/
|
|
89
|
+
private compactIri;
|
|
90
|
+
/**
|
|
91
|
+
* Extracts the IRI value from a graph term.
|
|
92
|
+
*/
|
|
93
|
+
private extractIri;
|
|
94
|
+
/**
|
|
95
|
+
* Gets merged options with defaults.
|
|
96
|
+
*/
|
|
97
|
+
private getOptions;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/jsonld/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,IAAI,EAAQ,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EACR,WAAW,EACX,SAAS,EAET,mBAAmB,EACnB,iBAAiB,EAEjB,SAAS,IAAI,aAAa,EAC7B,MAAM,aAAa,CAAC;AAmBrB;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAC9D;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAiBD;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAChD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAoB;IAElD;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,MAAM;IAIhF;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,MAAM;IAsDvF;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,mBAAmB;IAMjG;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,SAAS;IA4DjB;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,UAAU;CAWrB"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { RdfSyntax } from '../types.js';
|
|
2
|
+
import { findPrefix, groupQuadsByGraph, groupQuadsBySubject, mergeOptions, parseLanguageTag, RDF_NAMESPACE, RDF_TYPE, sortQuads, XSD_BOOLEAN, XSD_DECIMAL, XSD_DOUBLE, XSD_INTEGER, XSD_STRING } from '../utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Serializer for JSON-LD format.
|
|
5
|
+
*
|
|
6
|
+
* JSON-LD is a JSON-based format for Linked Data that can be used
|
|
7
|
+
* both as RDF and as plain JSON.
|
|
8
|
+
*
|
|
9
|
+
* Supports RDF 1.2 features including:
|
|
10
|
+
* - Triple terms via @id references
|
|
11
|
+
* - Base direction in language tags
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.w3.org/TR/json-ld11/
|
|
14
|
+
*/
|
|
15
|
+
export class JsonLdSerializer {
|
|
16
|
+
syntax = RdfSyntax.JsonLd;
|
|
17
|
+
/**
|
|
18
|
+
* Serializes a single quad to JSON-LD format.
|
|
19
|
+
*/
|
|
20
|
+
serializeQuad(quad, options) {
|
|
21
|
+
return this.serialize([quad], options);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Serializes multiple quads to JSON-LD format.
|
|
25
|
+
*/
|
|
26
|
+
serialize(quads, options) {
|
|
27
|
+
const opts = this.getOptions(options);
|
|
28
|
+
const quadArray = Array.from(quads);
|
|
29
|
+
if (quadArray.length === 0) {
|
|
30
|
+
return '{}';
|
|
31
|
+
}
|
|
32
|
+
// Sort if requested
|
|
33
|
+
const sortedQuads = opts.sort ? sortQuads(quadArray) : quadArray;
|
|
34
|
+
// Group by graph first
|
|
35
|
+
const graphGroups = groupQuadsByGraph(sortedQuads);
|
|
36
|
+
// Build JSON-LD structure
|
|
37
|
+
const result = {};
|
|
38
|
+
// Add @context if prefixes are provided
|
|
39
|
+
if (opts.embedContext && Object.keys(opts.prefixes).length > 0) {
|
|
40
|
+
result['@context'] = this.buildContext(opts);
|
|
41
|
+
}
|
|
42
|
+
// Check if we have multiple graphs
|
|
43
|
+
const hasNamedGraphs = Array.from(graphGroups.keys()).some(k => k !== '');
|
|
44
|
+
if (hasNamedGraphs) {
|
|
45
|
+
// Dataset with named graphs
|
|
46
|
+
const graphs = [];
|
|
47
|
+
for (const [graphKey, graphQuads] of graphGroups) {
|
|
48
|
+
const graphNode = this.buildGraph(graphQuads, opts);
|
|
49
|
+
if (graphKey !== '') {
|
|
50
|
+
graphNode['@id'] = this.extractIri(graphQuads[0].graph);
|
|
51
|
+
}
|
|
52
|
+
graphs.push(graphNode);
|
|
53
|
+
}
|
|
54
|
+
result['@graph'] = graphs.length === 1 && !opts.compactArrays ? graphs : graphs;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Single default graph
|
|
58
|
+
const defaultGraphQuads = graphGroups.get('') || [];
|
|
59
|
+
const graphContent = this.buildGraphContent(defaultGraphQuads, opts);
|
|
60
|
+
if (graphContent.length === 1 && opts.compactArrays) {
|
|
61
|
+
Object.assign(result, graphContent[0]);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
result['@graph'] = graphContent;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const indent = opts.jsonIndent ?? 2;
|
|
68
|
+
return JSON.stringify(result, null, opts.prettyPrint ? indent : undefined);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Formats quads to JSON-LD with detailed result.
|
|
72
|
+
*/
|
|
73
|
+
format(quads, options) {
|
|
74
|
+
return {
|
|
75
|
+
output: this.serialize(quads, options)
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Builds the @context object from prefixes.
|
|
80
|
+
*/
|
|
81
|
+
buildContext(opts) {
|
|
82
|
+
const context = {};
|
|
83
|
+
for (const [prefix, namespace] of Object.entries(opts.prefixes)) {
|
|
84
|
+
context[prefix] = namespace;
|
|
85
|
+
}
|
|
86
|
+
return context;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Builds a graph node containing all quads.
|
|
90
|
+
*/
|
|
91
|
+
buildGraph(quads, opts) {
|
|
92
|
+
const content = this.buildGraphContent(quads, opts);
|
|
93
|
+
return {
|
|
94
|
+
'@graph': content
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Builds the content of a graph (array of nodes).
|
|
99
|
+
*/
|
|
100
|
+
buildGraphContent(quads, opts) {
|
|
101
|
+
const subjectGroups = groupQuadsBySubject(quads);
|
|
102
|
+
const nodes = [];
|
|
103
|
+
for (const [_subjectKey, subjectQuads] of subjectGroups) {
|
|
104
|
+
const node = this.buildNode(subjectQuads[0].subject, subjectQuads, opts);
|
|
105
|
+
nodes.push(node);
|
|
106
|
+
}
|
|
107
|
+
return nodes;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Builds a JSON-LD node from a subject and its quads.
|
|
111
|
+
*/
|
|
112
|
+
buildNode(subject, quads, opts) {
|
|
113
|
+
const node = {};
|
|
114
|
+
// Add @id for named nodes and blank nodes
|
|
115
|
+
if (subject.termType === 'NamedNode') {
|
|
116
|
+
node['@id'] = this.compactIri(subject.value, opts);
|
|
117
|
+
}
|
|
118
|
+
else if (subject.termType === 'BlankNode') {
|
|
119
|
+
node['@id'] = `_:${subject.value}`;
|
|
120
|
+
}
|
|
121
|
+
else if (subject.termType === 'TripleTerm') {
|
|
122
|
+
// Handle RDF 1.2 triple term subjects
|
|
123
|
+
// JSON-LD doesn't directly support this, so we represent as reified statement
|
|
124
|
+
const tt = subject;
|
|
125
|
+
node['@type'] = this.compactIri(`${RDF_NAMESPACE}Statement`, opts);
|
|
126
|
+
node[this.compactIri(`${RDF_NAMESPACE}subject`, opts)] =
|
|
127
|
+
this.buildValue(tt.subject, opts);
|
|
128
|
+
node[this.compactIri(`${RDF_NAMESPACE}predicate`, opts)] =
|
|
129
|
+
this.buildValue(tt.predicate, opts);
|
|
130
|
+
node[this.compactIri(`${RDF_NAMESPACE}object`, opts)] =
|
|
131
|
+
this.buildValue(tt.object, opts);
|
|
132
|
+
}
|
|
133
|
+
// Group properties
|
|
134
|
+
const properties = new Map();
|
|
135
|
+
for (const quad of quads) {
|
|
136
|
+
const predKey = quad.predicate.value;
|
|
137
|
+
if (!properties.has(predKey)) {
|
|
138
|
+
properties.set(predKey, []);
|
|
139
|
+
}
|
|
140
|
+
properties.get(predKey).push(quad);
|
|
141
|
+
}
|
|
142
|
+
// Build properties
|
|
143
|
+
for (const [predicateIri, propQuads] of properties) {
|
|
144
|
+
const values = propQuads.map(q => this.buildValue(q.object, opts));
|
|
145
|
+
// Use @type shorthand for rdf:type
|
|
146
|
+
if (opts.useTypeShorthand && predicateIri === RDF_TYPE) {
|
|
147
|
+
const types = values.map(v => {
|
|
148
|
+
if (typeof v === 'object' && v !== null && '@id' in v) {
|
|
149
|
+
return v['@id'];
|
|
150
|
+
}
|
|
151
|
+
return v;
|
|
152
|
+
}).filter((v) => typeof v === 'string');
|
|
153
|
+
node['@type'] = opts.compactArrays && types.length === 1 ? types[0] : types;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const propName = this.compactIri(predicateIri, opts);
|
|
157
|
+
node[propName] = opts.compactArrays && values.length === 1
|
|
158
|
+
? values[0]
|
|
159
|
+
: values;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return node;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Builds a JSON-LD value from an RDF term.
|
|
166
|
+
*/
|
|
167
|
+
buildValue(term, opts) {
|
|
168
|
+
switch (term.termType) {
|
|
169
|
+
case 'NamedNode':
|
|
170
|
+
if (opts.useIdShorthand) {
|
|
171
|
+
return { '@id': this.compactIri(term.value, opts) };
|
|
172
|
+
}
|
|
173
|
+
return { '@id': term.value };
|
|
174
|
+
case 'BlankNode':
|
|
175
|
+
return { '@id': `_:${term.value}` };
|
|
176
|
+
case 'Literal':
|
|
177
|
+
return this.buildLiteralValue(term, opts);
|
|
178
|
+
case 'TripleTerm':
|
|
179
|
+
return this.buildTripleTermValue(term, opts);
|
|
180
|
+
default:
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Builds a JSON-LD literal value.
|
|
186
|
+
*/
|
|
187
|
+
buildLiteralValue(literal, opts) {
|
|
188
|
+
const datatype = literal.datatype?.value;
|
|
189
|
+
const language = literal.language;
|
|
190
|
+
// Language-tagged literal
|
|
191
|
+
if (language) {
|
|
192
|
+
const parsed = parseLanguageTag(language);
|
|
193
|
+
const result = {
|
|
194
|
+
'@value': literal.value,
|
|
195
|
+
'@language': parsed.language
|
|
196
|
+
};
|
|
197
|
+
if (parsed.direction) {
|
|
198
|
+
result['@direction'] = parsed.direction;
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
// Native JSON types
|
|
203
|
+
if (datatype === XSD_BOOLEAN) {
|
|
204
|
+
return literal.value === 'true' || literal.value === '1';
|
|
205
|
+
}
|
|
206
|
+
if (datatype === XSD_INTEGER) {
|
|
207
|
+
const num = parseInt(literal.value, 10);
|
|
208
|
+
if (!isNaN(num)) {
|
|
209
|
+
return num;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (datatype === XSD_DOUBLE || datatype === XSD_DECIMAL) {
|
|
213
|
+
const num = parseFloat(literal.value);
|
|
214
|
+
if (!isNaN(num)) {
|
|
215
|
+
return num;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Plain string (xsd:string is default)
|
|
219
|
+
if (!datatype || datatype === XSD_STRING) {
|
|
220
|
+
return literal.value;
|
|
221
|
+
}
|
|
222
|
+
// Typed literal
|
|
223
|
+
return {
|
|
224
|
+
'@value': literal.value,
|
|
225
|
+
'@type': this.compactIri(datatype, opts)
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Builds a JSON-LD representation of a triple term (RDF 1.2).
|
|
230
|
+
*/
|
|
231
|
+
buildTripleTermValue(tripleTerm, opts) {
|
|
232
|
+
// JSON-LD 1.1 doesn't have native triple term support,
|
|
233
|
+
// but we can represent it as a reified statement
|
|
234
|
+
const result = {
|
|
235
|
+
'@type': this.compactIri(`${RDF_NAMESPACE}Statement`, opts)
|
|
236
|
+
};
|
|
237
|
+
result[this.compactIri(`${RDF_NAMESPACE}subject`, opts)] =
|
|
238
|
+
this.buildValue(tripleTerm.subject, opts);
|
|
239
|
+
result[this.compactIri(`${RDF_NAMESPACE}predicate`, opts)] =
|
|
240
|
+
this.buildValue(tripleTerm.predicate, opts);
|
|
241
|
+
result[this.compactIri(`${RDF_NAMESPACE}object`, opts)] =
|
|
242
|
+
this.buildValue(tripleTerm.object, opts);
|
|
243
|
+
return result;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Compacts an IRI using prefixes.
|
|
247
|
+
*/
|
|
248
|
+
compactIri(iri, opts) {
|
|
249
|
+
const prefixMatch = findPrefix(iri, opts.prefixes);
|
|
250
|
+
if (prefixMatch) {
|
|
251
|
+
return `${prefixMatch.prefix}:${prefixMatch.localName}`;
|
|
252
|
+
}
|
|
253
|
+
return iri;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Extracts the IRI value from a graph term.
|
|
257
|
+
*/
|
|
258
|
+
extractIri(term) {
|
|
259
|
+
if (term.termType === 'NamedNode') {
|
|
260
|
+
return term.value;
|
|
261
|
+
}
|
|
262
|
+
if (term.termType === 'BlankNode') {
|
|
263
|
+
return `_:${term.value}`;
|
|
264
|
+
}
|
|
265
|
+
return '';
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Gets merged options with defaults.
|
|
269
|
+
*/
|
|
270
|
+
getOptions(options) {
|
|
271
|
+
const base = mergeOptions(options);
|
|
272
|
+
return {
|
|
273
|
+
...base,
|
|
274
|
+
useTypeShorthand: options?.useTypeShorthand ?? true,
|
|
275
|
+
useIdShorthand: options?.useIdShorthand ?? true,
|
|
276
|
+
compactArrays: options?.compactArrays ?? true,
|
|
277
|
+
embedContext: options?.embedContext ?? true,
|
|
278
|
+
jsonIndent: options?.jsonIndent ?? 2
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/jsonld/serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { IToken } from 'chevrotain';
|
|
2
|
+
import type { IRdfFormatter, SerializationResult, TokenSerializerOptions, RdfSyntax as RdfSyntaxType } from '../types.js';
|
|
3
|
+
import { BaseTokenFormatter, type BaseFormatterContext, type BaseFormatterOptions } from '../base-token-formatter.js';
|
|
4
|
+
/**
|
|
5
|
+
* N3-specific formatting options.
|
|
6
|
+
*/
|
|
7
|
+
export interface N3FormatterOptions extends BaseFormatterOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Use lowercase for @prefix and @base.
|
|
10
|
+
* Default: true
|
|
11
|
+
*/
|
|
12
|
+
lowercaseDirectives?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Put opening braces on the same line.
|
|
15
|
+
* Default: true
|
|
16
|
+
*/
|
|
17
|
+
sameBraceLine?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Internal formatting context for N3.
|
|
21
|
+
*/
|
|
22
|
+
interface N3FormatterContext extends BaseFormatterContext {
|
|
23
|
+
opts: Required<N3FormatterOptions>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Formatter for Notation3 (N3).
|
|
27
|
+
*
|
|
28
|
+
* N3 extends Turtle with formulas (graph literals), implications (`=>`),
|
|
29
|
+
* reverse implications (`<=`), quick variables, and other features.
|
|
30
|
+
* Uses the scope stack for both formula braces (curly) and blank node
|
|
31
|
+
* brackets, replacing the manual `formulaDepth` / `blankNodeDepth` counters.
|
|
32
|
+
*
|
|
33
|
+
* @see https://www.w3.org/TeamSubmission/n3/
|
|
34
|
+
*/
|
|
35
|
+
export declare class N3Formatter extends BaseTokenFormatter<N3FormatterContext, N3FormatterOptions> implements IRdfFormatter {
|
|
36
|
+
readonly syntax: RdfSyntaxType;
|
|
37
|
+
private lexer;
|
|
38
|
+
/**
|
|
39
|
+
* Formats an N3 document.
|
|
40
|
+
*/
|
|
41
|
+
formatFromText(input: string, options?: N3FormatterOptions): SerializationResult;
|
|
42
|
+
/**
|
|
43
|
+
* Formats from already-parsed tokens.
|
|
44
|
+
*/
|
|
45
|
+
formatFromTokens(tokens: IToken[], options?: N3FormatterOptions & TokenSerializerOptions): SerializationResult;
|
|
46
|
+
format(input: string, options?: N3FormatterOptions): SerializationResult;
|
|
47
|
+
protected getOptions(options?: N3FormatterOptions): Required<N3FormatterOptions>;
|
|
48
|
+
protected createContext(opts: Required<N3FormatterOptions>): N3FormatterContext;
|
|
49
|
+
protected formatTokenValue(token: IToken, opts: Required<N3FormatterOptions>): string;
|
|
50
|
+
/**
|
|
51
|
+
* Handles comment tokens.
|
|
52
|
+
*/
|
|
53
|
+
private handleN3Comment;
|
|
54
|
+
/**
|
|
55
|
+
* Handles opening curly brace (formula start).
|
|
56
|
+
* Uses the scope stack to track formula nesting.
|
|
57
|
+
*/
|
|
58
|
+
private handleN3OpenCurly;
|
|
59
|
+
/**
|
|
60
|
+
* Handles closing curly brace (formula end).
|
|
61
|
+
* Pops the curly scope.
|
|
62
|
+
*/
|
|
63
|
+
private handleN3CloseCurly;
|
|
64
|
+
/**
|
|
65
|
+
* Handles opening bracket tokens ([ for blank nodes, ( for collections).
|
|
66
|
+
*/
|
|
67
|
+
private handleN3OpenBracket;
|
|
68
|
+
/**
|
|
69
|
+
* Handles closing bracket tokens (] for blank nodes, ) for collections).
|
|
70
|
+
*/
|
|
71
|
+
private handleN3CloseBracket;
|
|
72
|
+
/**
|
|
73
|
+
* Handles period (statement terminator).
|
|
74
|
+
*/
|
|
75
|
+
private handleN3Period;
|
|
76
|
+
/**
|
|
77
|
+
* Handles semicolon (predicate separator).
|
|
78
|
+
* Always adds extra indent for continuation.
|
|
79
|
+
*/
|
|
80
|
+
private handleN3Semicolon;
|
|
81
|
+
/**
|
|
82
|
+
* Handles comma (object separator).
|
|
83
|
+
*/
|
|
84
|
+
private handleN3Comma;
|
|
85
|
+
/**
|
|
86
|
+
* Handles N3 implication operator =>.
|
|
87
|
+
*/
|
|
88
|
+
private handleN3Implication;
|
|
89
|
+
/**
|
|
90
|
+
* Handles N3 reverse implication operator <=.
|
|
91
|
+
*/
|
|
92
|
+
private handleN3ReverseImplication;
|
|
93
|
+
/**
|
|
94
|
+
* Handles PREFIX/BASE IRI completion.
|
|
95
|
+
*/
|
|
96
|
+
private handleN3PrefixIri;
|
|
97
|
+
/**
|
|
98
|
+
* Handles token spacing.
|
|
99
|
+
* N3 additionally suppresses space after opening curly braces.
|
|
100
|
+
*/
|
|
101
|
+
private handleN3TokenSpacing;
|
|
102
|
+
private formatTokens;
|
|
103
|
+
}
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/n3/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EACR,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,IAAI,aAAa,EAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC5B,MAAM,4BAA4B,CAAC;AAMpC;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC5D;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,UAAU,kBAAmB,SAAQ,oBAAoB;IACrD,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;CACtC;AAMD;;;;;;;;;GASG;AACH,qBAAa,WACT,SAAQ,kBAAkB,CAAC,kBAAkB,EAAE,kBAAkB,CACjE,YAAW,aAAa;IAExB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAgB;IAC9C,OAAO,CAAC,KAAK,CAAiB;IAM9B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,mBAAmB;IAYhF;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,sBAAsB,GAAG,mBAAmB;IAM9G,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,mBAAmB;IAQxE,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;IAUhF,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,kBAAkB;IAO/E,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,MAAM;IAwBrF;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IASlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,YAAY;CAyJvB"}
|