QName , или квалифицированное имя , является полностью квалифицированным именем элемента, атрибута или идентификатора в документе XML . QName лаконично связывает URI пространства имен XML с локальным именем элемента, атрибута или идентификатора в этом пространстве имен. [1] Чтобы создать эту связь, QName назначает локальному имени префикс , который соответствует его пространству имен. В целом, QName включает в себя URI пространства имен XML, префикс и локальное имя .
Консорциум Всемирной паутины представил соглашение QName в спецификации 1999 года «Пространства имен в XML». [1] [2]
Поскольку ссылки URI могут быть длинными и могут содержать запрещенные символы для именования элементов/атрибутов, QNames используются для создания сопоставления между URI и префиксом пространства имен. Сопоставление позволяет сокращать URI, поэтому оно обеспечивает более удобный способ написания XML-документов (см. пример ниже).
QNames формально определены W3C как: [3]
QName :: = PrefixedName | UnprefixedName PrefixedName ::= Префикс ':' LocalPart UnprefixedName ::= Префикс LocalPart ::= NCName LocalPart ::= NCName
NCName определяется следующим образом:
NCName :: = Имя - ( Char * ':' Char * ) (* Имя XML, без ":" *) Имя ::= NameStartChar ( NameChar ) * NameStartChar ::= ":" | [ AZ ] | "_" | [ az ] | [ # 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 ::= (* любой символ Unicode, за исключением суррогатных блоков FFFE и FFFF. *) # x9 | # xA | # xD | [ # x20- # xD7FF ] | [ # xE000- # xFFFD ] | [ # x10000- # x10FFFF ]
При этом Prefix используется как заполнитель для пространства имен, а LocalPart — как локальная часть квалифицированного имени. Локальная часть может быть именем атрибута или именем элемента.
<?xml версия="1.0"?> <doc xmlns:x= "https://example.com/ns/foo" > <x:p/> </doc>
Во второй строке префикс "x" объявляется связанным с URI "http://example.com/ns/foo". Этот префикс может в дальнейшем использоваться как аббревиатура для этого пространства имен. Следовательно, тег "x:p" является допустимым QName, поскольку он использует "x" как ссылку на пространство имен и "p" как локальную часть. Тег "doc" также является допустимым QName, но он состоит только из локальной части. [4]