The Domain Intelligence Schema (DIS) is an open, platform-agnostic standard for enterprise agentic systems. Rooted in W3C RDF and SHACL knowledge graphs, DIS provides a closed grammar, SHACL-enforced constraints, and a declared systems layer that names what each agent step reaches and changes.
Traditional agent frameworks treat domain knowledge as prompt injections or unstructured tool schemas. DIS moves domain authority into a formal, validating semantic knowledge graph.
Every entity, role, mode, and execution binding is formally defined as an attributed triple in a closed semantic graph.
Shapes Constraint Language (SHACL) is the contract. A dossier containing an invalid triplet, a mode its entity does not support, or a role with no access gate for it is rejected by the shape validator.
Four standardized SPARQL queries audit full causal lineages, medical liability boundaries, ungoverned triplets, and structural integrity without runtime dependencies.
At the heart of DIS is the Agentic Triplet: the atomic unit of agent capability. An agent cannot invoke an arbitrary function with ambient authority. It must execute as an authorized:
ROLE (Who Acts) × ENTITY (What Noun) × MODE (Which Verb)
The 7 Canonical Modes:
CREATE, READ, UPDATE, DELETE, INITIATE, RESPOND, and NOTIFY.
By constraining operations to these atomic verbs, DIS prevents hallucinated scope and forces explicit discovery of domain boundaries.
Version 1.8 closes six gaps found by transcribing a real automation engine (the Argus trial) as a dossier. Together they give a triplet executable provenance: what it reaches, what it mutates, and what it is allowed to call. The design record is DIS-1.8.md.
A READ triplet cannot bind a function whose endpoint has mutates true; CREATE, UPDATE and DELETE triplets must bind one that does. Enforced by TripletModeMutationConsistencyShape.
A function calling a mutating endpoint must declare the entity it changes with writesEntity, and the triplet's targetEntity must match the function's readsEntity (READ) or writesEntity (CREATE, UPDATE, DELETE).
A triplet with no executable function declares a bindingStatus: BOUND, MANUAL_PROCEDURE or ABSTRACT_UNBOUND, with an unboundReason. The vocabulary and shape accept these; a rule rejecting an unbound mutating triplet that omits one is specified but not yet enforced.
An Endpoint declares a dis:transport (HTTPS, MQTT, RTSP, NATS, gRPC and others), and non-HTTP endpoints need no httpMethod or urlPath. An Application declares a networkScope, so a private-network system need not present an https base URL.
An AccessGateMatrix can name the exact catalog functions a role may run on an entity with allowedFunction, so “may disable, may not re-enable” can be stated. Enforced by TripletWithinAllowedFunctionGateShape.
A dossier is validated as one graph merged with vocabulary/v1.8.0/dis.ttl, with no inference flag. scripts/validate-dossier.sh is the canonical recipe.
DIS 1.8.0 ships eight dossiers in fixtures/v1.8.0/. Every one except deformed.ttl conforms against the merged vocabulary and shapes; deformed.ttl is the negative fixture and is rejected on purpose.
| Domain | Dossier File | Systems Declared | What It Shows |
|---|---|---|---|
| Healthcare | fixtures/v1.8.0/healthcare.ttl |
Epic Cadence & MyChart API, Cerner Millennium EHR, MEDITECH Expanse EHR, Surescripts E-Prescribing Gateway | Appointment, patient lookup and refill triplets bound to endpoints; two unbound steps declared MANUAL_PROCEDURE; a structural policy prohibiting automated controlled-substance refills. |
| Banking & Insurance | fixtures/v1.8.0/bfsi.ttl |
FIS Modern Banking Platform, Fiserv Signature & Card Services, Guidewire ClaimCenter, Guidewire PolicyCenter | An unauthenticated caller and an authenticated accountholder as separate roles with separate access gates; a card-freeze gate scoped to one function. |
| IT Service Management | fixtures/v1.8.0/itsd.ttl |
ServiceNow ITSM, SailPoint IdentityNow & Entra ID Bridge, SAP HANA EAM | A backoffice orchestrator role, separate from the interactive virtual agent, holds the only gates on onboarding and offboarding orders, each scoped to one function. |
| Human Capital | fixtures/v1.8.0/hr.ttl |
Workday HCM, SAP SuccessFactors Employee Central, Oracle PeopleSoft Time and Labor | A role per worker population (exempt, hourly, people leader, contractor, Munich campus) with population-specific policies. |
| Retail | fixtures/v1.8.0/retail.ttl |
Retail Catalog API | Apex Retail Customer Support, status DRAFT; the base graph most conformance tests mutate to build negative cases. |
| IT & HR portal | fixtures/v1.8.0/itsd-hr.ttl |
Enterprise Gateway API | A smaller employee IT service desk and HR portal behind one gateway application; status DRAFT. |
| Minimal | fixtures/v1.8.0/dadjoke.ttl |
Dad Joke Webhook | The smallest conforming dossier: one entity, one triplet, one utterance policy. |
| Negative | fixtures/v1.8.0/deformed.ttl |
None | Three deliberate violations (a triplet targeting a Role, an invented mode, an OBLIGATION with no bound value); the suite asserts exactly those three are reported. |
The repository carries an automated conformance suite built on pytest, rdflib and pyshacl. Its CUE and JSON Schema checks also need the cue command and are skipped without it. Output of uv sync --group test && uv run pytest, with the environment header lines trimmed:
$ uv run pytest
collected 196 items
tests/test_agentic_triplet.py ................ [ 8%]
tests/test_artifacts_parse.py .... [ 10%]
tests/test_cue_json_schema.py ........ [ 14%]
tests/test_dis_18_grammar.py .............. [ 21%]
tests/test_entity_instance.py ......... [ 26%]
tests/test_governance_constructs.py .......................... [ 39%]
tests/test_grammar_matrices.py ....... [ 42%]
tests/test_queries.py .... [ 44%]
tests/test_release_gating.py ....... [ 48%]
tests/test_systems_layer.py ...................... [ 59%]
tests/test_utterance_policy.py ............. [ 66%]
tests/test_v16_compat.py .... [ 68%]
tests/test_validation_recipe.py .............. [ 75%]
tests/test_vocabulary_integrity.py ..................... [ 86%]
tests/test_worked_example.py ........................... [100%]
============================= 196 passed in 32.50s =============================
To validate a single dossier, merge it with the vocabulary and check it against the shapes with scripts/validate-dossier.sh:
$ scripts/validate-dossier.sh fixtures/v1.8.0/healthcare.ttl
Validation Report
Conforms: True