Отмена выделения пространств имен в 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 элемент документа выше. Конечно, это самая внутренняя такая декларация?

Насколько я понимаю, вы не можете объявить префикс, если у вас нет дочернего элемента, который повторно объявляет его.

Вопрос

  1. Является ли приведенный выше документ XML действительным в отношении пространств имен 1.1?
  2. Если так, как я неправильно истолковал спецификацию? Может ли ответ привести пример и контр-пример встречи и нарушения этого ограничения?
  3. Если нет, какова ценность объявления?

1 ответ

Решение
  1. Да, он действителен (технически "хорошо сформированный пространства имен") в соответствии с пространствами имен 1.1

  2. Правило, которое вы цитируете, относится к действительности имен элементов и атрибутов, таких как my:element или my:attribute, и это правило, касающееся действительности префикса "my" в таком имени. У вас нет ни одного элемента или атрибута с префиксом "my", для которого объявление пространства имен xmlns:my является самым внутренним объявлением, поэтому вы не нарушили правило.

  3. Там очень мало значения в объявлении. Это была большая ошибка: болезненное дополнение к спецификации, чтобы решить крошечную проблему. Крошечная проблема заключалась в "загрязнении пространства имен": если вы, например, помещаете некоторую полезную нагрузку XML в конверт SOAP, тогда пространства имен SOAP проникают в вашу полезную нагрузку, а когда вы извлекаете полезную нагрузку, трудно избавиться от пространств имен SOAP. Объявление пространства имен должно было стать решением этой проблемы; но он почти никогда не используется, потому что на практике каждый игнорирует ненужные неиспользуемые пространства имен.

Другие вопросы по тегам