В спецификаторе вы правильно считаете пространство имен attrib
в первом примере пустым. Тем не менее, здесь есть тонкость, которая может быть не очевидна.
Рассмотрим этот пример далее в спецификации элемента с двумя атрибутами с тем же именем (один префикс и другой нефиксированный).
<!-- This is OK, even though an element cannot have two attributes
with the same name -->
<x xmlns:n1="http://www.w3.org"
xmlns="http://www.w3.org" >
<good a="1" n1:a="2" />
</x>
Это соответствует, потому что два атрибута действительно находятся в двух разных пространствах имен:
n1:a
принадлежит пространству имен http://www.w3.org
(которое является пространством имен для good
) a
рассматривается как принадлежащее недоступному пространству имен http://wwww.w3.org > good
(и отличается от пространства имен good
). Примечание что пространство имен http://wwww.w3.org > good
не существует; например, вы не можете запрашивать атрибуты в этом пространстве имен с помощью XPath. Если вы попросите namespace-uri(\\good\a)
, он будет пустым. Чтобы сделать идею отдельного пространства имен элементов конкретным, я составил пространство имен, у которого есть как пространство имен имен, так и имя вместе с разделителем (>
в любом случае не допускается без сохранения значений атрибутов).
Теперь, вместо того, чтобы сказать, что два атрибута находятся в двух разных пространствах имен, правильнее сказать, что они принадлежат к двум разным разделам пространства имен:
n1:a
атрибут принадлежит к элементу глобального атрибута (http://www.w3.org
) good
принадлежит к разделу «Все типы элементов» (также http://www.w3.org
) a
принадлежит к элементу Per Тип раздела good
(т. Е. http://wwww.w3.org > good
). Вот соответствующая часть спецификации Porges, связанная с:
A.2 Разделы пространства имен XML
Чтобы поддержать цель сделать как квалифицированные, так и неквалифицированные имена полезными для достижения их намеченной цели, мы идентифицируем имена, появляющиеся в пространстве имен XML, как принадлежащие одному из нескольких непересекающихся традиционных (т.е. упорядоченных) пространств имен, называемых разделами пространств имен. Перегородки:
Все типы типов элементов. В этом разделе отображаются все типы элементов в пространстве имен XML. Каждый из них имеет уникальную локальную часть; комбинация имени пространства имен и локальной части уникально идентифицирует тип элемента.
Раздел глобального атрибута Этот раздел содержит имена всех атрибутов, которые определены в этом пространстве имен, являются глобальными. Единственной необходимой характеристикой глобального атрибута является то, что его имя будет уникальным в глобальном разделе атрибутов. В этой спецификации нет утверждений о правильном использовании таких атрибутов. Комбинация имени пространства имен и имени атрибута однозначно идентифицирует глобальный атрибут.
Разделы типа для каждого элемента Каждый тип в разделе «Типы элементов всех элементов» имеет связанное пространство имен, в котором появляются имена неквалифицированных атрибуты, которые предоставляются для этого элемента. Это традиционное пространство имен, потому что появление дубликатов имен атрибутов в элементе запрещено XML 1.0. Комбинация имени атрибута с типом элемента и именем пространства имен однозначно идентифицирует каждый неквалифицированный атрибут.
В документах XML, соответствующих этой спецификации, имена всех квалифицированных (префиксных) атрибутов назначаются для глобального раздела атрибутов , а имена всех неквалифицированных атрибутов назначаются соответствующему разделу типа элемента.
blockquote>