@medicine-wheel/ontology-core 0.4.2 → 0.4.4
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/README.md +41 -7
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -13
- package/dist/index.js.map +1 -1
- package/dist/kinship.d.ts +116 -0
- package/dist/kinship.d.ts.map +1 -0
- package/dist/kinship.js +116 -0
- package/dist/kinship.js.map +1 -0
- package/dist/rdf-interop.d.ts +28 -0
- package/dist/rdf-interop.d.ts.map +1 -0
- package/dist/rdf-interop.js +63 -0
- package/dist/rdf-interop.js.map +1 -0
- package/dist/schemas.d.ts +88 -10
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +23 -1
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vocabulary.d.ts +9 -35
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +12 -55
- package/dist/vocabulary.js.map +1 -1
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -11,7 +11,9 @@ This package is the **single source of truth** for the Medicine Wheel data model
|
|
|
11
11
|
| Module | Description |
|
|
12
12
|
|--------|-------------|
|
|
13
13
|
| `types` | TypeScript type definitions for all entities (nodes, relations, ceremonies, beats, cycles) |
|
|
14
|
-
| `
|
|
14
|
+
| `kinship` | **Named kinship-edge vocabulary** — governed, directional edges (`tends-to`, `speaks-with`, `holds-responsibility-for`, `co-emerges-with` + RSIS verbs) |
|
|
15
|
+
| `vocabulary` | Medicine Wheel domain namespaces + label constants (`mw:`, `ids:`, `ocap:`, `rel:`, `cer:`, `beat:`) |
|
|
16
|
+
| `rdf-interop` | **Optional** RDF/OWL adapter — standard namespaces + IRI utilities for serializing OUT to the semantic web (not the backbone) |
|
|
15
17
|
| `schemas` | Zod validation schemas for runtime data integrity |
|
|
16
18
|
| `constants` | Direction definitions, color maps, icons, Ojibwe names, act mappings |
|
|
17
19
|
| `queries` | Semantic query helpers — traversal, Wilson alignment, OCAP® compliance |
|
|
@@ -59,16 +61,44 @@ interface Relation {
|
|
|
59
61
|
id: string;
|
|
60
62
|
from_id: string;
|
|
61
63
|
to_id: string;
|
|
62
|
-
relationship_type: string; //
|
|
64
|
+
relationship_type: string; // free-string, kept for back-compat
|
|
65
|
+
kinship_type?: KinshipEdgeName; // governed named edge (kinship vocabulary)
|
|
63
66
|
strength: number; // 0–1
|
|
64
67
|
direction?: DirectionName;
|
|
65
68
|
ceremony_context?: { ... }; // Ceremony linkage
|
|
66
69
|
obligations: RelationalObligation[];
|
|
67
70
|
ocap: OcapFlags; // OCAP® governance
|
|
68
71
|
accountability: AccountabilityTracking; // Wilson's 3 R's
|
|
72
|
+
context?: RelationContext; // who authorized it, in which circle it holds
|
|
69
73
|
}
|
|
70
74
|
```
|
|
71
75
|
|
|
76
|
+
### Named Kinship Edges
|
|
77
|
+
|
|
78
|
+
The kinship vocabulary replaces the free-string edge with governed, directional
|
|
79
|
+
edges expressed as **data, not a class tree** — no edge type is a subclass of another.
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { KINSHIP_EDGE_TYPES, inverseEdge, isKinshipEdgeName } from '@medicine-wheel/ontology-core';
|
|
83
|
+
|
|
84
|
+
inverseEdge('holds-responsibility-for'); // 'in-care-of' (asymmetric)
|
|
85
|
+
inverseEdge('co-emerges-with'); // 'co-emerges-with' (symmetric)
|
|
86
|
+
isKinshipEdgeName('speaks-with'); // true
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Edge Context
|
|
90
|
+
|
|
91
|
+
A relation may carry the context that authorizes and bounds it — consumed by the
|
|
92
|
+
protocol-guard stack in `@medicine-wheel/relational-query`:
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
relation.context = {
|
|
96
|
+
authorized_by: 'elder-council',
|
|
97
|
+
active_context: 'talking_circle:open',
|
|
98
|
+
authorized_kin: ['agent-mia', 'agent-ava'],
|
|
99
|
+
};
|
|
100
|
+
```
|
|
101
|
+
|
|
72
102
|
### OCAP® Governance
|
|
73
103
|
|
|
74
104
|
Every relation carries `OcapFlags` (Ownership, Control, Access, Possession) — the First Nations principles of data sovereignty.
|
|
@@ -77,14 +107,18 @@ Every relation carries `OcapFlags` (Ownership, Control, Access, Possession) —
|
|
|
77
107
|
|
|
78
108
|
Shawn Wilson's three R's (Respect, Reciprocity, Responsibility) are tracked per relation and aggregated across cycles. Use `computeWilsonAlignment()` and `findAccountabilityGaps()` to monitor relational health.
|
|
79
109
|
|
|
80
|
-
### RDF
|
|
110
|
+
### RDF Interop Adapter (optional)
|
|
81
111
|
|
|
82
|
-
|
|
112
|
+
The kinship graph is primary. RDF/OWL is an **optional** adapter (`rdfInterop`) for
|
|
113
|
+
serializing OUT to triple stores — not the ontology backbone. Domain labels stay in
|
|
114
|
+
`vocabulary`; standard namespaces + IRI utilities live in the adapter:
|
|
83
115
|
|
|
84
116
|
```typescript
|
|
85
|
-
MW.Direction // https://ontology.medicine-wheel.dev/mw#Direction
|
|
86
|
-
|
|
87
|
-
|
|
117
|
+
MW.Direction // domain label: https://ontology.medicine-wheel.dev/mw#Direction
|
|
118
|
+
|
|
119
|
+
import { rdfInterop } from '@medicine-wheel/ontology-core';
|
|
120
|
+
rdfInterop.expandIRI('mw:Direction'); // → full IRI
|
|
121
|
+
// Back-compat: prefixed/expandIRI/compactIRI/PREFIXES also remain at the package root.
|
|
88
122
|
```
|
|
89
123
|
|
|
90
124
|
## License
|
package/dist/index.d.ts
CHANGED
|
@@ -7,10 +7,14 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @packageDocumentation
|
|
9
9
|
*/
|
|
10
|
-
export type { DirectionName, Direction, NodeType, RelationalNode, RelationalEdge, ObligationCategory, RelationalObligation, OcapFlags, AccountabilityTracking, Relation, CeremonyType, CeremonyGuidance, CeremonyLog, NarrativeBeat, MedicineWheelCycle, TensionPhase, StructuralTensionChart, ActionStep, DirectionResponse, MWTool, MWResource, MWPrompt, EpistemicSource, AxiologicalPillar, LandRelation, AncestorRelation, FutureRelation, CosmicRelation, SunName, CeremonyPhase, GovernanceAccess, PersonRole, RSISRelationType, GovernanceProtectedPath, GovernanceConfig, RSISConfig, KinshipHubInfo, KinshipRelation, ReciprocityFlow, ReciprocityBalance, CeremonyLineageEntry, DirectionDetail, DirectionDistribution, DirectionInfo, MedicineWheelView, } from './types';
|
|
11
|
-
export {
|
|
10
|
+
export type { DirectionName, Direction, NodeType, RelationalNode, RelationalEdge, ObligationCategory, RelationalObligation, OcapFlags, AccountabilityTracking, RelationContext, Relation, CeremonyType, CeremonyGuidance, CeremonyLog, NarrativeBeat, MedicineWheelCycle, TensionPhase, StructuralTensionChart, ActionStep, DirectionResponse, MWTool, MWResource, MWPrompt, EpistemicSource, AxiologicalPillar, LandRelation, AncestorRelation, FutureRelation, CosmicRelation, SunName, CeremonyPhase, GovernanceAccess, PersonRole, RSISRelationType, GovernanceProtectedPath, GovernanceConfig, RSISConfig, KinshipHubInfo, KinshipRelation, ReciprocityFlow, ReciprocityBalance, CeremonyLineageEntry, DirectionDetail, DirectionDistribution, DirectionInfo, MedicineWheelView, } from './types';
|
|
11
|
+
export type { KinshipEdgeType, KinshipEdgeName, EdgeSymmetry } from './kinship';
|
|
12
|
+
export { KINSHIP_EDGE_TYPES, KINSHIP_EDGE_NAMES, getKinshipEdgeType, isKinshipEdgeName, inverseEdge, } from './kinship';
|
|
13
|
+
export { MW_NS, IDS_NS, OCAP_NS, REL_NS, CER_NS, BEAT_NS, MW, CER, OCAP, REL, IDS, BEAT, } from './vocabulary';
|
|
14
|
+
export * as rdfInterop from './rdf-interop';
|
|
15
|
+
export { RDF_NS, RDFS_NS, OWL_NS, SKOS_NS, PROV_NS, SHACL_NS, PREFIXES, prefixed, expandIRI, compactIRI, } from './rdf-interop';
|
|
12
16
|
export { DIRECTIONS, DIRECTION_COLORS, NODE_TYPE_COLORS, CEREMONY_ICONS, DIRECTION_MAP, DIRECTION_NAMES, NODE_TYPES, CEREMONY_TYPES, OJIBWE_NAMES, DIRECTION_SEASONS, DIRECTION_ACTS, ACT_DIRECTIONS, SUN_NAMES, SUN_DESCRIPTIONS, CEREMONY_PHASES, CEREMONY_PHASE_DESCRIPTIONS, PERSON_ROLES, RSIS_RELATION_TYPES, GOVERNANCE_ACCESS_LEVELS, DIRECTION_INFO, } from './constants';
|
|
13
|
-
export { DirectionNameSchema, NodeTypeSchema, CeremonyTypeSchema, ObligationCategorySchema, TensionPhaseSchema, EpistemicSourceSchema, AxiologicalPillarSchema, ConsentStateSchema, AccessLevelSchema, PossessionLocationSchema, DirectionSchema, RelationalNodeSchema, RelationalEdgeSchema, RelationalObligationSchema, OcapFlagsSchema, AccountabilityTrackingSchema, CeremonyContextSchema, RelationSchema, CeremonyGuidanceSchema, CeremonyLogSchema, NarrativeBeatSchema, MedicineWheelCycleSchema, ActionStepSchema, StructuralTensionChartSchema, DirectionResponseSchema, } from './schemas';
|
|
17
|
+
export { DirectionNameSchema, NodeTypeSchema, CeremonyTypeSchema, ObligationCategorySchema, TensionPhaseSchema, EpistemicSourceSchema, AxiologicalPillarSchema, ConsentStateSchema, AccessLevelSchema, PossessionLocationSchema, KinshipEdgeNameSchema, KinshipEdgeTypeSchema, DirectionSchema, RelationalNodeSchema, RelationalEdgeSchema, RelationalObligationSchema, OcapFlagsSchema, AccountabilityTrackingSchema, CeremonyContextSchema, RelationContextSchema, RelationSchema, CeremonyGuidanceSchema, CeremonyLogSchema, NarrativeBeatSchema, MedicineWheelCycleSchema, ActionStepSchema, StructuralTensionChartSchema, DirectionResponseSchema, } from './schemas';
|
|
14
18
|
export type { ValidatedDirection, ValidatedRelationalNode, ValidatedRelationalEdge, ValidatedRelation, ValidatedOcapFlags, ValidatedAccountabilityTracking, ValidatedCeremonyLog, ValidatedNarrativeBeat, ValidatedMedicineWheelCycle, ValidatedStructuralTensionChart, } from './schemas';
|
|
15
19
|
export { nodesByDirection, nodesByType, nodeById, relationsForNode, relationsByType, neighborIds, traverseRelationalWeb, computeWilsonAlignment, aggregateWilsonAlignment, cycleWilsonAlignment, findAccountabilityGaps, checkOcapCompliance, auditOcapCompliance, beatsByDirection, beatsByAct, allDirectionsVisited, ceremoniesByDirection, ceremonyCounts, relationalCompleteness, } from './queries';
|
|
16
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,YAAY,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,sBAAsB,EACtB,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,QAAQ,EAER,eAAe,EACf,iBAAiB,EAEjB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,cAAc,EAEd,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAC/C,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,49 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @packageDocumentation
|
|
10
10
|
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
11
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
13
|
-
exports.relationalCompleteness = exports.ceremonyCounts = exports.ceremoniesByDirection = exports.allDirectionsVisited = exports.beatsByAct = exports.beatsByDirection = exports.auditOcapCompliance = exports.checkOcapCompliance = exports.findAccountabilityGaps = exports.cycleWilsonAlignment = exports.aggregateWilsonAlignment = exports.computeWilsonAlignment = exports.traverseRelationalWeb = exports.neighborIds = exports.relationsByType = exports.relationsForNode = exports.nodeById = exports.nodesByType = exports.nodesByDirection = exports.DirectionResponseSchema = exports.StructuralTensionChartSchema = exports.ActionStepSchema = exports.MedicineWheelCycleSchema = exports.NarrativeBeatSchema = exports.CeremonyLogSchema = exports.CeremonyGuidanceSchema = exports.RelationSchema = exports.CeremonyContextSchema = exports.AccountabilityTrackingSchema = exports.OcapFlagsSchema = exports.RelationalObligationSchema = exports.RelationalEdgeSchema = exports.RelationalNodeSchema = exports.DirectionSchema = exports.PossessionLocationSchema = exports.AccessLevelSchema = void 0;
|
|
14
|
-
|
|
45
|
+
exports.NodeTypeSchema = exports.DirectionNameSchema = exports.DIRECTION_INFO = exports.GOVERNANCE_ACCESS_LEVELS = exports.RSIS_RELATION_TYPES = exports.PERSON_ROLES = exports.CEREMONY_PHASE_DESCRIPTIONS = exports.CEREMONY_PHASES = exports.SUN_DESCRIPTIONS = exports.SUN_NAMES = exports.ACT_DIRECTIONS = exports.DIRECTION_ACTS = exports.DIRECTION_SEASONS = exports.OJIBWE_NAMES = exports.CEREMONY_TYPES = exports.NODE_TYPES = exports.DIRECTION_NAMES = exports.DIRECTION_MAP = exports.CEREMONY_ICONS = exports.NODE_TYPE_COLORS = exports.DIRECTION_COLORS = exports.DIRECTIONS = exports.compactIRI = exports.expandIRI = exports.prefixed = exports.PREFIXES = exports.SHACL_NS = exports.PROV_NS = exports.SKOS_NS = exports.OWL_NS = exports.RDFS_NS = exports.RDF_NS = exports.rdfInterop = exports.BEAT = exports.IDS = exports.REL = exports.OCAP = exports.CER = exports.MW = exports.BEAT_NS = exports.CER_NS = exports.REL_NS = exports.OCAP_NS = exports.IDS_NS = exports.MW_NS = exports.inverseEdge = exports.isKinshipEdgeName = exports.getKinshipEdgeType = exports.KINSHIP_EDGE_NAMES = exports.KINSHIP_EDGE_TYPES = void 0;
|
|
46
|
+
exports.relationalCompleteness = exports.ceremonyCounts = exports.ceremoniesByDirection = exports.allDirectionsVisited = exports.beatsByAct = exports.beatsByDirection = exports.auditOcapCompliance = exports.checkOcapCompliance = exports.findAccountabilityGaps = exports.cycleWilsonAlignment = exports.aggregateWilsonAlignment = exports.computeWilsonAlignment = exports.traverseRelationalWeb = exports.neighborIds = exports.relationsByType = exports.relationsForNode = exports.nodeById = exports.nodesByType = exports.nodesByDirection = exports.DirectionResponseSchema = exports.StructuralTensionChartSchema = exports.ActionStepSchema = exports.MedicineWheelCycleSchema = exports.NarrativeBeatSchema = exports.CeremonyLogSchema = exports.CeremonyGuidanceSchema = exports.RelationSchema = exports.RelationContextSchema = exports.CeremonyContextSchema = exports.AccountabilityTrackingSchema = exports.OcapFlagsSchema = exports.RelationalObligationSchema = exports.RelationalEdgeSchema = exports.RelationalNodeSchema = exports.DirectionSchema = exports.KinshipEdgeTypeSchema = exports.KinshipEdgeNameSchema = exports.PossessionLocationSchema = exports.AccessLevelSchema = exports.ConsentStateSchema = exports.AxiologicalPillarSchema = exports.EpistemicSourceSchema = exports.TensionPhaseSchema = exports.ObligationCategorySchema = exports.CeremonyTypeSchema = void 0;
|
|
47
|
+
var kinship_1 = require("./kinship");
|
|
48
|
+
Object.defineProperty(exports, "KINSHIP_EDGE_TYPES", { enumerable: true, get: function () { return kinship_1.KINSHIP_EDGE_TYPES; } });
|
|
49
|
+
Object.defineProperty(exports, "KINSHIP_EDGE_NAMES", { enumerable: true, get: function () { return kinship_1.KINSHIP_EDGE_NAMES; } });
|
|
50
|
+
Object.defineProperty(exports, "getKinshipEdgeType", { enumerable: true, get: function () { return kinship_1.getKinshipEdgeType; } });
|
|
51
|
+
Object.defineProperty(exports, "isKinshipEdgeName", { enumerable: true, get: function () { return kinship_1.isKinshipEdgeName; } });
|
|
52
|
+
Object.defineProperty(exports, "inverseEdge", { enumerable: true, get: function () { return kinship_1.inverseEdge; } });
|
|
53
|
+
// ── Medicine Wheel Vocabulary (kinship-graph labels) ────────────────────────
|
|
15
54
|
var vocabulary_1 = require("./vocabulary");
|
|
16
55
|
Object.defineProperty(exports, "MW_NS", { enumerable: true, get: function () { return vocabulary_1.MW_NS; } });
|
|
17
56
|
Object.defineProperty(exports, "IDS_NS", { enumerable: true, get: function () { return vocabulary_1.IDS_NS; } });
|
|
@@ -19,22 +58,27 @@ Object.defineProperty(exports, "OCAP_NS", { enumerable: true, get: function () {
|
|
|
19
58
|
Object.defineProperty(exports, "REL_NS", { enumerable: true, get: function () { return vocabulary_1.REL_NS; } });
|
|
20
59
|
Object.defineProperty(exports, "CER_NS", { enumerable: true, get: function () { return vocabulary_1.CER_NS; } });
|
|
21
60
|
Object.defineProperty(exports, "BEAT_NS", { enumerable: true, get: function () { return vocabulary_1.BEAT_NS; } });
|
|
22
|
-
Object.defineProperty(exports, "RDF_NS", { enumerable: true, get: function () { return vocabulary_1.RDF_NS; } });
|
|
23
|
-
Object.defineProperty(exports, "RDFS_NS", { enumerable: true, get: function () { return vocabulary_1.RDFS_NS; } });
|
|
24
|
-
Object.defineProperty(exports, "OWL_NS", { enumerable: true, get: function () { return vocabulary_1.OWL_NS; } });
|
|
25
|
-
Object.defineProperty(exports, "SKOS_NS", { enumerable: true, get: function () { return vocabulary_1.SKOS_NS; } });
|
|
26
|
-
Object.defineProperty(exports, "PROV_NS", { enumerable: true, get: function () { return vocabulary_1.PROV_NS; } });
|
|
27
|
-
Object.defineProperty(exports, "SHACL_NS", { enumerable: true, get: function () { return vocabulary_1.SHACL_NS; } });
|
|
28
|
-
Object.defineProperty(exports, "PREFIXES", { enumerable: true, get: function () { return vocabulary_1.PREFIXES; } });
|
|
29
61
|
Object.defineProperty(exports, "MW", { enumerable: true, get: function () { return vocabulary_1.MW; } });
|
|
30
62
|
Object.defineProperty(exports, "CER", { enumerable: true, get: function () { return vocabulary_1.CER; } });
|
|
31
63
|
Object.defineProperty(exports, "OCAP", { enumerable: true, get: function () { return vocabulary_1.OCAP; } });
|
|
32
64
|
Object.defineProperty(exports, "REL", { enumerable: true, get: function () { return vocabulary_1.REL; } });
|
|
33
65
|
Object.defineProperty(exports, "IDS", { enumerable: true, get: function () { return vocabulary_1.IDS; } });
|
|
34
66
|
Object.defineProperty(exports, "BEAT", { enumerable: true, get: function () { return vocabulary_1.BEAT; } });
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
67
|
+
// ── RDF Interop Adapter (OPTIONAL — the kinship graph is primary) ───────────
|
|
68
|
+
// RDF/OWL is no longer the backbone; it is an optional serialization adapter.
|
|
69
|
+
exports.rdfInterop = __importStar(require("./rdf-interop"));
|
|
70
|
+
// Back-compat named re-exports, now sourced from the adapter.
|
|
71
|
+
var rdf_interop_1 = require("./rdf-interop");
|
|
72
|
+
Object.defineProperty(exports, "RDF_NS", { enumerable: true, get: function () { return rdf_interop_1.RDF_NS; } });
|
|
73
|
+
Object.defineProperty(exports, "RDFS_NS", { enumerable: true, get: function () { return rdf_interop_1.RDFS_NS; } });
|
|
74
|
+
Object.defineProperty(exports, "OWL_NS", { enumerable: true, get: function () { return rdf_interop_1.OWL_NS; } });
|
|
75
|
+
Object.defineProperty(exports, "SKOS_NS", { enumerable: true, get: function () { return rdf_interop_1.SKOS_NS; } });
|
|
76
|
+
Object.defineProperty(exports, "PROV_NS", { enumerable: true, get: function () { return rdf_interop_1.PROV_NS; } });
|
|
77
|
+
Object.defineProperty(exports, "SHACL_NS", { enumerable: true, get: function () { return rdf_interop_1.SHACL_NS; } });
|
|
78
|
+
Object.defineProperty(exports, "PREFIXES", { enumerable: true, get: function () { return rdf_interop_1.PREFIXES; } });
|
|
79
|
+
Object.defineProperty(exports, "prefixed", { enumerable: true, get: function () { return rdf_interop_1.prefixed; } });
|
|
80
|
+
Object.defineProperty(exports, "expandIRI", { enumerable: true, get: function () { return rdf_interop_1.expandIRI; } });
|
|
81
|
+
Object.defineProperty(exports, "compactIRI", { enumerable: true, get: function () { return rdf_interop_1.compactIRI; } });
|
|
38
82
|
// ── Constants ───────────────────────────────────────────────────────────────
|
|
39
83
|
var constants_1 = require("./constants");
|
|
40
84
|
Object.defineProperty(exports, "DIRECTIONS", { enumerable: true, get: function () { return constants_1.DIRECTIONS; } });
|
|
@@ -70,6 +114,8 @@ Object.defineProperty(exports, "AxiologicalPillarSchema", { enumerable: true, ge
|
|
|
70
114
|
Object.defineProperty(exports, "ConsentStateSchema", { enumerable: true, get: function () { return schemas_1.ConsentStateSchema; } });
|
|
71
115
|
Object.defineProperty(exports, "AccessLevelSchema", { enumerable: true, get: function () { return schemas_1.AccessLevelSchema; } });
|
|
72
116
|
Object.defineProperty(exports, "PossessionLocationSchema", { enumerable: true, get: function () { return schemas_1.PossessionLocationSchema; } });
|
|
117
|
+
Object.defineProperty(exports, "KinshipEdgeNameSchema", { enumerable: true, get: function () { return schemas_1.KinshipEdgeNameSchema; } });
|
|
118
|
+
Object.defineProperty(exports, "KinshipEdgeTypeSchema", { enumerable: true, get: function () { return schemas_1.KinshipEdgeTypeSchema; } });
|
|
73
119
|
Object.defineProperty(exports, "DirectionSchema", { enumerable: true, get: function () { return schemas_1.DirectionSchema; } });
|
|
74
120
|
Object.defineProperty(exports, "RelationalNodeSchema", { enumerable: true, get: function () { return schemas_1.RelationalNodeSchema; } });
|
|
75
121
|
Object.defineProperty(exports, "RelationalEdgeSchema", { enumerable: true, get: function () { return schemas_1.RelationalEdgeSchema; } });
|
|
@@ -77,6 +123,7 @@ Object.defineProperty(exports, "RelationalObligationSchema", { enumerable: true,
|
|
|
77
123
|
Object.defineProperty(exports, "OcapFlagsSchema", { enumerable: true, get: function () { return schemas_1.OcapFlagsSchema; } });
|
|
78
124
|
Object.defineProperty(exports, "AccountabilityTrackingSchema", { enumerable: true, get: function () { return schemas_1.AccountabilityTrackingSchema; } });
|
|
79
125
|
Object.defineProperty(exports, "CeremonyContextSchema", { enumerable: true, get: function () { return schemas_1.CeremonyContextSchema; } });
|
|
126
|
+
Object.defineProperty(exports, "RelationContextSchema", { enumerable: true, get: function () { return schemas_1.RelationContextSchema; } });
|
|
80
127
|
Object.defineProperty(exports, "RelationSchema", { enumerable: true, get: function () { return schemas_1.RelationSchema; } });
|
|
81
128
|
Object.defineProperty(exports, "CeremonyGuidanceSchema", { enumerable: true, get: function () { return schemas_1.CeremonyGuidanceSchema; } });
|
|
82
129
|
Object.defineProperty(exports, "CeremonyLogSchema", { enumerable: true, get: function () { return schemas_1.CeremonyLogSchema; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDH,qCAMmB;AALjB,6GAAA,kBAAkB,OAAA;AAClB,6GAAA,kBAAkB,OAAA;AAClB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,sGAAA,WAAW,OAAA;AAGb,+EAA+E;AAC/E,2CAGsB;AAFpB,mGAAA,KAAK,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,qGAAA,OAAO,OAAA;AAC/C,gGAAA,EAAE,OAAA;AAAE,iGAAA,GAAG,OAAA;AAAE,kGAAA,IAAI,OAAA;AAAE,iGAAA,GAAG,OAAA;AAAE,iGAAA,GAAG,OAAA;AAAE,kGAAA,IAAI,OAAA;AAG/B,+EAA+E;AAC/E,8EAA8E;AAC9E,4DAA4C;AAC5C,8DAA8D;AAC9D,6CAIuB;AAHrB,qGAAA,MAAM,OAAA;AAAE,sGAAA,OAAO,OAAA;AAAE,qGAAA,MAAM,OAAA;AAAE,sGAAA,OAAO,OAAA;AAAE,sGAAA,OAAO,OAAA;AAAE,uGAAA,QAAQ,OAAA;AACnD,uGAAA,QAAQ,OAAA;AACR,uGAAA,QAAQ,OAAA;AAAE,wGAAA,SAAS,OAAA;AAAE,yGAAA,UAAU,OAAA;AAGjC,+EAA+E;AAC/E,yCAsBqB;AArBnB,uGAAA,UAAU,OAAA;AACV,6GAAA,gBAAgB,OAAA;AAChB,6GAAA,gBAAgB,OAAA;AAChB,2GAAA,cAAc,OAAA;AACd,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AACf,uGAAA,UAAU,OAAA;AACV,2GAAA,cAAc,OAAA;AACd,yGAAA,YAAY,OAAA;AACZ,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,iBAAiB;AACjB,sGAAA,SAAS,OAAA;AACT,6GAAA,gBAAgB,OAAA;AAChB,4GAAA,eAAe,OAAA;AACf,wHAAA,2BAA2B,OAAA;AAC3B,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AACnB,qHAAA,wBAAwB,OAAA;AACxB,2GAAA,cAAc,OAAA;AAGhB,+EAA+E;AAC/E,qCA6BmB;AA5BjB,8GAAA,mBAAmB,OAAA;AACnB,yGAAA,cAAc,OAAA;AACd,6GAAA,kBAAkB,OAAA;AAClB,mHAAA,wBAAwB,OAAA;AACxB,6GAAA,kBAAkB,OAAA;AAClB,gHAAA,qBAAqB,OAAA;AACrB,kHAAA,uBAAuB,OAAA;AACvB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,mHAAA,wBAAwB,OAAA;AACxB,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AACrB,0GAAA,eAAe,OAAA;AACf,+GAAA,oBAAoB,OAAA;AACpB,+GAAA,oBAAoB,OAAA;AACpB,qHAAA,0BAA0B,OAAA;AAC1B,0GAAA,eAAe,OAAA;AACf,uHAAA,4BAA4B,OAAA;AAC5B,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AACrB,yGAAA,cAAc,OAAA;AACd,iHAAA,sBAAsB,OAAA;AACtB,4GAAA,iBAAiB,OAAA;AACjB,8GAAA,mBAAmB,OAAA;AACnB,mHAAA,wBAAwB,OAAA;AACxB,2GAAA,gBAAgB,OAAA;AAChB,uHAAA,4BAA4B,OAAA;AAC5B,kHAAA,uBAAuB,OAAA;AAiBzB,+EAA+E;AAC/E,qCAoBmB;AAnBjB,2GAAA,gBAAgB,OAAA;AAChB,sGAAA,WAAW,OAAA;AACX,mGAAA,QAAQ,OAAA;AACR,2GAAA,gBAAgB,OAAA;AAChB,0GAAA,eAAe,OAAA;AACf,sGAAA,WAAW,OAAA;AACX,gHAAA,qBAAqB,OAAA;AACrB,iHAAA,sBAAsB,OAAA;AACtB,mHAAA,wBAAwB,OAAA;AACxB,+GAAA,oBAAoB,OAAA;AACpB,iHAAA,sBAAsB,OAAA;AACtB,8GAAA,mBAAmB,OAAA;AACnB,8GAAA,mBAAmB,OAAA;AACnB,2GAAA,gBAAgB,OAAA;AAChB,qGAAA,UAAU,OAAA;AACV,+GAAA,oBAAoB,OAAA;AACpB,gHAAA,qBAAqB,OAAA;AACrB,yGAAA,cAAc,OAAA;AACd,iHAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @medicine-wheel/ontology-core — Kinship Edge Vocabulary
|
|
3
|
+
*
|
|
4
|
+
* A governed registry of named, directional kinship edges — the relational
|
|
5
|
+
* replacement for the free-string `relationship_type`. Expressed as DATA,
|
|
6
|
+
* not a class hierarchy: in a kinship graph the structure lives in the edges,
|
|
7
|
+
* and no edge type is a subclass of another. Land, human, spirit, ancestor,
|
|
8
|
+
* future, knowledge — all are connected by edges that read the same on every
|
|
9
|
+
* being they touch.
|
|
10
|
+
*
|
|
11
|
+
* Symmetry:
|
|
12
|
+
* - 'symmetric' — the relation reads the same in both directions
|
|
13
|
+
* (e.g. `co-emerges-with`); no inverse.
|
|
14
|
+
* - 'asymmetric' — the relation has a directional reading and declares its
|
|
15
|
+
* inverse (e.g. `holds-responsibility-for` ↔ `in-care-of`).
|
|
16
|
+
*/
|
|
17
|
+
import type { ObligationCategory } from './types';
|
|
18
|
+
export type EdgeSymmetry = 'symmetric' | 'asymmetric';
|
|
19
|
+
export interface KinshipEdgeType {
|
|
20
|
+
/** Canonical name (kebab-case for kinship edges, RSIS verbs kept as-is). */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Whether the relation reads the same both ways. */
|
|
23
|
+
symmetry: EdgeSymmetry;
|
|
24
|
+
/** For asymmetric edges, the name of the reverse-direction reading. */
|
|
25
|
+
inverse?: string;
|
|
26
|
+
/** Human-readable description of the relational meaning. */
|
|
27
|
+
description: string;
|
|
28
|
+
/** Obligation categories a relation of this type tends to carry. */
|
|
29
|
+
defaultObligations?: ObligationCategory[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The canonical kinship-edge registry. The four core kinship edges express
|
|
33
|
+
* non-hierarchical relation; the RSIS verbs are carried here too so the
|
|
34
|
+
* vocabulary has a single governed source (consumed by Cypher generation).
|
|
35
|
+
*/
|
|
36
|
+
export declare const KINSHIP_EDGE_TYPES: {
|
|
37
|
+
readonly 'tends-to': {
|
|
38
|
+
readonly name: "tends-to";
|
|
39
|
+
readonly symmetry: "asymmetric";
|
|
40
|
+
readonly inverse: "tended-by";
|
|
41
|
+
readonly description: "One being cares for, nurtures, or maintains another over time.";
|
|
42
|
+
readonly defaultObligations: ["land", "future"];
|
|
43
|
+
};
|
|
44
|
+
readonly 'speaks-with': {
|
|
45
|
+
readonly name: "speaks-with";
|
|
46
|
+
readonly symmetry: "symmetric";
|
|
47
|
+
readonly description: "Two beings are in dialogue — knowledge passes both ways.";
|
|
48
|
+
readonly defaultObligations: ["human"];
|
|
49
|
+
};
|
|
50
|
+
readonly 'holds-responsibility-for': {
|
|
51
|
+
readonly name: "holds-responsibility-for";
|
|
52
|
+
readonly symmetry: "asymmetric";
|
|
53
|
+
readonly inverse: "in-care-of";
|
|
54
|
+
readonly description: "One being carries accountability and obligation toward another.";
|
|
55
|
+
readonly defaultObligations: ["human", "future"];
|
|
56
|
+
};
|
|
57
|
+
readonly 'co-emerges-with': {
|
|
58
|
+
readonly name: "co-emerges-with";
|
|
59
|
+
readonly symmetry: "symmetric";
|
|
60
|
+
readonly description: "Two beings arise together; neither precedes the other.";
|
|
61
|
+
readonly defaultObligations: ["spirit"];
|
|
62
|
+
};
|
|
63
|
+
readonly STEWARDS: {
|
|
64
|
+
readonly name: "STEWARDS";
|
|
65
|
+
readonly symmetry: "asymmetric";
|
|
66
|
+
readonly inverse: "stewarded-by";
|
|
67
|
+
readonly description: "A person tends and takes responsibility for a symbol or place.";
|
|
68
|
+
readonly defaultObligations: ["human"];
|
|
69
|
+
};
|
|
70
|
+
readonly BORN_FROM: {
|
|
71
|
+
readonly name: "BORN_FROM";
|
|
72
|
+
readonly symmetry: "asymmetric";
|
|
73
|
+
readonly inverse: "gave-rise-to";
|
|
74
|
+
readonly description: "A being emerged from a ceremony, inquiry, or ancestor.";
|
|
75
|
+
readonly defaultObligations: ["spirit"];
|
|
76
|
+
};
|
|
77
|
+
readonly SERVES: {
|
|
78
|
+
readonly name: "SERVES";
|
|
79
|
+
readonly symmetry: "asymmetric";
|
|
80
|
+
readonly inverse: "served-by";
|
|
81
|
+
readonly description: "A being is in service of an inquiry or purpose.";
|
|
82
|
+
readonly defaultObligations: ["human"];
|
|
83
|
+
};
|
|
84
|
+
readonly GIVES_BACK_TO: {
|
|
85
|
+
readonly name: "GIVES_BACK_TO";
|
|
86
|
+
readonly symmetry: "asymmetric";
|
|
87
|
+
readonly inverse: "receives-from";
|
|
88
|
+
readonly description: "Reciprocity flow — a being returns value to its source.";
|
|
89
|
+
readonly defaultObligations: ["future"];
|
|
90
|
+
};
|
|
91
|
+
readonly ALIGNED_WITH: {
|
|
92
|
+
readonly name: "ALIGNED_WITH";
|
|
93
|
+
readonly symmetry: "symmetric";
|
|
94
|
+
readonly description: "A being is in directional alignment with another.";
|
|
95
|
+
};
|
|
96
|
+
readonly KINSHIP_OF: {
|
|
97
|
+
readonly name: "KINSHIP_OF";
|
|
98
|
+
readonly symmetry: "symmetric";
|
|
99
|
+
readonly description: "Two hubs hold a kinship relation with one another.";
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
/** Union of governed kinship-edge names — the value stored on a Relation. */
|
|
103
|
+
export type KinshipEdgeName = keyof typeof KINSHIP_EDGE_TYPES;
|
|
104
|
+
/** All registered kinship-edge names. */
|
|
105
|
+
export declare const KINSHIP_EDGE_NAMES: KinshipEdgeName[];
|
|
106
|
+
/** Look up the metadata for a kinship-edge name. */
|
|
107
|
+
export declare function getKinshipEdgeType(name: string): KinshipEdgeType | undefined;
|
|
108
|
+
/** True when `name` is a governed kinship-edge name. */
|
|
109
|
+
export declare function isKinshipEdgeName(name: string): name is KinshipEdgeName;
|
|
110
|
+
/**
|
|
111
|
+
* The reverse-direction reading of an edge name. Symmetric edges return their
|
|
112
|
+
* own name; asymmetric edges return their declared inverse (or undefined if a
|
|
113
|
+
* non-registered name is passed).
|
|
114
|
+
*/
|
|
115
|
+
export declare function inverseEdge(name: string): string | undefined;
|
|
116
|
+
//# sourceMappingURL=kinship.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kinship.d.ts","sourceRoot":"","sources":["../src/kinship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,EAAE,YAAY,CAAC;IACvB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEqB,CAAC;AAErD,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE9D,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,EAAsC,eAAe,EAAE,CAAC;AAEvF,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE5E;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,eAAe,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI5D"}
|
package/dist/kinship.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @medicine-wheel/ontology-core — Kinship Edge Vocabulary
|
|
4
|
+
*
|
|
5
|
+
* A governed registry of named, directional kinship edges — the relational
|
|
6
|
+
* replacement for the free-string `relationship_type`. Expressed as DATA,
|
|
7
|
+
* not a class hierarchy: in a kinship graph the structure lives in the edges,
|
|
8
|
+
* and no edge type is a subclass of another. Land, human, spirit, ancestor,
|
|
9
|
+
* future, knowledge — all are connected by edges that read the same on every
|
|
10
|
+
* being they touch.
|
|
11
|
+
*
|
|
12
|
+
* Symmetry:
|
|
13
|
+
* - 'symmetric' — the relation reads the same in both directions
|
|
14
|
+
* (e.g. `co-emerges-with`); no inverse.
|
|
15
|
+
* - 'asymmetric' — the relation has a directional reading and declares its
|
|
16
|
+
* inverse (e.g. `holds-responsibility-for` ↔ `in-care-of`).
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.KINSHIP_EDGE_NAMES = exports.KINSHIP_EDGE_TYPES = void 0;
|
|
20
|
+
exports.getKinshipEdgeType = getKinshipEdgeType;
|
|
21
|
+
exports.isKinshipEdgeName = isKinshipEdgeName;
|
|
22
|
+
exports.inverseEdge = inverseEdge;
|
|
23
|
+
/**
|
|
24
|
+
* The canonical kinship-edge registry. The four core kinship edges express
|
|
25
|
+
* non-hierarchical relation; the RSIS verbs are carried here too so the
|
|
26
|
+
* vocabulary has a single governed source (consumed by Cypher generation).
|
|
27
|
+
*/
|
|
28
|
+
exports.KINSHIP_EDGE_TYPES = {
|
|
29
|
+
'tends-to': {
|
|
30
|
+
name: 'tends-to',
|
|
31
|
+
symmetry: 'asymmetric',
|
|
32
|
+
inverse: 'tended-by',
|
|
33
|
+
description: 'One being cares for, nurtures, or maintains another over time.',
|
|
34
|
+
defaultObligations: ['land', 'future'],
|
|
35
|
+
},
|
|
36
|
+
'speaks-with': {
|
|
37
|
+
name: 'speaks-with',
|
|
38
|
+
symmetry: 'symmetric',
|
|
39
|
+
description: 'Two beings are in dialogue — knowledge passes both ways.',
|
|
40
|
+
defaultObligations: ['human'],
|
|
41
|
+
},
|
|
42
|
+
'holds-responsibility-for': {
|
|
43
|
+
name: 'holds-responsibility-for',
|
|
44
|
+
symmetry: 'asymmetric',
|
|
45
|
+
inverse: 'in-care-of',
|
|
46
|
+
description: 'One being carries accountability and obligation toward another.',
|
|
47
|
+
defaultObligations: ['human', 'future'],
|
|
48
|
+
},
|
|
49
|
+
'co-emerges-with': {
|
|
50
|
+
name: 'co-emerges-with',
|
|
51
|
+
symmetry: 'symmetric',
|
|
52
|
+
description: 'Two beings arise together; neither precedes the other.',
|
|
53
|
+
defaultObligations: ['spirit'],
|
|
54
|
+
},
|
|
55
|
+
// ── RSIS verbs (kept as-is for KuzuDB Cypher back-compat) ──────────────────
|
|
56
|
+
STEWARDS: {
|
|
57
|
+
name: 'STEWARDS',
|
|
58
|
+
symmetry: 'asymmetric',
|
|
59
|
+
inverse: 'stewarded-by',
|
|
60
|
+
description: 'A person tends and takes responsibility for a symbol or place.',
|
|
61
|
+
defaultObligations: ['human'],
|
|
62
|
+
},
|
|
63
|
+
BORN_FROM: {
|
|
64
|
+
name: 'BORN_FROM',
|
|
65
|
+
symmetry: 'asymmetric',
|
|
66
|
+
inverse: 'gave-rise-to',
|
|
67
|
+
description: 'A being emerged from a ceremony, inquiry, or ancestor.',
|
|
68
|
+
defaultObligations: ['spirit'],
|
|
69
|
+
},
|
|
70
|
+
SERVES: {
|
|
71
|
+
name: 'SERVES',
|
|
72
|
+
symmetry: 'asymmetric',
|
|
73
|
+
inverse: 'served-by',
|
|
74
|
+
description: 'A being is in service of an inquiry or purpose.',
|
|
75
|
+
defaultObligations: ['human'],
|
|
76
|
+
},
|
|
77
|
+
GIVES_BACK_TO: {
|
|
78
|
+
name: 'GIVES_BACK_TO',
|
|
79
|
+
symmetry: 'asymmetric',
|
|
80
|
+
inverse: 'receives-from',
|
|
81
|
+
description: 'Reciprocity flow — a being returns value to its source.',
|
|
82
|
+
defaultObligations: ['future'],
|
|
83
|
+
},
|
|
84
|
+
ALIGNED_WITH: {
|
|
85
|
+
name: 'ALIGNED_WITH',
|
|
86
|
+
symmetry: 'symmetric',
|
|
87
|
+
description: 'A being is in directional alignment with another.',
|
|
88
|
+
},
|
|
89
|
+
KINSHIP_OF: {
|
|
90
|
+
name: 'KINSHIP_OF',
|
|
91
|
+
symmetry: 'symmetric',
|
|
92
|
+
description: 'Two hubs hold a kinship relation with one another.',
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
/** All registered kinship-edge names. */
|
|
96
|
+
exports.KINSHIP_EDGE_NAMES = Object.keys(exports.KINSHIP_EDGE_TYPES);
|
|
97
|
+
/** Look up the metadata for a kinship-edge name. */
|
|
98
|
+
function getKinshipEdgeType(name) {
|
|
99
|
+
return exports.KINSHIP_EDGE_TYPES[name];
|
|
100
|
+
}
|
|
101
|
+
/** True when `name` is a governed kinship-edge name. */
|
|
102
|
+
function isKinshipEdgeName(name) {
|
|
103
|
+
return Object.prototype.hasOwnProperty.call(exports.KINSHIP_EDGE_TYPES, name);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The reverse-direction reading of an edge name. Symmetric edges return their
|
|
107
|
+
* own name; asymmetric edges return their declared inverse (or undefined if a
|
|
108
|
+
* non-registered name is passed).
|
|
109
|
+
*/
|
|
110
|
+
function inverseEdge(name) {
|
|
111
|
+
const edge = getKinshipEdgeType(name);
|
|
112
|
+
if (!edge)
|
|
113
|
+
return undefined;
|
|
114
|
+
return edge.symmetry === 'symmetric' ? edge.name : edge.inverse;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=kinship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kinship.js","sourceRoot":"","sources":["../src/kinship.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAmGH,gDAEC;AAGD,8CAEC;AAOD,kCAIC;AAlGD;;;;GAIG;AACU,QAAA,kBAAkB,GAAG;IAChC,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,gEAAgE;QAC7E,kBAAkB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;KACvC;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,0DAA0D;QACvE,kBAAkB,EAAE,CAAC,OAAO,CAAC;KAC9B;IACD,0BAA0B,EAAE;QAC1B,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,iEAAiE;QAC9E,kBAAkB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;KACxC;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,wDAAwD;QACrE,kBAAkB,EAAE,CAAC,QAAQ,CAAC;KAC/B;IACD,8EAA8E;IAC9E,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,gEAAgE;QAC7E,kBAAkB,EAAE,CAAC,OAAO,CAAC;KAC9B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,wDAAwD;QACrE,kBAAkB,EAAE,CAAC,QAAQ,CAAC;KAC/B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,iDAAiD;QAC9D,kBAAkB,EAAE,CAAC,OAAO,CAAC;KAC9B;IACD,aAAa,EAAE;QACb,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,yDAAyD;QACtE,kBAAkB,EAAE,CAAC,QAAQ,CAAC;KAC/B;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,mDAAmD;KACjE;IACD,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,oDAAoD;KAClE;CACiD,CAAC;AAKrD,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,0BAAkB,CAAsB,CAAC;AAEvF,oDAAoD;AACpD,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAQ,0BAAsD,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,wDAAwD;AACxD,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,0BAAkB,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const RDF_NS: "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
|
2
|
+
export declare const RDFS_NS: "http://www.w3.org/2000/01/rdf-schema#";
|
|
3
|
+
export declare const OWL_NS: "http://www.w3.org/2002/07/owl#";
|
|
4
|
+
export declare const SKOS_NS: "http://www.w3.org/2004/02/skos/core#";
|
|
5
|
+
export declare const PROV_NS: "http://www.w3.org/ns/prov#";
|
|
6
|
+
export declare const SHACL_NS: "http://www.w3.org/ns/shacl#";
|
|
7
|
+
/** Combined prefix map: Medicine Wheel domain namespaces + standard interop. */
|
|
8
|
+
export declare const PREFIXES: {
|
|
9
|
+
readonly mw: "https://ontology.medicine-wheel.dev/mw#";
|
|
10
|
+
readonly ids: "https://ontology.medicine-wheel.dev/ids#";
|
|
11
|
+
readonly ocap: "https://ontology.medicine-wheel.dev/ocap#";
|
|
12
|
+
readonly rel: "https://ontology.medicine-wheel.dev/rel#";
|
|
13
|
+
readonly cer: "https://ontology.medicine-wheel.dev/cer#";
|
|
14
|
+
readonly beat: "https://ontology.medicine-wheel.dev/beat#";
|
|
15
|
+
readonly rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
|
16
|
+
readonly rdfs: "http://www.w3.org/2000/01/rdf-schema#";
|
|
17
|
+
readonly owl: "http://www.w3.org/2002/07/owl#";
|
|
18
|
+
readonly skos: "http://www.w3.org/2004/02/skos/core#";
|
|
19
|
+
readonly prov: "http://www.w3.org/ns/prov#";
|
|
20
|
+
readonly sh: "http://www.w3.org/ns/shacl#";
|
|
21
|
+
};
|
|
22
|
+
/** Generate a prefixed IRI string (e.g., "mw:Direction"). */
|
|
23
|
+
export declare function prefixed(namespace: keyof typeof PREFIXES, localName: string): string;
|
|
24
|
+
/** Expand a prefixed IRI to full form (e.g., "mw:Direction" → full IRI). */
|
|
25
|
+
export declare function expandIRI(prefixedIRI: string): string;
|
|
26
|
+
/** Compact a full IRI to prefixed form if possible. */
|
|
27
|
+
export declare function compactIRI(fullIRI: string): string;
|
|
28
|
+
//# sourceMappingURL=rdf-interop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rdf-interop.d.ts","sourceRoot":"","sources":["../src/rdf-interop.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,MAAM,EAAG,6CAAsD,CAAC;AAC7E,eAAO,MAAM,OAAO,EAAG,uCAAgD,CAAC;AACxE,eAAO,MAAM,MAAM,EAAG,gCAAyC,CAAC;AAChE,eAAO,MAAM,OAAO,EAAG,sCAA+C,CAAC;AACvE,eAAO,MAAM,OAAO,EAAG,4BAAqC,CAAC;AAC7D,eAAO,MAAM,QAAQ,EAAG,6BAAsC,CAAC;AAE/D,gFAAgF;AAChF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAaX,CAAC;AAEX,6DAA6D;AAC7D,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PREFIXES = exports.SHACL_NS = exports.PROV_NS = exports.SKOS_NS = exports.OWL_NS = exports.RDFS_NS = exports.RDF_NS = void 0;
|
|
4
|
+
exports.prefixed = prefixed;
|
|
5
|
+
exports.expandIRI = expandIRI;
|
|
6
|
+
exports.compactIRI = compactIRI;
|
|
7
|
+
/**
|
|
8
|
+
* @medicine-wheel/ontology-core — RDF Interop Adapter (OPTIONAL)
|
|
9
|
+
*
|
|
10
|
+
* Standard semantic-web namespaces and IRI utilities. This module is an
|
|
11
|
+
* OPTIONAL serialization/interop adapter — NOT the backbone of the ontology.
|
|
12
|
+
*
|
|
13
|
+
* The non-hierarchical kinship graph is primary (see `kinship.ts`): beings are
|
|
14
|
+
* co-equal and relations carry the meaning through named, context-bound edges.
|
|
15
|
+
* RDF/OWL is provided here only for interop with triple stores and
|
|
16
|
+
* knowledge-graph ecosystems. Nothing in the kinship core imports this module —
|
|
17
|
+
* importing it is a deliberate choice to serialize OUT to the semantic web.
|
|
18
|
+
*/
|
|
19
|
+
const vocabulary_1 = require("./vocabulary");
|
|
20
|
+
// Standard ontology namespaces for interop
|
|
21
|
+
exports.RDF_NS = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
|
|
22
|
+
exports.RDFS_NS = 'http://www.w3.org/2000/01/rdf-schema#';
|
|
23
|
+
exports.OWL_NS = 'http://www.w3.org/2002/07/owl#';
|
|
24
|
+
exports.SKOS_NS = 'http://www.w3.org/2004/02/skos/core#';
|
|
25
|
+
exports.PROV_NS = 'http://www.w3.org/ns/prov#';
|
|
26
|
+
exports.SHACL_NS = 'http://www.w3.org/ns/shacl#';
|
|
27
|
+
/** Combined prefix map: Medicine Wheel domain namespaces + standard interop. */
|
|
28
|
+
exports.PREFIXES = {
|
|
29
|
+
mw: vocabulary_1.MW_NS,
|
|
30
|
+
ids: vocabulary_1.IDS_NS,
|
|
31
|
+
ocap: vocabulary_1.OCAP_NS,
|
|
32
|
+
rel: vocabulary_1.REL_NS,
|
|
33
|
+
cer: vocabulary_1.CER_NS,
|
|
34
|
+
beat: vocabulary_1.BEAT_NS,
|
|
35
|
+
rdf: exports.RDF_NS,
|
|
36
|
+
rdfs: exports.RDFS_NS,
|
|
37
|
+
owl: exports.OWL_NS,
|
|
38
|
+
skos: exports.SKOS_NS,
|
|
39
|
+
prov: exports.PROV_NS,
|
|
40
|
+
sh: exports.SHACL_NS,
|
|
41
|
+
};
|
|
42
|
+
/** Generate a prefixed IRI string (e.g., "mw:Direction"). */
|
|
43
|
+
function prefixed(namespace, localName) {
|
|
44
|
+
return `${namespace}:${localName}`;
|
|
45
|
+
}
|
|
46
|
+
/** Expand a prefixed IRI to full form (e.g., "mw:Direction" → full IRI). */
|
|
47
|
+
function expandIRI(prefixedIRI) {
|
|
48
|
+
const [prefix, local] = prefixedIRI.split(':');
|
|
49
|
+
const ns = exports.PREFIXES[prefix];
|
|
50
|
+
if (!ns)
|
|
51
|
+
throw new Error(`Unknown prefix: ${prefix}`);
|
|
52
|
+
return `${ns}${local}`;
|
|
53
|
+
}
|
|
54
|
+
/** Compact a full IRI to prefixed form if possible. */
|
|
55
|
+
function compactIRI(fullIRI) {
|
|
56
|
+
for (const [prefix, ns] of Object.entries(exports.PREFIXES)) {
|
|
57
|
+
if (fullIRI.startsWith(ns)) {
|
|
58
|
+
return `${prefix}:${fullIRI.slice(ns.length)}`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return fullIRI;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=rdf-interop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rdf-interop.js","sourceRoot":"","sources":["../src/rdf-interop.ts"],"names":[],"mappings":";;;AAuCA,4BAEC;AAGD,8BAKC;AAGD,gCAOC;AA3DD;;;;;;;;;;;GAWG;AACH,6CAA+E;AAE/E,2CAA2C;AAC9B,QAAA,MAAM,GAAG,6CAAsD,CAAC;AAChE,QAAA,OAAO,GAAG,uCAAgD,CAAC;AAC3D,QAAA,MAAM,GAAG,gCAAyC,CAAC;AACnD,QAAA,OAAO,GAAG,sCAA+C,CAAC;AAC1D,QAAA,OAAO,GAAG,4BAAqC,CAAC;AAChD,QAAA,QAAQ,GAAG,6BAAsC,CAAC;AAE/D,gFAAgF;AACnE,QAAA,QAAQ,GAAG;IACtB,EAAE,EAAE,kBAAK;IACT,GAAG,EAAE,mBAAM;IACX,IAAI,EAAE,oBAAO;IACb,GAAG,EAAE,mBAAM;IACX,GAAG,EAAE,mBAAM;IACX,IAAI,EAAE,oBAAO;IACb,GAAG,EAAE,cAAM;IACX,IAAI,EAAE,eAAO;IACb,GAAG,EAAE,cAAM;IACX,IAAI,EAAE,eAAO;IACb,IAAI,EAAE,eAAO;IACb,EAAE,EAAE,gBAAQ;CACJ,CAAC;AAEX,6DAA6D;AAC7D,SAAgB,QAAQ,CAAC,SAAgC,EAAE,SAAiB;IAC1E,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;AACrC,CAAC;AAED,4EAA4E;AAC5E,SAAgB,SAAS,CAAC,WAAmB;IAC3C,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,gBAAQ,CAAC,MAA+B,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,uDAAuD;AACvD,SAAgB,UAAU,CAAC,OAAe;IACxC,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|