@openhps/rdf 0.1.8 → 0.1.9

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 (46) hide show
  1. package/dist/cjs/service/SPARQLDataDriver.d.ts +4 -10
  2. package/dist/cjs/service/SPARQLDataDriver.js +2 -78
  3. package/dist/cjs/service/SPARQLDataDriver.js.map +1 -1
  4. package/dist/cjs/service/SPARQLDriverBase.d.ts +20 -0
  5. package/dist/cjs/service/SPARQLDriverBase.js +90 -0
  6. package/dist/cjs/service/SPARQLDriverBase.js.map +1 -0
  7. package/dist/cjs/service/SPARQLGenerator.js +15 -1
  8. package/dist/cjs/service/SPARQLGenerator.js.map +1 -1
  9. package/dist/cjs/service/index.d.ts +1 -0
  10. package/dist/cjs/service/index.js +1 -0
  11. package/dist/cjs/service/index.js.map +1 -1
  12. package/dist/esm/service/SPARQLDataDriver.d.ts +4 -10
  13. package/dist/esm/service/SPARQLDataDriver.js +3 -79
  14. package/dist/esm/service/SPARQLDataDriver.js.map +1 -1
  15. package/dist/esm/service/SPARQLDriverBase.d.ts +20 -0
  16. package/dist/esm/service/SPARQLDriverBase.js +86 -0
  17. package/dist/esm/service/SPARQLDriverBase.js.map +1 -0
  18. package/dist/esm/service/SPARQLGenerator.js +15 -1
  19. package/dist/esm/service/SPARQLGenerator.js.map +1 -1
  20. package/dist/esm/service/index.d.ts +1 -0
  21. package/dist/esm/service/index.js +1 -0
  22. package/dist/esm/service/index.js.map +1 -1
  23. package/dist/types/service/SPARQLDataDriver.d.ts +4 -10
  24. package/dist/types/service/SPARQLDriverBase.d.ts +20 -0
  25. package/dist/types/service/index.d.ts +1 -0
  26. package/dist/web/openhps-rdf.all.es.js +115 -72
  27. package/dist/web/openhps-rdf.all.es.js.map +1 -1
  28. package/dist/web/openhps-rdf.all.es.min.js +1 -1
  29. package/dist/web/openhps-rdf.all.es.min.js.map +1 -1
  30. package/dist/web/openhps-rdf.all.js +115 -72
  31. package/dist/web/openhps-rdf.all.js.map +1 -1
  32. package/dist/web/openhps-rdf.all.min.js +1 -1
  33. package/dist/web/openhps-rdf.all.min.js.map +1 -1
  34. package/dist/web/openhps-rdf.sparql.es.js +114 -72
  35. package/dist/web/openhps-rdf.sparql.es.js.map +1 -1
  36. package/dist/web/openhps-rdf.sparql.es.min.js +1 -1
  37. package/dist/web/openhps-rdf.sparql.es.min.js.map +1 -1
  38. package/dist/web/openhps-rdf.sparql.js +114 -72
  39. package/dist/web/openhps-rdf.sparql.js.map +1 -1
  40. package/dist/web/openhps-rdf.sparql.min.js +1 -1
  41. package/dist/web/openhps-rdf.sparql.min.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/service/SPARQLDataDriver.ts +6 -95
  44. package/src/service/SPARQLDriverBase.ts +112 -0
  45. package/src/service/SPARQLGenerator.ts +15 -1
  46. package/src/service/index.ts +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openhps/rdf",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Open Hybrid Positioning System",
5
5
  "author": "Maxim Van de Wynckel",
6
6
  "license": "Apache-2.0",
@@ -1,25 +1,15 @@
1
- import {
2
- DataServiceOptions,
3
- FilterQuery,
4
- FindOptions,
5
- Constructor,
6
- MemoryQueryEvaluator,
7
- DataServiceDriver,
8
- } from '@openhps/core';
9
- import { DataFactory, Store } from 'n3';
10
- import { IriString, RDFSerializer, UrlString } from '../rdf';
1
+ import { FilterQuery, Constructor } from '@openhps/core';
2
+ import { Store } from 'n3';
3
+ import { IriString, UrlString } from '../rdf';
11
4
  import SparqlClient from 'sparql-http-client';
12
- import { rdf } from '../vocab';
13
- import { SPARQLGenerator } from './SPARQLGenerator';
5
+ import { SPARQLDriverBase, SPARQLDriverOptions } from './SPARQLDriverBase';
14
6
 
15
- export class SPARQLDataDriver<T> extends DataServiceDriver<IriString, T> {
7
+ export class SPARQLDataDriver<T> extends SPARQLDriverBase<T> {
16
8
  protected options: SPARQLDataDriverOptions;
17
9
  protected client: SparqlClient;
18
- protected generator: SPARQLGenerator<T>;
19
10
 
20
11
  constructor(dataType?: Constructor<T>, options?: SPARQLDataDriverOptions) {
21
12
  super(dataType, options);
22
- this.generator = new SPARQLGenerator(this.dataType, this.options.baseUri);
23
13
  this.once('build', this._onBuild.bind(this));
24
14
  }
25
15
 
@@ -36,30 +26,6 @@ export class SPARQLDataDriver<T> extends DataServiceDriver<IriString, T> {
36
26
  });
37
27
  }
38
28
 
39
- findByUID(id: IriString): Promise<T> {
40
- return new Promise((resolve, reject) => {
41
- const identifierMember = RDFSerializer.getUriMetadata(this.dataType);
42
- this.findOne({
43
- [identifierMember.key]: id,
44
- } as any)
45
- .then(resolve)
46
- .catch(reject);
47
- });
48
- }
49
-
50
- findOne(query?: FilterQuery<T>, options: FindOptions = {}): Promise<T> {
51
- return new Promise((resolve, reject) => {
52
- this.findAll(query, {
53
- limit: 1,
54
- sort: options.sort,
55
- })
56
- .then((results) => {
57
- resolve(results[0]);
58
- })
59
- .catch(reject);
60
- });
61
- }
62
-
63
29
  protected findAllSerialized(query?: FilterQuery<T>): Promise<Store> {
64
30
  return new Promise((resolve, reject) => {
65
31
  this.client.query
@@ -77,60 +43,6 @@ export class SPARQLDataDriver<T> extends DataServiceDriver<IriString, T> {
77
43
  });
78
44
  }
79
45
 
80
- findAll(query?: FilterQuery<T>, options: FindOptions = {}): Promise<T[]> {
81
- return new Promise((resolve, reject) => {
82
- this.findAllSerialized(query)
83
- .then((store) => {
84
- if (store.size === 0) {
85
- return resolve([]);
86
- }
87
- const subjects = store
88
- .getSubjects(DataFactory.namedNode(rdf.type), null, null)
89
- .filter((subject) => subject.termType === 'NamedNode');
90
- let data: T[] = subjects.map((subject) =>
91
- RDFSerializer.deserializeFromStore(subject as any, store),
92
- );
93
- if (options.sort) {
94
- data = data
95
- .sort((a, b) =>
96
- options.sort
97
- .map((s) => {
98
- const res1 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
99
- const res2 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
100
- if (typeof res1 === 'number') {
101
- return res1 - res2;
102
- } else if (typeof res1 === 'string') {
103
- return res1.localeCompare(res2);
104
- } else {
105
- return 0;
106
- }
107
- })
108
- .reduce((a, b) => a + b),
109
- )
110
- .slice(0, options.limit);
111
- }
112
- resolve(data);
113
- })
114
- .catch(reject);
115
- });
116
- }
117
-
118
- count(query?: FilterQuery<T>): Promise<number> {
119
- return new Promise((resolve, reject) => {
120
- this.findAllSerialized(query)
121
- .then((store) => {
122
- if (store.size === 0) {
123
- return resolve(0);
124
- }
125
- const subjects = store
126
- .getSubjects(DataFactory.namedNode(rdf.type), null, null)
127
- .filter((subject) => subject.termType === 'NamedNode');
128
- resolve(subjects.length);
129
- })
130
- .catch(reject);
131
- });
132
- }
133
-
134
46
  insert(_: IriString, object: T): Promise<T> {
135
47
  return new Promise((resolve, reject) => {
136
48
  this.client.query
@@ -170,13 +82,12 @@ export class SPARQLDataDriver<T> extends DataServiceDriver<IriString, T> {
170
82
  }
171
83
  }
172
84
 
173
- export interface SPARQLDataDriverOptions extends DataServiceOptions {
85
+ export interface SPARQLDataDriverOptions extends SPARQLDriverOptions {
174
86
  endpointUrl: UrlString;
175
87
  storeUrl?: UrlString;
176
88
  updateUrl?: UrlString;
177
89
  headers?: HeadersInit;
178
90
  user?: string;
179
91
  password?: string;
180
- baseUri?: IriString;
181
92
  operation?: 'get' | 'postUrlencoded' | 'postDirect';
182
93
  }
@@ -0,0 +1,112 @@
1
+ import {
2
+ DataServiceOptions,
3
+ FilterQuery,
4
+ FindOptions,
5
+ Constructor,
6
+ MemoryQueryEvaluator,
7
+ DataServiceDriver,
8
+ } from '@openhps/core';
9
+ import { DataFactory, Store } from 'n3';
10
+ import { IriString, RDFSerializer } from '../rdf';
11
+ import { rdf } from '../vocab';
12
+ import { SPARQLGenerator } from './SPARQLGenerator';
13
+
14
+ export abstract class SPARQLDriverBase<T> extends DataServiceDriver<IriString, T> {
15
+ protected options: SPARQLDriverOptions;
16
+ protected generator: SPARQLGenerator<T>;
17
+
18
+ constructor(dataType?: Constructor<T>, options?: SPARQLDriverOptions) {
19
+ super(dataType, options);
20
+ this.generator = new SPARQLGenerator(this.dataType, this.options.baseUri);
21
+ }
22
+
23
+ findByUID(id: IriString): Promise<T> {
24
+ return new Promise((resolve, reject) => {
25
+ const identifierMember = RDFSerializer.getUriMetadata(this.dataType);
26
+ this.findOne({
27
+ [identifierMember.key]: id,
28
+ } as any)
29
+ .then(resolve)
30
+ .catch(reject);
31
+ });
32
+ }
33
+
34
+ findOne(query?: FilterQuery<T>, options: FindOptions = {}): Promise<T> {
35
+ return new Promise((resolve, reject) => {
36
+ this.findAll(query, {
37
+ limit: 1,
38
+ sort: options.sort,
39
+ })
40
+ .then((results) => {
41
+ resolve(results[0]);
42
+ })
43
+ .catch(reject);
44
+ });
45
+ }
46
+
47
+ protected abstract findAllSerialized(query?: FilterQuery<T>): Promise<Store>;
48
+
49
+ findAll(query?: FilterQuery<T>, options: FindOptions = {}): Promise<T[]> {
50
+ return new Promise((resolve, reject) => {
51
+ this.findAllSerialized(query)
52
+ .then((store) => {
53
+ if (store.size === 0) {
54
+ return resolve([]);
55
+ }
56
+ const subjects = store
57
+ .getSubjects(DataFactory.namedNode(rdf.type), null, null)
58
+ .filter((subject) => subject.termType === 'NamedNode');
59
+ let data: T[] = subjects
60
+ .map((subject) => RDFSerializer.deserializeFromStore(subject as any, store))
61
+ .filter((data) => data.constructor.name === this.dataType.name) as T[];
62
+ if (options.sort) {
63
+ data = data
64
+ .sort((a, b) =>
65
+ options.sort
66
+ .map((s) => {
67
+ const res1 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
68
+ const res2 = MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
69
+ if (typeof res1 === 'number') {
70
+ return res1 - res2;
71
+ } else if (typeof res1 === 'string') {
72
+ return res1.localeCompare(res2);
73
+ } else {
74
+ return 0;
75
+ }
76
+ })
77
+ .reduce((a, b) => a + b),
78
+ )
79
+ .slice(0, options.limit);
80
+ }
81
+ resolve(data);
82
+ })
83
+ .catch(reject);
84
+ });
85
+ }
86
+
87
+ count(query?: FilterQuery<T>): Promise<number> {
88
+ return new Promise((resolve, reject) => {
89
+ this.findAllSerialized(query)
90
+ .then((store) => {
91
+ if (store.size === 0) {
92
+ return resolve(0);
93
+ }
94
+ const subjects = store
95
+ .getSubjects(DataFactory.namedNode(rdf.type), null, null)
96
+ .filter((subject) => subject.termType === 'NamedNode');
97
+ resolve(subjects.length);
98
+ })
99
+ .catch(reject);
100
+ });
101
+ }
102
+
103
+ abstract insert(_: IriString, object: T): Promise<T>;
104
+
105
+ abstract delete(id: IriString): Promise<void>;
106
+
107
+ abstract deleteAll(query?: FilterQuery<T>): Promise<void>;
108
+ }
109
+
110
+ export interface SPARQLDriverOptions extends DataServiceOptions {
111
+ baseUri?: IriString;
112
+ }
@@ -491,7 +491,21 @@ export class SPARQLGenerator<T> {
491
491
  // result = result && !Array.from(value).includes(subquery[selector]);
492
492
  break;
493
493
  case '$elemMatch':
494
- patterns.push(...this.createQuery(subquery[selector], dataType));
494
+ patterns.push({
495
+ type: 'group',
496
+ patterns: [
497
+ {
498
+ type: 'bgp',
499
+ triples: [
500
+ {
501
+ subject: DataFactory.variable('subject'),
502
+ predicate: DataFactory.namedNode(predicate),
503
+ object: DataFactory.namedNode(this.baseUri + 'dataobject_mvdewync'),
504
+ },
505
+ ],
506
+ },
507
+ ],
508
+ });
495
509
  break;
496
510
  }
497
511
  return patterns;
@@ -1,2 +1,3 @@
1
1
  export * from './SPARQLDataDriver';
2
2
  export * from './SPARQLGenerator';
3
+ export * from './SPARQLDriverBase';