QName

QNames were introduced by XML Namespaces in order to be used as URI references.[1] QName stands for "qualified name" and defines a valid identifier for elements and attributes. QNames are generally used to reference particular elements or attributes within XML documents.[2]

Motivation

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)

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="http://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

This article is issued from Wikipedia - version of the 3/2/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.