Castor以及Java和XML数据绑定
XML作为一种semi-structure的数据模式,想对于数据库和free text,现在已经成为事实上的web数据交换标准了。相对于数据库,XML更容易使用网络进行传输。数据交换的目的是为了使用,Java是我的最爱了。如果能够将xml文件里面的数据直接转化为一个java类并将数据值赋给类里面的变量,从而构造出一个类的实例(object),那么对xml的操作就变成了对这个object的操作,非常方便。同样,如果你有一个object,将它转化成为一个xml文件,将非常利于数据的保存和传输。
最近接触了castor,一个XML的数据绑定的工具,就稍微研究了一下。“数据绑定 提供了一种简单而直接的方法,以在 Java 平台应用程序中使用 XML。有了数据绑定,应用程序可以在很大程度上忽略 XML 文档的实际结构,而直接使用那些文档的数据内容。虽然这种方法不能适合于所有应用程序,但在一般情况下,对于那些将 XML 用于数据交换的应用程序是比较理想的。除了简化编程之外,数据绑定还提供了其它一些好处。 由于数据绑定对许多文档细节进行了抽象,因此对于在内存中处理文档,它通常所需要的内存比文档模型方法(譬如 DOM 或 JDOM)要少。您还会发现,由于不需要遍历文档结构以获取数据,因此用数据绑定方法访问程序内的数据要比用文档模型方法快。最后,在输入时,一些特殊类型的数据(譬如数字和日期)可以被转换成内部表示,而不是保留为文本形式;这使应用程序可以更有效地使用数据值。”【1】
这里主要谈一下castor,其实JXAB才是Java的“官方”版,还有JBind、Quick 和 Zeus。他们的比较请参考【1】。
首先需要了解xml的schema,还有绑定时常用的两个术语:
编组(Marshalling)是在内存中为对象生成 XML 表示的过程。与 Java 对象序列化一样,这种表示需要包含所有依赖的对象:我们的主对象引用的对象、这些对象引用的对象等等。
数据分解(Unmarshalling) 是与编组相反的过程,在内存中根据 XML 表示构建一个对象(而且可能是链接对象的图)。
这两个术语也用在了java的序列化中,个人认为xml的数据绑定似乎是序列化的一个特殊形式。
具体的例子参考【2】,给出了详细的安装和测试,其中还提到了mapping和绑定到数据库。过几天有时间我会翻译一下这个教程并更新这篇文章。
参考:
【1】Java 中的 XML: 数据绑定:http://www.ibm.com/developerworks/cn/xml/x-databdopt/part1/
【2】Data binding with Castor 1~4: http://www.ibm.com/developerworks/xml/library/x-xjavacastor1/
【3】《Java与XML数据绑定》http://oreilly.com.cn/book.php?bn=7-5083-1313-5
【4】http://en.wikipedia.org/wiki/XML_data_binding