@oslo-flanders/core 0.0.1-alpha.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 (67) hide show
  1. package/README.md +75 -0
  2. package/index.js +34 -0
  3. package/lib/ServiceIdentifier.d.ts +7 -0
  4. package/lib/ServiceIdentifier.js +15 -0
  5. package/lib/ServiceIdentifier.js.map +1 -0
  6. package/lib/ServiceIdentifier.ts +10 -0
  7. package/lib/enums/PropertyTypes.d.ts +5 -0
  8. package/lib/enums/PropertyTypes.js +10 -0
  9. package/lib/enums/PropertyTypes.js.map +1 -0
  10. package/lib/enums/PropertyTypes.ts +5 -0
  11. package/lib/enums/Scope.d.ts +6 -0
  12. package/lib/enums/Scope.js +11 -0
  13. package/lib/enums/Scope.js.map +1 -0
  14. package/lib/enums/Scope.ts +6 -0
  15. package/lib/interfaces/AppRunner.d.ts +15 -0
  16. package/lib/interfaces/AppRunner.js +15 -0
  17. package/lib/interfaces/AppRunner.js.map +1 -0
  18. package/lib/interfaces/AppRunner.ts +25 -0
  19. package/lib/interfaces/IConfiguration.d.ts +7 -0
  20. package/lib/interfaces/IConfiguration.js +3 -0
  21. package/lib/interfaces/IConfiguration.js.map +1 -0
  22. package/lib/interfaces/IConfiguration.ts +8 -0
  23. package/lib/interfaces/IConversionService.d.ts +10 -0
  24. package/lib/interfaces/IConversionService.js +3 -0
  25. package/lib/interfaces/IConversionService.js.map +1 -0
  26. package/lib/interfaces/IConversionService.ts +11 -0
  27. package/lib/interfaces/IGenerationService.d.ts +8 -0
  28. package/lib/interfaces/IGenerationService.js +3 -0
  29. package/lib/interfaces/IGenerationService.js.map +1 -0
  30. package/lib/interfaces/IGenerationService.ts +9 -0
  31. package/lib/interfaces/IOutputHandler.d.ts +7 -0
  32. package/lib/interfaces/IOutputHandler.js +3 -0
  33. package/lib/interfaces/IOutputHandler.js.map +1 -0
  34. package/lib/interfaces/IOutputHandler.ts +8 -0
  35. package/lib/logging/LogLevel.d.ts +5 -0
  36. package/lib/logging/LogLevel.js +5 -0
  37. package/lib/logging/LogLevel.js.map +1 -0
  38. package/lib/logging/LogLevel.ts +6 -0
  39. package/lib/logging/Logger.d.ts +19 -0
  40. package/lib/logging/Logger.js +35 -0
  41. package/lib/logging/Logger.js.map +1 -0
  42. package/lib/logging/Logger.ts +41 -0
  43. package/lib/logging/VoidLogger.d.ts +7 -0
  44. package/lib/logging/VoidLogger.js +28 -0
  45. package/lib/logging/VoidLogger.js.map +1 -0
  46. package/lib/logging/VoidLogger.ts +15 -0
  47. package/lib/logging/WinstonLogger.d.ts +7 -0
  48. package/lib/logging/WinstonLogger.js +39 -0
  49. package/lib/logging/WinstonLogger.js.map +1 -0
  50. package/lib/logging/WinstonLogger.ts +33 -0
  51. package/lib/utils/N3StoreFunctions.d.ts +136 -0
  52. package/lib/utils/N3StoreFunctions.js +257 -0
  53. package/lib/utils/N3StoreFunctions.js.map +1 -0
  54. package/lib/utils/N3StoreFunctions.ts +268 -0
  55. package/lib/utils/fetchFileOrUrl.d.ts +2 -0
  56. package/lib/utils/fetchFileOrUrl.js +23 -0
  57. package/lib/utils/fetchFileOrUrl.js.map +1 -0
  58. package/lib/utils/fetchFileOrUrl.ts +19 -0
  59. package/lib/utils/namespaces.d.ts +24 -0
  60. package/lib/utils/namespaces.js +36 -0
  61. package/lib/utils/namespaces.js.map +1 -0
  62. package/lib/utils/namespaces.ts +41 -0
  63. package/lib/utils/uniqueId.d.ts +1 -0
  64. package/lib/utils/uniqueId.js +14 -0
  65. package/lib/utils/uniqueId.js.map +1 -0
  66. package/lib/utils/uniqueId.ts +11 -0
  67. package/package.json +56 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.WinstonLogger = void 0;
13
+ const inversify_1 = require("inversify");
14
+ const winston_1 = require("winston");
15
+ const { combine, colorize, printf } = winston_1.format;
16
+ const Logger_1 = require("./Logger");
17
+ const messageFormat = printf(({ level, message, messageTimestamp }) => `${new Date(Date.now()).toISOString()} ${level}: ${message}`);
18
+ let WinstonLogger = class WinstonLogger extends Logger_1.BaseLogger {
19
+ constructor(logLevel) {
20
+ super();
21
+ this.logger = (0, winston_1.createLogger)({
22
+ level: logLevel,
23
+ transports: [
24
+ new winston_1.transports.Console(),
25
+ ],
26
+ format: combine(colorize(), messageFormat),
27
+ });
28
+ }
29
+ log(level, message) {
30
+ this.logger.log(level, message);
31
+ return this;
32
+ }
33
+ };
34
+ WinstonLogger = __decorate([
35
+ (0, inversify_1.injectable)(),
36
+ __metadata("design:paramtypes", [String])
37
+ ], WinstonLogger);
38
+ exports.WinstonLogger = WinstonLogger;
39
+ //# sourceMappingURL=WinstonLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WinstonLogger.js","sourceRoot":"","sources":["WinstonLogger.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAuC;AAEvC,qCAA2D;AAC3D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,gBAAM,CAAC;AAE7C,qCAAsC;AAGtC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;AAG9H,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,mBAAU;IAG3C,YAAmB,QAAkB;QACnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAA,sBAAY,EAAC;YACzB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE;gBACV,IAAI,oBAAU,CAAC,OAAO,EAAE;aACzB;YACD,MAAM,EAAE,OAAO,CACb,QAAQ,EAAE,EACV,aAAa,CACd;SACF,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAC,KAAe,EAAE,OAAe;QACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AArBY,aAAa;IADzB,IAAA,sBAAU,GAAE;;GACA,aAAa,CAqBzB;AArBY,sCAAa","sourcesContent":["import { injectable } from 'inversify';\r\nimport type { Logger as WinstonInnerLogger } from 'winston';\r\nimport { transports, createLogger, format } from 'winston';\r\nconst { combine, colorize, printf } = format;\r\n\r\nimport { BaseLogger } from './Logger';\r\nimport { LogLevel } from './LogLevel';\r\n\r\nconst messageFormat = printf(({ level, message, messageTimestamp }) => `${new Date(Date.now()).toISOString()} ${level}: ${message}`);\r\n\r\n@injectable()\r\nexport class WinstonLogger extends BaseLogger {\r\n private readonly logger: WinstonInnerLogger;\r\n\r\n public constructor(logLevel: LogLevel) {\r\n super();\r\n this.logger = createLogger({\r\n level: logLevel,\r\n transports: [\r\n new transports.Console(),\r\n ],\r\n format: combine(\r\n colorize(),\r\n messageFormat,\r\n ),\r\n });\r\n }\r\n\r\n public log(level: LogLevel, message: string): this {\r\n this.logger.log(level, message);\r\n return this;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,33 @@
1
+ import { injectable } from 'inversify';
2
+ import type { Logger as WinstonInnerLogger } from 'winston';
3
+ import { transports, createLogger, format } from 'winston';
4
+ const { combine, colorize, printf } = format;
5
+
6
+ import { BaseLogger } from './Logger';
7
+ import { LogLevel } from './LogLevel';
8
+
9
+ const messageFormat = printf(({ level, message, messageTimestamp }) => `${new Date(Date.now()).toISOString()} ${level}: ${message}`);
10
+
11
+ @injectable()
12
+ export class WinstonLogger extends BaseLogger {
13
+ private readonly logger: WinstonInnerLogger;
14
+
15
+ public constructor(logLevel: LogLevel) {
16
+ super();
17
+ this.logger = createLogger({
18
+ level: logLevel,
19
+ transports: [
20
+ new transports.Console(),
21
+ ],
22
+ format: combine(
23
+ colorize(),
24
+ messageFormat,
25
+ ),
26
+ });
27
+ }
28
+
29
+ public log(level: LogLevel, message: string): this {
30
+ this.logger.log(level, message);
31
+ return this;
32
+ }
33
+ }
@@ -0,0 +1,136 @@
1
+ import type * as RDF from '@rdfjs/types';
2
+ import * as N3 from 'n3';
3
+ /**
4
+ * Given a local file, it is parsed and added to an in-memory quad store
5
+ * @param fileOrUrl Local path of the input file
6
+ * @returns A N3 quad store
7
+ */
8
+ export declare function createN3Store(file: string): Promise<N3.Store>;
9
+ /**
10
+ * Find the subject of the statement that matches the given subject, predicate and object
11
+ * @param statementSubject The subject to match the statement subject
12
+ * @param statementPredicate The predicate to match the statement predicate
13
+ * @param statementObject The object to match the statement object
14
+ * @param store An N3 quad store
15
+ * @returns an RDF.Term or undefined if none found
16
+ */
17
+ export declare function getTargetStatementId(statementSubject: RDF.Term, statementPredicate: RDF.Term, statementObject: RDF.Term, store: N3.Store): RDF.Term | undefined;
18
+ /**
19
+ * For a given subject, the quad store is queried to find the assigned URI
20
+ * @param subject The subject for which the assigned URI is to be retrieved
21
+ * @param store The quad store
22
+ * @returns An RDF.NamedNode or undefined if not found
23
+ */
24
+ export declare function getAssignedUri(subject: RDF.Term, store: N3.Store): RDF.Term | undefined;
25
+ /**
26
+ * Finds the assigned URI in rdf:Statements
27
+ * @param subject The statement subject
28
+ * @param predicate The statement predicate
29
+ * @param object The statement object for which the assigned URI must be found
30
+ * @param store A N3 quad store
31
+ * @returns An RDF.Term or undefined if not found
32
+ */
33
+ export declare function getAssignedUriViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, store: N3.Store): RDF.Term | undefined;
34
+ /**
35
+ * Find all rdfs:labels for a given subject
36
+ * @param subject The RDF.Term to find the rdfs:labels for
37
+ * @param store A N3 quad store
38
+ * @returns An array of RDF.Literals
39
+ */
40
+ export declare function getLabels(subject: RDF.Term, store: N3.Store): RDF.Literal[];
41
+ /**
42
+ * Finds the rdfs:label whose language tag matches the given language
43
+ * @param subject The RDF.Term to find the rdfs:label for
44
+ * @param store A N3 quad store
45
+ * @param language A language tag
46
+ * @returns An RDF.Literal or undefined if not found
47
+ */
48
+ export declare function getLabel(subject: RDF.Term, store: N3.Store, language?: string): RDF.Literal | undefined;
49
+ /**
50
+ * Finds the rdfs:label for an RDF.Term in rdf:Statements
51
+ * @param subject The statement subject
52
+ * @param predicate The statement predicate
53
+ * @param object The statement object for which the label must be found
54
+ * @param store A N3 quad store
55
+ * @param language A language tag
56
+ * @returns An RDF.Literal or undefined if not found
57
+ */
58
+ export declare function getLabelViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, store: N3.Store, language: string): RDF.Literal | undefined;
59
+ /**
60
+ * Find all rdfs:comments for a given subject
61
+ * @param subject The RDF.Term to find the rdfs:comments for
62
+ * @param store A N3 quad store
63
+ * @returns An array of RDF.Literals
64
+ */
65
+ export declare function getDefinitions(subject: RDF.Term, store: N3.Store): RDF.Literal[];
66
+ /**
67
+ * Finds the rdfs:comment whose language tag matches the given language
68
+ * @param subject The RDF.Term to find the rdfs:comment for
69
+ * @param store A N3 quad store
70
+ * @param language A language tag
71
+ * @returns An RDF.Literal or undefined if not found
72
+ */
73
+ export declare function getDefinition(subject: RDF.Term, store: N3.Store, language?: string): RDF.Literal | undefined;
74
+ /**
75
+ * Finds the rdfs:comment for an RDF.Term in rdf:Statements
76
+ * @param subject The statement subject
77
+ * @param predicate The statement predicate
78
+ * @param object The statement object for which the definition must be found
79
+ * @param store A N3 quad store
80
+ * @param language A language tag
81
+ * @returns An RDF.Literal or undefined if not found
82
+ */
83
+ export declare function getDefinitionViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, store: N3.Store, language: string): RDF.Literal | undefined;
84
+ /**
85
+ * Finds all the rdfs:subClassOf of a given RDF.Term
86
+ * @param subject the RDF.Term to find the parents of
87
+ * @param store A N3 quad store
88
+ * @returns An array of RDF.Terms
89
+ */
90
+ export declare function getParentsOfClass(subject: RDF.Term, store: N3.Store): RDF.Term[];
91
+ /**
92
+ * Finds the rdfs:subPropertyOf of a given RDF.Term
93
+ * @param subject The RDF.Term to find the parent of
94
+ * @param store A N3 quad store
95
+ * @returns An RDF.Term or undefined if not found
96
+ */
97
+ export declare function getParentOfProperty(subject: RDF.Term, store: N3.Store): RDF.Term | undefined;
98
+ /**
99
+ * Finds the rdfs:range of a given RDF.Term
100
+ * @param subject The RDF.Term to find the range of
101
+ * @param store A N3 quad store
102
+ * @returns An RDF.Term or undefined if not found
103
+ */
104
+ export declare function getRange(subject: RDF.Term, store: N3.Store): RDF.Term | undefined;
105
+ /**
106
+ * Finds the rdfs:domain of a given RDF.Term
107
+ * @param subject The RDF.Term to find the domain of
108
+ * @param store A N3 quad store
109
+ * @returns An RDF.Term or undefined if not found
110
+ */
111
+ export declare function getDomain(subject: RDF.Term, store: N3.Store): RDF.Term | undefined;
112
+ /**
113
+ * Finds all the vann:usageNotes of a given RDF.Term
114
+ * @param subject The RDF.Term to find the usage notes for
115
+ * @param store A N3 quad store
116
+ * @returns An array of RDF.Literals
117
+ */
118
+ export declare function getUsageNotes(subject: RDF.Term, store: N3.Store): RDF.Literal[];
119
+ /**
120
+ * Finds the vann:usageNote of which the language tag matches the given language
121
+ * @param subject The RDF.Term to find the usage note for
122
+ * @param store A N3 quad store
123
+ * @param language A language tag
124
+ * @returns An RDF.Literal or undefined if not found
125
+ */
126
+ export declare function getUsageNote(subject: RDF.Term, store: N3.Store, language?: string): RDF.Literal | undefined;
127
+ /**
128
+ * Finds the vann:usageNote for an RDF.Term in rdf:Statements
129
+ * @param subject The statement subject
130
+ * @param predicate The statement predicate
131
+ * @param object The statement object for which the usage note must be found
132
+ * @param store A N3 quad store
133
+ * @param language A language tag
134
+ * @returns An RDF.Literal or undefined if not found
135
+ */
136
+ export declare function getUsageNoteViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, store: N3.Store, language: string): RDF.Literal | undefined;
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getUsageNoteViaStatements = exports.getUsageNote = exports.getUsageNotes = exports.getDomain = exports.getRange = exports.getParentOfProperty = exports.getParentsOfClass = exports.getDefinitionViaStatements = exports.getDefinition = exports.getDefinitions = exports.getLabelViaStatements = exports.getLabel = exports.getLabels = exports.getAssignedUriViaStatements = exports.getAssignedUri = exports.getTargetStatementId = exports.createN3Store = void 0;
30
+ const N3 = __importStar(require("n3"));
31
+ const rdf_parse_1 = __importDefault(require("rdf-parse"));
32
+ const fetchFileOrUrl_1 = require("./fetchFileOrUrl");
33
+ const namespaces_1 = require("./namespaces");
34
+ /**
35
+ * Given a local file, it is parsed and added to an in-memory quad store
36
+ * @param fileOrUrl Local path of the input file
37
+ * @returns A N3 quad store
38
+ */
39
+ async function createN3Store(file) {
40
+ const store = new N3.Store();
41
+ const buffer = await (0, fetchFileOrUrl_1.fetchFileOrUrl)(file);
42
+ const textStream = require('streamify-string')(buffer.toString());
43
+ return new Promise((resolve, reject) => {
44
+ rdf_parse_1.default.parse(textStream, { path: file })
45
+ .on('data', (quad) => store.addQuad(quad))
46
+ .on('error', (error) => reject(error))
47
+ .on('end', () => resolve(store));
48
+ });
49
+ }
50
+ exports.createN3Store = createN3Store;
51
+ /**
52
+ * Find the subject of the statement that matches the given subject, predicate and object
53
+ * @param statementSubject The subject to match the statement subject
54
+ * @param statementPredicate The predicate to match the statement predicate
55
+ * @param statementObject The object to match the statement object
56
+ * @param store An N3 quad store
57
+ * @returns an RDF.Term or undefined if none found
58
+ */
59
+ function getTargetStatementId(statementSubject, statementPredicate, statementObject, store) {
60
+ const statementIds = store.getSubjects(namespaces_1.ns.rdf('type'), namespaces_1.ns.rdf('Statement'), null);
61
+ const statementSubjectPredicateSubjects = store.getSubjects(namespaces_1.ns.rdf('subject'), statementSubject, null);
62
+ const statementPredicatePredicateSubjects = store.getSubjects(namespaces_1.ns.rdf('predicate'), statementPredicate, null);
63
+ const statementObjectPredicateSubjects = store.getSubjects(namespaces_1.ns.rdf('object'), statementObject, null);
64
+ const targetIds = statementIds
65
+ .filter(x => statementSubjectPredicateSubjects.some(y => y.value === x.value))
66
+ .filter(x => statementPredicatePredicateSubjects.some(y => y.value === x.value))
67
+ .filter(x => statementObjectPredicateSubjects.some(y => y.value === x.value));
68
+ if (targetIds.length > 1) {
69
+ throw new Error(`Found multiple statements with subject "${statementSubject.value}", predicate "${statementPredicate.value}" and object "${statementObject.value}".`);
70
+ }
71
+ return targetIds.shift();
72
+ }
73
+ exports.getTargetStatementId = getTargetStatementId;
74
+ /**
75
+ * For a given subject, the quad store is queried to find the assigned URI
76
+ * @param subject The subject for which the assigned URI is to be retrieved
77
+ * @param store The quad store
78
+ * @returns An RDF.NamedNode or undefined if not found
79
+ */
80
+ function getAssignedUri(subject, store) {
81
+ return store.getObjects(subject, namespaces_1.ns.example('assignedUri'), null).shift();
82
+ }
83
+ exports.getAssignedUri = getAssignedUri;
84
+ /**
85
+ * Finds the assigned URI in rdf:Statements
86
+ * @param subject The statement subject
87
+ * @param predicate The statement predicate
88
+ * @param object The statement object for which the assigned URI must be found
89
+ * @param store A N3 quad store
90
+ * @returns An RDF.Term or undefined if not found
91
+ */
92
+ function getAssignedUriViaStatements(subject, predicate, object, store) {
93
+ const statementId = getTargetStatementId(subject, predicate, object, store);
94
+ if (!statementId) {
95
+ return undefined;
96
+ }
97
+ return getAssignedUri(statementId, store);
98
+ }
99
+ exports.getAssignedUriViaStatements = getAssignedUriViaStatements;
100
+ /**
101
+ * Find all rdfs:labels for a given subject
102
+ * @param subject The RDF.Term to find the rdfs:labels for
103
+ * @param store A N3 quad store
104
+ * @returns An array of RDF.Literals
105
+ */
106
+ function getLabels(subject, store) {
107
+ return store.getObjects(subject, namespaces_1.ns.rdfs('label'), null);
108
+ }
109
+ exports.getLabels = getLabels;
110
+ /**
111
+ * Finds the rdfs:label whose language tag matches the given language
112
+ * @param subject The RDF.Term to find the rdfs:label for
113
+ * @param store A N3 quad store
114
+ * @param language A language tag
115
+ * @returns An RDF.Literal or undefined if not found
116
+ */
117
+ function getLabel(subject, store, language) {
118
+ return getLabels(subject, store).find(x => x.language === (language || ''));
119
+ }
120
+ exports.getLabel = getLabel;
121
+ /**
122
+ * Finds the rdfs:label for an RDF.Term in rdf:Statements
123
+ * @param subject The statement subject
124
+ * @param predicate The statement predicate
125
+ * @param object The statement object for which the label must be found
126
+ * @param store A N3 quad store
127
+ * @param language A language tag
128
+ * @returns An RDF.Literal or undefined if not found
129
+ */
130
+ function getLabelViaStatements(subject, predicate, object, store, language) {
131
+ const statementId = getTargetStatementId(subject, predicate, object, store);
132
+ if (!statementId) {
133
+ return undefined;
134
+ }
135
+ const label = getLabel(statementId, store, language);
136
+ return label || getLabel(statementId, store);
137
+ }
138
+ exports.getLabelViaStatements = getLabelViaStatements;
139
+ /**
140
+ * Find all rdfs:comments for a given subject
141
+ * @param subject The RDF.Term to find the rdfs:comments for
142
+ * @param store A N3 quad store
143
+ * @returns An array of RDF.Literals
144
+ */
145
+ function getDefinitions(subject, store) {
146
+ return store.getObjects(subject, namespaces_1.ns.rdfs('comment'), null);
147
+ }
148
+ exports.getDefinitions = getDefinitions;
149
+ /**
150
+ * Finds the rdfs:comment whose language tag matches the given language
151
+ * @param subject The RDF.Term to find the rdfs:comment for
152
+ * @param store A N3 quad store
153
+ * @param language A language tag
154
+ * @returns An RDF.Literal or undefined if not found
155
+ */
156
+ function getDefinition(subject, store, language) {
157
+ return getDefinitions(subject, store).find(x => x.language === (language || ''));
158
+ }
159
+ exports.getDefinition = getDefinition;
160
+ /**
161
+ * Finds the rdfs:comment for an RDF.Term in rdf:Statements
162
+ * @param subject The statement subject
163
+ * @param predicate The statement predicate
164
+ * @param object The statement object for which the definition must be found
165
+ * @param store A N3 quad store
166
+ * @param language A language tag
167
+ * @returns An RDF.Literal or undefined if not found
168
+ */
169
+ function getDefinitionViaStatements(subject, predicate, object, store, language) {
170
+ const statementId = getTargetStatementId(subject, predicate, object, store);
171
+ if (!statementId) {
172
+ return undefined;
173
+ }
174
+ const definition = getDefinition(statementId, store, language);
175
+ return definition || getDefinition(statementId, store);
176
+ }
177
+ exports.getDefinitionViaStatements = getDefinitionViaStatements;
178
+ /**
179
+ * Finds all the rdfs:subClassOf of a given RDF.Term
180
+ * @param subject the RDF.Term to find the parents of
181
+ * @param store A N3 quad store
182
+ * @returns An array of RDF.Terms
183
+ */
184
+ function getParentsOfClass(subject, store) {
185
+ return store.getObjects(subject, namespaces_1.ns.rdfs('subClassOf'), null);
186
+ }
187
+ exports.getParentsOfClass = getParentsOfClass;
188
+ /**
189
+ * Finds the rdfs:subPropertyOf of a given RDF.Term
190
+ * @param subject The RDF.Term to find the parent of
191
+ * @param store A N3 quad store
192
+ * @returns An RDF.Term or undefined if not found
193
+ */
194
+ function getParentOfProperty(subject, store) {
195
+ return store.getObjects(subject, namespaces_1.ns.rdfs('subPropertyOf'), null).shift();
196
+ }
197
+ exports.getParentOfProperty = getParentOfProperty;
198
+ /**
199
+ * Finds the rdfs:range of a given RDF.Term
200
+ * @param subject The RDF.Term to find the range of
201
+ * @param store A N3 quad store
202
+ * @returns An RDF.Term or undefined if not found
203
+ */
204
+ function getRange(subject, store) {
205
+ return store.getObjects(subject, namespaces_1.ns.rdfs('range'), null).shift();
206
+ }
207
+ exports.getRange = getRange;
208
+ /**
209
+ * Finds the rdfs:domain of a given RDF.Term
210
+ * @param subject The RDF.Term to find the domain of
211
+ * @param store A N3 quad store
212
+ * @returns An RDF.Term or undefined if not found
213
+ */
214
+ function getDomain(subject, store) {
215
+ return store.getObjects(subject, namespaces_1.ns.rdfs('domain'), null).shift();
216
+ }
217
+ exports.getDomain = getDomain;
218
+ /**
219
+ * Finds all the vann:usageNotes of a given RDF.Term
220
+ * @param subject The RDF.Term to find the usage notes for
221
+ * @param store A N3 quad store
222
+ * @returns An array of RDF.Literals
223
+ */
224
+ function getUsageNotes(subject, store) {
225
+ return store.getObjects(subject, namespaces_1.ns.vann('usageNote'), null);
226
+ }
227
+ exports.getUsageNotes = getUsageNotes;
228
+ /**
229
+ * Finds the vann:usageNote of which the language tag matches the given language
230
+ * @param subject The RDF.Term to find the usage note for
231
+ * @param store A N3 quad store
232
+ * @param language A language tag
233
+ * @returns An RDF.Literal or undefined if not found
234
+ */
235
+ function getUsageNote(subject, store, language) {
236
+ return getUsageNotes(subject, store).find(x => x.language === (language || ''));
237
+ }
238
+ exports.getUsageNote = getUsageNote;
239
+ /**
240
+ * Finds the vann:usageNote for an RDF.Term in rdf:Statements
241
+ * @param subject The statement subject
242
+ * @param predicate The statement predicate
243
+ * @param object The statement object for which the usage note must be found
244
+ * @param store A N3 quad store
245
+ * @param language A language tag
246
+ * @returns An RDF.Literal or undefined if not found
247
+ */
248
+ function getUsageNoteViaStatements(subject, predicate, object, store, language) {
249
+ const statementId = getTargetStatementId(subject, predicate, object, store);
250
+ if (!statementId) {
251
+ return undefined;
252
+ }
253
+ const usageNote = getUsageNote(statementId, store, language);
254
+ return usageNote || getUsageNote(statementId, store);
255
+ }
256
+ exports.getUsageNoteViaStatements = getUsageNoteViaStatements;
257
+ //# sourceMappingURL=N3StoreFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"N3StoreFunctions.js","sourceRoot":"","sources":["N3StoreFunctions.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as RDF from '@rdfjs/types';\r\nimport * as N3 from 'n3';\r\nimport rdfParser from 'rdf-parse';\r\nimport { fetchFileOrUrl } from './fetchFileOrUrl';\r\nimport { ns } from './namespaces';\r\n\r\n/**\r\n * Given a local file, it is parsed and added to an in-memory quad store\r\n * @param fileOrUrl Local path of the input file\r\n * @returns A N3 quad store\r\n */\r\nexport async function createN3Store(file: string): Promise<N3.Store> {\r\n const store = new N3.Store();\r\n const buffer = await fetchFileOrUrl(file);\r\n const textStream = require('streamify-string')(buffer.toString());\r\n\r\n return new Promise<N3.Store>((resolve, reject) => {\r\n rdfParser.parse(textStream, { path: file })\r\n .on('data', (quad: RDF.Quad) => store.addQuad(quad))\r\n .on('error', (error: unknown) => reject(error))\r\n .on('end', () => resolve(store));\r\n });\r\n}\r\n\r\n/**\r\n * Find the subject of the statement that matches the given subject, predicate and object\r\n * @param statementSubject The subject to match the statement subject\r\n * @param statementPredicate The predicate to match the statement predicate\r\n * @param statementObject The object to match the statement object\r\n * @param store An N3 quad store\r\n * @returns an RDF.Term or undefined if none found\r\n */\r\nexport function getTargetStatementId(\r\n statementSubject: RDF.Term,\r\n statementPredicate: RDF.Term,\r\n statementObject: RDF.Term,\r\n store: N3.Store,\r\n): RDF.Term | undefined {\r\n const statementIds = store.getSubjects(ns.rdf('type'), ns.rdf('Statement'), null);\r\n const statementSubjectPredicateSubjects = store.getSubjects(ns.rdf('subject'), statementSubject, null);\r\n const statementPredicatePredicateSubjects = store.getSubjects(ns.rdf('predicate'), statementPredicate, null);\r\n const statementObjectPredicateSubjects = store.getSubjects(ns.rdf('object'), statementObject, null);\r\n\r\n const targetIds = statementIds\r\n .filter(x => statementSubjectPredicateSubjects.some(y => y.value === x.value))\r\n .filter(x => statementPredicatePredicateSubjects.some(y => y.value === x.value))\r\n .filter(x => statementObjectPredicateSubjects.some(y => y.value === x.value));\r\n\r\n if (targetIds.length > 1) {\r\n throw new Error(`Found multiple statements with subject \"${statementSubject.value}\", predicate \"${statementPredicate.value}\" and object \"${statementObject.value}\".`);\r\n }\r\n\r\n return targetIds.shift();\r\n}\r\n\r\n/**\r\n * For a given subject, the quad store is queried to find the assigned URI\r\n * @param subject The subject for which the assigned URI is to be retrieved\r\n * @param store The quad store\r\n * @returns An RDF.NamedNode or undefined if not found\r\n */\r\nexport function getAssignedUri(subject: RDF.Term, store: N3.Store): RDF.Term | undefined {\r\n return store.getObjects(subject, ns.example('assignedUri'), null).shift();\r\n}\r\n\r\n/**\r\n * Finds the assigned URI in rdf:Statements\r\n * @param subject The statement subject\r\n * @param predicate The statement predicate\r\n * @param object The statement object for which the assigned URI must be found\r\n * @param store A N3 quad store\r\n * @returns An RDF.Term or undefined if not found\r\n */\r\nexport function getAssignedUriViaStatements(\r\n subject: RDF.Term,\r\n predicate: RDF.Term,\r\n object: RDF.Term,\r\n store: N3.Store,\r\n): RDF.Term | undefined {\r\n const statementId = getTargetStatementId(subject, predicate, object, store);\r\n\r\n if (!statementId) {\r\n return undefined;\r\n }\r\n\r\n return getAssignedUri(statementId, store);\r\n}\r\n\r\n/**\r\n * Find all rdfs:labels for a given subject\r\n * @param subject The RDF.Term to find the rdfs:labels for\r\n * @param store A N3 quad store\r\n * @returns An array of RDF.Literals\r\n */\r\nexport function getLabels(subject: RDF.Term, store: N3.Store): RDF.Literal[] {\r\n return <RDF.Literal[]>store.getObjects(subject, ns.rdfs('label'), null);\r\n}\r\n\r\n/**\r\n * Finds the rdfs:label whose language tag matches the given language\r\n * @param subject The RDF.Term to find the rdfs:label for\r\n * @param store A N3 quad store\r\n * @param language A language tag\r\n * @returns An RDF.Literal or undefined if not found\r\n */\r\nexport function getLabel(subject: RDF.Term, store: N3.Store, language?: string): RDF.Literal | undefined {\r\n return getLabels(subject, store).find(x => x.language === (language || ''));\r\n}\r\n\r\n/**\r\n * Finds the rdfs:label for an RDF.Term in rdf:Statements\r\n * @param subject The statement subject\r\n * @param predicate The statement predicate\r\n * @param object The statement object for which the label must be found\r\n * @param store A N3 quad store\r\n * @param language A language tag\r\n * @returns An RDF.Literal or undefined if not found\r\n */\r\nexport function getLabelViaStatements(\r\n subject: RDF.Term,\r\n predicate: RDF.Term,\r\n object: RDF.Term,\r\n store: N3.Store,\r\n language: string,\r\n): RDF.Literal | undefined {\r\n const statementId = getTargetStatementId(subject, predicate, object, store);\r\n\r\n if (!statementId) {\r\n return undefined;\r\n }\r\n\r\n const label = getLabel(statementId, store, language);\r\n return label || getLabel(statementId, store);\r\n}\r\n\r\n/**\r\n * Find all rdfs:comments for a given subject\r\n * @param subject The RDF.Term to find the rdfs:comments for\r\n * @param store A N3 quad store\r\n * @returns An array of RDF.Literals\r\n */\r\nexport function getDefinitions(subject: RDF.Term, store: N3.Store): RDF.Literal[] {\r\n return <RDF.Literal[]>store.getObjects(subject, ns.rdfs('comment'), null);\r\n}\r\n\r\n/**\r\n * Finds the rdfs:comment whose language tag matches the given language\r\n * @param subject The RDF.Term to find the rdfs:comment for\r\n * @param store A N3 quad store\r\n * @param language A language tag\r\n * @returns An RDF.Literal or undefined if not found\r\n */\r\nexport function getDefinition(subject: RDF.Term, store: N3.Store, language?: string): RDF.Literal | undefined {\r\n return getDefinitions(subject, store).find(x => x.language === (language || ''));\r\n}\r\n\r\n/**\r\n * Finds the rdfs:comment for an RDF.Term in rdf:Statements\r\n * @param subject The statement subject\r\n * @param predicate The statement predicate\r\n * @param object The statement object for which the definition must be found\r\n * @param store A N3 quad store\r\n * @param language A language tag\r\n * @returns An RDF.Literal or undefined if not found\r\n */\r\nexport function getDefinitionViaStatements(\r\n subject: RDF.Term,\r\n predicate: RDF.Term,\r\n object: RDF.Term,\r\n store: N3.Store,\r\n language: string,\r\n): RDF.Literal | undefined {\r\n const statementId = getTargetStatementId(subject, predicate, object, store);\r\n\r\n if (!statementId) {\r\n return undefined;\r\n }\r\n\r\n const definition = getDefinition(statementId, store, language);\r\n return definition || getDefinition(statementId, store);\r\n}\r\n\r\n/**\r\n * Finds all the rdfs:subClassOf of a given RDF.Term\r\n * @param subject the RDF.Term to find the parents of\r\n * @param store A N3 quad store\r\n * @returns An array of RDF.Terms\r\n */\r\nexport function getParentsOfClass(subject: RDF.Term, store: N3.Store): RDF.Term[] {\r\n return store.getObjects(subject, ns.rdfs('subClassOf'), null);\r\n}\r\n\r\n/**\r\n * Finds the rdfs:subPropertyOf of a given RDF.Term\r\n * @param subject The RDF.Term to find the parent of\r\n * @param store A N3 quad store\r\n * @returns An RDF.Term or undefined if not found\r\n */\r\nexport function getParentOfProperty(subject: RDF.Term, store: N3.Store): RDF.Term | undefined {\r\n return store.getObjects(subject, ns.rdfs('subPropertyOf'), null).shift();\r\n}\r\n\r\n/**\r\n * Finds the rdfs:range of a given RDF.Term\r\n * @param subject The RDF.Term to find the range of\r\n * @param store A N3 quad store\r\n * @returns An RDF.Term or undefined if not found\r\n */\r\nexport function getRange(subject: RDF.Term, store: N3.Store): RDF.Term | undefined {\r\n return store.getObjects(subject, ns.rdfs('range'), null).shift();\r\n}\r\n\r\n/**\r\n * Finds the rdfs:domain of a given RDF.Term\r\n * @param subject The RDF.Term to find the domain of\r\n * @param store A N3 quad store\r\n * @returns An RDF.Term or undefined if not found\r\n */\r\nexport function getDomain(subject: RDF.Term, store: N3.Store): RDF.Term | undefined {\r\n return store.getObjects(subject, ns.rdfs('domain'), null).shift();\r\n}\r\n\r\n/**\r\n * Finds all the vann:usageNotes of a given RDF.Term\r\n * @param subject The RDF.Term to find the usage notes for\r\n * @param store A N3 quad store\r\n * @returns An array of RDF.Literals\r\n */\r\nexport function getUsageNotes(subject: RDF.Term, store: N3.Store): RDF.Literal[] {\r\n return <RDF.Literal[]>store.getObjects(subject, ns.vann('usageNote'), null);\r\n}\r\n\r\n/**\r\n * Finds the vann:usageNote of which the language tag matches the given language\r\n * @param subject The RDF.Term to find the usage note for\r\n * @param store A N3 quad store\r\n * @param language A language tag\r\n * @returns An RDF.Literal or undefined if not found\r\n */\r\nexport function getUsageNote(subject: RDF.Term, store: N3.Store, language?: string): RDF.Literal | undefined {\r\n return getUsageNotes(subject, store).find(x => x.language === (language || ''));\r\n}\r\n\r\n/**\r\n * Finds the vann:usageNote for an RDF.Term in rdf:Statements\r\n * @param subject The statement subject\r\n * @param predicate The statement predicate\r\n * @param object The statement object for which the usage note must be found\r\n * @param store A N3 quad store\r\n * @param language A language tag\r\n * @returns An RDF.Literal or undefined if not found\r\n */\r\nexport function getUsageNoteViaStatements(\r\n subject: RDF.Term,\r\n predicate: RDF.Term,\r\n object: RDF.Term,\r\n store: N3.Store,\r\n language: string,\r\n): RDF.Literal | undefined {\r\n const statementId = getTargetStatementId(subject, predicate, object, store);\r\n\r\n if (!statementId) {\r\n return undefined;\r\n }\r\n\r\n const usageNote = getUsageNote(statementId, store, language);\r\n return usageNote || getUsageNote(statementId, store);\r\n}\r\n"]}