New grammar formats bring new concerns
I'm pretty confident that for some edge cases, the same set of rules defined with DTD
domains and RelaxNG domains must result in different tokens for the
attribute. (Note: not everybody agrees.) If true, this truly reduces the attribute to
DITA 1.3 ships a constraint for some new learning maps - it limits what you can use from the "map
group" domain, and takes out the core
In the (normative) RelaxNG version this is done in one module, so it gets one token. Which is great – using one module is simpler! I can maintain my entire set of constraints easily and logically in one module, so I'd hate the spec to force me into two modules just for the sake of Increased Modularity.
That said – I do feel sure that for better and worse, the DTD coding rules consider this to be two different types of constraint, and as such, it should use two modules. (Note: this is where not everybody agrees with me.) As the specification describes them, the learning constraint is both a Domain constraint module and a constraint to replace a base element with domain extensions. DTD syntax requires these types of domain be implemented in different places in the document type shell, and IMHO the spec clearly considers this to be two different constraints. Thus … two domain tokens. Uh oh.
In short: RelaxNG doesn't seem to forbid doing this as one constraint, and I'd hate it to be otherwise. One clear set of related constraints = one domain token. In DTD this same pattern represents two constraints. Two constraints = two domain tokens. If my set of domains tokens can vary based on the grammar I'm using, but the rules enforced by each grammar are exactly the same, then our rules are nonsense.