Отличается ли сериализация XML от привязки данных XML, и если да, то как? - PullRequest
2 голосов
/ 23 мая 2009

Есть связанный вопрос Какая предпочтительная среда связывания Java XML?

В ответе, занявшем в настоящее время 2-е место, постер проводит различие между сериализацией XML и связыванием данных Java / XML. Как я могу сказать, привязка данных XML означает «создание графа объекта в памяти из документа XML». И XML-сериализация означает «создание XML-документа из графа объектов в памяти».

Я не вижу, что они вообще разные, просто разные взгляды на одну и ту же проблему.

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

Итак, вопрос к вам:
Есть ли разница между Java / XML привязкой данных и XML Serialization , о которой стоит беспокоиться?

Ответы [ 4 ]

5 голосов
/ 01 августа 2009

Нет, здесь есть очень важное концептуальное отличие, как вы упомянули. Может быть, что реализации имеют сильное сходство, и, возможно, это вызывает путаницу, но концептуально это не так неясно.

Привязка данных означает привязку объектов Java к необъектному содержимому (реляционные данные для документов ORM, XML или JSON и т. Д.); и разные представления (POJO, реляционные / иерархические данные) одинаково важны. Привязка данных должна касаться специфики форматов данных, которые она поддерживает; некоторые функции не имеют эквивалентных конструкций в Java POJO (например: смешанный контент XML, комментарии, инструкции по обработке, разница между атрибутами и элементами). Привязка данных фокусируется на попытке преодоления импеданса: максимально возможное преобразование между представлениями и в обоих направлениях.

С сериализацией объектов вы начинаете и заканчиваете (Java) объектами - другие форматы имеют второстепенное значение и служат только для передачи объектов. Они могут жестко кодировать точную структуру в используемом формате данных; но даже если нет, ограничьте виды конструкций, которые можно использовать. Сериализация объектов имеет дело с вещами, которые являются определенными для объектов: идентичность, ссылки, обработка циклов; вещи, которые связыватели данных могут игнорировать.

Но вот что может сбить с толку: в общем случае библиотеки сериализации объектов (например, XStream) предлагают большую гибкость в настройке внешнего формата (даже если это менее важно, чем объекты). И вы, безусловно, можете использовать инструменты привязки данных в качестве альтернативы инструментам сериализации чисто объектов - во многих / большинстве случаев они работают довольно хорошо. Таким образом, вы действительно можете использовать инструменты для «вторичных целей». Но есть ограничения, в зависимости от того, какой именно набор функций вам нужен: многие инструменты привязки данных не могут справиться с циклическими ссылками; Сериализаторы объектов не могут поддерживать, но подмножество XML и т. д. И даже там, где вы можете использовать вторичные инструменты, вам может быть выгоднее выбрать другой, в отношении простоты использования или производительности.

3 голосов
/ 23 мая 2009

Во многих случаях различие небольшое. Ответ на ваш вопрос: это зависит от вашего варианта использования. См., Например, запись в Википедии для Привязка данных XML , которая начинается с:

Привязка данных XML относится к процессу представления информации. в документе XML как объект в памяти компьютера.

Для сравнения см. Страницу для XStream , которая представляет собой платформу сериализации:

XStream - это простая библиотека для сериализации объектов в XML и обратно.

Таким образом, для привязки данных XML формат XML является «основным» форматом, версией данных с явным определением. (Часто XSD.) Объекты Java (или C # или ...) являются представлением XML. Однако для сериализации объектами являются определение, «первичный» формат, а представление XML - вторичное.

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

Для сериализации зачем использовать XML вместо двоичного формата? Что ж, XML-формат ваших данных с большей вероятностью будет удобочитаемым для человека, с большей вероятностью сможет обрабатывать изменения в ваших объектах (например, добавляя новое поле) и с меньшей вероятностью столкнется с проблемами кодирования при перемещении сериализованных объектов. между машинами с разными порядками байтов и так далее. XML структурирован известным и понятным способом, а XML очень гибок в обработке новых полей и новых элементов. Двоичные форматы часто являются домашними и могут быть или не быть хрупкими в отношении будущих изменений в вашем формате сериализации.

2 голосов
/ 03 июня 2009

Спасибо за все комментарии. Учитывая все это, я все еще чувствую, что это различие искусственное. Первичный? Secondary? Это чувствует себя субъективным, нечетким, произвольным и искусственным. Это говорит мне, что нет значимого различия.

2 голосов
/ 23 мая 2009

Библиотеки, такие как XStream, предлагают сериализацию XML (а не обработку документов XML), поэтому графы объектов могут использовать стандартную семантику сериализации Java для сохранения / восстановления.

Сериализованная форма не может быть документом, который вы хотели бы использовать вне среды Java, поскольку она может включать имена классов Java (хотя вы можете изменить это с помощью псевдонимов).

...