A scoped identifier is the pair:¶
ScopedIdentifier := {
scope : finite octet string,
identifier : finite octet string
}¶
Both components are opaque octet strings at this model boundary. Either component can be empty. An empty scope or identifier is still an exact value and is distinct from absence of the ScopedIdentifier from the set. A surrounding profile may impose a non-empty requirement when required by the imported identifier system; this model does not impose that restriction on every future system. This specification does not impose a namespace syntax on imported identifier systems, require a registry lookup, require resolution, or interpret the semantics associated with an imported scope.¶
Imported scope semantics are interpreted relative to the context of the containing value. A specification or interoperability profile that imports an identifier system MUST define, for each context value it uses, the exact mapping from scope octets to imported identifier semantics and the exact identifier octets carried for that system. Within one context value, incompatible imported semantics MUST NOT use the same scope octets. The same scope octets can be reused under different context values because context itself affects comparison.¶
Because this model compares each complete ScopedIdentifier exactly, a mapping also has to adapt any native comparison semantics of an imported identifier system to that exact boundary. Exact equality represents an equivalence relation. A profile that claims to preserve an imported identifier comparison unchanged therefore MUST identify an equivalence relation to be represented. If, after the applicable imported interpretation is fixed, that matching behavior is not an equivalence relation, the surrounding mapping MUST first define the equivalence being projected into this model; any additional collapse introduced by that projection occurs before model admission.¶
Under one context and applicable mapping, accepted imported instances equivalent under the fixed interpretation MUST produce the same (scope, identifier) pair before admission. A profile claiming to import that comparison unchanged MUST also reflect equivalence: with that interpretation fixed, accepted instances produce the same exact pair if and only if they are equivalent under the imported relation. Direct copying is sufficient only when the relevant equality is already exact octet equality and the selected scope is stable for that comparison. For aliases, the mapping MUST deterministically select or derive the exact pair for the equivalence class under the imported relation under the fixed interpretation. Under the same mapping and interpretation, that pair MUST NOT vary with implementation preference, time, or ambient mutable state; changing representative selection changes the import mapping. Merging imported identifiers that the imported comparison considers different is upstream loss and cannot be reversed by preserving the resulting pair.¶
At this model boundary, scope participates in fixing the interpretation of that imported identifier within the containing Value, not necessarily only the public name of the imported identifier scheme. A distinction that changes the imported identifier interpretation or imported comparison relation MUST be fixed by the imported identifier octets, the containing context, or the scope octets; it MUST NOT exist only in content or ambient mapping state if that would let the same (context, scope, identifier) tuple carry incompatible imported meanings. A separate application-specific distinction, such as a role, relationship class, position, or occurrence label that changes only how the imported identifier participates in this Value, MUST be made observable under the placement rule in Section 4.3 and can be carried in scope or content. A context mapping can define a whole family of scope encodings; this model still treats every resulting scope as opaque octets and defines no scope grammar.¶
Conceptually, an imported identifier is qualified by:¶
(context, scope, identifier)
¶
The context is represented once at the level of the containing Value. A ScopedIdentifier copied out of a Value does not carry that context. A consumer MUST NOT assume that the same (scope, identifier) pair has the same imported meaning under another context unless a surrounding specification defines it.¶
A profile may use an allocated name, self-certifying value, Uniform Resource Identifier (URI), including a Uniform Resource Name (URN), an identifier defined by another standard, or another stable octet string as a scope. This specification does not prefer or require one such mechanism.¶
Equality of scoped identifiers is exact equality of both scope octets and identifier octets. This is the model-level equality relation for the pair. The pair is not self-interpreting: its imported meaning is determined by the containing context and the applicable mapping described above.¶