Как должен быть представлен список в XML?
С сущностью включающего списка:
<person>
<firstname>Joe</firstname>
<lastname>Bloggs</lastname>
<children>
<child .../>
<child .../>
<child .../>
<child .../>
<child .../>
</children>
</person>
Или без:
<person>
<firstname>Joe</firstname>
<lastname>Bloggs</lastname>
<child .../>
<child .../>
<child .../>
<child .../>
<child .../>
</person>





Я бы заключил его в объект, чтобы отличать его от других элементов.
Кроме того, у вас могут быть <children type = "step"> <child ... /> <child ... /> </children> и <children type = "full"> .... </children>, чтобы вы могут иметь списки различных типов потомков, если вы используете включающую сущность.
ИМХО, это зависит от домена.
В приведенном вами примере я бы использовал сущность для включения дочерних элементов, потому что сами дочерние элементы не обязательно являются свойствами человека, но список дочерних элементов таковым является.
Кроме того, использование корпуса поможет, если вам когда-нибудь понадобится сериализовать / десериализовать.
Первый хорошо подойдет для простых списков, но что, если бы список сам содержал вложенный список ?! Что, если бы у элемента было несколько разных списков? Чтобы сохранить последовательность, я предпочитаю элемент для списка и использование тега <item> или чего-то еще для дочерних данных. Это поможет использовать универсальную функцию для анализа всех списков.
Для расширяемости я бы использовал первое решение (с узлом дети). Если вы когда-нибудь захотите сохранить какие-либо данные обо всех дочерних элементах, у вас есть удобный узел для размещения атрибутов.
Хорошая точка зрения. Я могу придумать атрибут для детей ... супруга ... так, если бы ребенок был от другого брака.
Не имеет большого значения, если имена элементов в списке всегда одинаковы, потому что если вы обрабатываете его с помощью XPath или Linq-to-XML или чего-то еще, тогда в запросе будет просто еще один селектор если есть узел-оболочка, но в остальном будет идентичным.
С другой стороны, если имена элементов в списке могут отличаться, это может упростить обработку списка, если есть элемент-оболочка, потому что вы можете просто использовать '*' в качестве селектора под элементом списка, вместо того, чтобы фильтровать все элементы с указанным набором имен.
Так что, вероятно, это не имеет большого значения, но я предпочитаю иметь элемент-оболочку только потому, что он визуально отделяет элементы в коллекции от элементов, которых нет.
Подумайте об этом в коде, который вы хотели бы написать против него:
Мне...
spouse.children = person.children...
намного лучше семантически, чем ...
for child in person:
spouse.addChild(person.child)
Если нам нужно XML-представление списка универсальный, мы сделаем вывод, что необходимо использовать своего рода следующее представление:
<_listSomeName>
<_listItem>...</_listItem>
<_listItem>...</_listItem>
<_listItem>...</_listItem>
<_listItem>...</_listItem>
<_listItem>...</_listItem>
</_listSomeName>
Давайте проанализируем это:
Элемент-оболочка <_listSomeName> необходим, потому что у нас может быть два или более списков в качестве дочерних элементов элемента и мы должны иметь возможность однозначно и удобно идентифицировать каждый список. Часть SomeName служит для того, чтобы имя списка было уникальным.
Элемент <_listItem> необходим для обертывания каждого отдельного элемента списка. Его нельзя пропустить, потому что элемент списка может иметь сложную структуру (например, являться самим фрагментом xml), и его будет сложно идентифицировать как единое целое.
Я бы использовал первое решение. Список имеет семантическую релевантность: это набор схожих элементов, и поэтому он должен быть идентифицирован как таковой. Во втором решении список не существует как элемент.
Согласен по причине, указанной Джейсоном Джексоном ниже.