Добре ли е да имате пространство от имена по подразбиране (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