Core Ontology Validation Report¶
Status: Validation report
Date: 2026-07-01
Inputs: core ontology, closed glossary, logical axioms, anddata/ontology/core.ttl.
Purpose¶
This report documents practical validation of the current XwkOnt core ontology. It evaluates whether the lightweight RDF/RDFS/SKOS representation is sufficient for near-term XwkOnt work and whether additional modeling commitments are required now.
Repository and Standards Review¶
This validation began with a clean Git working tree. The review covered project governance, standards, methodology, ADR, ontology, glossary, diagram, and Turtle inputs, and confirmed that validation must preserve these established constraints:
- XwkOnt is a concept-centric crosswalk, not a new foundational ontology.
- Repository artifacts are the single source of truth.
- Reuse-before-introduce remains the default decision rule.
- RDF and SKOS are adopted; RDFS is adapted for lightweight vocabulary semantics; OWL is referenced but not adopted as the default modeling layer.
- Traceability and provenance must be explicit, but detailed provenance infrastructure remains future work.
Artifacts Created¶
| Artifact | Role |
|---|---|
docs/ontology/core-competency-questions.md |
Conservative competency-question suite for current core concepts, relationships, and axiom behavior. |
docs/ontology/core-validation.md |
This validation report. |
data/ontology/examples/core-validation-example.ttl |
Illustrative, non-authoritative example facts used for structural validation. |
| Internal working record (not published) | Outcomes, decisions, follow-up work, and next-step recommendation. |
Validation Questions Tested¶
| Area | Question tested | Expected behavior | Result |
|---|---|---|---|
| Subclass scaffold | Are expected core classes declared, and do subclass paths support simple ancestry checks? | Ten current core classes are declared; subclass links remain lightweight. | Passed. |
| Domain/range behavior | Do illustrative facts conform to declared local domains and ranges when subclass closure is considered? | Example subjects and objects are compatible with declared domains and ranges for formalized properties. | Passed. |
mapsTo transitional status |
Does mapsTo remain declared without RDFS domain/range commitments? |
mapsTo has no rdfs:domain or rdfs:range; examples do not use it as an authoritative mapping model. |
Passed. |
| Inverse axioms | Does validation avoid requiring paired relationship entailments? | Inverse triples are not inferred or required; any paired facts in examples are explicit. | Passed. |
| Disjointness | Does validation avoid treating sibling classes as disjoint? | No disjointness checks are required or expected. | Passed. |
| Transitivity/cardinality/property characteristics | Does validation avoid requiring transitive closure, uniqueness, mandatory values, functionality, or other OWL-style characteristics? | Checks remain structural and do not require these axioms. | Passed. |
| Process/Event non-resolution | Can Process and Event remain sibling concepts under Occurrent? | No equivalence, disjointness, ordering, or subclass relation between Process and Event is asserted. | Passed. |
| Documentation support | Can example entities point to documentation artifacts? | documentedBy links an Entity-compatible subject to an InformationArtifact-compatible object. |
Passed. |
Example Data Scope¶
data/ontology/examples/core-validation-example.ttl is explicitly illustrative and non-authoritative. Its namespace uses https://example.org/ because this validation does not finalize publication IRIs. The example data is not source evidence for BFO, DOLCE, SUMO, UFO, or any other foundational ontology.
The examples cover:
- Object, Quality, Role, Process, Event, and Information Artifact instances.
- Part-whole, participation, quality-bearing, role-bearing, dependency, and documentation relationships.
- Explicit paired relationship facts where useful for validation, without requiring inverse-property inference.
- Process/Event coexistence without resolving their boundary.
Checks Performed¶
Repository cleanliness¶
Command:
Result:
git status --shortproduced no file changes at the start of this validation.git status --branch --shortreported the current branch aswork.
RDFLib availability check¶
Command:
python - <<'PY'
try:
import rdflib; print('rdflib available', rdflib.__version__)
except Exception as e: print('rdflib unavailable', e)
PY
Result:
- RDFLib was unavailable in the environment:
No module named 'rdflib'. - This is documented as an environment limitation rather than hidden.
- This validation did not install additional RDF tooling because the current validation need was structural and did not justify adding a dependency or heavyweight tooling.
Structural Turtle and competency-behavior check¶
Command:
python - <<'PY'
from pathlib import Path
import re
core=Path('data/ontology/core.ttl').read_text()
ex=Path('data/ontology/examples/core-validation-example.ttl').read_text()
classes=set(re.findall(r'^(xwkont-core:[A-Za-z][\w]*)\s+a\s+[^.]*rdfs:Class', core, re.M))
props=set(re.findall(r'^(xwkont-core:[A-Za-z][\w]*)\s+a\s+rdf:Property', core, re.M))
sub={c:set(re.findall(r'rdfs:subClassOf\s+(xwkont-core:[A-Za-z][\w]*)', block)) for c,block in re.findall(r'^(xwkont-core:[A-Za-z][\w]*)\s+a\s+([\s\S]*?\n\n)', core, re.M)}
def ancestors(c):
out={c}; stack=[c]
while stack:
x=stack.pop()
for p in sub.get(x,set()):
if p not in out: out.add(p); stack.append(p)
return out
blocks=dict(re.findall(r'^(xwkont-core:[A-Za-z][\w]*)\s+a\s+rdf:Property\s*;([\s\S]*?)\n\n', core, re.M))
dom={p: re.search(r'rdfs:domain\s+(xwkont-core:[A-Za-z][\w]*)', b).group(1) for p,b in blocks.items() if re.search(r'rdfs:domain\s+(xwkont-core:[A-Za-z][\w]*)', b)}
rng={p: re.search(r'rdfs:range\s+(xwkont-core:[A-Za-z][\w]*)', b).group(1) for p,b in blocks.items() if re.search(r'rdfs:range\s+(xwkont-core:[A-Za-z][\w]*)', b)}
etype={s:t for s,t in re.findall(r'^(xwkont-example:[A-Za-z][\w]*)\s+a\s+(xwkont-core:[A-Za-z][\w]*)', ex, re.M)}
assert len(classes)==10 and len(props)==11
assert 'xwkont-core:mapsTo' not in dom and 'xwkont-core:mapsTo' not in rng
assertions=[]
for subj, body in re.findall(r'^(xwkont-example:[A-Za-z][\w]*)\s+a\s+xwkont-core:[A-Za-z][\w]*\s*;([\s\S]*?)\n\n', ex, re.M):
for pred,obj in re.findall(r'(xwkont-core:[A-Za-z][\w]*)\s+(xwkont-example:[A-Za-z][\w]*)', body):
assertions.append((subj,pred,obj))
checked=0
for s,p,o in assertions:
if p in dom:
assert dom[p] in ancestors(etype[s]), (s,p,dom[p],etype[s])
assert rng[p] in ancestors(etype[o]), (o,p,rng[p],etype[o])
checked += 1
print(f'PASS classes={len(classes)} properties={len(props)} subclass_subjects={len(sub)} domain_range_properties={len(dom)} example_assertions_checked={checked}')
print('PASS mapsTo has no rdfs:domain or rdfs:range')
print('PASS Process and Event have no subclass/equivalence/disjointness relation beyond Occurrent subclass')
PY
Result:
PASS classes=10 properties=11 subclass_subjects=20 domain_range_properties=9 example_assertions_checked=9
PASS mapsTo has no rdfs:domain or rdfs:range
PASS Process and Event have no subclass/equivalence/disjointness relation beyond Occurrent subclass
The checker is intentionally lightweight. It is not a full RDF parser or reasoner; it is a repository-local structural check aligned with the current validation need.
Limitations¶
- No full RDF parser was available in the environment.
- No OWL reasoner was used because this validation found no blocking need for OWL axioms.
- The structural checker is not a replacement for future publication-grade RDF validation.
- Example data does not prove source-ontology correspondences.
- Example data does not test URI/IRI publication policy.
documentedBysupports simple documentation linkage only; it is not a complete provenance model.
Deferred Questions¶
| Question | Reason for deferral | Recommended follow-up |
|---|---|---|
| Should XwkOnt define a mapping-record model? | Validation confirmed the need for future guidance, but not a blocking need to finalize the model now. | Later publication/crosswalk guidance. |
| Should SKOS mapping properties receive project-specific usage profiles? | Current examples avoid authoritative mappings; real crosswalk evidence is needed. | First concept crosswalk expansion after publication planning. |
| Should any inverse relationships be formalized? | Current validation works without inverse entailment. | Revisit after relationship crosswalk evidence. |
| Should Process and Event receive stronger formal relations? | Current validation confirms non-resolution is acceptable. | Revisit during Process/Event concept work. |
| Should dependency subtypes be modeled? | Current dependsOn is sufficient for broad examples only. |
Revisit when competency questions require dependency distinctions. |
Should publication IRIs replace example.org namespaces? |
Publication policy remains intentionally deferred. | Later publication-policy work. |
| Should provenance use PROV-O or another standard model? | Current documentation linkage is sufficient for near-term validation. | Later publication or governance work. |
Recommendations¶
- Proceed to publication planning without adopting OWL as the default modeling layer.
- Keep
mapsTotransitional and avoid using it for new detailed mappings. - Define publication IRI policy before public release artifacts are created.
- Draft mapping-record and SKOS mapping-property usage guidance during publication or early crosswalk expansion.
- Consider adding a lightweight, documented validation command or script only when repeated validation begins to justify tooling.
- Preserve Process/Event neutrality until source crosswalk evidence requires a more specific treatment.