QNames wurden durch XML Namespaces mit dem Ziel eingeführt, als URI-Referenz zu dienen.[1] QName steht für „qualified name“ und definiert einen gültigen Bezeichner für Elemente und Attribute. QNames werden allgemein benutzt, um auf bestimmte Elemente oder Attribute innerhalb von XML-Dokumenten zu verweisen.[2]

Motivation

Bearbeiten

Weil URI-Referenzen lang sein können und für Element-/Attributnamen verbotene Zeichen enthalten können, werden QNames benutzt, um eine Abbildung von URI und Namespace-Präfix zu erstellen. Durch das Abbilden können URIs abgekürzt werden und somit in XML-Dokumenten komfortabler geschrieben werden (siehe Beispiel).

Formale Definition

Bearbeiten

QNames werden vom W3C formal wie folgt definiert:[3]

       QName          ::=   PrefixedName | UnprefixedName
       PrefixedName   ::=   Prefix ':' LocalPart
       UnprefixedName ::=   LocalPart
       Prefix         ::=   NCName
       LocalPart      ::=   NCName

NCName ist wie folgt definiert:

     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]

Das Präfix wird als Platzhalter für den Namensraum und der LocalPart als Lokalteil für den qualifizierten Bezeichner verwendet. Lokalteil kann ein Attributname oder Elementname sein.

Beispiel

Bearbeiten
  <?xml version='1.0'?>
  <doc xmlns:x="http://example.com/ns/foo">
    <x:p/>
  </doc>

In Zeile 2 wird das Präfix x definiert, welches mit der URI "http://example.com/ns/foo" verknüpft wird. Dieses Präfix kann später als Abkürzung für diesen Namensraum verwendet werden. Im weiteren Dokument ist der Tag x:p ein gültiger QName, weil er das x als Referenz auf den Namensraum und p als Lokalteil verwendet. Der Tag doc ist auch ein gültiger QName, er besteht allerdings nur aus dem Lokalteil.[4]

Siehe auch

Bearbeiten

Einzelnachweise

Bearbeiten
  1. Namespaces in XML 1.0 (Second Edition). W3C
  2. Using Qualified Names (QNames) as Identifiers in XML Content. W3C
  3. Namespaces in XML 1.0 (Second Edition). W3C
  4. Namespaces in XML 1.0 (Second Edition). W3C