Технология XSLT (Валиков) - страница 23

описывает имена атрибутов, декларирующих пространства имен:

>[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

Структура XML-документа

В погоне за выразительной мощностью XML не следует забывать один из основополагающих принципов — нужно не просто выражать информацию, нужно выражать ее стандартным образом. Это включает в себя не только синтаксические принципы разметки текста, изложенные выше, но и ограничения, накладываемые на логическую структуру документов. Изобретая свой собственный набор элементов и атрибутов, мы вместе с этим набором изобретаем логический формат, а именно то, каким образом элементы и атрибуты должны формировать документ, какая информация должна присутствовать обязательно, а какая является опциональной, какие данные должны содержать те или иные атрибуты и элементы.