2009-05-22 69 views
2

有一個相關的問題What is the preferred Java XML binding framework?XML序列化是否與XML數據綁定真的不同,如果是這樣,怎麼樣?

在當前排名第二的答案中,海報引出了XML序列化和Java/XML數據綁定的區別。盡我所知,XML數據綁定意味着「從XML文檔創建內存中對象圖」。 XML序列化意味着「從內存中的對象圖創建XML文檔」。

我沒有看到他們完全不同,只是對同一問題有不同的觀點。

參數是數據綁定的重點在於對象模型,而序列化的重點在於文檔格式。我根本沒有看到。如果將一個對象圖序列化爲XML,大概人們會關心格式 - 它需要可讀性,可讀性,可驗證性。 (如果格式不相關,那麼爲什麼不使用二進制序列化並用它來完成呢?)另一方面,當執行「數據綁定」(我將其稱爲反序列化)時,必須有一個平衡的重點在文檔格式和對象模型上。

所以向各位:
的Java/XML數據綁定XML序列化這是值得擔憂之間的差異?

回答

2

感謝所有的輸入。考慮到這一切,我仍然認爲這種區別是人爲的。主?次要?它感覺主觀,模糊,任意和人爲。這告訴我沒有有意義的區別。

2

像XStream這樣的庫提供了XML序列化(而不是XML文檔處理),因此對象圖可以使用標準的Java序列化語義來保存/恢復。

序列化表單可能不是您希望在java環境之外使用的文檔,因爲它可能會嵌入java類名(儘管您可以使用別名來更改此名稱)。

3

在許多情況下,區別是小的。你的問題的答案是:這取決於你的用例。參見,例如,Wikipedia的條目爲XML Data Binding,其開始與:

XML數據結合是指表示在XML文檔中作爲在計算機存儲器中的對象的信息 的過程。

通過比較,看到頁面XStream,這是一個序列化框架:

XStream的是一個簡單的庫序列化對象以XML,然後再返回。

因此,對於XML數據綁定來說,XML格式是「主要」格式,即具有明確定義的數據版本。 (通常是XSD。)Java(或C#或...)對象是XML的表示形式。但是,對於序列化,對象是定義,「主要」格式,而XML表示是次要的。

基本上,當你有相同的數據的兩種格式 - 在您所選擇的語言和其他的XML表示一個對象 - 爲大多數應用中,這些兩種格式之一將是主要的,而另一個將是次要的。當XML格式爲主時,您正在討論XML數據綁定。當對象是主要的時候,你正在談論序列化。

序列化,爲什麼要使用XML,而不是二進制格式的?那麼,數據的XML格式更可能是人類可讀的,更有可能能夠處理對對象的更改(例如,添加新字段),移動序列化對象時遇到編碼問題的可能性較小在具有不同字節順序的機器之間,等等。 XML以已知的和已知的方式構建,XML在處理新的領域和新的元素方面非常靈活。二進制格式通常是本土化的,對於未來對序列化格式的更改可能會或可能不會變得脆弱。

+0

感謝您的意見。即使閱讀了這篇文章,我仍然認爲這種區別是人爲的。主?次要?它感覺主觀,模糊,任意和人爲。這告訴我沒有有意義的區別。 ps:我關於「爲什麼使用XML」的問題是修辭性的。 – Cheeso 2009-05-23 01:15:12

5

沒有,有一個很重要的概念差異在這裏,像你提到。 這可能是因爲實現具有很強的相似性,可能會導致混淆,但從概念上講,它並不那麼不清楚。

數據綁定手段結合Java對象非對象內容(的ORM,XML或JSON文件等的關係數據);和不同的表示(POJO,關係/等級數據)同樣重要。數據綁定必須關注它支持的特定數據格式;某些功能在Java POJO中沒有等效的構造(例如:XML混合內容,註釋,處理指令,屬性和元素之間的區別)。數據綁定側重於嘗試橋接阻抗:允許儘可能在兩個方向之間進行表示之間的無縫轉換。

有了對象序列化,你開始和(Java)的終止對象 - 其他格式都是次要的關注,而只會傳遞對象的目的。他們可能使用數據格式硬編碼精確的結構;但即使不是,也限制了可以使用的構造。對象序列化必須處理特定於對象的事物:身份,引用,循環處理;數據綁定者可以忽略的東西。

但這裏是可能混淆的問題:一般來說,對象序列化庫(如XStream的)提供了很大的靈活性來定製外部格式(即使它的對象比不那麼重要)。你當然可以使用數據綁定工具作爲純粹的對象序列化工具的替代品 - 對於許多/大多數情況下它們工作得很好。 所以你確實可以使用工具來「次要目的」。但有一些限制,具體取決於您需要的確切功能集:許多數據綁定工具無法處理循環引用;對象序列化程序不能支持子集xml等等。即使在您可以使用輔助工具的地方,關於易用性或性能,選擇不同的方式可能會更好。

相關問題