使用 JAXB 创建基于 XML 和 Java 技术的设计
解释了 JAXB 的概念,并将其与 JDOM 和 JSAX 进行了比较。
引言
当我的公司要求我为客户撰写这篇文章时,我有机会接触到 JAXB 的概念。我想与大家分享我的知识,以便对我和那些从事 Java XML 概念工作的人有所帮助。
概述
可扩展标记语言 (XML) 是一种与平台和语言无关的标签定义方式。XML 允许您使用有意义的标签以结构化格式表示数据。与用于显示文本的超文本标记语言 (HTML) 不同,XML 是一种创建可扩展的自定义标签以表示数据结构的语言。
SAX 解析器是一种事件驱动的低级解析器,在解析 XML 文档时会响应文档的元素。数据不保留在内存中。将数据解析到元素中的效率是 SAX 解析器的关键特性。DOM 解析器是一种高级解析器,在解析 XML 文档时会将文档的数据结构保留在内存中。这有助于您根据需要管理和操作数据。DOM API 遵循树模型来维护内存中的数据。
Java XML 绑定体系结构 (JAXB),以前称为 Adelard 项目,结合了文档对象模型 (DOM) 解析器和 XML 简单 API (SAX) 解析器的优点。
JAXB 显著减少了执行时间,并为企业级应用程序创建了强大的对象模型。
这个参考点解释了如何使用 JAXB 以最小的努力创建和分发高性能的 XML 启用应用程序。
XML 概述
此表描述了 XML 中使用的重要组件
组件 (Component) | 描述 |
---|---|
元素标签 | 用于描述元素 |
处理指令 | 给 XML 处理器的特殊指令 |
文档类型声明 (DTD) | 用于执行结构边界数据建模 |
实体引用 | 用于表示实体数据的别名 |
注释 | 用于标识和强调 XML 文档中特定函数/过程的重要性。与其他传统包一样,XML 处理器和解析器在编译时不会考虑注释。 |
标记部分 | XML 文档中标记的数据不会被 XML 应用程序处理或解析,尽管这些数据对于解析和处理 XML 文档是有效的。 |
XML 解析器用于检查 XML 文档是否格式良好。此外,它们还用于将 XML 节点转换为 Java 对象或元素。有两种类型的解析器:验证型和非验证型。验证型解析器会验证 XML 文档是否符合 DTD 或模式。
使用 XML 技术的 Java 应用程序需要解析 XML 的数据对象。解析基于为特定文档定义的模式和 DTD 进行。您可以使用各种技术将 XML 文档解析为 Java 对象。其中一些是 SAX、DOM 和 JAXB。
介绍 JAXB
您可以使用 JAXB API 将 XML 文档映射到 Java 对象。您可以使用 JAXB API 和工具来序列化或将 XML 内容转换为 Java 对象。您可以根据模式访问和验证 Java 对象。此外,您还可以使用 JAXB API 反序列化或将 Java 对象转换为 XML 文档。
JAXB 的优点
JAXB 在 XML 文档和 Java 应用程序之间提供了一个抽象层。这有助于您开发企业应用程序。JAXB 应用程序通过使用保留信息的绑定机制,可以达到与 SAX 相媲美的速度。
此外,JAXB 还可以将 XML 元素中的数据转换为等效的有效 Java 对象,并借助 XML 模式或 DTD 设置约束。
JAXB 让您无需编写和调试 XML 解析代码。通过生成的转换代码,您可以编写通过普通 Java 数据接口访问 XML 文档的应用程序。
您可以扩展生成类代码的功能。在 Java 应用程序中,您可能希望通过 Java 对象来控制 XML 模式组件。为此,您可以自定义绑定模式以满足不同的需求。
由于其面向对象的特性,JAXB 应用程序有助于访问多个 XML 文档。
JAXB 与 SAX 的比较
JAXB 和 SAX 之间的区别是
- SAX 是一个事件驱动模型,而 JAXB 基于 Java 对象与 XML 元素的绑定。
- 与 SAX 相比,JAXB 的数据存储能力更高。
- 预编译的 Java 类和预定义的模式逻辑使 JAXB 解析器能够避免动态解释,从而提高了其与 SAX 解析器相比的效率。
JAXB 与 DOM 的比较
尽管 JAXB 和 DOM 都具有数据存储能力,但 JAXB 应用程序针对的是单个模式,而 DOM 应用程序可以处理多个模式。JAXB 应用程序比 DOM 应用程序更快。
注意
由于 JAXB 应用程序针对的是单个模式,与 DOM 应用程序相比,它们可以更有效地利用内存。
JAXB 的架构
XML 数据绑定所需的基本组件是
- 绑定编译器:将 DTD 或模式转换为 Java 对象。
- 运行时绑定框架:一个用于支持诸如 Java 类的序列化、反序列化和验证等基本操作的 API。
- 序列化:为给定的 XML 文档生成 Java 对象的過程。
- 反序列化:从 Java 对象生成 XML 文档的過程。
- 验证:根据 DTD/模式识别所需 Java 对象的過程。
- 绑定语言:任何支持 XML 的语言,如 DTD,都可以用作绑定语言。该语言描述了 DTD 或源模式与 Java 表示形式的绑定。这些声明旨在生成 Java 包、类或接口。
JAXB 架构的 Java 表示
使用 XML 文档中的 DTD 或模式定义的复杂数据内容绑定到 JAXB 编译器生成的 Content 接口。XML 节点的一些简单内容,例如属性和元素,直接绑定到 Content 接口的属性,并且可以通过 setter 和 getter 方法进行访问。使用属性,您可以同时引用两个接口。您可以有效地将生成的类用作 Content 接口和实现接口来扩展功能,这使得 JAXB 架构更加灵活和强大。
将模式/DTD 绑定到 Java 类
绑定框架 API 帮助您编译 XML 模式和 Java 类,以实现 Java 对象的序列化和反序列化。
绑定派生类
当您将 DTD 与绑定模式绑定时
- 粗粒度的模式组件,例如元素类型定义,被绑定到 Content 类。
- 细粒度的组件,例如属性声明,被直接绑定到 Content 类中的属性。
- 属性通过一组访问方法来实现。
- 这些方法包括标准的 get 和 set 事件,用于检索和修改属性值。您还可以删除和重新初始化属性值。
您可以改用
- 模式编译器用于将 DTD 与绑定模式绑定,并生成 Java 类和接口。
- 源模式语言,例如 DTD,用于编写源模式。
- 绑定语言,用于编写绑定模式。
注意
如果您在绑定模式中未指定组件的属性类型,则模式编译器将使用默认的 `String` 数据类型。
XML 模式和绑定对象的验证
您需要根据三个约束来验证绑定对象
- 类型约束:对可以作为 XML 文档的属性或 `#PCDATA` 仅元素的属性值施加要求。
- 局部结构约束:对特定元素类型的每个实例施加要求。
- 全局结构约束:对整个文档施加要求。
静态模式约束强制执行
Java 编程语言确保在编译时检查模式约束,并动态生成模式中提到的属性的可用方法。例如,如果模式约束属性的名称为 `String`,则派生方法将是
public void setName (String name);
public String getName ();
简单动态模式约束强制执行
强制执行在运行时进行检查,并在失败时抛出异常。这最适用于不能直接映射到 Java 类或原语的类型约束。
例如,如果一个属性被约束为介于 0 和 100 之间的整数值,当传递给该方法的参数超出范围时,`set` 方法可能会抛出运行时异常。
复杂动态模式约束强制执行
强制执行在运行时进行检查,并在失败时抛出异常。
- 局部结构约束检查复杂类型的子项类型是否与模式的内容模型匹配。
- 全局结构约束检查整个内容树,以检查 ID 值的一致性,并检查每个 `IDREF` 是否具有相应的 ID。
在使用 JAXB 生成的类之前需要遵循的步骤是
- 安装 JAXB 软件
- 编写绑定模式,其中包含有关如何将 DTD 绑定到类的说明。
- 使用 DTD 和绑定模式作为输入执行模式编译器,并生成源代码。
- 编译源代码以生成类。
安装 JAXB 软件
参考文献
JAXB
XML
要获取有关 XML 相关技术的信息:
我想与大家分享我的知识,并想通过添加一些额外的信息来更新这篇文章。请提供帮助,以便对我和从事 Java XML 工作的人有所帮助。