6 советов по проектированию XML документа
4 марта 2008
Приведу небольшой список правил, на которые можно разумно ориентироваться при проектировании новой XML структуры. Это конечно не «истина в последней инстанции», и есть куча случаев когда некоторые из них совсем не подойдут, но в общем виде, как ориентир, ознакомится следует, чтобы не плодить xml документы с которыми невозможно работать.
1. Используйте атрибуты для одной группы
Выносите короткие значения из одной группы в атрибуты.
Лучше
<user name="John" sname="Smith"/>
чем
<user> <name>John</name> <sname>Smith</sname> </user>
2. Используйте CamelCase
Лучше всего lowerCamelCase, хотя достаточно распространен вариант с UpperCamelCase для элементов и lowerCamelCase для атрибутов.
3. Не используйте разделители
Это конечно входит в совет по CamelCase, но скажу отдельно: не надо разделять слова с помощью тире или подчеркивания.
Вместо
<user_name>foo</user_name>
пишите
<userName>foo</userName>
4. Не используйте лишнюю нумерацию
Если подразумевается что у элемента будет всегда несколько детей, то не надо их описывать как child1, child2 и т.д., опишите как они есть их позиция и будет этим номером. Для XSLT проще проверить функцию position (), чем делать всякие хаки для перехвата таких элементов. В крайнем случае можно добавить атрибут и именем index/position/x/и т.д. Работать с таким документом гораздо проще.
Вместо
<user> <phone1>1234567890</phone1> <phone2>0123456789</phone2> <cell1>12</cell1> <cell3>927</cell3> </user>
напишите
<user> <phone>1234567890</phone> <phone>0123456789</phone> <cell index="1">12</cell> <cell index="3">927</cell> </user>
5. Не надо тематических префиксов/окончаний
Не нужно всех эти firstItem + secondItem, workPhone + homePhone и пр. Все также как и в предыдущем пункте, нужно вынести все это в атрибут, например type:
<client> <phone type="home">1234567890</phone> <phone type="work">0123456789</phone> </client>
6. Опишите похожие структуры одинаковым элементом
Многие различные элементы можно сократить до одного универсального. К примеру если элементы имеет множество однотипных подэлементов «параметров», то можно сократить их до вида:
<property name="xxx">value</property>
или
<property name="xxx" value="value"/>
Т.е вместо:
<user> <src>1</src> <load>Y</load> </user>
написать
<user> <property name="src" value="1"/> <property name="load" value="Y"/> </user>
Не факт что получится сэкономить на объеме кода, даже наоборот, но обрабатывать опять же проще будет. В данном случае нужно выборочно подходить, в зависимости от назначения документа, от того как его обрабатывать. И не надо перегибать палку, а то таким образом весь документ можно описать, построчно.
И напоследок: напишите XSD/DTD
И все таки надо описывать структуру, ну хоть в базовом виде. Пример примером, но как дойдет дело до реального использования, до интеграции разных частей — начнутся проблемы. Даже с совсем базовым XSD хоть как то можно валидировать, в конце концов от опечаток спасет.

Оставьте свое мнение