Skip to content

Commit 327c78e

Browse files
committed
dev: revised roles and patterns submission
1 parent fdc178c commit 327c78e

File tree

1 file changed

+129
-35
lines changed

1 file changed

+129
-35
lines changed

data-model.d.ts

Lines changed: 129 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
/* Data Model Interfaces */
22
/* https://rdf.js.org/data-model-spec/ */
33

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+
416
/**
517
* Contains an Iri, RDF blank Node, RDF literal, variable name, default graph, or a quad
618
* @see NamedNode
@@ -58,7 +70,7 @@ export interface BlankNode {
5870
/**
5971
* An RDF literal, containing a string with an optional language tag and/or datatype.
6072
*/
61-
export interface Literal {
73+
export interface Literal<Datatype extends Role.Datatype=Role.Datatype> {
6274
/**
6375
* Contains the constant "Literal".
6476
*/
@@ -76,7 +88,7 @@ export interface Literal {
7688
/**
7789
* A NamedNode whose IRI represents the datatype of the literal.
7890
*/
79-
datatype: NamedNode;
91+
datatype: Datatype;
8092

8193
/**
8294
* @param other The term to compare with.
@@ -127,38 +139,98 @@ export interface DefaultGraph {
127139
equals(other: Term | null | undefined): boolean;
128140
}
129141

142+
130143
/**
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
135145
*/
136-
export type Quad_Subject = NamedNode | BlankNode | Quad | Variable;
146+
export type TermPattern = Variable | null;
147+
137148

138149
/**
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
142151
*/
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+
144175

145176
/**
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
151178
*/
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+
153202

154203
/**
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
160206
*/
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;
162234

163235
/**
164236
* An RDF quad, taking any Term in its positions, containing the subject, predicate, object and graph terms.
@@ -175,22 +247,18 @@ export interface BaseQuad {
175247

176248
/**
177249
* The subject.
178-
* @see Quad_Subject
179250
*/
180251
subject: Term;
181252
/**
182253
* The predicate.
183-
* @see Quad_Predicate
184254
*/
185255
predicate: Term;
186256
/**
187257
* The object.
188-
* @see Quad_Object
189258
*/
190259
object: Term;
191260
/**
192261
* The named graph.
193-
* @see Quad_Graph
194262
*/
195263
graph: Term;
196264

@@ -204,33 +272,59 @@ export interface BaseQuad {
204272
/**
205273
* An RDF quad, containing the subject, predicate, object and graph terms.
206274
*/
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 {
208279
/**
209280
* The subject.
210281
* @see Quad_Subject
211282
*/
212-
subject: Quad_Subject;
283+
subject: Role.Subject<RdfMode>;
213284
/**
214285
* The predicate.
215286
* @see Quad_Predicate
216287
*/
217-
predicate: Quad_Predicate;
288+
predicate: Role.Predicate<RdfMode>;
218289
/**
219290
* The object.
220291
* @see Quad_Object
221292
*/
222-
object: Quad_Object;
293+
object: Role.Object<RdfMode, LiteralDataype>;
223294
/**
224295
* The named graph.
225296
* @see Quad_Graph
226297
*/
227-
graph: Quad_Graph;
298+
graph: Role.Graph<RdfMode>;
299+
}
228300

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+
> {
229308
/**
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
232311
*/
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>;
234328
}
235329

236330
/**

0 commit comments

Comments
 (0)