@nahisaho/musubix-ontology-mcp 1.0.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/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/index.d.ts +6 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/index.js +6 -0
- package/dist/inference/index.js.map +1 -0
- package/dist/inference/rule-engine.d.ts +149 -0
- package/dist/inference/rule-engine.d.ts.map +1 -0
- package/dist/inference/rule-engine.js +478 -0
- package/dist/inference/rule-engine.js.map +1 -0
- package/dist/integration/index.d.ts +6 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +6 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/pattern-bridge.d.ts +146 -0
- package/dist/integration/pattern-bridge.d.ts.map +1 -0
- package/dist/integration/pattern-bridge.js +517 -0
- package/dist/integration/pattern-bridge.js.map +1 -0
- package/dist/privacy/index.d.ts +6 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +6 -0
- package/dist/privacy/index.js.map +1 -0
- package/dist/privacy/privacy-guard.d.ts +43 -0
- package/dist/privacy/privacy-guard.d.ts.map +1 -0
- package/dist/privacy/privacy-guard.js +59 -0
- package/dist/privacy/privacy-guard.js.map +1 -0
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +7 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/n3-store.d.ts +115 -0
- package/dist/store/n3-store.d.ts.map +1 -0
- package/dist/store/n3-store.js +344 -0
- package/dist/store/n3-store.js.map +1 -0
- package/dist/store/ontology-store.d.ts +59 -0
- package/dist/store/ontology-store.d.ts.map +1 -0
- package/dist/store/ontology-store.js +135 -0
- package/dist/store/ontology-store.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAA6D,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview N3.js-based RDF triple store
|
|
3
|
+
* @traceability TSK-ONTO-001, REQ-ONTO-001-F001
|
|
4
|
+
*/
|
|
5
|
+
import type { Triple, OntologyStoreConfig } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Query pattern for SPARQL-like queries
|
|
8
|
+
*/
|
|
9
|
+
export interface QueryPattern {
|
|
10
|
+
subject?: string;
|
|
11
|
+
predicate?: string;
|
|
12
|
+
object?: string;
|
|
13
|
+
graph?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* N3 Query result (different from types.ts QueryResult)
|
|
17
|
+
*/
|
|
18
|
+
export interface N3QueryResult {
|
|
19
|
+
subject: string;
|
|
20
|
+
predicate: string;
|
|
21
|
+
object: string;
|
|
22
|
+
graph?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Inference rule
|
|
26
|
+
*/
|
|
27
|
+
export interface InferenceRule {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
pattern: QueryPattern;
|
|
31
|
+
conclusion: (bindings: Record<string, string>) => Triple[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* N3.js-based RDF store with inference support
|
|
35
|
+
*
|
|
36
|
+
* @description
|
|
37
|
+
* Provides a high-performance RDF triple store using N3.js.
|
|
38
|
+
* Supports:
|
|
39
|
+
* - Turtle/N-Triples/N-Quads parsing and serialization
|
|
40
|
+
* - Pattern-based querying
|
|
41
|
+
* - Basic RDFS inference
|
|
42
|
+
* - Named graphs
|
|
43
|
+
*/
|
|
44
|
+
export declare class N3Store {
|
|
45
|
+
private store;
|
|
46
|
+
private config;
|
|
47
|
+
private dirty;
|
|
48
|
+
private inferenceRules;
|
|
49
|
+
constructor(config?: Partial<OntologyStoreConfig>);
|
|
50
|
+
/**
|
|
51
|
+
* Initialize RDFS inference rules
|
|
52
|
+
*/
|
|
53
|
+
private initializeInferenceRules;
|
|
54
|
+
/**
|
|
55
|
+
* Load store from Turtle file
|
|
56
|
+
*/
|
|
57
|
+
load(): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Save store to Turtle file
|
|
60
|
+
*/
|
|
61
|
+
save(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Add a triple to the store
|
|
64
|
+
*/
|
|
65
|
+
addTriple(triple: Triple, graph?: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Add multiple triples
|
|
68
|
+
*/
|
|
69
|
+
addTriples(triples: Triple[], graph?: string): number;
|
|
70
|
+
/**
|
|
71
|
+
* Remove a triple from the store
|
|
72
|
+
*/
|
|
73
|
+
removeTriple(triple: Triple, graph?: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Query triples by pattern
|
|
76
|
+
*/
|
|
77
|
+
query(pattern: QueryPattern): N3QueryResult[];
|
|
78
|
+
/**
|
|
79
|
+
* Check if a triple exists
|
|
80
|
+
*/
|
|
81
|
+
has(triple: Triple, graph?: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Get all subjects of a given type
|
|
84
|
+
*/
|
|
85
|
+
getSubjectsOfType(typeUri: string): string[];
|
|
86
|
+
/**
|
|
87
|
+
* Get all properties of a subject
|
|
88
|
+
*/
|
|
89
|
+
getProperties(subject: string): N3QueryResult[];
|
|
90
|
+
/**
|
|
91
|
+
* Parse and import Turtle content
|
|
92
|
+
*/
|
|
93
|
+
importTurtle(content: string): Promise<number>;
|
|
94
|
+
/**
|
|
95
|
+
* Export store as Turtle
|
|
96
|
+
*/
|
|
97
|
+
exportTurtle(prefixes?: Record<string, string>): Promise<string>;
|
|
98
|
+
/**
|
|
99
|
+
* Apply inference rules for a triple
|
|
100
|
+
*/
|
|
101
|
+
private applyInference;
|
|
102
|
+
/**
|
|
103
|
+
* Clear all triples
|
|
104
|
+
*/
|
|
105
|
+
clear(): void;
|
|
106
|
+
/**
|
|
107
|
+
* Get triple count
|
|
108
|
+
*/
|
|
109
|
+
get size(): number;
|
|
110
|
+
/**
|
|
111
|
+
* Get all named graphs
|
|
112
|
+
*/
|
|
113
|
+
getGraphs(): string[];
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=n3-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n3-store.d.ts","sourceRoot":"","sources":["../../src/store/n3-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;CAC5D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAarD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkEhC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC3B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAuBlD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAUrD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAkBrD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,EAAE;IAoB7C;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAW5C;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAM5C;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAU/C;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAepD;;OAEG;IACH,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBhE;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;CAUtB"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview N3.js-based RDF triple store
|
|
3
|
+
* @traceability TSK-ONTO-001, REQ-ONTO-001-F001
|
|
4
|
+
*/
|
|
5
|
+
import * as N3 from 'n3';
|
|
6
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
7
|
+
import { dirname } from 'node:path';
|
|
8
|
+
const { DataFactory, Store, Writer, Parser } = N3;
|
|
9
|
+
const { namedNode, literal, quad } = DataFactory;
|
|
10
|
+
/**
|
|
11
|
+
* N3.js-based RDF store with inference support
|
|
12
|
+
*
|
|
13
|
+
* @description
|
|
14
|
+
* Provides a high-performance RDF triple store using N3.js.
|
|
15
|
+
* Supports:
|
|
16
|
+
* - Turtle/N-Triples/N-Quads parsing and serialization
|
|
17
|
+
* - Pattern-based querying
|
|
18
|
+
* - Basic RDFS inference
|
|
19
|
+
* - Named graphs
|
|
20
|
+
*/
|
|
21
|
+
export class N3Store {
|
|
22
|
+
store;
|
|
23
|
+
config;
|
|
24
|
+
dirty = false;
|
|
25
|
+
inferenceRules = [];
|
|
26
|
+
constructor(config = {}) {
|
|
27
|
+
this.store = new Store();
|
|
28
|
+
this.config = {
|
|
29
|
+
storagePath: config.storagePath ?? './storage/ontology/n3-store.ttl',
|
|
30
|
+
enableInference: config.enableInference ?? true,
|
|
31
|
+
maxTriples: config.maxTriples ?? 100000,
|
|
32
|
+
};
|
|
33
|
+
if (this.config.enableInference) {
|
|
34
|
+
this.initializeInferenceRules();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Initialize RDFS inference rules
|
|
39
|
+
*/
|
|
40
|
+
initializeInferenceRules() {
|
|
41
|
+
// rdfs:subClassOf transitivity
|
|
42
|
+
this.inferenceRules.push({
|
|
43
|
+
id: 'rdfs-subclass-transitivity',
|
|
44
|
+
name: 'RDFS SubClass Transitivity',
|
|
45
|
+
pattern: {
|
|
46
|
+
predicate: 'http://www.w3.org/2000/01/rdf-schema#subClassOf',
|
|
47
|
+
},
|
|
48
|
+
conclusion: (bindings) => {
|
|
49
|
+
// A subClassOf B, B subClassOf C => A subClassOf C
|
|
50
|
+
const results = [];
|
|
51
|
+
const subClassOf = 'http://www.w3.org/2000/01/rdf-schema#subClassOf';
|
|
52
|
+
// Find all superclasses of bindings.object
|
|
53
|
+
const superQuads = this.store.getQuads(namedNode(bindings.object), namedNode(subClassOf), null, null);
|
|
54
|
+
for (const superQuad of superQuads) {
|
|
55
|
+
results.push({
|
|
56
|
+
subject: bindings.subject,
|
|
57
|
+
predicate: subClassOf,
|
|
58
|
+
object: superQuad.object.value,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return results;
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
// rdf:type propagation via rdfs:subClassOf
|
|
65
|
+
this.inferenceRules.push({
|
|
66
|
+
id: 'rdfs-type-subclass',
|
|
67
|
+
name: 'RDFS Type via SubClass',
|
|
68
|
+
pattern: {
|
|
69
|
+
predicate: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type',
|
|
70
|
+
},
|
|
71
|
+
conclusion: (bindings) => {
|
|
72
|
+
const results = [];
|
|
73
|
+
const rdfType = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
|
|
74
|
+
const subClassOf = 'http://www.w3.org/2000/01/rdf-schema#subClassOf';
|
|
75
|
+
// Find all superclasses of bindings.object
|
|
76
|
+
const superQuads = this.store.getQuads(namedNode(bindings.object), namedNode(subClassOf), null, null);
|
|
77
|
+
for (const superQuad of superQuads) {
|
|
78
|
+
results.push({
|
|
79
|
+
subject: bindings.subject,
|
|
80
|
+
predicate: rdfType,
|
|
81
|
+
object: superQuad.object.value,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Load store from Turtle file
|
|
90
|
+
*/
|
|
91
|
+
async load() {
|
|
92
|
+
try {
|
|
93
|
+
const data = await readFile(this.config.storagePath, 'utf-8');
|
|
94
|
+
const parser = new Parser();
|
|
95
|
+
const quads = parser.parse(data);
|
|
96
|
+
this.store = new Store(quads);
|
|
97
|
+
this.dirty = false;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// File doesn't exist - start with empty store
|
|
101
|
+
this.store = new Store();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Save store to Turtle file
|
|
106
|
+
*/
|
|
107
|
+
async save() {
|
|
108
|
+
if (!this.dirty)
|
|
109
|
+
return;
|
|
110
|
+
const dir = dirname(this.config.storagePath);
|
|
111
|
+
await mkdir(dir, { recursive: true });
|
|
112
|
+
const writer = new Writer({
|
|
113
|
+
prefixes: {
|
|
114
|
+
rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
|
|
115
|
+
rdfs: 'http://www.w3.org/2000/01/rdf-schema#',
|
|
116
|
+
owl: 'http://www.w3.org/2002/07/owl#',
|
|
117
|
+
xsd: 'http://www.w3.org/2001/XMLSchema#',
|
|
118
|
+
sdd: 'https://musubix.dev/ontology/sdd#',
|
|
119
|
+
pattern: 'https://musubix.dev/ontology/pattern#',
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
const quads = this.store.getQuads(null, null, null, null);
|
|
123
|
+
for (const q of quads) {
|
|
124
|
+
writer.addQuad(q);
|
|
125
|
+
}
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
writer.end((error, result) => {
|
|
128
|
+
if (error) {
|
|
129
|
+
reject(error);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
writeFile(this.config.storagePath, result, 'utf-8')
|
|
133
|
+
.then(() => {
|
|
134
|
+
this.dirty = false;
|
|
135
|
+
resolve();
|
|
136
|
+
})
|
|
137
|
+
.catch(reject);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Add a triple to the store
|
|
144
|
+
*/
|
|
145
|
+
addTriple(triple, graph) {
|
|
146
|
+
if (this.store.size >= this.config.maxTriples) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
const subject = namedNode(triple.subject);
|
|
150
|
+
const predicate = namedNode(triple.predicate);
|
|
151
|
+
const object = triple.object.startsWith('http://') || triple.object.startsWith('https://')
|
|
152
|
+
? namedNode(triple.object)
|
|
153
|
+
: literal(triple.object);
|
|
154
|
+
const graphNode = graph ? namedNode(graph) : DataFactory.defaultGraph();
|
|
155
|
+
this.store.addQuad(quad(subject, predicate, object, graphNode));
|
|
156
|
+
this.dirty = true;
|
|
157
|
+
// Apply inference if enabled
|
|
158
|
+
if (this.config.enableInference) {
|
|
159
|
+
this.applyInference(triple);
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Add multiple triples
|
|
165
|
+
*/
|
|
166
|
+
addTriples(triples, graph) {
|
|
167
|
+
let added = 0;
|
|
168
|
+
for (const triple of triples) {
|
|
169
|
+
if (this.addTriple(triple, graph)) {
|
|
170
|
+
added++;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return added;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Remove a triple from the store
|
|
177
|
+
*/
|
|
178
|
+
removeTriple(triple, graph) {
|
|
179
|
+
const subject = namedNode(triple.subject);
|
|
180
|
+
const predicate = namedNode(triple.predicate);
|
|
181
|
+
const object = triple.object.startsWith('http://') || triple.object.startsWith('https://')
|
|
182
|
+
? namedNode(triple.object)
|
|
183
|
+
: literal(triple.object);
|
|
184
|
+
const graphNode = graph ? namedNode(graph) : null;
|
|
185
|
+
const quads = this.store.getQuads(subject, predicate, object, graphNode);
|
|
186
|
+
if (quads.length === 0)
|
|
187
|
+
return false;
|
|
188
|
+
for (const q of quads) {
|
|
189
|
+
this.store.removeQuad(q);
|
|
190
|
+
}
|
|
191
|
+
this.dirty = true;
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Query triples by pattern
|
|
196
|
+
*/
|
|
197
|
+
query(pattern) {
|
|
198
|
+
const subject = pattern.subject ? namedNode(pattern.subject) : null;
|
|
199
|
+
const predicate = pattern.predicate ? namedNode(pattern.predicate) : null;
|
|
200
|
+
const object = pattern.object
|
|
201
|
+
? pattern.object.startsWith('http://') || pattern.object.startsWith('https://')
|
|
202
|
+
? namedNode(pattern.object)
|
|
203
|
+
: literal(pattern.object)
|
|
204
|
+
: null;
|
|
205
|
+
const graph = pattern.graph ? namedNode(pattern.graph) : null;
|
|
206
|
+
const quads = this.store.getQuads(subject, predicate, object, graph);
|
|
207
|
+
return quads.map((q) => ({
|
|
208
|
+
subject: q.subject.value,
|
|
209
|
+
predicate: q.predicate.value,
|
|
210
|
+
object: q.object.value,
|
|
211
|
+
graph: q.graph.value || undefined,
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Check if a triple exists
|
|
216
|
+
*/
|
|
217
|
+
has(triple, graph) {
|
|
218
|
+
const subject = namedNode(triple.subject);
|
|
219
|
+
const predicate = namedNode(triple.predicate);
|
|
220
|
+
const object = triple.object.startsWith('http://') || triple.object.startsWith('https://')
|
|
221
|
+
? namedNode(triple.object)
|
|
222
|
+
: literal(triple.object);
|
|
223
|
+
const graphNode = graph ? namedNode(graph) : null;
|
|
224
|
+
return this.store.getQuads(subject, predicate, object, graphNode).length > 0;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get all subjects of a given type
|
|
228
|
+
*/
|
|
229
|
+
getSubjectsOfType(typeUri) {
|
|
230
|
+
const rdfType = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
|
|
231
|
+
const quads = this.store.getQuads(null, namedNode(rdfType), namedNode(typeUri), null);
|
|
232
|
+
return quads.map((q) => q.subject.value);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get all properties of a subject
|
|
236
|
+
*/
|
|
237
|
+
getProperties(subject) {
|
|
238
|
+
const quads = this.store.getQuads(namedNode(subject), null, null, null);
|
|
239
|
+
return quads.map((q) => ({
|
|
240
|
+
subject: q.subject.value,
|
|
241
|
+
predicate: q.predicate.value,
|
|
242
|
+
object: q.object.value,
|
|
243
|
+
graph: q.graph.value || undefined,
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Parse and import Turtle content
|
|
248
|
+
*/
|
|
249
|
+
async importTurtle(content) {
|
|
250
|
+
const parser = new Parser();
|
|
251
|
+
const quads = parser.parse(content);
|
|
252
|
+
let added = 0;
|
|
253
|
+
for (const q of quads) {
|
|
254
|
+
if (this.store.size >= this.config.maxTriples)
|
|
255
|
+
break;
|
|
256
|
+
this.store.addQuad(q);
|
|
257
|
+
added++;
|
|
258
|
+
}
|
|
259
|
+
this.dirty = true;
|
|
260
|
+
return added;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Export store as Turtle
|
|
264
|
+
*/
|
|
265
|
+
exportTurtle(prefixes) {
|
|
266
|
+
const writer = new Writer({
|
|
267
|
+
prefixes: prefixes ?? {
|
|
268
|
+
rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
|
|
269
|
+
rdfs: 'http://www.w3.org/2000/01/rdf-schema#',
|
|
270
|
+
owl: 'http://www.w3.org/2002/07/owl#',
|
|
271
|
+
sdd: 'https://musubix.dev/ontology/sdd#',
|
|
272
|
+
pattern: 'https://musubix.dev/ontology/pattern#',
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
const quads = this.store.getQuads(null, null, null, null);
|
|
276
|
+
for (const q of quads) {
|
|
277
|
+
writer.addQuad(q);
|
|
278
|
+
}
|
|
279
|
+
return new Promise((resolve, reject) => {
|
|
280
|
+
writer.end((error, result) => {
|
|
281
|
+
if (error)
|
|
282
|
+
reject(error);
|
|
283
|
+
else
|
|
284
|
+
resolve(result);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Apply inference rules for a triple
|
|
290
|
+
*/
|
|
291
|
+
applyInference(triple) {
|
|
292
|
+
const bindings = {
|
|
293
|
+
subject: triple.subject,
|
|
294
|
+
predicate: triple.predicate,
|
|
295
|
+
object: triple.object,
|
|
296
|
+
};
|
|
297
|
+
for (const rule of this.inferenceRules) {
|
|
298
|
+
// Check if pattern matches
|
|
299
|
+
if (rule.pattern.predicate && rule.pattern.predicate !== triple.predicate) {
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (rule.pattern.subject && rule.pattern.subject !== triple.subject) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (rule.pattern.object && rule.pattern.object !== triple.object) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
// Apply rule and add inferred triples
|
|
309
|
+
const inferred = rule.conclusion(bindings);
|
|
310
|
+
for (const inferredTriple of inferred) {
|
|
311
|
+
if (!this.has(inferredTriple)) {
|
|
312
|
+
this.addTriple(inferredTriple);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Clear all triples
|
|
319
|
+
*/
|
|
320
|
+
clear() {
|
|
321
|
+
this.store = new Store();
|
|
322
|
+
this.dirty = true;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Get triple count
|
|
326
|
+
*/
|
|
327
|
+
get size() {
|
|
328
|
+
return this.store.size;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Get all named graphs
|
|
332
|
+
*/
|
|
333
|
+
getGraphs() {
|
|
334
|
+
const graphs = new Set();
|
|
335
|
+
const quads = this.store.getQuads(null, null, null, null);
|
|
336
|
+
for (const q of quads) {
|
|
337
|
+
if (q.graph.value) {
|
|
338
|
+
graphs.add(q.graph.value);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return Array.from(graphs);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=n3-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n3-store.js","sourceRoot":"","sources":["../../src/store/n3-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Ontology store with local persistence
|
|
3
|
+
* @traceability TSK-ONTO-001, REQ-ONTO-001-F001
|
|
4
|
+
*/
|
|
5
|
+
import type { Ontology, Triple, OntologyStoreConfig } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Ontology store with local JSON persistence
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
* Manages ontology storage locally (no external communication).
|
|
11
|
+
* Supports CRUD operations on ontologies and triples.
|
|
12
|
+
*/
|
|
13
|
+
export declare class OntologyStore {
|
|
14
|
+
private ontologies;
|
|
15
|
+
private config;
|
|
16
|
+
private dirty;
|
|
17
|
+
constructor(config?: Partial<OntologyStoreConfig>);
|
|
18
|
+
/**
|
|
19
|
+
* Load store from disk
|
|
20
|
+
*/
|
|
21
|
+
load(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Save store to disk
|
|
24
|
+
*/
|
|
25
|
+
save(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Create new ontology
|
|
28
|
+
*/
|
|
29
|
+
create(id: string, namespace: string, prefixes?: Record<string, string>): Ontology;
|
|
30
|
+
/**
|
|
31
|
+
* Get ontology by ID
|
|
32
|
+
*/
|
|
33
|
+
get(id: string): Ontology | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Delete ontology
|
|
36
|
+
*/
|
|
37
|
+
delete(id: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Add triple to ontology
|
|
40
|
+
*/
|
|
41
|
+
addTriple(ontologyId: string, triple: Triple): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get all triples from ontology
|
|
44
|
+
*/
|
|
45
|
+
getTriples(ontologyId: string): Triple[];
|
|
46
|
+
/**
|
|
47
|
+
* List all ontologies
|
|
48
|
+
*/
|
|
49
|
+
list(): Ontology[];
|
|
50
|
+
/**
|
|
51
|
+
* Get total triple count
|
|
52
|
+
*/
|
|
53
|
+
get tripleCount(): number;
|
|
54
|
+
/**
|
|
55
|
+
* Get ontology count
|
|
56
|
+
*/
|
|
57
|
+
get size(): number;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=ontology-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ontology-store.d.ts","sourceRoot":"","sources":["../../src/store/ontology-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAQrD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,QAAQ;IAetF;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIrC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ3B;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAiBtD;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAIxC;;OAEG;IACH,IAAI,IAAI,QAAQ,EAAE;IAIlB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAGxB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|