Есть ли скрытые преимущества для глубоких представлений XML по сравнению с поверхностными представлениями со ссылками внутри документа? - PullRequest
3 голосов
/ 19 августа 2010

Я участвую в дебатах по XML-представлениям групп объектов. Учитывая иерархию объектов, таких как Artist, Album и Track, с высокой степенью связности между объектом, каковы плюсы и минусы форматирования представления XML данного графа объекта с глубоким XML по сравнению с использованием ссылок на объекты.

Я твердо нахожусь в лагере ссылок на объекты, в то время как другие утверждают, что эта модель почему-то менее «RESTful» и что ее следует преследовать только в том случае, если есть веская причина , а не для использования версии глубоких объектов .

Я считаю следующие фундаментальные недостатки со стороны глубоких объектов

  • Циркулярные ссылки означают, что на графике может быть несколько версий одного и того же объекта. Некоторые объекты обязательно будут неполными.
  • Если вы решите избегать циклических ссылок, имея только одну каноническую версию данного объекта в графе, вы возлагаете бремя на реализацию логики, чтобы определить, какой экземпляр в графе следует рассматривать как канонический. Кроме того, если вы создаете сервис, вы возлагаете это бремя как на клиентов, так и на серверы. Кроме того, эта логика должна разрешить тонны неясностей. Какой экземпляр объекта должен быть каноническим? Первый встречается при обходе предзаказа? Ближайший к корню (ширина первого обхода)? Конкретные родительские дочерние отношения?
  • Каноническое представление данного объекта отсутствует, что существенно снижает возможности кэширования как на клиенте, так и на сервере.
  • Вся логика для получения глубокого свойства должна иметь возможность извлекать содержащий глубинный объект как элемент верхнего уровня, потому что вы никогда не знаете, будет ли там глубокое свойство
  • Схема становится бесполезной, потому что каждое соединение между объектами обязательно должно быть установлено так, чтобы оно происходило минимум 0 раз, чтобы избежать бесконечной регрессии от циклических ссылок.

Мой вопрос по существу, есть ли какие-то существенные аргументы для поверхностного представления, которые я пропустил, и каковы контраргументы

Вот небольшой пример глубокого объекта

<artist id="1234">            <!-- This object is of type Artist in the Schema-->
  <name>Lady GaGa</name>
  <sampleTrack id="1235">     <!-- This object is of type Track in the Schema-->
    <name>Poker Face</name>
    <album id="1236">        <!-- This object is of type Album in the Schema-->
      <name>The Fame Monster</name>
      ...
    </album>
  </sampleTrack> 
  <album id="1236">
    ....
    <track id="1235">
    </track>
  </album>
</artist>

Вот аналогичный пример использования ссылок на объекты

Леди Гага

<track id="1235">           <!-- This object is of type Track in the Schema-->
  <name>Poker Face</name>
  <album id="1236"/>        <!-- This object is of type Reference in the Schema-->
</track>

<album id="1236">
  <name>The Fame Monster</name>
  <track id="1235">
</album>

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Большая часть созданного мною xml предназначена для обработки таблицами стилей XSLT.В этом случае у вас есть преимущество для глубокого представления, поскольку XSL может гораздо более кратко (и эффективно?) Иметь дело с отношениями глубины, чем ссылочными отношениями.

Это соображение может иметь или не иметь значения для вас.Я полагаю, это зависит от того, будет ли xml проанализирован как дерево документов или нет.

1 голос
/ 20 августа 2010

С точки зрения REST, где ресурсы можно искать по URI, я приведу вам ссылки.Я видел, как люди используют ссылки:

Если для поиска альбома можно использовать следующий URI: - http://www.example.com/albums/1236

Тогда XML-представление для http://www.example.com/tracks/1235 может выглядеть так:

<track id="1235">
  <name>Poker Face</name> 
  <album link="http://www.example.com/albums/1236"/> 
</track> 

По ссылке на альбом вы получите:

<album id="1236"> 
  <name>The Fame Monster</name> 
  <track link="http://www.example.com/tracks/1235"> 
</album> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...