1
1
/* Data Model Interfaces */
2
2
/* https://rdf.js.org/data-model-spec/ */
3
3
4
+ /* RDF Modes allow for future expansion into other modes, e.g., "easierRDF" */
5
+
6
+ /* RDF 1.1 */
7
+ export type RdfMode_11 = 'rdf-1.1' ;
8
+
9
+ /* RDF* (rdf-star) */
10
+ export type RdfMode_star = 'rdf-star' ;
11
+
12
+ /* Modes officially supported/allowed by RDFJS */
13
+ export type AllowedRdfMode = RdfMode_11 | RdfMode_star ;
14
+
15
+
4
16
/**
5
17
* Contains an Iri, RDF blank Node, RDF literal, variable name, default graph, or a quad
6
18
* @see NamedNode
@@ -58,7 +70,7 @@ export interface BlankNode {
58
70
/**
59
71
* An RDF literal, containing a string with an optional language tag and/or datatype.
60
72
*/
61
- export interface Literal {
73
+ export interface Literal < Datatype extends Role . Datatype = Role . Datatype > {
62
74
/**
63
75
* Contains the constant "Literal".
64
76
*/
@@ -76,7 +88,7 @@ export interface Literal {
76
88
/**
77
89
* A NamedNode whose IRI represents the datatype of the literal.
78
90
*/
79
- datatype : NamedNode ;
91
+ datatype : Datatype ;
80
92
81
93
/**
82
94
* @param other The term to compare with.
@@ -127,38 +139,98 @@ export interface DefaultGraph {
127
139
equals ( other : Term | null | undefined ) : boolean ;
128
140
}
129
141
142
+
130
143
/**
131
- * The subject, which is a NamedNode, BlankNode or Variable.
132
- * @see NamedNode
133
- * @see BlankNode
134
- * @see Variable
144
+ * Type to be unioned with term types for forming role-specific pattern types
135
145
*/
136
- export type Quad_Subject = NamedNode | BlankNode | Quad | Variable ;
146
+ export type TermPattern = Variable | null ;
147
+
137
148
138
149
/**
139
- * The predicate, which is a NamedNode or Variable.
140
- * @see NamedNode
141
- * @see Variable
150
+ * Unions of Term types for the various roles they play in 'plain' RDF 1.1 Data
142
151
*/
143
- export type Quad_Predicate = NamedNode | Variable ;
152
+ export namespace Role {
153
+ export type Subject <
154
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
155
+ > = NamedNode | BlankNode | ( RdfMode extends RdfMode_star ? Quad : never ) ;
156
+
157
+ export type Predicate <
158
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
159
+ > = NamedNode ;
160
+
161
+ export type Object <
162
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
163
+ LiteralDatatype extends Datatype = Datatype ,
164
+ > = NamedNode | BlankNode | Literal < LiteralDatatype > | ( RdfMode extends RdfMode_star ? Quad : never ) ;
165
+
166
+ export type Graph <
167
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
168
+ > = DefaultGraph | NamedNode | BlankNode ;
169
+
170
+ export type Datatype <
171
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
172
+ > = NamedNode ;
173
+ }
174
+
144
175
145
176
/**
146
- * The object, which is a NamedNode, Literal, BlankNode or Variable.
147
- * @see NamedNode
148
- * @see Literal
149
- * @see BlankNode
150
- * @see Variable
177
+ * Unions of Term types for the various
151
178
*/
152
- export type Quad_Object = NamedNode | Literal | BlankNode | Quad | Variable ;
179
+ export namespace Pattern {
180
+ export type Subject <
181
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
182
+ > = Role . Subject | TermPattern ;
183
+
184
+ export type Predicate <
185
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
186
+ > = Role . Predicate | TermPattern ;
187
+
188
+ export type Object <
189
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
190
+ LiteralDatatype extends Datatype = Datatype ,
191
+ > = Role . Object | TermPattern ;
192
+
193
+ export type Graph <
194
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
195
+ > = Role . Graph | TermPattern ;
196
+
197
+ export type Datatype <
198
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
199
+ > = Role . Datatype | TermPattern ;
200
+ }
201
+
153
202
154
203
/**
155
- * The named graph, which is a DefaultGraph, NamedNode, BlankNode or Variable.
156
- * @see DefaultGraph
157
- * @see NamedNode
158
- * @see BlankNode
159
- * @see Variable
204
+ * The subject, which is a NamedNode, BlankNode or Variable.
205
+ * @deprecated Consider using one of the following types instead: @see Role.Subject or @see Pattern.Subject
160
206
*/
161
- export type Quad_Graph = DefaultGraph | NamedNode | BlankNode | Variable ;
207
+ export type Quad_Subject <
208
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
209
+ > = Role . Subject < RdfMode > | Variable ;
210
+
211
+ /**
212
+ * The predicate, which is a NamedNode or Variable.
213
+ * @deprecated Consider using one of the following types instead: @see Role.Predicate or @see Pattern.Predicate
214
+ */
215
+ export type Quad_Predicate <
216
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
217
+ > = Role . Predicate < RdfMode > | Variable ;
218
+
219
+ /**
220
+ * The object, which is a NamedNode, Literal, BlankNode or Variable.
221
+ * @deprecated Consider using one of the following types instead: @see Role.Object or @see Pattern.Object
222
+ */
223
+ export type Quad_Object <
224
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
225
+ > = Role . Object < RdfMode > | Variable ;
226
+
227
+ /**
228
+ * The named graph, which is a DefaultGraph, NamedNode, BlankNode or Variable.
229
+ * @deprecated Consider using one of the following types instead: @see Role.Graph or @see Pattern.Graph
230
+ */
231
+ export type Quad_Graph <
232
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
233
+ > = Role . Graph < RdfMode > | Variable ;
162
234
163
235
/**
164
236
* An RDF quad, taking any Term in its positions, containing the subject, predicate, object and graph terms.
@@ -175,22 +247,18 @@ export interface BaseQuad {
175
247
176
248
/**
177
249
* The subject.
178
- * @see Quad_Subject
179
250
*/
180
251
subject : Term ;
181
252
/**
182
253
* The predicate.
183
- * @see Quad_Predicate
184
254
*/
185
255
predicate : Term ;
186
256
/**
187
257
* The object.
188
- * @see Quad_Object
189
258
*/
190
259
object : Term ;
191
260
/**
192
261
* The named graph.
193
- * @see Quad_Graph
194
262
*/
195
263
graph : Term ;
196
264
@@ -204,33 +272,59 @@ export interface BaseQuad {
204
272
/**
205
273
* An RDF quad, containing the subject, predicate, object and graph terms.
206
274
*/
207
- export interface Quad extends BaseQuad {
275
+ export interface Quad <
276
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
277
+ LiteralDataype extends Role . Datatype = Role . Datatype < RdfMode >
278
+ > extends BaseQuad {
208
279
/**
209
280
* The subject.
210
281
* @see Quad_Subject
211
282
*/
212
- subject : Quad_Subject ;
283
+ subject : Role . Subject < RdfMode > ;
213
284
/**
214
285
* The predicate.
215
286
* @see Quad_Predicate
216
287
*/
217
- predicate : Quad_Predicate ;
288
+ predicate : Role . Predicate < RdfMode > ;
218
289
/**
219
290
* The object.
220
291
* @see Quad_Object
221
292
*/
222
- object : Quad_Object ;
293
+ object : Role . Object < RdfMode , LiteralDataype > ;
223
294
/**
224
295
* The named graph.
225
296
* @see Quad_Graph
226
297
*/
227
- graph : Quad_Graph ;
298
+ graph : Role . Graph < RdfMode > ;
299
+ }
228
300
301
+ /**
302
+ * An RDF quad, containing the subject, predicate, object and graph terms.
303
+ */
304
+ export interface QuadPattern <
305
+ RdfMode extends AllowedRdfMode = RdfMode_star ,
306
+ LiteralDataype extends Role . Datatype = Role . Datatype < RdfMode >
307
+ > {
229
308
/**
230
- * @param other The term to compare with .
231
- * @return True if and only if the argument is a) of the same type b) has all components equal.
309
+ * The subject .
310
+ * @see Quad_Subject
232
311
*/
233
- equals ( other : Term | null | undefined ) : boolean ;
312
+ subject : Pattern . Subject < RdfMode > ;
313
+ /**
314
+ * The predicate.
315
+ * @see Quad_Predicate
316
+ */
317
+ predicate : Pattern . Predicate < RdfMode > ;
318
+ /**
319
+ * The object.
320
+ * @see Quad_Object
321
+ */
322
+ object : Pattern . Object < RdfMode , LiteralDataype > ;
323
+ /**
324
+ * The named graph.
325
+ * @see Quad_Graph
326
+ */
327
+ graph : Pattern . Graph < RdfMode > ;
234
328
}
235
329
236
330
/**
0 commit comments