@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.
Files changed (82) hide show
  1. package/README.md +582 -0
  2. package/dist/base-serializer.d.ts +63 -0
  3. package/dist/base-serializer.d.ts.map +1 -0
  4. package/dist/base-serializer.js +144 -0
  5. package/dist/base-serializer.js.map +1 -0
  6. package/dist/base-token-formatter.d.ts +225 -0
  7. package/dist/base-token-formatter.d.ts.map +1 -0
  8. package/dist/base-token-formatter.js +521 -0
  9. package/dist/base-token-formatter.js.map +1 -0
  10. package/dist/index.d.ts +20 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +36 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/jsonld/serializer.d.ts +99 -0
  15. package/dist/jsonld/serializer.d.ts.map +1 -0
  16. package/dist/jsonld/serializer.js +282 -0
  17. package/dist/jsonld/serializer.js.map +1 -0
  18. package/dist/n3/formatter.d.ts +105 -0
  19. package/dist/n3/formatter.d.ts.map +1 -0
  20. package/dist/n3/formatter.js +444 -0
  21. package/dist/n3/formatter.js.map +1 -0
  22. package/dist/n3/serializer.d.ts +103 -0
  23. package/dist/n3/serializer.d.ts.map +1 -0
  24. package/dist/n3/serializer.js +134 -0
  25. package/dist/n3/serializer.js.map +1 -0
  26. package/dist/nquads/formatter.d.ts +44 -0
  27. package/dist/nquads/formatter.d.ts.map +1 -0
  28. package/dist/nquads/formatter.js +116 -0
  29. package/dist/nquads/formatter.js.map +1 -0
  30. package/dist/nquads/serializer.d.ts +38 -0
  31. package/dist/nquads/serializer.d.ts.map +1 -0
  32. package/dist/nquads/serializer.js +70 -0
  33. package/dist/nquads/serializer.js.map +1 -0
  34. package/dist/ntriples/formatter.d.ts +44 -0
  35. package/dist/ntriples/formatter.d.ts.map +1 -0
  36. package/dist/ntriples/formatter.js +116 -0
  37. package/dist/ntriples/formatter.js.map +1 -0
  38. package/dist/ntriples/serializer.d.ts +38 -0
  39. package/dist/ntriples/serializer.d.ts.map +1 -0
  40. package/dist/ntriples/serializer.js +79 -0
  41. package/dist/ntriples/serializer.js.map +1 -0
  42. package/dist/sorting/index.d.ts +5 -0
  43. package/dist/sorting/index.d.ts.map +1 -0
  44. package/dist/sorting/index.js +5 -0
  45. package/dist/sorting/index.js.map +1 -0
  46. package/dist/sorting/strategies.d.ts +46 -0
  47. package/dist/sorting/strategies.d.ts.map +1 -0
  48. package/dist/sorting/strategies.js +259 -0
  49. package/dist/sorting/strategies.js.map +1 -0
  50. package/dist/sparql/formatter.d.ts +103 -0
  51. package/dist/sparql/formatter.d.ts.map +1 -0
  52. package/dist/sparql/formatter.js +764 -0
  53. package/dist/sparql/formatter.js.map +1 -0
  54. package/dist/token-serializer.d.ts +96 -0
  55. package/dist/token-serializer.d.ts.map +1 -0
  56. package/dist/token-serializer.js +456 -0
  57. package/dist/token-serializer.js.map +1 -0
  58. package/dist/trig/formatter.d.ts +99 -0
  59. package/dist/trig/formatter.d.ts.map +1 -0
  60. package/dist/trig/formatter.js +418 -0
  61. package/dist/trig/formatter.js.map +1 -0
  62. package/dist/trig/serializer.d.ts +39 -0
  63. package/dist/trig/serializer.d.ts.map +1 -0
  64. package/dist/trig/serializer.js +170 -0
  65. package/dist/trig/serializer.js.map +1 -0
  66. package/dist/turtle/formatter.d.ts +56 -0
  67. package/dist/turtle/formatter.d.ts.map +1 -0
  68. package/dist/turtle/formatter.js +325 -0
  69. package/dist/turtle/formatter.js.map +1 -0
  70. package/dist/turtle/serializer.d.ts +87 -0
  71. package/dist/turtle/serializer.d.ts.map +1 -0
  72. package/dist/turtle/serializer.js +343 -0
  73. package/dist/turtle/serializer.js.map +1 -0
  74. package/dist/types.d.ts +323 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +14 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/utils.d.ts +157 -0
  79. package/dist/utils.d.ts.map +1 -0
  80. package/dist/utils.js +446 -0
  81. package/dist/utils.js.map +1 -0
  82. package/package.json +73 -0
@@ -0,0 +1,444 @@
1
+ import { RdfToken, N3Lexer } from '@faubulous/mentor-rdf-parsers';
2
+ import { RdfSyntax } from '../types.js';
3
+ import { BaseTokenFormatter, } from '../base-token-formatter.js';
4
+ // ============================================================================
5
+ // N3Formatter
6
+ // ============================================================================
7
+ /**
8
+ * Formatter for Notation3 (N3).
9
+ *
10
+ * N3 extends Turtle with formulas (graph literals), implications (`=>`),
11
+ * reverse implications (`<=`), quick variables, and other features.
12
+ * Uses the scope stack for both formula braces (curly) and blank node
13
+ * brackets, replacing the manual `formulaDepth` / `blankNodeDepth` counters.
14
+ *
15
+ * @see https://www.w3.org/TeamSubmission/n3/
16
+ */
17
+ export class N3Formatter extends BaseTokenFormatter {
18
+ syntax = RdfSyntax.N3;
19
+ lexer = new N3Lexer();
20
+ // ========================================================================
21
+ // Public API
22
+ // ========================================================================
23
+ /**
24
+ * Formats an N3 document.
25
+ */
26
+ formatFromText(input, options) {
27
+ const opts = this.getOptions(options);
28
+ const result = this.lexer.tokenize(input);
29
+ if (result.errors.length > 0) {
30
+ return { output: input };
31
+ }
32
+ const comments = result.groups?.comments ?? [];
33
+ return this.formatTokens(result.tokens, opts, comments);
34
+ }
35
+ /**
36
+ * Formats from already-parsed tokens.
37
+ */
38
+ formatFromTokens(tokens, options) {
39
+ const opts = this.getOptions(options);
40
+ return this.formatTokens(tokens, opts);
41
+ }
42
+ // Backwards-compatible alias
43
+ format(input, options) {
44
+ return this.formatFromText(input, options);
45
+ }
46
+ // ========================================================================
47
+ // BaseTokenFormatter implementations
48
+ // ========================================================================
49
+ getOptions(options) {
50
+ const base = this.mergeBaseOptions(options);
51
+ return {
52
+ ...base,
53
+ lowercaseDirectives: options?.lowercaseDirectives ?? true,
54
+ spaceBeforePunctuation: options?.spaceBeforePunctuation ?? false,
55
+ sameBraceLine: options?.sameBraceLine ?? true,
56
+ };
57
+ }
58
+ createContext(opts) {
59
+ return {
60
+ ...this.createBaseContext(),
61
+ opts,
62
+ };
63
+ }
64
+ formatTokenValue(token, opts) {
65
+ const tokenType = token.tokenType;
66
+ // Tokens marked as lowercase-only (true, false, a) stay lowercase
67
+ if (this.isLowercaseOnly(token)) {
68
+ return token.image.toLowerCase();
69
+ }
70
+ // Handle directive keywords (@prefix, @base vs PREFIX, BASE)
71
+ if (tokenType === RdfToken.TTL_PREFIX || tokenType === RdfToken.TTL_BASE) {
72
+ return opts.lowercaseDirectives ? token.image.toLowerCase() : token.image.toUpperCase().replace('@', '');
73
+ }
74
+ if (tokenType === RdfToken.PREFIX || tokenType === RdfToken.BASE) {
75
+ return opts.lowercaseDirectives ? '@' + token.image.toLowerCase() : token.image.toUpperCase();
76
+ }
77
+ return token.image;
78
+ }
79
+ // ========================================================================
80
+ // Token handlers
81
+ // ========================================================================
82
+ /**
83
+ * Handles comment tokens.
84
+ */
85
+ handleN3Comment(ctx, comment) {
86
+ const le = ctx.opts.lineEnd;
87
+ const ind = ctx.opts.indent;
88
+ if (ctx.parts.length > 0) {
89
+ if (ctx.lastNonWsToken && comment.startLine !== undefined &&
90
+ ctx.lastNonWsToken.endLine !== undefined &&
91
+ comment.startLine > ctx.lastNonWsToken.endLine) {
92
+ this.addPart(ctx, le + this.getIndent(ctx.indentLevel, ind), le, true);
93
+ ctx.lastWasNewline = true;
94
+ }
95
+ else {
96
+ this.addPart(ctx, ' ', le);
97
+ }
98
+ }
99
+ this.addPart(ctx, comment.image, le);
100
+ ctx.needsNewline = true;
101
+ ctx.needsSpace = false;
102
+ }
103
+ /**
104
+ * Handles opening curly brace (formula start).
105
+ * Uses the scope stack to track formula nesting.
106
+ */
107
+ handleN3OpenCurly(ctx) {
108
+ const le = ctx.opts.lineEnd;
109
+ const ind = ctx.opts.indent;
110
+ if (ctx.needsNewline && !ctx.opts.sameBraceLine) {
111
+ this.addPart(ctx, le + this.getIndent(ctx.indentLevel, ind), le, true);
112
+ ctx.lastWasNewline = true;
113
+ ctx.needsNewline = false;
114
+ }
115
+ else if (ctx.needsSpace && ctx.parts.length > 0) {
116
+ this.addPart(ctx, ' ', le);
117
+ }
118
+ this.addPart(ctx, '{', le);
119
+ this.pushScope(ctx, 'curly', false, false);
120
+ ctx.needsNewline = ctx.opts.prettyPrint;
121
+ ctx.needsSpace = false;
122
+ ctx.triplePosition = 0;
123
+ }
124
+ /**
125
+ * Handles closing curly brace (formula end).
126
+ * Pops the curly scope.
127
+ */
128
+ handleN3CloseCurly(ctx) {
129
+ const le = ctx.opts.lineEnd;
130
+ const ind = ctx.opts.indent;
131
+ const scope = this.currentScope(ctx);
132
+ if (scope?.type === 'curly') {
133
+ this.popScope(ctx);
134
+ }
135
+ if (ctx.opts.prettyPrint) {
136
+ this.addPart(ctx, le + this.getIndent(ctx.indentLevel, ind), le, true);
137
+ ctx.lastWasNewline = true;
138
+ }
139
+ this.addPart(ctx, '}', le);
140
+ ctx.needsSpace = true;
141
+ ctx.needsNewline = false;
142
+ }
143
+ /**
144
+ * Handles opening bracket tokens ([ for blank nodes, ( for collections).
145
+ */
146
+ handleN3OpenBracket(ctx, token) {
147
+ const le = ctx.opts.lineEnd;
148
+ const ind = ctx.opts.indent;
149
+ if (ctx.needsNewline) {
150
+ this.addPart(ctx, le + this.getIndent(ctx.indentLevel, ind), le, true);
151
+ ctx.lastWasNewline = true;
152
+ ctx.needsNewline = false;
153
+ }
154
+ else if (ctx.needsSpace && ctx.parts.length > 0) {
155
+ this.addPart(ctx, ' ', le);
156
+ }
157
+ this.addPart(ctx, token.image, le);
158
+ if (token.tokenType === RdfToken.LBRACKET) {
159
+ this.pushScope(ctx, 'bracket', false, false);
160
+ ctx.needsNewline = ctx.opts.prettyPrint;
161
+ }
162
+ ctx.needsSpace = false;
163
+ ctx.triplePosition = 0;
164
+ }
165
+ /**
166
+ * Handles closing bracket tokens (] for blank nodes, ) for collections).
167
+ */
168
+ handleN3CloseBracket(ctx, token) {
169
+ const le = ctx.opts.lineEnd;
170
+ const ind = ctx.opts.indent;
171
+ if (token.tokenType === RdfToken.RBRACKET) {
172
+ const scope = this.currentScope(ctx);
173
+ if (scope?.type === 'bracket') {
174
+ this.popScope(ctx);
175
+ if (ctx.opts.prettyPrint) {
176
+ // Align the closing ']' with the predicate that
177
+ // introduced the blank node property list. The
178
+ // scope's indentLevel is the indentation at the
179
+ // time '[' was seen (typically the subject line),
180
+ // so we add one extra indent level to reach the
181
+ // predicate indentation.
182
+ const baseIndentLevel = scope.indentLevel + 1;
183
+ this.addPart(ctx, le + this.getIndent(baseIndentLevel, ind), le, true);
184
+ ctx.lastWasNewline = true;
185
+ }
186
+ }
187
+ }
188
+ this.addPart(ctx, token.image, le);
189
+ ctx.needsSpace = true;
190
+ ctx.needsNewline = false;
191
+ }
192
+ /**
193
+ * Handles period (statement terminator).
194
+ */
195
+ handleN3Period(ctx) {
196
+ const le = ctx.opts.lineEnd;
197
+ if (ctx.opts.spaceBeforePunctuation && !ctx.inPrefix && ctx.parts.length > 0) {
198
+ this.addPart(ctx, ' ', le);
199
+ }
200
+ this.addPart(ctx, '.', le);
201
+ ctx.needsNewline = ctx.opts.prettyPrint;
202
+ ctx.needsSpace = true;
203
+ ctx.inPrefix = false;
204
+ ctx.triplePosition = 0;
205
+ ctx.lastSubject = null;
206
+ ctx.inlineStatement = false;
207
+ }
208
+ /**
209
+ * Handles semicolon (predicate separator).
210
+ * Always adds extra indent for continuation.
211
+ */
212
+ handleN3Semicolon(ctx) {
213
+ const le = ctx.opts.lineEnd;
214
+ const ind = ctx.opts.indent;
215
+ if (ctx.opts.spaceBeforePunctuation && ctx.parts.length > 0) {
216
+ this.addPart(ctx, ' ', le);
217
+ }
218
+ this.addPart(ctx, ';', le);
219
+ if (ctx.inlineStatement) {
220
+ ctx.needsNewline = false;
221
+ ctx.needsSpace = true;
222
+ }
223
+ else if (ctx.opts.prettyPrint && ctx.indentLevel > 0) {
224
+ this.addPart(ctx, le + this.getIndent(ctx.indentLevel, ind) + ind, le, true);
225
+ ctx.lastWasNewline = true;
226
+ ctx.needsNewline = false;
227
+ ctx.needsSpace = false;
228
+ }
229
+ else if (ctx.opts.prettyPrint) {
230
+ this.addPart(ctx, le + ind, le, true);
231
+ ctx.lastWasNewline = true;
232
+ ctx.needsNewline = false;
233
+ ctx.needsSpace = false;
234
+ }
235
+ else {
236
+ ctx.needsSpace = true;
237
+ }
238
+ ctx.triplePosition = 1;
239
+ }
240
+ /**
241
+ * Handles comma (object separator).
242
+ */
243
+ handleN3Comma(ctx) {
244
+ const le = ctx.opts.lineEnd;
245
+ this.addPart(ctx, ',', le);
246
+ ctx.needsSpace = true;
247
+ }
248
+ /**
249
+ * Handles N3 implication operator =>.
250
+ */
251
+ handleN3Implication(ctx) {
252
+ const le = ctx.opts.lineEnd;
253
+ if (ctx.needsSpace && ctx.parts.length > 0) {
254
+ this.addPart(ctx, ' ', le);
255
+ }
256
+ this.addPart(ctx, '=>', le);
257
+ ctx.needsSpace = true;
258
+ }
259
+ /**
260
+ * Handles N3 reverse implication operator <=.
261
+ */
262
+ handleN3ReverseImplication(ctx) {
263
+ const le = ctx.opts.lineEnd;
264
+ if (ctx.needsSpace && ctx.parts.length > 0) {
265
+ this.addPart(ctx, ' ', le);
266
+ }
267
+ this.addPart(ctx, '<=', le);
268
+ ctx.needsSpace = true;
269
+ }
270
+ /**
271
+ * Handles PREFIX/BASE IRI completion.
272
+ */
273
+ handleN3PrefixIri(ctx, value) {
274
+ const le = ctx.opts.lineEnd;
275
+ if (ctx.needsSpace && ctx.parts.length > 0) {
276
+ this.addPart(ctx, ' ', le);
277
+ }
278
+ this.addPart(ctx, value, le);
279
+ ctx.needsSpace = false;
280
+ ctx.needsNewline = ctx.opts.prettyPrint;
281
+ ctx.inPrefix = false;
282
+ }
283
+ /**
284
+ * Handles token spacing.
285
+ * N3 additionally suppresses space after opening curly braces.
286
+ */
287
+ handleN3TokenSpacing(ctx, token) {
288
+ const le = ctx.opts.lineEnd;
289
+ const ind = ctx.opts.indent;
290
+ const isDatatypeContext = token.tokenType === RdfToken.DCARET ||
291
+ ctx.lastNonWsToken?.tokenType === RdfToken.DCARET;
292
+ const isLangTag = token.tokenType === RdfToken.LANGTAG;
293
+ if (ctx.needsNewline && !isDatatypeContext && !isLangTag) {
294
+ this.addPart(ctx, le + this.getIndent(ctx.indentLevel, ind), le, true);
295
+ ctx.lastWasNewline = true;
296
+ ctx.needsNewline = false;
297
+ }
298
+ else if (ctx.needsSpace && ctx.parts.length > 0 && !isDatatypeContext && !isLangTag) {
299
+ if (ctx.lastNonWsToken && !this.isOpeningBracket(ctx.lastNonWsToken) &&
300
+ ctx.lastNonWsToken.tokenType !== RdfToken.LCURLY) {
301
+ this.addPart(ctx, ' ', le);
302
+ }
303
+ ctx.lastWasNewline = false;
304
+ }
305
+ else {
306
+ ctx.lastWasNewline = false;
307
+ }
308
+ }
309
+ // ========================================================================
310
+ // Main formatting loop
311
+ // ========================================================================
312
+ formatTokens(tokens, opts, comments = []) {
313
+ const ctx = this.createContext(opts);
314
+ const le = opts.lineEnd;
315
+ const sortedComments = [...comments].sort((a, b) => (a.startOffset ?? 0) - (b.startOffset ?? 0));
316
+ let commentIndex = 0;
317
+ for (let i = 0; i < tokens.length; i++) {
318
+ const token = tokens[i];
319
+ // Insert comments that appear before this token
320
+ while (commentIndex < sortedComments.length) {
321
+ const comment = sortedComments[commentIndex];
322
+ if ((comment.startOffset ?? 0) < (token.startOffset ?? 0)) {
323
+ this.handleN3Comment(ctx, comment);
324
+ commentIndex++;
325
+ }
326
+ else {
327
+ break;
328
+ }
329
+ }
330
+ // Skip whitespace tokens
331
+ if (token.tokenType === RdfToken.WS) {
332
+ ctx.lastToken = token;
333
+ continue;
334
+ }
335
+ // Handle comment tokens in stream
336
+ if (token.tokenType === RdfToken.COMMENT) {
337
+ this.handleN3Comment(ctx, token);
338
+ ctx.lastToken = token;
339
+ ctx.lastNonWsToken = token;
340
+ continue;
341
+ }
342
+ const value = this.formatTokenValue(token, opts);
343
+ // Track prefix declarations
344
+ if (token.tokenType === RdfToken.TTL_PREFIX || token.tokenType === RdfToken.PREFIX ||
345
+ token.tokenType === RdfToken.TTL_BASE || token.tokenType === RdfToken.BASE) {
346
+ ctx.inPrefix = true;
347
+ }
348
+ // Handle formula braces (must come before generic bracket handling)
349
+ if (token.tokenType === RdfToken.LCURLY) {
350
+ this.handleN3OpenCurly(ctx);
351
+ ctx.lastToken = token;
352
+ ctx.lastNonWsToken = token;
353
+ continue;
354
+ }
355
+ if (token.tokenType === RdfToken.RCURLY) {
356
+ this.handleN3CloseCurly(ctx);
357
+ ctx.lastToken = token;
358
+ ctx.lastNonWsToken = token;
359
+ continue;
360
+ }
361
+ // Handle N3 implications
362
+ if (token.tokenType === RdfToken.IMPLIES) {
363
+ this.handleN3Implication(ctx);
364
+ ctx.lastToken = token;
365
+ ctx.lastNonWsToken = token;
366
+ continue;
367
+ }
368
+ if (token.tokenType === RdfToken.IMPLIED_BY) {
369
+ this.handleN3ReverseImplication(ctx);
370
+ ctx.lastToken = token;
371
+ ctx.lastNonWsToken = token;
372
+ continue;
373
+ }
374
+ // Handle structural tokens
375
+ if (this.isOpeningBracket(token)) {
376
+ this.handleN3OpenBracket(ctx, token);
377
+ ctx.lastToken = token;
378
+ ctx.lastNonWsToken = token;
379
+ continue;
380
+ }
381
+ if (this.isClosingBracket(token)) {
382
+ this.handleN3CloseBracket(ctx, token);
383
+ ctx.lastToken = token;
384
+ ctx.lastNonWsToken = token;
385
+ continue;
386
+ }
387
+ if (token.tokenType === RdfToken.PERIOD) {
388
+ this.handleN3Period(ctx);
389
+ ctx.lastToken = token;
390
+ ctx.lastNonWsToken = token;
391
+ continue;
392
+ }
393
+ if (token.tokenType === RdfToken.SEMICOLON) {
394
+ this.handleN3Semicolon(ctx);
395
+ ctx.lastToken = token;
396
+ ctx.lastNonWsToken = token;
397
+ continue;
398
+ }
399
+ if (token.tokenType === RdfToken.COMMA) {
400
+ this.handleN3Comma(ctx);
401
+ ctx.lastToken = token;
402
+ ctx.lastNonWsToken = token;
403
+ continue;
404
+ }
405
+ // Handle PREFIX/BASE IRI completion
406
+ if (ctx.inPrefix && (token.tokenType === RdfToken.IRIREF || token.tokenType === RdfToken.IRIREF_ABS)) {
407
+ this.handleN3PrefixIri(ctx, value);
408
+ ctx.lastToken = token;
409
+ ctx.lastNonWsToken = token;
410
+ continue;
411
+ }
412
+ // Handle triple position tracking
413
+ if (this.isTermToken(token) && ctx.triplePosition === 0 && !ctx.inPrefix) {
414
+ if (ctx.opts.blankLinesBetweenSubjects && ctx.lastSubject !== null && token.image !== ctx.lastSubject) {
415
+ if (!ctx.needsNewline && ctx.parts.length > 0) {
416
+ this.addPart(ctx, le, le, true);
417
+ }
418
+ }
419
+ ctx.lastSubject = token.image;
420
+ this.detectInlineStatement(ctx, tokens, i, ctx.opts.indent, ctx.opts.maxLineWidth);
421
+ ctx.triplePosition++;
422
+ }
423
+ else if (this.isTermToken(token) && !ctx.inPrefix) {
424
+ ctx.triplePosition++;
425
+ if (ctx.triplePosition > 2)
426
+ ctx.triplePosition = 2;
427
+ }
428
+ // Handle spacing
429
+ this.handleN3TokenSpacing(ctx, token);
430
+ // Output the token
431
+ this.addPart(ctx, value, le);
432
+ ctx.needsSpace = true;
433
+ ctx.lastToken = token;
434
+ ctx.lastNonWsToken = token;
435
+ }
436
+ // Add trailing comments
437
+ while (commentIndex < sortedComments.length) {
438
+ this.handleN3Comment(ctx, sortedComments[commentIndex]);
439
+ commentIndex++;
440
+ }
441
+ return { output: ctx.parts.join('').trim() };
442
+ }
443
+ }
444
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/n3/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import type { Quad, Variable } from '@rdfjs/types';
2
+ import type { Rdf12Quad, SerializerOptions, SerializationResult, RdfSyntax as RdfSyntaxType } from '../types.js';
3
+ import { TurtleSerializer } from '../turtle/serializer.js';
4
+ /**
5
+ * N3-specific term representing a formula (graph literal).
6
+ */
7
+ export interface N3Formula {
8
+ termType: 'Formula';
9
+ value: string;
10
+ /** Quads contained within this formula */
11
+ quads: Array<Quad | Rdf12Quad>;
12
+ equals(other: unknown): boolean;
13
+ }
14
+ /**
15
+ * N3-specific term representing a quick variable (~var).
16
+ */
17
+ export interface N3QuickVariable {
18
+ termType: 'QuickVariable';
19
+ value: string;
20
+ equals(other: unknown): boolean;
21
+ }
22
+ /**
23
+ * Checks if a term is an N3 formula.
24
+ */
25
+ export declare function isN3Formula(term: unknown): term is N3Formula;
26
+ /**
27
+ * Checks if a term is an N3 quick variable.
28
+ */
29
+ export declare function isN3QuickVariable(term: unknown): term is N3QuickVariable;
30
+ /**
31
+ * N3-specific options extending standard serializer options.
32
+ */
33
+ export interface N3SerializerOptions extends SerializerOptions {
34
+ /**
35
+ * Whether to use the => shorthand for log:implies.
36
+ * Default: true
37
+ */
38
+ useImpliesShorthand?: boolean;
39
+ /**
40
+ * Whether to use the = shorthand for owl:sameAs.
41
+ * Default: true
42
+ */
43
+ useSameAsShorthand?: boolean;
44
+ /**
45
+ * Whether to use the @forAll and @forSome quantifiers.
46
+ * Default: true
47
+ */
48
+ useQuantifiers?: boolean;
49
+ }
50
+ /**
51
+ * Serializer for N3 (Notation3) format.
52
+ *
53
+ * N3 extends Turtle with additional features:
54
+ * - Formulas (graph literals): { ... }
55
+ * - Implications: { antecedent } => { consequent }
56
+ * - Universal quantification: @forAll :x .
57
+ * - Existential quantification: @forSome :x .
58
+ * - Quick variables: ~x
59
+ * - Built-in predicates for logic and computation
60
+ *
61
+ * @see https://w3c.github.io/N3/spec/
62
+ */
63
+ export declare class N3Serializer extends TurtleSerializer {
64
+ readonly syntax: RdfSyntaxType;
65
+ private n3Options;
66
+ /**
67
+ * The log: namespace IRI for N3 built-ins.
68
+ */
69
+ static readonly LOG_NAMESPACE = "http://www.w3.org/2000/10/swap/log#";
70
+ /**
71
+ * The log:implies predicate IRI.
72
+ */
73
+ static readonly LOG_IMPLIES: string;
74
+ /**
75
+ * The owl:sameAs predicate IRI.
76
+ */
77
+ static readonly OWL_SAMEAS = "http://www.w3.org/2002/07/owl#sameAs";
78
+ /**
79
+ * Serializes a single quad to N3 format.
80
+ */
81
+ serializeQuad(quad: Quad | Rdf12Quad, options?: N3SerializerOptions): string;
82
+ /**
83
+ * Serializes a term with N3-specific handling.
84
+ */
85
+ private serializeN3Term;
86
+ /**
87
+ * Serializes an N3 formula (graph literal).
88
+ */
89
+ private serializeFormula;
90
+ /**
91
+ * Serializes a variable (N3 supports both ?var and $var syntax).
92
+ */
93
+ protected serializeVariable(variable: Variable, _opts: Required<SerializerOptions>): string;
94
+ /**
95
+ * Gets merged N3 options with defaults.
96
+ */
97
+ private getN3Options;
98
+ /**
99
+ * Formats quads with detailed result information.
100
+ */
101
+ format(quads: Iterable<Quad | Rdf12Quad>, options?: N3SerializerOptions): SerializationResult;
102
+ }
103
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/n3/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EACR,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,IAAI,aAAa,EAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,SAAS,CAE5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAExE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC1D;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;IAC9C,SAAkB,MAAM,EAAE,aAAa,CAAgB;IAEvD,OAAO,CAAC,SAAS,CAA2B;IAE5C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,aAAa,yCAAyC;IAEtE;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,SAA0C;IAErE;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAU,0CAA0C;IAEpE;;OAEG;IACM,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IA4BrF;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;cACgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,MAAM;IAIpG;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACM,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB;CAKzG"}