pboProperty Ontology
markdown44 lines3.4 KB

Validation summary — pbo 0.1.0

Re-run 2026-09-15 from the bundled ontology skill scripts. Release state: release_candidate.

Deterministic project validation (validate_project.py)

Gate Result
Required files present pass
YAML / JSON / JSONL / Turtle parse errors 0
Accepted terms 486 (93 classes, 75 object properties, 37 datatype properties, 24 schemes, 257 concepts)
Accepted axioms 190
Label and definition coverage of custom RDF terms 100 % (205 terms)
Term evidence-or-rationale coverage 100 %
Axiom evidence-or-rationale coverage 100 %
Evidence references to unknown sources 0
Undeclared custom predicates 0
Core CQ query coverage 9 / 9
Errors 0
Warnings 26

All 26 warnings are PROPERTY_DOMAIN / PROPERTY_RANGE notices for properties that intentionally omit a global domain or range because they apply to several unrelated classes (hasRisk, hasMetricValue, hasParticipation, concernsAsset, allocatesOutgoing, appliesIn, governedBy, underRegime, and similar). The omission is recorded in DEC-009 and the per-class constraints live in shapes.ttl.

Competency-question tests (run_cq_tests.py)

15 / 15 pass with entailment: none against instances.ttl plus ontology.ttl and taxonomy.ttl. Each query has an explicit row_count expectation; expectations were set after inspecting the result rows, not from the count alone. Negative and boundary cases covered by fixtures: expired and pending authorisations (CQ-015), conflicting yield claims (CQ-011), the owner-occupier 1–3-room partial-coverage threshold and the 4+ full-coverage threshold (CQ-002), gross versus triple-net outgoings (CQ-010), and a corporate-lease agreement with fixedRent true alongside subleases with fixedRent false (CQ-003).

SHACL (run_shacl.py, pySHACL via uv run)

Data graph instances.ttl, shapes shapes.ttl, ontology graph ontology.ttl + taxonomy.ttl, inference rdfs. Conforms: true. No negative-fixture file is bundled; critical constraints were exercised by hand during authoring (missing authorisationStatus, a HeadLease without fixedRent true, a MetricValue without numericValue) but those cases are not retained as an automated regression fixture. Adding fixtures/negative.ttl is the first recommended improvement.

Semantic atlas (validate_atlas.py, render_check.py)

documentation/semantic-atlas.md: 197 Mermaid blocks, all balanced; 100 % lexical coverage of classes, object properties, datatype properties, SKOS schemes, SHACL node shapes, competency questions, sources, evidence and decisions. Render check: 197 / 197 blocks rendered under both ELK and Dagre layouts, no failures.

Not executed

  • OWL DL reasoning. No reasoner (HermiT, ELK, Pellet-compatible) was run. Disjointness axioms and the four restrictions are therefore syntactically checked only. The release policy sets require_external_reasoner: false.
  • Semantic expert review of class-versus-role, is-a-versus-part-of and event-versus-property choices beyond the modeller's own review recorded in decisions.yaml.
  • Verification of synthesis-only legal and tax claims against primary legislation (ISSUE-005, ISSUE-006).

Regression policy

Any change to build/build_model.py, instances.ttl, shapes.ttl or queries/ must re-run the four commands in README.md and keep all 15 CQ tests, SHACL conformance and atlas coverage green before the version is bumped.