The concepts described below are critical for a full understanding of keys and key processing.
The use of the phases "<map>
element" or
"<topicref>
element" should be interpreted as
"<map>
element and any specialization of
<map>
element " or " <topicref>
element or
any specialization of <topicref>
element."
@scope
or
@format
attribute<topicmeta>
element<topicref>
element that binds one or more key names to zero or more resources.@keyref
or
@conkeyref
.A key definition binds one or more keys to zero or more resources. Resources can be:
@href
attribute or indirectly by the @keyref
attribute
on the key definition. References to the key are
considered references to the URI-addressed resource.<topicmeta>
element) The child elements of the
<topicmeta>
element. The content of those elements can be
used to populate the content of elements that reference the
key.If a key definition does not contain a <topicmeta>
element and does not
refer to a resource by @href
or
@keyref
, it is nonetheless a valid key definition. References to the key
definition are considered resolvable, but no linking or content transclusion occurs.
All key definitions and key references exist within a key scope. If the @keyscope
attribute is never specified within the map hierarchy,
all keys exist within a single, default key scope.
Additional key scopes are created when the
@keyscope
attribute is used. The @keyscope
attribute specifies a name or names for the scope. Within a map hierarchy, key scopes are
bounded by the following:
@keyscope
attribute<topicref>
elements that specify the @keyscope
attributeThe key space associated with a key scope is used to resolve all key references that occur immediately within that scope. Key references in child scopes are resolved using the key spaces that are associated with those child scopes.
A key scope is associated with exactly one key space. That key space contains all key definitions that are located directly within the scope; it might also contain definitions that exist in other scopes. Specifically, the key space associated with a key scope is comprised of the following key definitions, in order of precedence:
A key space can contain many definitions for a given key, but only one definition is effective for the purpose of resolving key references.
When a key has a definition in the key space that is inherited from a parent scope, that definition is effective. Otherwise, a key definition is effective if it is first in a breadth-first traversal of the locally-scoped submaps beneath the scope-defining element. Put another way, a key definition is effective if it is the first definition for that key name in the shallowest map that contains that key definition. This allows higher-level map authors to override keys defined in referenced submaps.
@keys
attribute might be the effective definition for some of its
keys but not for others.Within a key scope, keys do not have to be defined before they are referenced. The key space is effective for the entire scope, so the order of key definitions and key references relative to one another is not significant. This has the following implications for processors:
For purposes of key definition precedence, the scope-qualified key definitions from a child scope are considered to occur at the location of the scope-defining element within the parent scope. See Example: How key scopes affect key precedence for more information.