Добавить атрибут или создать новый уровень в иерархии XML? - PullRequest
0 голосов
/ 02 марта 2011

В настоящее время я работаю над документом XML, который был написан для иерархии XML только с 2 уровнями.Прямо сейчас я хочу добавить к нему категоризацию «один ко многим», которая нарушит большую часть кода, работающего с этим файлом.

Я мог бы либо добавить эту категоризацию как новый уровень, либо я могу реализоватьэто атрибут на том же уровне (почти как тегирование).

текущий:

<category>
    <subcategory></subcategory>
<category>

предлагается:

<supercategory>
    <category>
        <subcategory></subcategory>
    </category>
</supercategory>

или:

<category supercategory="">
    <subcategory></subcategory>
</category>

Какой метод более удобен в обслуживании?

Ответы [ 2 ]

0 голосов
/ 06 марта 2014

Я думаю, что создание нового уровня - лучшее решение.Это соответствует текущему подходу (вложенные элементы), что хорошо, и ваш первый пример также имеет то преимущество, что сами исходные элементы Category остаются неизменными.

Вы также можете рассмотреть рекурсивное определение.Это может быть лучше рефакторинг, чтобы рассмотреть сейчас, но может избежать будущего воздействия.Ваши категории были двухуровневыми, теперь они 3, что если вы перешли на 4, и вам нужно добавить категорию SuperDuper?

Эта запись может быть альтернативой:

<category>
    <category>
        <category></category>
    </category>
</category>
0 голосов
/ 02 марта 2011

Для меня одной из сильных сторон XML является то, что иерархическая природа элементов XML идеально подходит для описания иерархического расположения объектов, как, например, в вашем случае. Поэтому я предпочитаю ваш первый вариант, так как ваша XML-структура больше напоминает структуру ваших данных. Это намного облегчает чтение, управление и понимание, ИМХО.

Тем не менее, только вы действительно можете сказать, стоит ли дополнительных усилий, необходимых для его работы с существующей кодовой базой. Конечно, ничто не мешает сделать это вторым способом, если вы считаете, что необходимые модификации слишком сложны / трудоемки, я просто не думаю, что это такое элегантное решение.

...