java - 如何使用 xsd 模式定义避免重复类型?
问题描述
我有一个客户导入符合多种标准的 XML 数据(大约 100 个 XSD 文件)。
当然,我使用 Java 和 Jaxb 来生成类,这真的很愉快(一如既往)。
我做了一些 Jaxb 绑定来重命名标签、属性等……它涵盖了我的大部分用途。
但是XSD 中的某些数据结构是重复的。
我唯一看到的是提取一些 XSD 结构并将它们放入一个通用的 XSD 中。
所以这是我的步骤:
- 提取专用命名空间中的一个或多个 XSD 文件中的通用数据结构(易于共享)并使用 XSD
import
功能导入它们 - 当数据结构几乎相同时,使用 XSD 继承特性,即
extension
. - 使用 jaxb xjc 工具生成我的新模型
- 为我新提取的数据结构添加正确的命名空间前缀和要导入的 XML 文件(XSLT 预处理以添加缺少的新前缀)
因为我的客户不会更改其 XML 文件,所以我必须执行第 4 步。
正确的方法确实是修改标准 XSD,但在我的情况下这是不可能的(可能需要数月或数年,或者 XSD 分析团队从未考虑过......)
主要缺点是:
- XSD 已修改,因此在更新的情况下,“重播”修改可能需要很长时间
- 需要对 XML 进行一些预处理
主要优点是您不必复制代码......在我的情况下,它真的加倍努力(至少)。
现在我的问题是有人有更好的方法来处理这个用例吗?.
谢谢大家。
解决方案
推荐阅读
- django - 在我的 Django 应用程序中设置搜索功能
- python - 如何仅读取 msg 文件的第一个电子邮件正文,不包括附加到该 msg 文件的邮件
- c++ - 使用 fltk 时文本未出现在编译窗口中
- typescript - ngrx 效果 - 结合两个 API
- racket - 创建一个函数以将向量向量转换为列表列表
- java - 在 Java 中使用 DAO 的列表列表
- python - 如何在python中使用beautifulsoup提取href内容
- java - Maven 没有从依赖模块中获取类
- angular - ngFor Angular 中的手风琴
- c# - 在 C# 中为长度未知的数组赋值