@openhps/rdf 0.1.10 → 0.1.11
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/dist/cjs/rdf/RDFSerializer.d.ts +2 -1
- package/dist/cjs/rdf/RDFSerializer.js +47 -0
- package/dist/cjs/rdf/RDFSerializer.js.map +1 -1
- package/dist/cjs/rdf/SerializableNamedNode.d.ts +0 -2
- package/dist/cjs/rdf/SerializableNamedNode.js +1 -8
- package/dist/cjs/rdf/SerializableNamedNode.js.map +1 -1
- package/dist/cjs/rdf/types.d.ts +10 -0
- package/dist/esm/rdf/RDFSerializer.d.ts +2 -1
- package/dist/esm/rdf/RDFSerializer.js +47 -0
- package/dist/esm/rdf/RDFSerializer.js.map +1 -1
- package/dist/esm/rdf/SerializableNamedNode.d.ts +0 -2
- package/dist/esm/rdf/SerializableNamedNode.js +1 -8
- package/dist/esm/rdf/SerializableNamedNode.js.map +1 -1
- package/dist/esm/rdf/types.d.ts +10 -0
- package/dist/types/rdf/RDFSerializer.d.ts +2 -1
- package/dist/types/rdf/SerializableNamedNode.d.ts +0 -2
- package/dist/types/rdf/types.d.ts +10 -0
- package/dist/web/openhps-rdf.all.es.js +57 -17
- package/dist/web/openhps-rdf.all.es.js.map +1 -1
- package/dist/web/openhps-rdf.all.es.min.js +1 -1
- package/dist/web/openhps-rdf.all.es.min.js.map +1 -1
- package/dist/web/openhps-rdf.all.js +57 -17
- package/dist/web/openhps-rdf.all.js.map +1 -1
- package/dist/web/openhps-rdf.all.min.js +1 -1
- package/dist/web/openhps-rdf.all.min.js.map +1 -1
- package/dist/web/openhps-rdf.serialization.es.js +60 -18
- package/dist/web/openhps-rdf.serialization.es.js.map +1 -1
- package/dist/web/openhps-rdf.serialization.es.min.js +1 -1
- package/dist/web/openhps-rdf.serialization.es.min.js.map +1 -1
- package/dist/web/openhps-rdf.serialization.js +60 -18
- package/dist/web/openhps-rdf.serialization.js.map +1 -1
- package/dist/web/openhps-rdf.serialization.min.js +1 -1
- package/dist/web/openhps-rdf.serialization.min.js.map +1 -1
- package/dist/web/openhps-rdf.sparql.es.js +56 -9
- package/dist/web/openhps-rdf.sparql.es.js.map +1 -1
- package/dist/web/openhps-rdf.sparql.es.min.js +1 -1
- package/dist/web/openhps-rdf.sparql.es.min.js.map +1 -1
- package/dist/web/openhps-rdf.sparql.js +56 -9
- package/dist/web/openhps-rdf.sparql.js.map +1 -1
- package/dist/web/openhps-rdf.sparql.min.js +1 -1
- package/dist/web/openhps-rdf.sparql.min.js.map +1 -1
- package/package.json +1 -1
- package/src/rdf/RDFSerializer.ts +53 -1
- package/src/rdf/SerializableNamedNode.ts +3 -7
- package/src/rdf/types.ts +13 -0
package/package.json
CHANGED
package/src/rdf/RDFSerializer.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from '@openhps/core';
|
|
9
9
|
import { InternalRDFSerializer } from './InternalRDFSerializer';
|
|
10
10
|
import { InternalRDFDeserializer } from './InternalRDFDeserializer';
|
|
11
|
-
import { IriString, Thing } from './types';
|
|
11
|
+
import { IriString, Thing, Subject } from './types';
|
|
12
12
|
import * as N3 from 'n3';
|
|
13
13
|
import { WriterOptions as N3WriterOptions } from 'n3';
|
|
14
14
|
import { namespaces } from '../namespaces';
|
|
@@ -112,6 +112,58 @@ export class RDFSerializer extends DataSerializer {
|
|
|
112
112
|
return this.deserialize(thing);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
static serializeToSubjects<T>(data: T, baseUri?: IriString): Subject[] {
|
|
116
|
+
const quads: N3.Quad[] = RDFSerializer.serializeToQuads(data, baseUri);
|
|
117
|
+
const store = new N3.Store(quads);
|
|
118
|
+
const quadSubjects: N3.Quad_Subject[] = store.getSubjects(null, null, null);
|
|
119
|
+
/**
|
|
120
|
+
*
|
|
121
|
+
* @param quadSubject
|
|
122
|
+
*/
|
|
123
|
+
function serializePredicates(quadSubject: N3.Quad_Subject) {
|
|
124
|
+
const quadPredicates: N3.Quad_Predicate[] = store.getPredicates(quadSubject, null, null);
|
|
125
|
+
return quadPredicates
|
|
126
|
+
.map((quadPredicate) => {
|
|
127
|
+
const quadObjects: N3.Quad_Object[] = store.getObjects(quadSubject, quadPredicate, null);
|
|
128
|
+
const literals: Record<string, string[]> = quadObjects
|
|
129
|
+
.filter((obj) => obj instanceof N3.Literal)
|
|
130
|
+
.filter((obj: N3.Literal) => obj.language === '')
|
|
131
|
+
.map((obj: N3.Literal) => ({ [obj.datatype.value]: [obj.value] }))
|
|
132
|
+
.reduce((a, b) => ({ ...a, ...b }), {});
|
|
133
|
+
const langStrings: Record<string, string[]> = quadObjects
|
|
134
|
+
.filter((obj) => obj instanceof N3.Literal)
|
|
135
|
+
.filter((obj: N3.Literal) => obj.language !== '')
|
|
136
|
+
.map((obj: N3.Literal) => ({ [obj.language]: [obj.value] }))
|
|
137
|
+
.reduce((a, b) => ({ ...a, ...b }), {});
|
|
138
|
+
const namedNodes: Array<string> = quadObjects
|
|
139
|
+
.filter((obj) => obj instanceof N3.NamedNode)
|
|
140
|
+
.map((obj) => obj.value);
|
|
141
|
+
const blankNodes: Array<any | string> = quadObjects
|
|
142
|
+
.filter((obj) => obj instanceof N3.BlankNode)
|
|
143
|
+
.map((obj: N3.BlankNode) => serializePredicates(N3.DataFactory.blankNode(obj.value)));
|
|
144
|
+
return {
|
|
145
|
+
[quadPredicate.value]: {
|
|
146
|
+
namedNodes,
|
|
147
|
+
blankNodes,
|
|
148
|
+
literals,
|
|
149
|
+
langStrings,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
})
|
|
153
|
+
.reduce((a, b) => ({ ...a, ...b }), {});
|
|
154
|
+
}
|
|
155
|
+
const subjects: Subject[] = quadSubjects
|
|
156
|
+
.filter((quadSubject) => quadSubject instanceof N3.NamedNode)
|
|
157
|
+
.map((quadSubject) => {
|
|
158
|
+
return {
|
|
159
|
+
type: 'Subject',
|
|
160
|
+
url: quadSubject.value,
|
|
161
|
+
predicates: serializePredicates(quadSubject),
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
return subjects;
|
|
165
|
+
}
|
|
166
|
+
|
|
115
167
|
static serializeToQuads<T>(data: T, baseUri?: IriString): N3.Quad[] {
|
|
116
168
|
const thing =
|
|
117
169
|
(data as any)['predicates'] !== undefined ? (data as unknown as Thing) : this.serialize(data, baseUri);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SerializableObject } from '@openhps/core';
|
|
2
2
|
import * as N3 from 'n3';
|
|
3
|
-
import {
|
|
3
|
+
import { Thing } from './types';
|
|
4
4
|
|
|
5
5
|
@SerializableObject({
|
|
6
6
|
rdf: {
|
|
@@ -10,12 +10,8 @@ import { IriString, Thing } from './types';
|
|
|
10
10
|
};
|
|
11
11
|
},
|
|
12
12
|
deserializer: (thing: Thing) => {
|
|
13
|
-
return new SerializableNamedNode(thing.value
|
|
13
|
+
return new SerializableNamedNode(thing.value);
|
|
14
14
|
},
|
|
15
15
|
},
|
|
16
16
|
})
|
|
17
|
-
export class SerializableNamedNode extends N3.NamedNode {
|
|
18
|
-
constructor(uri: IriString) {
|
|
19
|
-
super(uri);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
17
|
+
export class SerializableNamedNode extends N3.NamedNode {}
|
package/src/rdf/types.ts
CHANGED
|
@@ -8,6 +8,19 @@ export type Thing = {
|
|
|
8
8
|
value: string;
|
|
9
9
|
predicates?: Record<string, (Quad_Object | Thing)[]>;
|
|
10
10
|
};
|
|
11
|
+
export type Subject = {
|
|
12
|
+
type: 'Subject';
|
|
13
|
+
url: string;
|
|
14
|
+
predicates: Record<
|
|
15
|
+
IriString,
|
|
16
|
+
Partial<{
|
|
17
|
+
literals: Record<string, string[]>;
|
|
18
|
+
langStrings: Record<LocaleString, string[]>;
|
|
19
|
+
namedNodes: Array<string>;
|
|
20
|
+
blankNodes: Array<any | string>;
|
|
21
|
+
}>
|
|
22
|
+
>;
|
|
23
|
+
};
|
|
11
24
|
export type LocaleString = 'en';
|
|
12
25
|
|
|
13
26
|
export interface RDFSerializerConfig extends DataSerializerConfig {
|