opentology 0.3.0 → 0.3.1
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/commands/diff.js +7 -1
- package/dist/lib/deep-scan-triples.js +7 -5
- package/dist/lib/embedded-adapter.d.ts +4 -1
- package/dist/lib/embedded-adapter.js +12 -4
- package/dist/lib/http-adapter.d.ts +4 -1
- package/dist/lib/http-adapter.js +12 -4
- package/dist/lib/store-adapter.d.ts +4 -1
- package/dist/mcp/server.js +14 -3
- package/dist/templates/claude-md-context.js +47 -1
- package/dist/templates/otx-ontology.d.ts +1 -1
- package/dist/templates/otx-ontology.js +4 -1
- package/package.json +1 -1
package/dist/commands/diff.js
CHANGED
|
@@ -27,7 +27,13 @@ export function registerDiff(program) {
|
|
|
27
27
|
for (const triple of result.removed) {
|
|
28
28
|
console.log(pc.red(`- ${triple}`));
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
const addedLabel = result.truncated && result.addedCount > result.added.length
|
|
31
|
+
? `${result.added.length}/${result.addedCount} added (truncated)`
|
|
32
|
+
: `${result.addedCount} added`;
|
|
33
|
+
const removedLabel = result.truncated && result.removedCount > result.removed.length
|
|
34
|
+
? `${result.removed.length}/${result.removedCount} removed (truncated)`
|
|
35
|
+
: `${result.removedCount} removed`;
|
|
36
|
+
console.log(`\n${addedLabel}, ${removedLabel}, ${result.unchanged} unchanged`);
|
|
31
37
|
}
|
|
32
38
|
catch (err) {
|
|
33
39
|
const message = err.message;
|
|
@@ -75,11 +75,11 @@ export function generateSymbolTriples(result) {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
for (const call of result.methodCalls) {
|
|
78
|
-
|
|
79
|
-
triples.push(
|
|
80
|
-
|
|
81
|
-
triples.push(
|
|
82
|
-
triples.push(
|
|
78
|
+
const callUri = `urn:call:${encodeSegment(call.caller)}--${encodeSegment(call.callee)}`;
|
|
79
|
+
triples.push(`<${callUri}> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <${OTX}MethodCall> .`);
|
|
80
|
+
triples.push(`<${callUri}> <${OTX}callerSymbol> "${esc(call.caller)}" .`);
|
|
81
|
+
triples.push(`<${callUri}> <${OTX}calleeSymbol> "${esc(call.callee)}" .`);
|
|
82
|
+
triples.push(`<${callUri}> <${OTX}title> "${esc(call.caller)} -> ${esc(call.callee)}" .`);
|
|
83
83
|
}
|
|
84
84
|
return triples;
|
|
85
85
|
}
|
|
@@ -96,6 +96,8 @@ export async function deleteExistingSymbols(adapter, graphUri, modulePaths) {
|
|
|
96
96
|
const modUri = moduleUri(modPath);
|
|
97
97
|
await adapter.sparqlUpdate(`DELETE WHERE { GRAPH <${graphUri}> { ?s <${OTX}definedIn> <${modUri}> . ?s ?p ?o } }`);
|
|
98
98
|
}
|
|
99
|
+
// Clean up MethodCall triples (no definedIn link, so delete all and re-insert)
|
|
100
|
+
await adapter.sparqlUpdate(`DELETE WHERE { GRAPH <${graphUri}> { ?s a <${OTX}MethodCall> . ?s ?p ?o } }`);
|
|
99
101
|
}
|
|
100
102
|
export async function pushSymbolTriples(adapter, graphUri, result) {
|
|
101
103
|
// Collect all module paths for scoped delete
|
|
@@ -18,10 +18,13 @@ export declare class EmbeddedAdapter implements StoreAdapter {
|
|
|
18
18
|
turtle?: string;
|
|
19
19
|
where?: string;
|
|
20
20
|
}): Promise<void>;
|
|
21
|
-
diffGraph(graphUri: string, localTurtle: string): Promise<{
|
|
21
|
+
diffGraph(graphUri: string, localTurtle: string, limit?: number): Promise<{
|
|
22
22
|
added: string[];
|
|
23
23
|
removed: string[];
|
|
24
24
|
unchanged: number;
|
|
25
|
+
addedCount: number;
|
|
26
|
+
removedCount: number;
|
|
27
|
+
truncated: boolean;
|
|
25
28
|
}>;
|
|
26
29
|
getSchemaOverview(graphUri: string): Promise<{
|
|
27
30
|
prefixes: Record<string, string>;
|
|
@@ -148,7 +148,7 @@ export class EmbeddedAdapter {
|
|
|
148
148
|
throw new Error('deleteTriples: either options.turtle or options.where must be provided');
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
|
-
async diffGraph(graphUri, localTurtle) {
|
|
151
|
+
async diffGraph(graphUri, localTurtle, limit = 50) {
|
|
152
152
|
const localQuads = await parseTurtle(localTurtle);
|
|
153
153
|
const localSet = new Set(localQuads.map((q) => `${termToSparql(q.subject)} ${termToSparql(q.predicate)} ${termToSparql(q.object)}`));
|
|
154
154
|
// Get remote quads from the store
|
|
@@ -158,10 +158,18 @@ export class EmbeddedAdapter {
|
|
|
158
158
|
const n3q = wasmQuadToN3Quad(q);
|
|
159
159
|
remoteSet.add(`${termToSparql(n3q.subject)} ${termToSparql(n3q.predicate)} ${termToSparql(n3q.object)}`);
|
|
160
160
|
}
|
|
161
|
-
const
|
|
162
|
-
const
|
|
161
|
+
const allAdded = [...localSet].filter((t) => !remoteSet.has(t));
|
|
162
|
+
const allRemoved = [...remoteSet].filter((t) => !localSet.has(t));
|
|
163
163
|
const unchanged = [...localSet].filter((t) => remoteSet.has(t)).length;
|
|
164
|
-
|
|
164
|
+
const truncated = allAdded.length > limit || allRemoved.length > limit;
|
|
165
|
+
return {
|
|
166
|
+
added: allAdded.slice(0, limit),
|
|
167
|
+
removed: allRemoved.slice(0, limit),
|
|
168
|
+
unchanged,
|
|
169
|
+
addedCount: allAdded.length,
|
|
170
|
+
removedCount: allRemoved.length,
|
|
171
|
+
truncated,
|
|
172
|
+
};
|
|
165
173
|
}
|
|
166
174
|
async getSchemaOverview(graphUri) {
|
|
167
175
|
const tripleCount = await this.getGraphTripleCount(graphUri);
|
|
@@ -14,10 +14,13 @@ export declare class HttpAdapter implements StoreAdapter {
|
|
|
14
14
|
turtle?: string;
|
|
15
15
|
where?: string;
|
|
16
16
|
}): Promise<void>;
|
|
17
|
-
diffGraph(graphUri: string, localTurtle: string): Promise<{
|
|
17
|
+
diffGraph(graphUri: string, localTurtle: string, limit?: number): Promise<{
|
|
18
18
|
added: string[];
|
|
19
19
|
removed: string[];
|
|
20
20
|
unchanged: number;
|
|
21
|
+
addedCount: number;
|
|
22
|
+
removedCount: number;
|
|
23
|
+
truncated: boolean;
|
|
21
24
|
}>;
|
|
22
25
|
getSchemaOverview(graphUri: string): Promise<{
|
|
23
26
|
prefixes: Record<string, string>;
|
package/dist/lib/http-adapter.js
CHANGED
|
@@ -115,7 +115,7 @@ export class HttpAdapter {
|
|
|
115
115
|
throw new Error('deleteTriples: either options.turtle or options.where must be provided');
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
async diffGraph(graphUri, localTurtle) {
|
|
118
|
+
async diffGraph(graphUri, localTurtle, limit = 50) {
|
|
119
119
|
const localQuads = await parseTurtle(localTurtle);
|
|
120
120
|
const localSet = new Set(localQuads.map((q) => `${termToSparql(q.subject)} ${termToSparql(q.predicate)} ${termToSparql(q.object)}`));
|
|
121
121
|
// Fetch remote quads via CONSTRUCT
|
|
@@ -125,10 +125,18 @@ export class HttpAdapter {
|
|
|
125
125
|
? await parseTurtle(remoteTurtle)
|
|
126
126
|
: [];
|
|
127
127
|
const remoteSet = new Set(remoteQuads.map((q) => `${termToSparql(q.subject)} ${termToSparql(q.predicate)} ${termToSparql(q.object)}`));
|
|
128
|
-
const
|
|
129
|
-
const
|
|
128
|
+
const allAdded = [...localSet].filter((t) => !remoteSet.has(t));
|
|
129
|
+
const allRemoved = [...remoteSet].filter((t) => !localSet.has(t));
|
|
130
130
|
const unchanged = [...localSet].filter((t) => remoteSet.has(t)).length;
|
|
131
|
-
|
|
131
|
+
const truncated = allAdded.length > limit || allRemoved.length > limit;
|
|
132
|
+
return {
|
|
133
|
+
added: allAdded.slice(0, limit),
|
|
134
|
+
removed: allRemoved.slice(0, limit),
|
|
135
|
+
unchanged,
|
|
136
|
+
addedCount: allAdded.length,
|
|
137
|
+
removedCount: allRemoved.length,
|
|
138
|
+
truncated,
|
|
139
|
+
};
|
|
132
140
|
}
|
|
133
141
|
async getSchemaOverview(graphUri) {
|
|
134
142
|
const tripleCount = await this.getGraphTripleCount(graphUri);
|
|
@@ -34,10 +34,13 @@ export interface StoreAdapter {
|
|
|
34
34
|
}): Promise<void>;
|
|
35
35
|
getGraphTripleCount(graphUri: string): Promise<number>;
|
|
36
36
|
exportGraph(graphUri: string): Promise<string>;
|
|
37
|
-
diffGraph(graphUri: string, localTurtle: string): Promise<{
|
|
37
|
+
diffGraph(graphUri: string, localTurtle: string, limit?: number): Promise<{
|
|
38
38
|
added: string[];
|
|
39
39
|
removed: string[];
|
|
40
40
|
unchanged: number;
|
|
41
|
+
addedCount: number;
|
|
42
|
+
removedCount: number;
|
|
43
|
+
truncated: boolean;
|
|
41
44
|
}>;
|
|
42
45
|
getSchemaOverview(graphUri: string): Promise<{
|
|
43
46
|
prefixes: Record<string, string>;
|
package/dist/mcp/server.js
CHANGED
|
@@ -269,12 +269,13 @@ async function handleDiff(args) {
|
|
|
269
269
|
if (!content) {
|
|
270
270
|
throw new Error('content (Turtle) is required');
|
|
271
271
|
}
|
|
272
|
+
const limit = typeof args.limit === 'number' ? args.limit : 50;
|
|
272
273
|
const { config, graphUri } = resolveConfig({
|
|
273
274
|
graphUri: args.graphUri,
|
|
274
275
|
graph: args.graph,
|
|
275
276
|
});
|
|
276
277
|
const adapter = await createReadyAdapter(config);
|
|
277
|
-
return await adapter.diffGraph(graphUri, content);
|
|
278
|
+
return await adapter.diffGraph(graphUri, content, limit);
|
|
278
279
|
}
|
|
279
280
|
async function handleGraphList(_args) {
|
|
280
281
|
const config = loadConfig();
|
|
@@ -354,9 +355,11 @@ async function handleInfer(args) {
|
|
|
354
355
|
if (clear) {
|
|
355
356
|
await snapshotGraph(adapter, config, graphUri);
|
|
356
357
|
await clearInferences(adapter, graphUri);
|
|
358
|
+
await persistGraph(adapter, config, graphUri);
|
|
357
359
|
return { success: true, cleared: true };
|
|
358
360
|
}
|
|
359
361
|
const result = await materializeInferences(adapter, graphUri);
|
|
362
|
+
await persistGraph(adapter, config, graphUri);
|
|
360
363
|
return result;
|
|
361
364
|
}
|
|
362
365
|
async function handleContextScan(args) {
|
|
@@ -389,7 +392,7 @@ async function handleContextScan(args) {
|
|
|
389
392
|
pushStats,
|
|
390
393
|
_experimental: true,
|
|
391
394
|
_hint: pushStats
|
|
392
|
-
? `Symbol triples pushed: ${pushStats.triplesInserted} triples in ${pushStats.batchCount} batches. Query
|
|
395
|
+
? `Symbol triples pushed: ${pushStats.triplesInserted} triples in ${pushStats.batchCount} batches. Query examples:\n- Classes: SELECT ?c ?name WHERE { ?c a otx:Class ; otx:title ?name }\n- Functions in a module: SELECT ?f ?name WHERE { ?f a otx:Function ; otx:title ?name ; otx:definedIn <urn:module:src/mcp/server> }\n- Call graph: SELECT ?caller ?callee WHERE { ?s a otx:MethodCall ; otx:callerSymbol ?caller ; otx:calleeSymbol ?callee }`
|
|
393
396
|
: 'Deep scan completed but triple push failed. Use push manually with the generated triples.',
|
|
394
397
|
};
|
|
395
398
|
}
|
|
@@ -603,6 +606,7 @@ async function handleContextInit(args) {
|
|
|
603
606
|
moduleStats,
|
|
604
607
|
dependencyHint,
|
|
605
608
|
hooksAutoInstalled: hooksChanged,
|
|
609
|
+
scanSuggestion: 'Run context_scan to populate the knowledge graph. Use depth="module" for file-level dependencies, or depth="symbol" (with includeMethodCalls=true) for class/function/call-level analysis. The symbol scan enables queries like "which functions call persistGraph?" from the graph.',
|
|
606
610
|
};
|
|
607
611
|
}
|
|
608
612
|
async function handleContextLoad() {
|
|
@@ -1086,7 +1090,7 @@ export async function startMcpServer() {
|
|
|
1086
1090
|
},
|
|
1087
1091
|
{
|
|
1088
1092
|
name: 'diff',
|
|
1089
|
-
description: 'Compare local Turtle content against the remote graph. Returns added triples (in local but not remote), removed triples (in remote but not local), and count of unchanged triples.',
|
|
1093
|
+
description: 'Compare local Turtle content against the remote graph. Returns added triples (in local but not remote), removed triples (in remote but not local), and count of unchanged triples. Output is limited to avoid blowing up LLM context windows.',
|
|
1090
1094
|
inputSchema: {
|
|
1091
1095
|
type: 'object',
|
|
1092
1096
|
properties: {
|
|
@@ -1094,6 +1098,10 @@ export async function startMcpServer() {
|
|
|
1094
1098
|
type: 'string',
|
|
1095
1099
|
description: 'Turtle (RDF) content to compare against the remote graph',
|
|
1096
1100
|
},
|
|
1101
|
+
limit: {
|
|
1102
|
+
type: 'number',
|
|
1103
|
+
description: 'Maximum number of added/removed triples to return (default: 50). Total counts are always included.',
|
|
1104
|
+
},
|
|
1097
1105
|
graph: {
|
|
1098
1106
|
type: 'string',
|
|
1099
1107
|
description: 'Logical graph name (as created by graph_create). Resolves to a graph URI via config.',
|
|
@@ -1408,9 +1416,12 @@ export async function startMcpServer() {
|
|
|
1408
1416
|
case 'context_sync': {
|
|
1409
1417
|
const syncConfig = loadConfig();
|
|
1410
1418
|
const syncContextUri = `${syncConfig.graphUri}/context`;
|
|
1419
|
+
const syncSessionsUri = `${syncConfig.graphUri}/sessions`;
|
|
1411
1420
|
const syncAdapter = await createReadyAdapter(syncConfig);
|
|
1412
1421
|
await snapshotGraph(syncAdapter, syncConfig, syncContextUri);
|
|
1413
1422
|
result = await syncContext(syncConfig, process.cwd());
|
|
1423
|
+
await persistGraph(syncAdapter, syncConfig, syncContextUri);
|
|
1424
|
+
await persistGraph(syncAdapter, syncConfig, syncSessionsUri);
|
|
1414
1425
|
break;
|
|
1415
1426
|
}
|
|
1416
1427
|
case 'rollback':
|
|
@@ -26,6 +26,12 @@ This project uses OpenTology as its project context graph.
|
|
|
26
26
|
| \`otx:Knowledge\` | Reusable knowledge |
|
|
27
27
|
| \`otx:Session\` | Session logs |
|
|
28
28
|
| \`otx:Pattern\` | Recurring patterns/conventions |
|
|
29
|
+
| \`otx:Module\` | Source file module |
|
|
30
|
+
| \`otx:Class\` | Class definition (symbol scan) |
|
|
31
|
+
| \`otx:Interface\` | Interface definition (symbol scan) |
|
|
32
|
+
| \`otx:Function\` | Function definition (symbol scan) |
|
|
33
|
+
| \`otx:Method\` | Method definition (symbol scan) |
|
|
34
|
+
| \`otx:MethodCall\` | Call relationship between symbols (symbol scan) |
|
|
29
35
|
|
|
30
36
|
| Property | Range | Description |
|
|
31
37
|
|----------|-------|-------------|
|
|
@@ -36,6 +42,11 @@ This project uses OpenTology as its project context graph.
|
|
|
36
42
|
| \`otx:reason\` | string | Decision rationale |
|
|
37
43
|
| \`otx:nextTodo\` | string | Next action item |
|
|
38
44
|
| \`otx:relatedTo\` | resource | Related entity |
|
|
45
|
+
| \`otx:dependsOn\` | Module | Module import dependency |
|
|
46
|
+
| \`otx:definedIn\` | Module | Which module a symbol belongs to |
|
|
47
|
+
| \`otx:callerSymbol\` | string | Caller in a MethodCall |
|
|
48
|
+
| \`otx:calleeSymbol\` | string | Callee in a MethodCall |
|
|
49
|
+
| \`otx:calls\` | resource | Call relationship |
|
|
39
50
|
|
|
40
51
|
### When to Record
|
|
41
52
|
|
|
@@ -107,13 +118,48 @@ If impact is **high**, inform the user of affected modules and get confirmation
|
|
|
107
118
|
|
|
108
119
|
#### Searching the Knowledge Graph
|
|
109
120
|
|
|
110
|
-
Use \`query\` with SPARQL to find anything in the project graph:
|
|
121
|
+
Use \`query\` with SPARQL to find anything in the project graph. **Always query the graph before reading source files** when investigating code structure, dependencies, or call relationships:
|
|
122
|
+
|
|
111
123
|
- **Decisions**: \`?s a otx:Decision\` — why architectural choices were made
|
|
112
124
|
- **Issues**: \`?s a otx:Issue ; otx:status "open"\` — known bugs and their status
|
|
113
125
|
- **Knowledge**: \`?s a otx:Knowledge\` — reusable patterns and lessons learned
|
|
114
126
|
- **Sessions**: query the sessions graph for past work logs and next TODOs
|
|
115
127
|
- **Modules**: \`?s a otx:Module\` — all scanned source modules and their dependencies (\`otx:dependsOn\`)
|
|
116
128
|
- **Symbols**: \`?s a otx:Class\`, \`otx:Interface\`, \`otx:Function\`, \`otx:Method\` — code-level entities (available after symbol-depth scan)
|
|
129
|
+
- **Call graph**: \`?s a otx:MethodCall\` — who calls whom (available after symbol scan with \`includeMethodCalls=true\`)
|
|
130
|
+
|
|
131
|
+
\`\`\`sparql
|
|
132
|
+
# Functions in a specific module
|
|
133
|
+
PREFIX otx: <https://opentology.dev/vocab#>
|
|
134
|
+
SELECT ?name WHERE {
|
|
135
|
+
GRAPH <${contextUri}> {
|
|
136
|
+
?f a otx:Function ; otx:title ?name ; otx:definedIn <urn:module:src/mcp/server> .
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
# Who calls a specific function?
|
|
141
|
+
PREFIX otx: <https://opentology.dev/vocab#>
|
|
142
|
+
SELECT ?caller WHERE {
|
|
143
|
+
GRAPH <${contextUri}> {
|
|
144
|
+
?s a otx:MethodCall ; otx:callerSymbol ?caller ; otx:calleeSymbol ?callee .
|
|
145
|
+
FILTER(CONTAINS(?callee, "persistGraph"))
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
# Module dependency chain (what depends on a module?)
|
|
150
|
+
PREFIX otx: <https://opentology.dev/vocab#>
|
|
151
|
+
SELECT ?dependent WHERE {
|
|
152
|
+
GRAPH <${contextUri}> {
|
|
153
|
+
?dependent otx:dependsOn+ <urn:module:src/lib/store-adapter> .
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
#### Post-Edit Graph Update
|
|
159
|
+
|
|
160
|
+
After significant code changes (new files, renamed functions, changed dependencies), run \`context_scan\` to keep the knowledge graph in sync:
|
|
161
|
+
- \`depth="module"\` — fast, updates file-level imports
|
|
162
|
+
- \`depth="symbol"\` with \`includeMethodCalls=true\` — thorough, updates class/function/call graph
|
|
117
163
|
|
|
118
164
|
#### Other Useful Tools
|
|
119
165
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const OTX_BOOTSTRAP_TURTLE = "@prefix otx: <https://opentology.dev/vocab#> .\n@prefix owl: <http://www.w3.org/2002/07/owl#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n\notx:Project a owl:Class .\notx:Decision a owl:Class .\notx:Issue a owl:Class .\notx:Knowledge a owl:Class .\notx:Session a owl:Class .\notx:Pattern a owl:Class .\notx:Module a owl:Class .\n\notx:title a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:date a owl:DatatypeProperty ; rdfs:range xsd:date .\notx:body a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:status a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:reason a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:cause a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:solution a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:nextTodo a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:relatedTo a owl:ObjectProperty .\notx:project a owl:ObjectProperty .\notx:dependsOn a owl:ObjectProperty ; rdfs:domain otx:Module ; rdfs:range otx:Module .\notx:stack a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:alternative a owl:DatatypeProperty ; rdfs:range xsd:string .\n\notx:Class a owl:Class .\notx:Interface a owl:Class .\notx:Function a owl:Class .\notx:Method a owl:Class .\n\notx:definedIn a owl:ObjectProperty ; rdfs:range otx:Module .\notx:extends a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Class .\notx:implements a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Interface .\notx:hasMethod a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Method .\notx:calls a owl:ObjectProperty ; rdfs:domain otx:
|
|
1
|
+
export declare const OTX_BOOTSTRAP_TURTLE = "@prefix otx: <https://opentology.dev/vocab#> .\n@prefix owl: <http://www.w3.org/2002/07/owl#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n\notx:Project a owl:Class .\notx:Decision a owl:Class .\notx:Issue a owl:Class .\notx:Knowledge a owl:Class .\notx:Session a owl:Class .\notx:Pattern a owl:Class .\notx:Module a owl:Class .\n\notx:title a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:date a owl:DatatypeProperty ; rdfs:range xsd:date .\notx:body a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:status a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:reason a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:cause a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:solution a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:nextTodo a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:relatedTo a owl:ObjectProperty .\notx:project a owl:ObjectProperty .\notx:dependsOn a owl:ObjectProperty ; rdfs:domain otx:Module ; rdfs:range otx:Module .\notx:stack a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:alternative a owl:DatatypeProperty ; rdfs:range xsd:string .\n\notx:Class a owl:Class .\notx:Interface a owl:Class .\notx:Function a owl:Class .\notx:Method a owl:Class .\notx:MethodCall a owl:Class .\n\notx:definedIn a owl:ObjectProperty ; rdfs:range otx:Module .\notx:extends a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Class .\notx:implements a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Interface .\notx:hasMethod a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Method .\notx:calls a owl:ObjectProperty .\notx:callerSymbol a owl:ObjectProperty ; rdfs:domain otx:MethodCall .\notx:calleeSymbol a owl:ObjectProperty ; rdfs:domain otx:MethodCall .\notx:returns a owl:DatatypeProperty ; rdfs:range xsd:string .\notx:paramType a owl:DatatypeProperty ; rdfs:range xsd:string .\n";
|
|
@@ -30,12 +30,15 @@ otx:Class a owl:Class .
|
|
|
30
30
|
otx:Interface a owl:Class .
|
|
31
31
|
otx:Function a owl:Class .
|
|
32
32
|
otx:Method a owl:Class .
|
|
33
|
+
otx:MethodCall a owl:Class .
|
|
33
34
|
|
|
34
35
|
otx:definedIn a owl:ObjectProperty ; rdfs:range otx:Module .
|
|
35
36
|
otx:extends a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Class .
|
|
36
37
|
otx:implements a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Interface .
|
|
37
38
|
otx:hasMethod a owl:ObjectProperty ; rdfs:domain otx:Class ; rdfs:range otx:Method .
|
|
38
|
-
otx:calls a owl:ObjectProperty
|
|
39
|
+
otx:calls a owl:ObjectProperty .
|
|
40
|
+
otx:callerSymbol a owl:ObjectProperty ; rdfs:domain otx:MethodCall .
|
|
41
|
+
otx:calleeSymbol a owl:ObjectProperty ; rdfs:domain otx:MethodCall .
|
|
39
42
|
otx:returns a owl:DatatypeProperty ; rdfs:range xsd:string .
|
|
40
43
|
otx:paramType a owl:DatatypeProperty ; rdfs:range xsd:string .
|
|
41
44
|
`;
|