#base, #full, #xmlns

modifier

Syntax
#base
#full
#xmlns
    


Purpose

#base, #full, or #xmlns are used to modify the interpretation of element names in element rule headers, and when inquiring about the element context.

These namespace modifiers are intended for use in programs that process XML documents that use XML namespaces. Such documents use qualified element names: ordinary XML names with an optional namespace prefix. The prefix is separated from the remainder of the name with a colon. For instance, in:

  <author:name xmlns:author="www.some-uri.org/authors.xml">
    Herman Melville
  </author:name>
the element name author:name is a qualified name. author is the namespace prefix and name is the local (or base) part of the element name. An element name like name has a base part of name, and no prefix.

A complete description of XML namespaces is published by the W3C.

The #base, #xmlns, and #full namespace modifiers control whether the entire element name from the input document must match, or whether only the base part of the element name will be considered.

If none of these namespace modifiers is given, the default is that specified by the markup-identification declaration. If there is no markup-identification declaration, then the default is #full.

Element names in rule headers

Element names in element rule headers may be prefixed with either #base or #full. #xmlns is not permitted in this context.

When the element name is prefixed by #full, the rule will only fire when the element name in the start tag matches in its entirety.

For example, the rule

  element #full "name"
     output "%c"
will fire when the start tag is <name>, but not when the start tag is <author:name>.

When the element name is prefixed by #base, the rule will fire whenever the base part of the element name in the start tag matches. For instance, the rule

  element #base "name"
     output "%c"
will fire when the start tag is <name> as well as when the start tag is <author:name>. It ignores any namespace prefix when determining whether the rule matches.

Inquiring about the element context

#full, #base, or #xmlns may precede an element name when testing an element's identity.

For example, when element is #full "name" will succeed if the name of the current element in the input document is name, but not if the current element is author:name.

when element #base "name" will succeed if the name of the current element in the input document is name, or if the base part of the name of the current element is name (such as author:name).

For some tests, #xmlns may be used to modify the element name. #xmlns is a more restricted form of #base. For example, when parent is #xmlns "author" succeeds when the base part of the element name of the parent element is author and when the parent element is in the same local namespace as the current element. An element is in the same local namespace as the current element if all open elements between the current element and the element being tested have the same namespace name as the current element.

For instance,

  <x:a xmlns:x="bar.org" xmlns:y="foo.org" xmlns:z="bar.org">
    <y:b>
      <x:c>
        <z:d>
          <z:e>
          </z:e>
        </z:d>
      </x:c>
    </y:b>
  </x:a>
            
if z:e is the current element, then x:c and z:d are in its local namespace, because they both have the same local namespace (bar.org). It does not matter that they use different prefixes. y:b is in a different namespace (foo.org). x:a is in the same namespace, but it is not local any more because y:b changed the namespace.

In the example above, the following are true:

whereas the following are false:

#full, #base, or #xmlns may also be used when identifying an element whose properties are being referenced. For example, you can retrieve the name of an ancestor element whose base part is a with

  output name of open element #base "a"
            

The #xmlns namespace modifier cannot be used in: