Отмена выделения пространств имен в XML 1.1 и ограничение пространства имен "Объявленный префикс"
пример
По-видимому, это действительный документ XML (скопированный с http://www.lenzconsulting.com/namespaces/).
<?xml version="1.1"?>
<my:doc xmlns:my="http://xmlportfolio.com/xmlguild-examples">
<simple xmlns:my="">
<remark>We don't use namespaces.</remark>
</simple>
</my:doc>
И все же он, кажется, нарушает ограничение пространства имен "Prefix Объявлен" в спецификации пространства имен 1.1.
Ограничение пространства имен: объявлен префикс
Префикс пространства имен, если это не xml или xmlns, должен быть объявлен в атрибуте объявления пространства имен либо в стартовом теге элемента, в котором используется префикс, либо в элементе-предке (т. Е. В элементе, в содержимом которого происходит разметка префикса). Кроме того, значение атрибута в самой внутренней такой декларации не должно быть пустой строкой.
Обратите внимание на последнее предложение "значение атрибута в самой внутренней такой декларации не должно быть пустой строкой" и как оно применяется к my:
объявление в simple
элемент документа выше. Конечно, это самая внутренняя такая декларация?
Насколько я понимаю, вы не можете объявить префикс, если у вас нет дочернего элемента, который повторно объявляет его.
Вопрос
- Является ли приведенный выше документ XML действительным в отношении пространств имен 1.1?
- Если так, как я неправильно истолковал спецификацию? Может ли ответ привести пример и контр-пример встречи и нарушения этого ограничения?
- Если нет, какова ценность объявления?
1 ответ
Да, он действителен (технически "хорошо сформированный пространства имен") в соответствии с пространствами имен 1.1
Правило, которое вы цитируете, относится к действительности имен элементов и атрибутов, таких как my:element или my:attribute, и это правило, касающееся действительности префикса "my" в таком имени. У вас нет ни одного элемента или атрибута с префиксом "my", для которого объявление пространства имен xmlns:my является самым внутренним объявлением, поэтому вы не нарушили правило.
Там очень мало значения в объявлении. Это была большая ошибка: болезненное дополнение к спецификации, чтобы решить крошечную проблему. Крошечная проблема заключалась в "загрязнении пространства имен": если вы, например, помещаете некоторую полезную нагрузку XML в конверт SOAP, тогда пространства имен SOAP проникают в вашу полезную нагрузку, а когда вы извлекаете полезную нагрузку, трудно избавиться от пространств имен SOAP. Объявление пространства имен должно было стать решением этой проблемы; но он почти никогда не используется, потому что на практике каждый игнорирует ненужные неиспользуемые пространства имен.