описывает имена атрибутов, декларирующих пространства имен:
>[NS1] NSAttName ::= PrefixedAttName | DefaultAttName
>[NS2] PrefixedAttName ::= 'xmlns:' NCName
>[NS3] DefaultAttName ::= 'xmlns'
Имя >NCName
, которое использовалось в правиле >PrefixedAttName
, — это имя префикса, который будет использоваться для обозначения принадлежности элементов определенному пространству имен. Это имя отличается от имен, которые отвечают продукции >Name
тем, что оно не может содержать двоеточия:
>[NS4] NCName ::= (Letter | '_') (NCNameChar)*
>[NS5] NCNameChar ::= Letter | Digit | '.' | '-' | '_'
> | CombiningChar | Extender
Использование пространств имен значительно изменяет понятие имени. Действительно, если >www:template
, >xsl:template
или просто >template
могут быть одинаковыми именами, то именем в таком случае должна считаться не просто символьная последовательность, которая его составляет, а нечто большее.
Вследствие этого в спецификациях группы XML-языков вводится такое понятие, как расширенное имя, которое состоит из двух частей: локальной части и идентификатора пространства имен, которое соответствует префиксу имени.
Пример
Представим себе элемент вида
>
Расширенное имя этого элемента будет состоять из локальной, части >stylesheet
и идентификатора пространств имен >http://www.w3.org/1999/XSL/Transform
.
Расширенные имена считаются совпадающими, если их локальные части равны и, при этом, они относятся к одному пространству имен.
Префикс в расширенном имени может быть опущен. В таком случае идентификатор пространства имен будет либо выбран по умолчанию (если имеется соответствующее объявление), либо будет нулевым.
Для описания имен элементов и атрибутов, которые должны иметь расширенное представление, используется продукция >QName
:
>[NS6] QName ::= (Prefix ':')? LocalPart
Нетерминалу >Prefix
соответствует префикс имени, который может быть опущен вместе со следующим за ним разделяющим двоеточием, >LocalPart
соответствует локальной части имени.
>[NS7] Prefix ::= NCName
>[NS8] LocalPart ::= NCName