Лучше использовать структуру данных XML или пользовательскую структуру данных, которая может быть преобразована в XML? - PullRequest
2 голосов
/ 13 марта 2009

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

Мой вопрос: лучше ли мне обрабатывать структуру данных в коде как дерево XML или писать эквивалентную структуру данных как объект на языке вместе с некоторыми служебными функциями для преобразования в и из XML?

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

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

<car>
    <make>DATA</make>
    <model>DATA</model>
    <ownershipDates>
        <startDate>DATA</startDate>
        <endDate>DATA</endDate>
    </ownershipDates>
</car>

Ответы [ 8 ]

1 голос
/ 13 марта 2009

В целом, XML предназначался для взаимодействия данных и удобства чтения. Не скорость обработки или простота обработки. Для обработки ваших данных вы можете лучше всего использовать их как внутреннюю структуру данных. Например, в Python популярные парсеры - это те, которые переводят XML-документ во внутренние структуры Python для простоты обработки и обогащения данных, которые затем, в свою очередь, могут быть переведены обратно. в XML.

Если вы принимаете XML и ваша программа выводит XML, вы можете захотеть проверить XSLT. Как только вы поймете язык, перевод XML станет намного проще для обычных задач.

1 голос
/ 13 марта 2009

Без контекста сложно сказать. Но я предполагаю, что вам будет легче работать с собственной структурой данных. Если XML-схема когда-либо изменится или вам потребуется работать с другим форматом, вы бы отделили эти изменения от остальной части вашей программы.

Так что, вероятно, воспользуйтесь последним вариантом: «Напишите эквивалентную структуру данных как объект на языке вместе с некоторыми служебными функциями для преобразования в и из XML».

1 голос
/ 13 марта 2009

Я бы создал объект для обработки XML. Если вы допустили ошибку при обработке структуры данных, она может быть обнаружена компилятором. С XML у вас нет возможности сделать это. Таким же образом, если xml когда-либо изменяется (а не так, как в программировании :)), у вас есть слой абстракции между структурой XML и тем, с чем взаимодействует ваш код. Легче изменить его в объекте, чем везде в остальной части кода.

0 голосов
/ 14 марта 2009

Последнее: эквивалентные классы плюс код для чтения / записи XML.

Это главным образом потому, что вы можете автоматически генерировать классы и код из XML-схемы с помощью JAXB (при условии Java - так что этот ответ является языковым). Вместо того, чтобы иметь дело с XML, вы имеете дело с объектами JAXB.

OTOH, ваш XML хороший и регулярный, поэтому объекты DOM очень похожи на объекты, которые вы пишете сами. Недостатком является то, что DOM API не использует идиоматические структуры данных какого-либо конкретного языка, поэтому он менее интуитивно понятен для написания и менее читабелен для обслуживания. К счастью, есть другие DOM-подобные инструменты для большинства языков, которые имеют более естественные API для этого языка.

0 голосов
/ 13 марта 2009

Записать объект данных, который сериализует себя

0 голосов
/ 13 марта 2009

Несмотря на то, что заманчиво использовать XML (например, объект DOM) в качестве модели данных, помните, что «реальные» объекты (т.е. фактически моделирование данных с помощью классов) позволяют вам иметь методы и сложные свойства (ссылки на другие объекты) и т. д. - тогда как XML - это просто POD.

Если вы используете язык, который имеет достойные средства связывания XML, вы можете наслаждаться обоими мирами. У вас может быть настоящая объектная модель с богатыми объектно-ориентированными классами, которые также сериализуются из и в XML.

0 голосов
/ 13 марта 2009

Это также зависит от языка, на котором вы работаете. Во многих, но не во всех языках, есть языковая поддержка для простого преобразования между XML и структурами данных, поэтому вам не нужно кодировать большой объем кода преобразования.

Например, когда я работаю в C #, я пытаюсь спроектировать свои XML и структуры данных так, чтобы их мог обрабатывать встроенный XML-сериализатор.

0 голосов
/ 13 марта 2009

Это зависит от данных. Например, если данные имеют смысл представлять в родительских / дочерних отношениях, но ради отчетности / передачи они сведены, есть хороший шанс перестроить структуру данных (если бы скорость обработки не была главной проблемой и у меня не было срока).

Я обычно предпочитаю писать классы для таких вещей; Я считаю, что код гораздо проще для понимания. Это действительно зависит от того, что вы делаете с данными.

...