schemas/semantic-assertion.schema.json
Browser-rendered handoff of repository-authored JSON. Source identity: schemas/semantic-assertion.schema.json. Links and original summaries are shown; external source content is not redistributed.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://chris-page-gov.github.io/okf-explorer/profile/bundle-wiki/v1/semantic-assertion.schema.json",
"title": "OKF evidence-bearing semantic relationship assertion",
"type": "object",
"required": [
"@id",
"@type",
"source",
"predicate",
"target",
"kind",
"label",
"inverse_label",
"assertion_status",
"assertion_scope",
"authority",
"derivation",
"observed_at",
"evidence",
"rights"
],
"properties": {
"@id": {"type": "string", "format": "uri"},
"@type": {
"oneOf": [
{"type": "string", "minLength": 1},
{
"type": "array",
"items": {"type": "string", "minLength": 1},
"minItems": 1,
"uniqueItems": true
}
]
},
"source": {"$ref": "#/$defs/iriValue"},
"predicate": {"$ref": "#/$defs/iriValue"},
"target": {"$ref": "#/$defs/iriValue"},
"kind": {"$ref": "#/$defs/nonEmptyString"},
"label": {"$ref": "#/$defs/nonEmptyString"},
"inverse_label": {"$ref": "#/$defs/nonEmptyString"},
"assertion_status": {
"enum": ["official", "normalized", "inferred", "model-derived"]
},
"assertion_scope": {
"enum": ["real-world", "synthetic-fixture"]
},
"authority": {"$ref": "#/$defs/authority"},
"derivation": {"$ref": "#/$defs/iriValue"},
"derivation_activity": {"$ref": "#/$defs/iriValue"},
"rule": {"$ref": "#/$defs/iriValue"},
"supporting_assertions": {
"type": "array",
"items": {"$ref": "#/$defs/iriValue"},
"minItems": 1,
"uniqueItems": true
},
"confidence_score": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"strength": {"type": "number"},
"count": {"type": "integer", "minimum": 0},
"observed_at": {"type": "string", "format": "date-time"},
"stale_after": {"type": "string", "format": "date-time"},
"review_status": {"$ref": "#/$defs/nonEmptyString"},
"evidence": {
"type": "array",
"items": {"$ref": "#/$defs/evidence"},
"minItems": 1
},
"rights": {"$ref": "#/$defs/rights"}
},
"allOf": [
{
"if": {
"properties": {"assertion_scope": {"const": "synthetic-fixture"}},
"required": ["assertion_scope"]
},
"then": {
"properties": {
"authority": {
"properties": {"class": {"const": "synthetic"}},
"required": ["class"]
}
}
}
},
{
"if": {
"properties": {
"assertion_scope": {"const": "real-world"},
"assertion_status": {"const": "official"}
},
"required": ["assertion_scope", "assertion_status"]
},
"then": {
"properties": {
"authority": {
"properties": {"class": {"const": "official"}},
"required": ["class"]
}
}
}
},
{
"if": {
"properties": {
"assertion_scope": {"const": "real-world"},
"assertion_status": {"enum": ["normalized", "inferred"]}
},
"required": ["assertion_scope", "assertion_status"]
},
"then": {
"properties": {
"authority": {
"properties": {"class": {"const": "derived"}},
"required": ["class"]
}
}
}
},
{
"if": {
"properties": {
"assertion_scope": {"const": "real-world"},
"assertion_status": {"const": "model-derived"}
},
"required": ["assertion_scope", "assertion_status"]
},
"then": {
"properties": {
"authority": {
"properties": {"class": {"const": "model-assisted"}},
"required": ["class"]
}
}
}
},
{
"if": {
"properties": {"assertion_status": {"const": "inferred"}},
"required": ["assertion_status"]
},
"then": {
"required": ["rule", "supporting_assertions", "confidence_score", "derivation_activity"]
}
},
{
"if": {
"properties": {"assertion_status": {"const": "model-derived"}},
"required": ["assertion_status"]
},
"then": {
"required": ["confidence_score", "derivation_activity", "review_status"]
}
}
],
"additionalProperties": true,
"$defs": {
"nonEmptyString": {
"type": "string",
"minLength": 1,
"pattern": "\\S"
},
"iriValue": {
"oneOf": [
{"type": "string", "minLength": 1, "pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\s]+$"},
{
"type": "object",
"required": ["@id"],
"properties": {
"@id": {"type": "string", "minLength": 1, "pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\s]+$"}
},
"additionalProperties": true
}
]
},
"authority": {
"type": "object",
"required": ["class", "label", "source"],
"properties": {
"class": {
"enum": ["official", "derived", "model-assisted", "synthetic", "unclassified"]
},
"label": {"$ref": "#/$defs/nonEmptyString"},
"source": {"$ref": "#/$defs/canonicalWebUrl"}
},
"additionalProperties": false
},
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
"evidence": {
"type": "object",
"required": ["@id", "type", "url", "source_field", "source_value_sha256", "retrieved_at"],
"properties": {
"@id": {"type": "string", "format": "uri"},
"type": {"$ref": "#/$defs/nonEmptyString"},
"url": {"$ref": "#/$defs/canonicalWebUrl"},
"resource": {"$ref": "#/$defs/canonicalWebUrl"},
"source_artifact": {"$ref": "#/$defs/nonEmptyString"},
"source_sha256": {"$ref": "#/$defs/sha256"},
"source_field": {"$ref": "#/$defs/nonEmptyString"},
"field_provenance": {"$ref": "#/$defs/nonEmptyString"},
"source_value": {},
"source_value_sha256": {"$ref": "#/$defs/sha256"},
"source_value_hash_canonicalization": {"$ref": "#/$defs/nonEmptyString"},
"literal_sha256": {"$ref": "#/$defs/sha256"},
"locator": {"$ref": "#/$defs/nonEmptyString"},
"normalization": {"$ref": "#/$defs/iriValue"},
"rule_id": {"$ref": "#/$defs/iriValue"},
"rationale": {"$ref": "#/$defs/nonEmptyString"},
"retrieved_at": {"type": "string", "format": "date-time"}
},
"additionalProperties": true
},
"rights": {
"type": "object",
"required": ["source", "assertion"],
"properties": {
"source": {"$ref": "#/$defs/canonicalWebUrl"},
"assertion": {"$ref": "#/$defs/nonEmptyString"}
},
"additionalProperties": true
},
"canonicalWebUrl": {
"type": "string",
"format": "uri",
"allOf": [
{"pattern": "^https?://(?:\\[[0-9A-Fa-f:.]+\\]|[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?)(?::(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?(?:[/?#]|$)"},
{"pattern": "^[\\u0021-\\u007e]+$"},
{"pattern": "^(?!.*[\\\"'<>\\\\^`{|}])"},
{"pattern": "^(?!.*%(?![0-9A-Fa-f]{2}))"},
{"pattern": "^https?://(?![^/?#]*@)"}
]
}
}
}