@oslo-flanders/core 0.0.3-alpha.0 → 0.0.4-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.
package/index.d.ts CHANGED
@@ -1,13 +1,12 @@
1
1
  import 'reflect-metadata';
2
2
  export * from './lib/interfaces/AppRunner';
3
3
  export * from './lib/interfaces/IConfiguration';
4
- export * from './lib/interfaces/IConversionService';
5
- export * from './lib/interfaces/IGenerationService';
6
4
  export * from './lib/interfaces/IOutputHandler';
5
+ export * from './lib/interfaces/IService';
7
6
  export * from './lib/utils/fetchFileOrUrl';
8
7
  export * from './lib/utils/namespaces';
9
8
  export * from './lib/utils/uniqueId';
10
- export * from './lib/utils/N3StoreFunctions';
9
+ export * from './lib/store/QuadStore';
11
10
  export * from './lib/ServiceIdentifier';
12
11
  export * from './lib/enums/Scope';
13
12
  export * from './lib/enums/PropertyTypes';
@@ -15,3 +14,7 @@ export * from './lib/logging/LogLevel';
15
14
  export * from './lib/logging/Logger';
16
15
  export * from './lib/logging/VoidLogger';
17
16
  export * from './lib/logging/WinstonLogger';
17
+ export * from './lib/logging/LogUtil';
18
+ export * from './lib/logging/LoggerFactory';
19
+ export * from './lib/logging/VoidLoggerFactory';
20
+ export * from './lib/logging/WinstonLoggerFactory';
package/index.js CHANGED
@@ -17,13 +17,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  require("reflect-metadata");
18
18
  __exportStar(require("./lib/interfaces/AppRunner"), exports);
19
19
  __exportStar(require("./lib/interfaces/IConfiguration"), exports);
20
- __exportStar(require("./lib/interfaces/IConversionService"), exports);
21
- __exportStar(require("./lib/interfaces/IGenerationService"), exports);
22
20
  __exportStar(require("./lib/interfaces/IOutputHandler"), exports);
21
+ __exportStar(require("./lib/interfaces/IService"), exports);
23
22
  __exportStar(require("./lib/utils/fetchFileOrUrl"), exports);
24
23
  __exportStar(require("./lib/utils/namespaces"), exports);
25
24
  __exportStar(require("./lib/utils/uniqueId"), exports);
26
- __exportStar(require("./lib/utils/N3StoreFunctions"), exports);
25
+ __exportStar(require("./lib/store/QuadStore"), exports);
27
26
  __exportStar(require("./lib/ServiceIdentifier"), exports);
28
27
  __exportStar(require("./lib/enums/Scope"), exports);
29
28
  __exportStar(require("./lib/enums/PropertyTypes"), exports);
@@ -31,4 +30,8 @@ __exportStar(require("./lib/logging/LogLevel"), exports);
31
30
  __exportStar(require("./lib/logging/Logger"), exports);
32
31
  __exportStar(require("./lib/logging/VoidLogger"), exports);
33
32
  __exportStar(require("./lib/logging/WinstonLogger"), exports);
33
+ __exportStar(require("./lib/logging/LogUtil"), exports);
34
+ __exportStar(require("./lib/logging/LoggerFactory"), exports);
35
+ __exportStar(require("./lib/logging/VoidLoggerFactory"), exports);
36
+ __exportStar(require("./lib/logging/WinstonLoggerFactory"), exports);
34
37
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  export declare class ServiceIdentifier {
2
- static readonly ConversionService: unique symbol;
3
- static readonly GenerationService: unique symbol;
2
+ static readonly Service: unique symbol;
4
3
  static readonly Configuration: unique symbol;
5
4
  static readonly OutputHandler: unique symbol;
6
5
  static readonly Logger: unique symbol;
6
+ static readonly QuadStore: unique symbol;
7
7
  }
@@ -7,9 +7,9 @@ exports.ServiceIdentifier = void 0;
7
7
  class ServiceIdentifier {
8
8
  }
9
9
  exports.ServiceIdentifier = ServiceIdentifier;
10
- ServiceIdentifier.ConversionService = Symbol.for('ConversionService');
11
- ServiceIdentifier.GenerationService = Symbol.for('GenerationService');
10
+ ServiceIdentifier.Service = Symbol.for('Service');
12
11
  ServiceIdentifier.Configuration = Symbol.for('Configuration');
13
12
  ServiceIdentifier.OutputHandler = Symbol.for('OutputHandler');
14
13
  ServiceIdentifier.Logger = Symbol.for('Logger');
14
+ ServiceIdentifier.QuadStore = Symbol.for('QuadStore');
15
15
  //# sourceMappingURL=ServiceIdentifier.js.map
@@ -1,4 +1,7 @@
1
1
  /// <reference types="node" />
2
+ import type { Container } from 'inversify';
3
+ import type { IConfiguration } from './IConfiguration';
4
+ import type { IService } from './IService';
2
5
  export declare type CliArgv = string[];
3
6
  export declare type YargsParams = {
4
7
  [x: string]: unknown;
@@ -9,7 +12,8 @@ export declare type YargsParams = {
9
12
  _: (string | number)[];
10
13
  $0: string;
11
14
  };
12
- export declare abstract class AppRunner {
15
+ export declare abstract class AppRunner<T extends IService, K extends IConfiguration> {
13
16
  runCliSync(process: NodeJS.Process): void;
14
17
  abstract runCli(argv: CliArgv): Promise<void>;
18
+ startApp(params: YargsParams, container: Container): Promise<void>;
15
19
  }
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AppRunner = void 0;
4
4
  const process_1 = require("process");
5
+ const LogUtil_1 = require("../logging/LogUtil");
6
+ const ServiceIdentifier_1 = require("../ServiceIdentifier");
5
7
  class AppRunner {
6
8
  runCliSync(process) {
7
9
  this.runCli(process.argv).catch((error) => {
@@ -10,6 +12,16 @@ class AppRunner {
10
12
  process.exit(1);
11
13
  });
12
14
  }
15
+ async startApp(params, container) {
16
+ const configuration = container.get(ServiceIdentifier_1.ServiceIdentifier.Configuration);
17
+ await configuration.createFromCli(params);
18
+ (0, LogUtil_1.setLoggerFactory)(params);
19
+ container.bind(ServiceIdentifier_1.ServiceIdentifier.Logger).toDynamicValue(() => (0, LogUtil_1.createLogger)()).inSingletonScope();
20
+ const service = container.get(ServiceIdentifier_1.ServiceIdentifier.Service);
21
+ service.init()
22
+ .then(() => service.run())
23
+ .catch(error => console.error(error));
24
+ }
13
25
  }
14
26
  exports.AppRunner = AppRunner;
15
27
  //# sourceMappingURL=AppRunner.js.map
@@ -1,7 +1,7 @@
1
- import type { Quad, Store } from 'n3';
1
+ import type { QuadStore } from '../store/QuadStore';
2
2
  /**
3
3
  * Writes the triples in an RDF store to a write stream
4
4
  */
5
5
  export interface IOutputHandler {
6
- write: (store: Store<Quad>, writeStream: any) => Promise<void>;
6
+ write: (store: QuadStore, writeStream: any) => Promise<void>;
7
7
  }
@@ -1,10 +1,11 @@
1
1
  import type { Logger } from '../logging/Logger';
2
2
  import type { IConfiguration } from './IConfiguration';
3
3
  /**
4
- * Interface that must be implemented by classes that convert a UML diagram to an RDF file
4
+ * Interface that must be implemented by conversion of generation services
5
5
  */
6
- export interface IConversionService {
6
+ export interface IService {
7
7
  logger: Logger;
8
8
  configuration: IConfiguration;
9
+ init: () => Promise<void>;
9
10
  run: () => Promise<void>;
10
11
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=IConversionService.js.map
3
+ //# sourceMappingURL=IService.js.map
@@ -0,0 +1,4 @@
1
+ import type { YargsParams } from '../interfaces/AppRunner';
2
+ import type { Logger } from './Logger';
3
+ export declare function createLogger(): Logger;
4
+ export declare function setLoggerFactory(params: YargsParams): void;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setLoggerFactory = exports.createLogger = void 0;
4
+ const VoidLoggerFactory_1 = require("./VoidLoggerFactory");
5
+ const WinstonLoggerFactory_1 = require("./WinstonLoggerFactory");
6
+ let loggerFactory = new VoidLoggerFactory_1.VoidLoggerFactory();
7
+ function createLogger() {
8
+ return loggerFactory.createLogger();
9
+ }
10
+ exports.createLogger = createLogger;
11
+ function setLoggerFactory(params) {
12
+ if (!params.silent) {
13
+ loggerFactory = new WinstonLoggerFactory_1.WinstonLoggerFactory(params.logLevel);
14
+ }
15
+ }
16
+ exports.setLoggerFactory = setLoggerFactory;
17
+ //# sourceMappingURL=LogUtil.js.map
@@ -1,3 +1,4 @@
1
+ import 'reflect-metadata';
1
2
  import type { LogLevel } from './LogLevel';
2
3
  export interface Logger {
3
4
  log: (level: LogLevel, message: string) => Logger;
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.BaseLogger = void 0;
10
+ require("reflect-metadata");
10
11
  const inversify_1 = require("inversify");
11
12
  let BaseLogger = class BaseLogger {
12
13
  error(message) {
@@ -0,0 +1,11 @@
1
+ import type { Logger } from './Logger';
2
+ /**
3
+ * Instantiates new logger instances.
4
+ */
5
+ export interface LoggerFactory {
6
+ /**
7
+ * Create a logger instance for the given label.
8
+ * @param label - A label that is used to identify the given logger.
9
+ */
10
+ createLogger: (label?: string) => Logger;
11
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=IGenerationService.js.map
3
+ //# sourceMappingURL=LoggerFactory.js.map
@@ -0,0 +1,9 @@
1
+ import type { LoggerFactory } from './LoggerFactory';
2
+ import { VoidLogger } from './VoidLogger';
3
+ /**
4
+ * A factory that always returns {@link VoidLogger}, which does nothing on log messages.
5
+ */
6
+ export declare class VoidLoggerFactory implements LoggerFactory {
7
+ private readonly logger;
8
+ createLogger(label?: string): VoidLogger;
9
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoidLoggerFactory = void 0;
4
+ const VoidLogger_1 = require("./VoidLogger");
5
+ /**
6
+ * A factory that always returns {@link VoidLogger}, which does nothing on log messages.
7
+ */
8
+ class VoidLoggerFactory {
9
+ constructor() {
10
+ this.logger = new VoidLogger_1.VoidLogger();
11
+ }
12
+ createLogger(label) {
13
+ return this.logger;
14
+ }
15
+ }
16
+ exports.VoidLoggerFactory = VoidLoggerFactory;
17
+ //# sourceMappingURL=VoidLoggerFactory.js.map
@@ -1,7 +1,8 @@
1
+ import { Logger as WinstonInnerLogger } from 'winston';
1
2
  import { BaseLogger } from './Logger';
2
- import { LogLevel } from './LogLevel';
3
+ import type { LogLevel } from './LogLevel';
3
4
  export declare class WinstonLogger extends BaseLogger {
4
5
  private readonly logger;
5
- constructor(logLevel: LogLevel);
6
+ constructor(logger: WinstonInnerLogger);
6
7
  log(level: LogLevel, message: string): this;
7
8
  }
@@ -12,19 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.WinstonLogger = void 0;
13
13
  const inversify_1 = require("inversify");
14
14
  const winston_1 = require("winston");
15
- const { combine, colorize, printf } = winston_1.format;
16
15
  const Logger_1 = require("./Logger");
17
- const messageFormat = printf(({ level, message, messageTimestamp }) => `${new Date(Date.now()).toISOString()} ${level}: ${message}`);
18
16
  let WinstonLogger = class WinstonLogger extends Logger_1.BaseLogger {
19
- constructor(logLevel) {
17
+ constructor(logger) {
20
18
  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
- });
19
+ this.logger = logger;
28
20
  }
29
21
  log(level, message) {
30
22
  this.logger.log(level, message);
@@ -33,7 +25,7 @@ let WinstonLogger = class WinstonLogger extends Logger_1.BaseLogger {
33
25
  };
34
26
  WinstonLogger = __decorate([
35
27
  (0, inversify_1.injectable)(),
36
- __metadata("design:paramtypes", [String])
28
+ __metadata("design:paramtypes", [winston_1.Logger])
37
29
  ], WinstonLogger);
38
30
  exports.WinstonLogger = WinstonLogger;
39
31
  //# sourceMappingURL=WinstonLogger.js.map
@@ -0,0 +1,10 @@
1
+ import type * as Transport from 'winston-transport';
2
+ import type { Logger } from './Logger';
3
+ import type { LoggerFactory } from './LoggerFactory';
4
+ import type { LogLevel } from './LogLevel';
5
+ export declare class WinstonLoggerFactory implements LoggerFactory {
6
+ private readonly level;
7
+ constructor(level: LogLevel);
8
+ createLogger(label?: string): Logger;
9
+ protected createTransports(): Transport[];
10
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WinstonLoggerFactory = void 0;
4
+ const winston_1 = require("winston");
5
+ const WinstonLogger_1 = require("./WinstonLogger");
6
+ const { combine, colorize, printf } = winston_1.format;
7
+ const messageFormat = printf(({ level, message, messageTimestamp }) => `${new Date(Date.now()).toISOString()} ${level}: ${message}`);
8
+ class WinstonLoggerFactory {
9
+ constructor(level) {
10
+ this.level = level;
11
+ }
12
+ createLogger(label) {
13
+ return new WinstonLogger_1.WinstonLogger((0, winston_1.createLogger)({
14
+ level: this.level,
15
+ transports: this.createTransports(),
16
+ format: combine(colorize(), messageFormat),
17
+ }));
18
+ }
19
+ createTransports() {
20
+ return [new winston_1.transports.Console()];
21
+ }
22
+ }
23
+ exports.WinstonLoggerFactory = WinstonLoggerFactory;
24
+ //# sourceMappingURL=WinstonLoggerFactory.js.map
@@ -0,0 +1,180 @@
1
+ import type * as RDF from '@rdfjs/types';
2
+ export declare class QuadStore {
3
+ private readonly store;
4
+ constructor();
5
+ addQuads(quads: RDF.Quad[]): void;
6
+ addQuad(quad: RDF.Quad): void;
7
+ addQuadsFromFile(file: string): Promise<void>;
8
+ findQuads(subject: RDF.Term | null, predicate: RDF.Term | null, object: RDF.Term | null): RDF.Quad[];
9
+ findQuad(subject: RDF.Term | null, predicate: RDF.Term | null, object: RDF.Term | null): RDF.Quad | undefined;
10
+ findSubjects(predicate: RDF.Term, object: RDF.Term): RDF.Term[];
11
+ findSubject(predicate: RDF.Term, object: RDF.Term): RDF.Term | undefined;
12
+ findObjects(subject: RDF.Term, predicate: RDF.Term): RDF.Term[];
13
+ findObject(subject: RDF.Term, predicate: RDF.Term): RDF.Term | undefined;
14
+ /**
15
+ * Finds the subject where predicate is 'rdf:type' and object 'example:Package'
16
+ * @returns a RDF.NamedNode or undefined
17
+ */
18
+ getPackageId(): RDF.NamedNode | undefined;
19
+ /**
20
+ * Finds all subjects where predicate is 'rdf:type' and object 'owl:Class'
21
+ * @returns an array of RDF.NamedNodes
22
+ */
23
+ getClassIds(): RDF.NamedNode[];
24
+ /**
25
+ * Finds all subjects where predicate is 'rdf:type' and object 'owl:DatatypeProperty'
26
+ * @returns an array of RDF.NamedNodes
27
+ */
28
+ getDatatypePropertyIds(): RDF.NamedNode[];
29
+ /**
30
+ * Finds all subjects where predicate is 'rdf:type' and object 'owl:ObjectProperty'
31
+ * @returns an array of RDF.NamedNodes
32
+ */
33
+ getObjectPropertyIds(): RDF.NamedNode[];
34
+ /**
35
+ * For a given subject, the quad store is queried to find the assigned URI
36
+ * @param subject The subject for which the assigned URI is to be retrieved
37
+ * @param store The quad store
38
+ * @returns An RDF.NamedNode or undefined if not found
39
+ */
40
+ getAssignedUri(subject: RDF.Term): RDF.NamedNode | undefined;
41
+ /**
42
+ * Find all rdfs:labels for a given subject
43
+ * @param subject The RDF.Term to find the rdfs:labels for
44
+ * @param store A N3 quad store
45
+ * @returns An array of RDF.Literals
46
+ */
47
+ getLabels(subject: RDF.Term): RDF.Literal[];
48
+ /**
49
+ * Finds the rdfs:label whose language tag matches the given language
50
+ * @param subject The RDF.Term to find the rdfs:label for
51
+ * @param store A N3 quad store
52
+ * @param language A language tag
53
+ * @returns An RDF.Literal or undefined if not found
54
+ */
55
+ getLabel(subject: RDF.Term, language?: string): RDF.Literal | undefined;
56
+ /**
57
+ * Find all rdfs:comments for a given subject
58
+ * @param subject The RDF.Term to find the rdfs:comments for
59
+ * @param store A N3 quad store
60
+ * @returns An array of RDF.Literals
61
+ */
62
+ getDefinitions(subject: RDF.Term): RDF.Literal[];
63
+ /**
64
+ * Finds the rdfs:comment whose language tag matches the given language
65
+ * @param subject The RDF.Term to find the rdfs:comment for
66
+ * @param store A N3 quad store
67
+ * @param language A language tag
68
+ * @returns An RDF.Literal or undefined if not found
69
+ */
70
+ getDefinition(subject: RDF.Term, language?: string): RDF.Literal | undefined;
71
+ /**
72
+ * Finds the rdfs:range of a given RDF.Term
73
+ * @param subject The RDF.Term to find the range of
74
+ * @param store A N3 quad store
75
+ * @returns An RDF.Term or undefined if not found
76
+ */
77
+ getRange(subject: RDF.Term): RDF.NamedNode | undefined;
78
+ /**
79
+ * Finds the rdfs:domain of a given RDF.Term
80
+ * @param subject The RDF.Term to find the domain of
81
+ * @param store A N3 quad store
82
+ * @returns An RDF.Term or undefined if not found
83
+ */
84
+ getDomain(subject: RDF.Term): RDF.NamedNode | undefined;
85
+ /**
86
+ * Finds all the vann:usageNotes of a given RDF.Term
87
+ * @param subject The RDF.Term to find the usage notes for
88
+ * @param store A N3 quad store
89
+ * @returns An array of RDF.Literals
90
+ */
91
+ getUsageNotes(subject: RDF.Term): RDF.Literal[];
92
+ /**
93
+ * Finds the vann:usageNote of which the language tag matches the given language
94
+ * @param subject The RDF.Term to find the usage note for
95
+ * @param store A N3 quad store
96
+ * @param language A language tag
97
+ * @returns An RDF.Literal or undefined if not found
98
+ */
99
+ getUsageNote(subject: RDF.Term, language?: string): RDF.Literal | undefined;
100
+ /**
101
+ * Finds the example:scope of a given subject
102
+ * @param subject The RDF.Term to find the scope for
103
+ * @returns An RDF.NamedNode or undefined if not found
104
+ */
105
+ getScope(subject: RDF.Term): RDF.NamedNode | undefined;
106
+ /**
107
+ * Finds the shacl:minCardinality for a given subject
108
+ * @param subject The RDF.Term to find the shacl:minCardinaly for
109
+ * @returns An RDF.Literal or undefined if not found
110
+ */
111
+ getMinCardinality(subject: RDF.Term): RDF.Literal | undefined;
112
+ /**
113
+ * Finds the shacl:maxCardinality for a given subject
114
+ * @param subject The RDF.Term to find the shacl:maxCardinaly for
115
+ * @returns An RDF.Literal or undefined if not found
116
+ */
117
+ getMaxCardinality(subject: RDF.Term): RDF.Literal | undefined;
118
+ /**
119
+ * Finds all the rdfs:subClassOf of a given RDF.Term
120
+ * @param subject the RDF.Term to find the parents of
121
+ * @param store A N3 quad store
122
+ * @returns An array of RDF.Terms
123
+ */
124
+ getParentsOfClass(subject: RDF.Term): RDF.NamedNode[];
125
+ /**
126
+ * Finds the rdfs:subPropertyOf of a given RDF.Term
127
+ * @param subject The RDF.Term to find the parent of
128
+ * @param store A N3 quad store
129
+ * @returns An RDF.Term or undefined if not found
130
+ */
131
+ getParentOfProperty(subject: RDF.Term): RDF.NamedNode | undefined;
132
+ /**
133
+ * Find the subject of the statement that matches the given subject, predicate and object
134
+ * @param statementSubject The subject to match the statement subject
135
+ * @param statementPredicate The predicate to match the statement predicate
136
+ * @param statementObject The object to match the statement object
137
+ * @param store An N3 quad store
138
+ * @returns an RDF.Term or undefined if none found
139
+ */
140
+ getTargetStatementId(statementSubject: RDF.Term, statementPredicate: RDF.Term, statementObject: RDF.Term): RDF.Term | undefined;
141
+ /**
142
+ * Finds the assigned URI in rdf:Statements
143
+ * @param subject The statement subject
144
+ * @param predicate The statement predicate
145
+ * @param object The statement object for which the assigned URI must be found
146
+ * @param store A N3 quad store
147
+ * @returns An RDF.Term or undefined if not found
148
+ */
149
+ getAssignedUriViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term): RDF.NamedNode | undefined;
150
+ /**
151
+ * Finds the rdfs:label for an RDF.Term in rdf:Statements
152
+ * @param subject The statement subject
153
+ * @param predicate The statement predicate
154
+ * @param object The statement object for which the label must be found
155
+ * @param store A N3 quad store
156
+ * @param language A language tag
157
+ * @returns An RDF.Literal or undefined if not found
158
+ */
159
+ getLabelViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, language: string): RDF.Literal | undefined;
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
+ getDefinitionViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, language: string): RDF.Literal | undefined;
170
+ /**
171
+ * Finds the vann:usageNote for an RDF.Term in rdf:Statements
172
+ * @param subject The statement subject
173
+ * @param predicate The statement predicate
174
+ * @param object The statement object for which the usage note must be found
175
+ * @param store A N3 quad store
176
+ * @param language A language tag
177
+ * @returns An RDF.Literal or undefined if not found
178
+ */
179
+ getUsageNoteViaStatements(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, language: string): RDF.Literal | undefined;
180
+ }
@@ -0,0 +1,330 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.QuadStore = void 0;
39
+ const inversify_1 = require("inversify");
40
+ const N3 = __importStar(require("n3"));
41
+ const rdf_parse_1 = __importDefault(require("rdf-parse"));
42
+ const fetchFileOrUrl_1 = require("../utils/fetchFileOrUrl");
43
+ const namespaces_1 = require("../utils/namespaces");
44
+ let QuadStore = class QuadStore {
45
+ constructor() {
46
+ this.store = new N3.Store();
47
+ }
48
+ addQuads(quads) {
49
+ this.store.addQuads(quads);
50
+ }
51
+ addQuad(quad) {
52
+ this.store.addQuad(quad);
53
+ }
54
+ async addQuadsFromFile(file) {
55
+ const buffer = await (0, fetchFileOrUrl_1.fetchFileOrUrl)(file);
56
+ const textStream = require('streamify-string')(buffer.toString());
57
+ return new Promise((resolve, reject) => {
58
+ rdf_parse_1.default.parse(textStream, { path: file })
59
+ .on('data', (quad) => this.store.addQuad(quad))
60
+ .on('error', (error) => reject(error))
61
+ .on('end', () => resolve());
62
+ });
63
+ }
64
+ findQuads(subject, predicate, object) {
65
+ return this.store.getQuads(subject, predicate, object, null);
66
+ }
67
+ findQuad(subject, predicate, object) {
68
+ return this.findQuads(subject, predicate, object).shift();
69
+ }
70
+ findSubjects(predicate, object) {
71
+ return this.store.getSubjects(predicate, object, null);
72
+ }
73
+ findSubject(predicate, object) {
74
+ return this.findSubjects(predicate, object).shift();
75
+ }
76
+ findObjects(subject, predicate) {
77
+ return this.store.getObjects(subject, predicate, null);
78
+ }
79
+ findObject(subject, predicate) {
80
+ return this.findObjects(subject, predicate).shift();
81
+ }
82
+ /**
83
+ * Finds the subject where predicate is 'rdf:type' and object 'example:Package'
84
+ * @returns a RDF.NamedNode or undefined
85
+ */
86
+ getPackageId() {
87
+ return this.store.getSubjects(namespaces_1.ns.rdf('type'), namespaces_1.ns.example('Package'), null).shift();
88
+ }
89
+ /**
90
+ * Finds all subjects where predicate is 'rdf:type' and object 'owl:Class'
91
+ * @returns an array of RDF.NamedNodes
92
+ */
93
+ getClassIds() {
94
+ return this.store.getSubjects(namespaces_1.ns.rdf('type'), namespaces_1.ns.owl('Class'), null);
95
+ }
96
+ /**
97
+ * Finds all subjects where predicate is 'rdf:type' and object 'owl:DatatypeProperty'
98
+ * @returns an array of RDF.NamedNodes
99
+ */
100
+ getDatatypePropertyIds() {
101
+ return this.store.getSubjects(namespaces_1.ns.rdf('type'), namespaces_1.ns.owl('DatatypeProperty'), null);
102
+ }
103
+ /**
104
+ * Finds all subjects where predicate is 'rdf:type' and object 'owl:ObjectProperty'
105
+ * @returns an array of RDF.NamedNodes
106
+ */
107
+ getObjectPropertyIds() {
108
+ return this.store.getSubjects(namespaces_1.ns.rdf('type'), namespaces_1.ns.owl('ObjectProperty'), null);
109
+ }
110
+ /**
111
+ * For a given subject, the quad store is queried to find the assigned URI
112
+ * @param subject The subject for which the assigned URI is to be retrieved
113
+ * @param store The quad store
114
+ * @returns An RDF.NamedNode or undefined if not found
115
+ */
116
+ getAssignedUri(subject) {
117
+ return this.store.getObjects(subject, namespaces_1.ns.example('assignedUri'), null).shift();
118
+ }
119
+ /**
120
+ * Find all rdfs:labels for a given subject
121
+ * @param subject The RDF.Term to find the rdfs:labels for
122
+ * @param store A N3 quad store
123
+ * @returns An array of RDF.Literals
124
+ */
125
+ getLabels(subject) {
126
+ return this.store.getObjects(subject, namespaces_1.ns.rdfs('label'), null);
127
+ }
128
+ /**
129
+ * Finds the rdfs:label whose language tag matches the given language
130
+ * @param subject The RDF.Term to find the rdfs:label for
131
+ * @param store A N3 quad store
132
+ * @param language A language tag
133
+ * @returns An RDF.Literal or undefined if not found
134
+ */
135
+ getLabel(subject, language) {
136
+ return this.getLabels(subject).find(x => x.language === (language || ''));
137
+ }
138
+ /**
139
+ * Find all rdfs:comments for a given subject
140
+ * @param subject The RDF.Term to find the rdfs:comments for
141
+ * @param store A N3 quad store
142
+ * @returns An array of RDF.Literals
143
+ */
144
+ getDefinitions(subject) {
145
+ return this.store.getObjects(subject, namespaces_1.ns.rdfs('comment'), null);
146
+ }
147
+ /**
148
+ * Finds the rdfs:comment whose language tag matches the given language
149
+ * @param subject The RDF.Term to find the rdfs:comment for
150
+ * @param store A N3 quad store
151
+ * @param language A language tag
152
+ * @returns An RDF.Literal or undefined if not found
153
+ */
154
+ getDefinition(subject, language) {
155
+ return this.getDefinitions(subject).find(x => x.language === (language || ''));
156
+ }
157
+ /**
158
+ * Finds the rdfs:range of a given RDF.Term
159
+ * @param subject The RDF.Term to find the range of
160
+ * @param store A N3 quad store
161
+ * @returns An RDF.Term or undefined if not found
162
+ */
163
+ getRange(subject) {
164
+ return this.store.getObjects(subject, namespaces_1.ns.rdfs('range'), null).shift();
165
+ }
166
+ /**
167
+ * Finds the rdfs:domain of a given RDF.Term
168
+ * @param subject The RDF.Term to find the domain of
169
+ * @param store A N3 quad store
170
+ * @returns An RDF.Term or undefined if not found
171
+ */
172
+ getDomain(subject) {
173
+ return this.store.getObjects(subject, namespaces_1.ns.rdfs('domain'), null).shift();
174
+ }
175
+ /**
176
+ * Finds all the vann:usageNotes of a given RDF.Term
177
+ * @param subject The RDF.Term to find the usage notes for
178
+ * @param store A N3 quad store
179
+ * @returns An array of RDF.Literals
180
+ */
181
+ getUsageNotes(subject) {
182
+ return this.store.getObjects(subject, namespaces_1.ns.vann('usageNote'), null);
183
+ }
184
+ /**
185
+ * Finds the vann:usageNote of which the language tag matches the given language
186
+ * @param subject The RDF.Term to find the usage note for
187
+ * @param store A N3 quad store
188
+ * @param language A language tag
189
+ * @returns An RDF.Literal or undefined if not found
190
+ */
191
+ getUsageNote(subject, language) {
192
+ return this.getUsageNotes(subject).find(x => x.language === (language || ''));
193
+ }
194
+ /**
195
+ * Finds the example:scope of a given subject
196
+ * @param subject The RDF.Term to find the scope for
197
+ * @returns An RDF.NamedNode or undefined if not found
198
+ */
199
+ getScope(subject) {
200
+ return this.store.getObjects(subject, namespaces_1.ns.example('scope'), null).shift();
201
+ }
202
+ /**
203
+ * Finds the shacl:minCardinality for a given subject
204
+ * @param subject The RDF.Term to find the shacl:minCardinaly for
205
+ * @returns An RDF.Literal or undefined if not found
206
+ */
207
+ getMinCardinality(subject) {
208
+ return this.store.getObjects(subject, namespaces_1.ns.shacl('minCount'), null).shift();
209
+ }
210
+ /**
211
+ * Finds the shacl:maxCardinality for a given subject
212
+ * @param subject The RDF.Term to find the shacl:maxCardinaly for
213
+ * @returns An RDF.Literal or undefined if not found
214
+ */
215
+ getMaxCardinality(subject) {
216
+ return this.store.getObjects(subject, namespaces_1.ns.shacl('maxCount'), null).shift();
217
+ }
218
+ /**
219
+ * Finds all the rdfs:subClassOf of a given RDF.Term
220
+ * @param subject the RDF.Term to find the parents of
221
+ * @param store A N3 quad store
222
+ * @returns An array of RDF.Terms
223
+ */
224
+ getParentsOfClass(subject) {
225
+ return this.store.getObjects(subject, namespaces_1.ns.rdfs('subClassOf'), null);
226
+ }
227
+ /**
228
+ * Finds the rdfs:subPropertyOf of a given RDF.Term
229
+ * @param subject The RDF.Term to find the parent of
230
+ * @param store A N3 quad store
231
+ * @returns An RDF.Term or undefined if not found
232
+ */
233
+ getParentOfProperty(subject) {
234
+ return this.store.getObjects(subject, namespaces_1.ns.rdfs('subPropertyOf'), null).shift();
235
+ }
236
+ /**
237
+ * Find the subject of the statement that matches the given subject, predicate and object
238
+ * @param statementSubject The subject to match the statement subject
239
+ * @param statementPredicate The predicate to match the statement predicate
240
+ * @param statementObject The object to match the statement object
241
+ * @param store An N3 quad store
242
+ * @returns an RDF.Term or undefined if none found
243
+ */
244
+ getTargetStatementId(statementSubject, statementPredicate, statementObject) {
245
+ const statementIds = this.store.getSubjects(namespaces_1.ns.rdf('type'), namespaces_1.ns.rdf('Statement'), null);
246
+ const statementSubjectPredicateSubjects = this.store.getSubjects(namespaces_1.ns.rdf('subject'), statementSubject, null);
247
+ const statementPredicatePredicateSubjects = this.store.getSubjects(namespaces_1.ns.rdf('predicate'), statementPredicate, null);
248
+ const statementObjectPredicateSubjects = this.store.getSubjects(namespaces_1.ns.rdf('object'), statementObject, null);
249
+ const targetIds = statementIds
250
+ .filter(x => statementSubjectPredicateSubjects.some(y => y.value === x.value))
251
+ .filter(x => statementPredicatePredicateSubjects.some(y => y.value === x.value))
252
+ .filter(x => statementObjectPredicateSubjects.some(y => y.value === x.value));
253
+ if (targetIds.length > 1) {
254
+ throw new Error(`Found multiple statements with subject "${statementSubject.value}", predicate "${statementPredicate.value}" and object "${statementObject.value}".`);
255
+ }
256
+ return targetIds.shift();
257
+ }
258
+ /**
259
+ * Finds the assigned URI in rdf:Statements
260
+ * @param subject The statement subject
261
+ * @param predicate The statement predicate
262
+ * @param object The statement object for which the assigned URI must be found
263
+ * @param store A N3 quad store
264
+ * @returns An RDF.Term or undefined if not found
265
+ */
266
+ getAssignedUriViaStatements(subject, predicate, object) {
267
+ const statementId = this.getTargetStatementId(subject, predicate, object);
268
+ if (!statementId) {
269
+ return undefined;
270
+ }
271
+ return this.getAssignedUri(statementId);
272
+ }
273
+ /**
274
+ * Finds the rdfs:label for an RDF.Term in rdf:Statements
275
+ * @param subject The statement subject
276
+ * @param predicate The statement predicate
277
+ * @param object The statement object for which the label must be found
278
+ * @param store A N3 quad store
279
+ * @param language A language tag
280
+ * @returns An RDF.Literal or undefined if not found
281
+ */
282
+ getLabelViaStatements(subject, predicate, object, language) {
283
+ const statementId = this.getTargetStatementId(subject, predicate, object);
284
+ if (!statementId) {
285
+ return undefined;
286
+ }
287
+ const label = this.getLabel(statementId, language);
288
+ return label || this.getLabel(statementId);
289
+ }
290
+ /**
291
+ * Finds the rdfs:comment for an RDF.Term in rdf:Statements
292
+ * @param subject The statement subject
293
+ * @param predicate The statement predicate
294
+ * @param object The statement object for which the definition must be found
295
+ * @param store A N3 quad store
296
+ * @param language A language tag
297
+ * @returns An RDF.Literal or undefined if not found
298
+ */
299
+ getDefinitionViaStatements(subject, predicate, object, language) {
300
+ const statementId = this.getTargetStatementId(subject, predicate, object);
301
+ if (!statementId) {
302
+ return undefined;
303
+ }
304
+ const definition = this.getDefinition(statementId, language);
305
+ return definition || this.getDefinition(statementId);
306
+ }
307
+ /**
308
+ * Finds the vann:usageNote for an RDF.Term in rdf:Statements
309
+ * @param subject The statement subject
310
+ * @param predicate The statement predicate
311
+ * @param object The statement object for which the usage note must be found
312
+ * @param store A N3 quad store
313
+ * @param language A language tag
314
+ * @returns An RDF.Literal or undefined if not found
315
+ */
316
+ getUsageNoteViaStatements(subject, predicate, object, language) {
317
+ const statementId = this.getTargetStatementId(subject, predicate, object);
318
+ if (!statementId) {
319
+ return undefined;
320
+ }
321
+ const usageNote = this.getUsageNote(statementId, language);
322
+ return usageNote || this.getUsageNote(statementId);
323
+ }
324
+ };
325
+ QuadStore = __decorate([
326
+ (0, inversify_1.injectable)(),
327
+ __metadata("design:paramtypes", [])
328
+ ], QuadStore);
329
+ exports.QuadStore = QuadStore;
330
+ //# sourceMappingURL=QuadStore.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslo-flanders/core",
3
- "version": "0.0.3-alpha.0",
3
+ "version": "0.0.4-alpha.0",
4
4
  "description": "Core interfaces and utilities",
5
5
  "author": "Digitaal Vlaanderen <https://data.vlaanderen.be/id/organisatie/OVO002949>",
6
6
  "homepage": "https://github.com/informatievlaanderen/OSLO-UML-Transformer/tree/main/packages/oslo-core#readme",
@@ -50,13 +50,15 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "crypto-js": "^4.1.1",
53
+ "inversify": "^6.0.1",
53
54
  "n3": "^1.16.2",
54
55
  "node-fetch": "^2.6.7",
55
56
  "rdf-data-factory": "^1.1.1",
56
57
  "rdf-parse": "^2.1.1",
57
58
  "reflect-metadata": "^0.1.13",
58
59
  "streamify-string": "^1.0.1",
59
- "winston": "^3.8.2"
60
+ "winston": "^3.8.2",
61
+ "winston-transport": "^4.5.0"
60
62
  },
61
63
  "devDependencies": {
62
64
  "@rdfjs/types": "^1.1.0",
@@ -1,8 +0,0 @@
1
- import type { IConfiguration } from './IConfiguration';
2
- /**
3
- * Interface that must be implemented by classes that use an RDF file as input and generates an artefact
4
- */
5
- export interface IGenerationService {
6
- configuration: IConfiguration;
7
- run: () => Promise<void>;
8
- }
@@ -1,136 +0,0 @@
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;
@@ -1,257 +0,0 @@
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