QName
A QName, or qualified name, is the
The World Wide Web Consortium introduced the QName convention in the 1999 specification "Namespaces in XML".[1][2]
Purpose
Since URI references can be long and may contain prohibited characters for element/attribute naming, QNames are used to create a mapping between the URI and a namespace prefix. The mapping enables the abbreviation of URIs, therefore it achieves a more convenient way to write XML documents (see example below).
Formal definition
QNames are formally defined by the W3C as:[3]
QName ::= PrefixedName | UnprefixedName
PrefixedName ::= Prefix ':' LocalPart
UnprefixedName ::= LocalPart
Prefix ::= NCName
LocalPart ::= NCName
NCName is defined as follows:
NCName ::= Name - (Char* ':' Char*) (* An XML Name, minus the ":" *)
Name ::= NameStartChar (NameChar)*
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6]
| [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF]
| [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF]
| [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD]
| [#x10000-#xEFFFF]
NameChar ::= NameStartChar | "-" | "." | [0-9]
| #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
Char ::= (* any Unicode char, excluding surrogate blocks FFFE and FFFF. *)
#x9 | #xA | #xD | [#x20-#xD7FF]
| [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Whereby the Prefix is used as placeholder for the namespace and the LocalPart as the local part of the qualified name. A local part can be an attribute name or an element name.
Example
<?xml version="1.0"?>
<doc xmlns:x="https://example.com/ns/foo">
<x:p/>
</doc>
In line two the prefix "x" is declared to be associated with the URI "http://example.com/ns/foo". This prefix can further on be used as abbreviation for this namespace. Subsequently, the tag "x:p" is a valid QName because it uses the "x" as namespace reference and "p" as local part. The tag "doc" is also a valid QName, but it consists only of a local part.[4]
See also
References
- ^ a b Walsh, Norman, ed. (17 March 2004). "Using Qualified Names (QNames) as Identifiers in XML Content". W3.org. World Wide Web Consortium. Retrieved 2018-06-12.
- ^ Bray, Tim; Hollander, Dave; Layman, Andrew, eds. (14 January 1999), "Namespaces in XML", W3.org, World Wide Web Consortium, retrieved 2018-06-12
- ^ Namespaces in XML 1.0 (Second Edition)
- ^ Namespaces in XML 1.0 (Second Edition)