Как список должен быть представлен в XML? - PullRequest
7 голосов
/ 16 января 2009

В 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>

Ответы [ 8 ]

7 голосов
/ 16 января 2009

Для расширения я бы использовал первое решение (решение с узлом children ). Если вы когда-нибудь захотите сохранить какие-либо данные обо всех дочерних элементах, у вас есть удобный узел для размещения атрибутов.

7 голосов
/ 16 января 2009

Я бы заключил его в сущность, чтобы отличить его от других элементов.

2 голосов
/ 16 января 2009

Думайте об этом в коде, который вы хотели бы написать против него.

Для меня ...

spouse.children = person.children...

намного лучше семантически, чем ...

for child in person:
    spouse.addChild(person.child)
2 голосов
/ 16 января 2009

Не имеет большого значения, если имена элементов в списке всегда одинаковы, потому что, если вы обрабатываете его с использованием XPath или Linq-to-XML или чего-то еще, тогда запрос просто будет иметь еще один селектор, если есть узел-обертка, но в противном случае он будет идентичным.

С другой стороны, если имена элементов в списке могут отличаться, то это может упростить обработку списка, если есть элемент-обертка, потому что вы можете просто использовать '*' в качестве селектора под элементом списка, а не иметь отфильтровать все элементы с указанным набором имен.

Так что это, вероятно, не имеет большого значения, но я предпочитаю иметь элемент-обертку только потому, что он визуально выделяет элементы в коллекции из элементов, которые не являются.

1 голос
/ 15 февраля 2009

Я бы использовал первое решение. Список имеет семантическую значимость: это набор похожих элементов, и поэтому он должен быть идентифицирован как таковой. Во втором решении список не существует как элемент.

1 голос
/ 16 января 2009

Если нам понадобится универсальное XML-представление списка, мы заключим, что необходимо использовать вид следующего представления :

<_listSomeName>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
</_listSomeName>

Давайте проанализируем это :

  1. Элемент оболочки <_listSomeName> необходим, поскольку у нас может быть два или более списков в качестве дочерних элементов элемента, и мы должны иметь возможность уникально и удобно идентифицировать каждый список. Часть SomeName служит для того, чтобы сделать имя списка уникальным.

  2. Элемент <_listItem> необходим для переноса каждого отдельного элемента списка. Его нельзя опускать, потому что элемент списка может иметь сложную структуру (например, сам фрагмент XML), и было бы сложно определить его как одно целое.

1 голос
/ 16 января 2009

Первый из них неплохо подойдет для простых списков, но что если список содержит сам вложенный список ?! Что если у элемента есть пара разных списков? Чтобы все было согласованно, я предпочитаю элемент для списка и использование тега <item> или что-то для дочерних данных. Это поможет использовать универсальную функцию для анализа всех списков.

0 голосов
/ 16 января 2009

ИМХО, это зависит от домена.

Для примера, который вы привели, я бы использовал сущность для включения детей, потому что сами дети не обязательно являются свойствами человека, но список детей есть.

Кроме того, использование оболочки поможет, если вам когда-нибудь понадобится сериализация / десериализация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...