@prefix aac: . @prefix sh: . @prefix xsd: . # SHACL shapes for the AAC standard (v1). A conforming document validates # against these in addition to round-tripping the conformance vectors. aac:BoardShape a sh:NodeShape ; sh:targetClass aac:Board ; sh:property [ sh:path aac:boardType ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path aac:rows ; sh:datatype xsd:unsignedShort ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path aac:cols ; sh:datatype xsd:unsignedShort ; sh:minCount 1 ; sh:maxCount 1 ] . # A cell MUST carry a position (SPEC §2). Row and column are the immutable # motor coordinates (SPEC §3) — required here; immutability is enforced by the # round-trip conformance check, not expressible in SHACL. aac:CellShape a sh:NodeShape ; sh:targetClass aac:Cell ; sh:property [ sh:path aac:row ; sh:datatype xsd:unsignedShort ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path aac:col ; sh:datatype xsd:unsignedShort ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path aac:locked ; sh:datatype xsd:boolean ; sh:maxCount 1 ] . # Every cascade level carries an energy floor and an offline flag. The offline # flag is true for exactly L0-L2 (SPEC §6.2); monotonicity of energyUj across # the ten levels is checked by conformance suite C2. aac:CascadeLevelShape a sh:NodeShape ; sh:targetClass aac:CascadeLevel ; sh:property [ sh:path aac:energyUj ; sh:datatype xsd:unsignedLong ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path aac:offline ; sh:datatype xsd:boolean ; sh:minCount 1 ; sh:maxCount 1 ] . # The receipt provenance <-> measured coupling (SPEC §9): an Estimator reading # MUST NOT carry a measured figure. (The never-billed invariant is a behavioural # constraint on implementations, not a document shape.) aac:ReceiptShape a sh:NodeShape ; sh:targetClass aac:Receipt ; sh:property [ sh:path aac:estimatedUj ; sh:datatype xsd:unsignedLong ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:property [ sh:path aac:provenance ; sh:minCount 1 ; sh:maxCount 1 ] ; sh:not [ sh:and ( [ sh:path aac:provenance ; sh:hasValue aac:Estimator ] [ sh:path aac:measuredUj ; sh:minCount 1 ] ) ] .