{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://specs.kivanura.org/gedrm/0.1/gedrm-0.1.schema.json",
  "title": "GEDRM 0.1 JSON / JSON-LD Structural Schema",
  "description": "Structural validation companion for GEDRM 0.1 JSON and JSON-LD instances. The human-readable GEDRM 0.1 specification remains the normative semantic authority. SHACL is the primary semantic conformance mechanism; this schema validates document shape, known GEDRM terms, and basic value forms without duplicating the full RDF/OWL/SHACL semantics.",
  "type": "object",
  "oneOf": [
    {
      "$ref": "#/$defs/nodeDocument"
    },
    {
      "$ref": "#/$defs/graphDocument"
    }
  ],
  "$defs": {
    "iriRef": {
      "oneOf": [
        {
          "type": "string",
          "format": "uri-reference"
        },
        {
          "type": "object",
          "required": [
            "@id"
          ],
          "properties": {
            "@id": {
              "type": "string",
              "format": "uri-reference"
            }
          },
          "additionalProperties": true
        }
      ]
    },
    "typeValue": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "DataOriginator",
            "DataProducer",
            "SystemOfRecord",
            "AuthoritativeSource",
            "DataHolder",
            "DataTransformer",
            "DataTransportRelay",
            "DataProvider",
            "DataPublisher",
            "DataDistributor",
            "DataBroker",
            "DataObject",
            "DataAsset",
            "DataProduct",
            "MasterData",
            "ReferenceData",
            "TransactionalData",
            "MarketData",
            "DerivedData",
            "Mastered",
            "GoldenRecord",
            "DataRecipient",
            "DataConsumer",
            "DataOwner",
            "DataSteward",
            "DataCustodian",
            "DataProductOwner",
            "ControlOwner",
            "SourceOfAuthority",
            "DataController",
            "DataProcessor",
            "PersonalData",
            "ProcessingActivity",
            "DerivationActivity",
            "MasteringActivity",
            "ControlExecution",
            "DataPolicy",
            "PolicyAsCode",
            "DataContract",
            "DataQualityRule",
            "DataControl",
            "ControlEvidence",
            "RequirementReference"
          ]
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "DataOriginator",
              "DataProducer",
              "SystemOfRecord",
              "AuthoritativeSource",
              "DataHolder",
              "DataTransformer",
              "DataTransportRelay",
              "DataProvider",
              "DataPublisher",
              "DataDistributor",
              "DataBroker",
              "DataObject",
              "DataAsset",
              "DataProduct",
              "MasterData",
              "ReferenceData",
              "TransactionalData",
              "MarketData",
              "DerivedData",
              "Mastered",
              "GoldenRecord",
              "DataRecipient",
              "DataConsumer",
              "DataOwner",
              "DataSteward",
              "DataCustodian",
              "DataProductOwner",
              "ControlOwner",
              "SourceOfAuthority",
              "DataController",
              "DataProcessor",
              "PersonalData",
              "ProcessingActivity",
              "DerivationActivity",
              "MasteringActivity",
              "ControlExecution",
              "DataPolicy",
              "PolicyAsCode",
              "DataContract",
              "DataQualityRule",
              "DataControl",
              "ControlEvidence",
              "RequirementReference"
            ]
          },
          "minItems": 1,
          "uniqueItems": true
        }
      ]
    },
    "contextValue": {
      "oneOf": [
        {
          "type": "string",
          "format": "uri-reference"
        },
        {
          "type": "object"
        },
        {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "string",
                "format": "uri-reference"
              },
              {
                "type": "object"
              }
            ]
          },
          "minItems": 1
        }
      ]
    },
    "node": {
      "type": "object",
      "properties": {
        "@id": {
          "type": "string",
          "format": "uri-reference"
        },
        "@type": {
          "$ref": "#/$defs/typeValue"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "version": {
          "type": [
            "string",
            "number"
          ]
        },
        "status": {
          "type": "string"
        },
        "effectiveFrom": {
          "type": "string",
          "format": "date-time"
        },
        "effectiveTo": {
          "type": "string",
          "format": "date-time"
        },
        "evaluatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "outcome": {
          "type": "string"
        },
        "requirementId": {
          "type": "string"
        },
        "source": {},
        "authority": {},
        "externalUri": {
          "type": "string",
          "format": "uri-reference"
        },
        "originates": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "produces": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "recordsAuthoritativeStateFor": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "isAuthoritativeSourceFor": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "transforms": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "transports": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "provides": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "publishes": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "distributes": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "brokersMediates": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "derivedFrom": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "isInputTo": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "sourcedFrom": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "masters": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "productizes": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "receives": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "consumes": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "owns": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "stewards": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "custodians": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "establishesAuthorityFor": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "designatesAuthoritativeSource": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "constrains": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "representedAs": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "definesCommitmentFor": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "evaluates": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "assures": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "playsRole": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "hasScope": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "determinesPurposeAndMeansOf": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "processesOnBehalfOf": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "processesPersonalData": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "engagesProcessor": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "instantiatesAs": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "producesEvidence": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "evidenceForControl": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "evidenceForExecution": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "derivedFromRequirement": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "satisfiesRequirement": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "hasAccountableOwner": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "hasControlOwner": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "represents": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "hasDataController": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        },
        "hasDataProcessor": {
          "oneOf": [
            {
              "$ref": "#/$defs/iriRef"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/iriRef"
              },
              "minItems": 1
            }
          ]
        }
      },
      "patternProperties": {
        "^[A-Za-z_][A-Za-z0-9._-]*:[A-Za-z_][A-Za-z0-9._-]*$": {},
        "^@": {}
      },
      "additionalProperties": true
    },
    "nodeDocument": {
      "allOf": [
        {
          "$ref": "#/$defs/node"
        },
        {
          "type": "object",
          "properties": {
            "@context": {
              "$ref": "#/$defs/contextValue"
            }
          }
        },
        {
          "not": {
            "required": [
              "@graph"
            ]
          }
        }
      ]
    },
    "graphDocument": {
      "type": "object",
      "required": [
        "@graph"
      ],
      "properties": {
        "@context": {
          "$ref": "#/$defs/contextValue"
        },
        "@id": {
          "type": "string",
          "format": "uri-reference"
        },
        "@graph": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          },
          "minItems": 1
        }
      },
      "additionalProperties": true
    }
  },
  "x-gedrm": {
    "version": "0.1",
    "normativeSemanticAuthority": "gedrm-specification.md",
    "semanticValidation": "gedrm-0.1.shacl.ttl",
    "jsonLdContext": "gedrm-0.1.context.jsonld",
    "ontology": "gedrm-0.1.ttl",
    "conceptRegistry": "gedrm-0.1.concept-registry.yaml",
    "conceptCount": 43,
    "relationshipCount": 39,
    "knownConceptTerms": [
      "DataOriginator",
      "DataProducer",
      "SystemOfRecord",
      "AuthoritativeSource",
      "DataHolder",
      "DataTransformer",
      "DataTransportRelay",
      "DataProvider",
      "DataPublisher",
      "DataDistributor",
      "DataBroker",
      "DataObject",
      "DataAsset",
      "DataProduct",
      "MasterData",
      "ReferenceData",
      "TransactionalData",
      "MarketData",
      "DerivedData",
      "Mastered",
      "GoldenRecord",
      "DataRecipient",
      "DataConsumer",
      "DataOwner",
      "DataSteward",
      "DataCustodian",
      "DataProductOwner",
      "ControlOwner",
      "SourceOfAuthority",
      "DataController",
      "DataProcessor",
      "PersonalData",
      "ProcessingActivity",
      "DerivationActivity",
      "MasteringActivity",
      "ControlExecution",
      "DataPolicy",
      "PolicyAsCode",
      "DataContract",
      "DataQualityRule",
      "DataControl",
      "ControlEvidence",
      "RequirementReference"
    ],
    "knownRelationshipTerms": [
      "originates",
      "produces",
      "recordsAuthoritativeStateFor",
      "isAuthoritativeSourceFor",
      "transforms",
      "transports",
      "provides",
      "publishes",
      "distributes",
      "brokersMediates",
      "derivedFrom",
      "isInputTo",
      "sourcedFrom",
      "masters",
      "productizes",
      "receives",
      "consumes",
      "owns",
      "stewards",
      "custodians",
      "establishesAuthorityFor",
      "designatesAuthoritativeSource",
      "constrains",
      "representedAs",
      "definesCommitmentFor",
      "evaluates",
      "assures",
      "playsRole",
      "hasScope",
      "determinesPurposeAndMeansOf",
      "processesOnBehalfOf",
      "processesPersonalData",
      "engagesProcessor",
      "instantiatesAs",
      "producesEvidence",
      "evidenceForControl",
      "evidenceForExecution",
      "derivedFromRequirement",
      "satisfiesRequirement"
    ],
    "notes": [
      "This schema intentionally does not encode the full GEDRM semantic model.",
      "Core semantic cardinalities and graph-level constraints belong in SHACL.",
      "External/profile properties are permitted so GEDRM profiles can extend the core without redefining it."
    ]
  }
}
