rdfs:comments.| §2.6 says | Counter | Remember it by |
|---|---|---|
| "Declaring domain/range makes the type inferences available to reasoners." | "Available" is not "useful." The only thing a domain does with data is re-type its subjects. The rule the modeler meant — "only policies should carry this" — is a data check: a shape, not an axiom. §2.6's own "critical nuance" says so ("the reasoner does not reject the assertion… For validation, use SHACL"). | The reasoner doesn't reject the bad triple — it believes it. |
| "…and helps map generators understand the property's signature." | Tools need metadata, not logic. schema:domainIncludes/rangeIncludes (already in §1.1's stack) are machine-readable, can list several classes, and carry no inference. And §2.6's own exception moves signatures into free-text comments — the least machine-readable option (F20). If generators really depended on domains, every excepted property would break them. |
A DL axiom as tool documentation is a comment with side effects. |
| "A union domain would infer subjects into the union type — omitting it and documenting in a comment is safer." | That inference is correct — it's what a union domain means (F20). The real defect (it validates nothing) applies even more to single-class domains: they re-type a wrong subject into one class, not a broad union. §2.6 fears the weaker axiom and mandates the stronger. Real unions: SHACL sh:or (enforced) + repeated domainIncludes (documented). |
The exception is §2.6 behaving correctly, once — generalize it. |
One bad record doesn't fail — the whole model does. Silent re-typing when there's no clash; a model-wide failure when there is. Neither tells you which record is wrong.
| Need | Use |
|---|---|
| Tool-readable property signature — the default | schema:domainIncludes / rangeIncludes |
| Enforce "only X may carry this property" | sh:targetSubjectsOf + sh:class |
| Cross-cutting subjects (Policy ∪ Location ∪ …) | sh:or + repeated domainIncludes |
| Enforce a literal's type | sh:datatype (+ rdfs:range xsd:* as convention) |
| Type inference you actually want, on trusted data | rdfs:domain/range — documented, disjointness-audited |
ra:hasRiskObservation ships without a domain: the best-behaved property in the document breaks the rule.Swap the default and the exception. Every property keeps a signature — as schema:domainIncludes metadata plus a SHACL shape, not as a retyping axiom. rdfs:domain/range survive as the documented exception for inference you deliberately chose, on data you trust, checked against §2.3's disjointness. Everything §2.6 got right — signatures everywhere, the cross-cutting exception, SHACL as validator — is kept.
Condensed from the full rebuttal · rebuts Ontology Design Choices §2.6 · companion findings F4, F20 · sibling: code-list cheatsheet. Standards: RDFS, OWL 2 DL, SHACL, schema.org meta-terms.