Каковы преимущества использования элемента контейнера для списков в XML? - PullRequest
6 голосов
/ 15 сентября 2010

При указании форматов XML, которые содержат список элементов, часто существует выбор как минимум из двух разных стилей.Один использует элемент списка для списка, другой нет.Например: если указать документ с несколькими страницами, можно сделать следующее:

<document>
  <title>...</title>
  <pages>
    <page>...</page>
    <page>...</page>
  </pages>
</document>

Или просто так:

<document>
  <title>...</title>
  <page>...</page>
  <page>...</page>
</document>

Каковы плюсы и минусы каждого подхода?

Некоторые из них, о которых я могу думать:

  • первый позволяет выразить явный пустой список (полезно, если сам список является концептуальной сущностью)
  • первый, вероятно,немного лучше для восстановления после ошибок (хотя это не должно иметь значения, если используется проверка XSD)
  • последний более краткий
  • последний не требует различия между добавлением первого элемента или любым другимпоследовательно (без управления элементом контейнера)

РЕДАКТИРОВАТЬ

Чтобы уточнить: я предполагаю, что элемент pages не имеет никакого смысла.Внутри нет других элементов, нет прикрепленных атрибутов, и трудно найти какое-либо другое имя, кроме «pages», «pageList» или аналогичного для него.

EDIT 2

Я нашел еще одну запись о том же вопросе.Хотя все ответы даны для элемента контейнера / родителя, похоже, все сводится к тому, чтобы рассматривать контейнер как фактический объект или предположить, что проще смоделировать схему, имея этот дополнительный элемент контейнера (с которым я, как правило, не согласен).

Ответы [ 2 ]

6 голосов
/ 15 сентября 2010

В приведенном вами примере разница незначительна, однако два примера фактически представляют совершенно разные вещи :

  • Второй пример относится к документу с заголовкоми много страниц
  • Первый пример, однако, имеет документ с заголовком и коллекцию страниц

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

<document>
  <title>...</title>
  <contents>
    <page>...</page>
    <page>...</page>
  </contents>
  <chapter name="chapterName">
    <page>...</page>
    <page>...</page>
  </chapter>
  <index>
    <page>...</page>
    <page>...</page>
  </index>
</document>

В этом случае документ имеет множество наборов страниц.(Конечно, некоторые могут утверждать, что вы могли бы одинаково представить это по-разному):

<document>
  <title>...</title>
  <page section="contents">...</page>
  <page section="chapter1">...</page>
  <page section="index">...</page>
</document>

Однако вам бы пришлось изменить page элемент, в приведенном выше примере я быаргументировать в худшую сторону (зачем page знать, в чем оно содержится?)

Еще одно тонкое соображение заключается в том, что часто упорядочение элементов что-то означает:

<document>
  <page>...</page>
  <title>...</title>
  <page>...</page>
  <page>...</page>
</document>

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

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

2 голосов
/ 15 сентября 2010

Это действительно вопрос личного выбора, хотя первая форма более мощная, ИМО. т делает кратным pages, например возможны страницы с другим именем. Это зависит только от вашего требования.

<document>
  <title>...</title>
  <pages name="page1">
    <page>...</page>
    <page>...</page>
  </pages>
  <pages name="page2">
    <page>...</page>
    <page>...</page>
  </pages>
</document>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...