This post is devoted to summarizing the two key changes (aka “what’s new”) in the second draft of the SML specification.
Schema-less identification of references: Reference elements are now normatively identified by setting the sml:ref global attribute to true; an element is a reference element if and only if it has sml:ref=”true”. The sml:ref type in the first draft of the SML specification has been renamed to sml:refType and its definition has been changed to ensure that sml:ref=”true” for all elements whose type is sml:refType. The schema-based constraints on the target of references (such as sml:targetType) are still supported on elements whose type is sml:refType. This change enables efficient implementation of the deref() function without requiring access to the schema information (aka PSVI).
sml:targetRequired: This new global attribute can be used to specify that the target of a reference must always exist, i.e., the reference cannot dangle or be null. It provides a convenient shorthand notation for a common constraint which required a Schematron assert/report in the first draft of the specification.
The SML XSD has been updated to include the above changes.