Можно ли иметь пространство имен по умолчанию (xmlns) И пространство имен с префиксом, указывающее на один и тот же URI?

Мы пытаемся сгенерировать некоторый XML с пространством имен (атрибуты и все остальное), но замечаем некоторые проблемы при выводе префиксов как с SimpleXML, так и с DOMDocument в PHP. Это наш тестовый вывод:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:a="http://default" xmlns:b="http://extra" xmlns="http://default">
  <a:test_default>alpha</a:test_default>
  <b:test_extra>bravo</b:test_extra>
</root>

Причина, по которой я спрашиваю, — мы хотели включить атрибуты в пространство имен, но мы знаем, что атрибуты не занимают пространство имен содержащего их элемента. Обычно у нас есть пространство имен по умолчанию для наших узлов. Таким образом, мы пришли к выводу, что также потребуется объявление пространства имен префикса. Однако при создании XML с помощью SimpleXML или DOMDocument к атрибутам никогда не добавляются префиксы.

Есть ли способ лучше? Мы пытались избежать префикса каждого элемента в XML, используя значение по умолчанию, чтобы сделать содержимое более читабельным.


person CAMason    schedule 05.09.2011    source источник
comment
!! более удобочитаемый: XML не предназначен для чтения. Вы строите дерево, вызываете библиотеку, и она отправляет дерево для воссоздания в другом месте. По дизайну он должен работать, и это черный ящик.   -  person Nicholas Wilson    schedule 05.09.2011
comment
@Nicholas Я не думаю, что справедливо говорить, что XML не предназначен для чтения. В спецификации это не указано, и я не думаю, что это плохая цель — предотвратить излишнее многословие, если это облегчает понимание содержимого.   -  person CAMason    schedule 05.09.2011
comment
Текстовый формат — это просто удобная функция отладки. Если вы хотите сократить, используйте zlib или gzip или что-то еще. Если ваша библиотека использует много префиксов, что ж, это разрешено, и не ваше дело возиться с ее выводом, если он действителен. Если вы хотите реализовать его, используя другие необязательные способы сериализации данных, реализуйте его самостоятельно. Библиотека PHP не обеспечивает чистейшего вывода, мы все это знаем, но вы выбрали XML-вывод, чтобы гарантировать, что он может быть проанализирован на другом конце, а не по пути.   -  person Nicholas Wilson    schedule 05.09.2011
comment
XML — это не HTML. Комитет никогда не предполагал, что он будет создан вручную или прочитан человеком. Это машина к машине. Вы не можете надежно разобрать его на вид. Откройте в Firefox или любом XML-редакторе, чтобы получить древовидное представление, если вы хотите прочитать или отредактировать его. Сколько необязательных префиксов используют наши реализации, нас не касается. Я здесь очень груб и резок, поэтому, пожалуйста, не обижайтесь, но я лучше выскажусь за безопасность и ремонтопригодность, чем за красивость.   -  person Nicholas Wilson    schedule 05.09.2011


Ответы (1)


Да вполне нормально так делать. Например, это часто делается в XSD.

person Michael Kay    schedule 05.09.2011