aif-core-compliance
v0.1.1
Published
AIF Core compliance validator for AIF.sql-shaped JSON with strict Upper Ontology and Forms fulfilment checks.
Readme
aif-core-compliance
AIF Core (Definition 1.1) compliance validator for AIF.sql-shaped JSON.
This package validates:
- Input shape with JSON Schema (
aif-sql-core-strictprofile) - Reference integrity (
REF_*) - Simple digraph constraints (
NO_SELF_LOOPS,NO_DUPLICATE_EDGES) - Upper Ontology constraints
- Forms Ontology fulfilment (strict)
Scope
- Target specification: AIF Core (Definition 1.1)
- Input format: AIF.sql-homomorphic JSON (table arrays)
- Validation mode: strict
- Entry points: library API and CLI (
aif-core-compliance)
Input Format Contract
validate(doc) expects one JSON object with all of the following required top-level keys:
nodesedgesschemesschemeFulfillmentdescriptorsdescriptorFulfillmentformEdgesformEdgeTypes
Top-level additional keys are not allowed by schema.
Row Shapes
nodes[]
nodeID: integer (>=1)text: stringtype: "I" | "RA" | "CA" | "PA"timestamp?: string
edges[]
edgeID: integer (>=1)fromID: integer (>=1)toID: integer (>=1)formEdgeID: integer (>=1) | null
schemes[]
schemeID: integer (>=1)name: stringschemeTypeID: integer (>=1)
schemeFulfillment[]
nodeID: integer (>=1)schemeID: integer (>=1)
descriptors[]
descriptorID: integer (>=1)text: string
descriptorFulfillment[]
nodeID: integer (>=1)descriptorID: integer (>=1)
formEdges[]
formEdgeID: integer (>=1)schemeID: integer (>=1)formEdgeTypeID: integer (>=1)name: stringdescriptorID: integer (>=1) | nullschemeTarget: integer (>=1) | null
formEdgeTypes[]
formEdgeTypeID: integer (>=1)name: stringdirection: "IN" | "OUT"
Strict Semantics Notes
edges.formEdgeIDmay benullin schema, but strict validation raisesEDGE_ROLE_REQUIREDwhen that edge is incident to an S-node (RA/CA/PA).formEdges.descriptorIDandformEdges.schemeTargetmay benullin schema and are checked by strict fulfilment rules when present.
Minimal Input Example
See examples/valid/minimal.json.
{
"nodes": [
{ "nodeID": 1, "text": "Premise", "type": "I" },
{ "nodeID": 2, "text": "Apply RA", "type": "RA" },
{ "nodeID": 3, "text": "Conclusion", "type": "I" }
],
"edges": [
{ "edgeID": 1, "fromID": 1, "toID": 2, "formEdgeID": 1 },
{ "edgeID": 2, "fromID": 2, "toID": 3, "formEdgeID": 2 }
],
"schemes": [{ "schemeID": 1, "name": "Basic Inference", "schemeTypeID": 1 }],
"schemeFulfillment": [{ "nodeID": 2, "schemeID": 1 }],
"descriptors": [],
"descriptorFulfillment": [],
"formEdges": [
{
"formEdgeID": 1,
"schemeID": 1,
"formEdgeTypeID": 1,
"name": "premise",
"descriptorID": null,
"schemeTarget": null
},
{
"formEdgeID": 2,
"schemeID": 1,
"formEdgeTypeID": 2,
"name": "conclusion",
"descriptorID": null,
"schemeTarget": null
}
],
"formEdgeTypes": [
{ "formEdgeTypeID": 1, "name": "incoming", "direction": "IN" },
{ "formEdgeTypeID": 2, "name": "outgoing", "direction": "OUT" }
]
}Install
npm install aif-core-complianceLibrary API
import { validate, type AifSqlDocument } from "aif-core-compliance";
const doc: AifSqlDocument = /* your input */;
const result = validate(doc);
// { compliant: boolean, issues: Issue[] }Issue minimum fields:
idseveritymessagepath(when available)
CLI
aif-core-compliance examples/valid/minimal.json
aif-core-compliance --json examples/invalid/edge_role_required.jsonExit codes:
0: compliant1: non-compliant2: input/runtime error (read/parse/exception)
Profile Schema
schemas/aif-sql-core-strict.schema.json
Installed package path example:
node_modules/aif-core-compliance/schemas/aif-sql-core-strict.schema.json
Rule Catalog
Rule IDs and descriptions are in rules/catalog.json.
Examples
examples/valid/examples/invalid/
Each invalid example has a paired expectation file:
examples/invalid/<name>.expected.json
Development
npm install
npm test
npm run build