【问题标题】:mapping loads of XSDs to DB将 XSD 的负载映射到 DB
【发布时间】:2012-11-01 23:27:14
【问题描述】:

我的任务是创建从 xml 到 db (Oracle 11) 的转换器。

我有很多(大约 100 个)客户提供的 xsd。每个 xsd 都描述了非常复杂的数据。有些xsd有通用类型,但是每个xsd里面都声明了所有类型,所以没有通用类型的xsd。

未提供数据库模型。但是客户端拒绝了基于使用 oracle xmldb 的变体。

我的计划是:

  1. 使用xmlspy生成数据库模型;
  2. 使用 jaxb 生成 java 模型;
  3. 使用 hibernate 将 java 映射到 db 模型;
  4. 使用jaxb读取xml数据到java模型;
  5. 使用休眠存储数据。

但是当我尝试生成 db 模块时,我看到 xmlspy 生成了超过 5000 个表。即使我可以减少它们的数量,仍然有太多的工作来验证和修复表之间生成的关系。还有很多工作来生成 java 模型并将其映射到数据库。

还有其他方法可以解决我的问题吗?

【问题讨论】:

  • 为什么有 100 个模式?这些在功能上是否相关?为什么要将数据存储在数据库中?数据存入DB后如何使用?
  • 架构描述了不同类型的财务报告。数据形式xml将提供给BI系统。在数据库中存储数据是客户的要求。

标签: xml database oracle xsd mapping


【解决方案1】:

如果不分析 XML 数据并将其映射到数据库中的关系数据模型,这是一项不可能完成的任务。

您概述的方法是一个相当机械的过程,它展示了自动化这个过程是多么困难......您的 XSD 中的每个 XSD 类型都在 Java 中生成了一个唯一的对象类,而该对象类又在 Java 中转换为一个唯一的表你的数据库由 Hibernate...

如果您的模式使用类型继承,这可能会为您提供一些有关关系数据结构的线索(继承公共父类型的 XSD 类型可能属于同一个表)。也许其他人可以提供其他常见的模式来提防。

更新

我建议仔细查看底层 XML 数据。

我记得之前的一个 Web 服务项目,我们根据收到的原始 XML 数据完全重写了客户的模式。事实证明,他们复杂的 XSD 类型完全是多余的,只是增加了复杂性。

【讨论】:

  • 感谢您的回复。我同意你的说法,有很多日常工作,所以我m interested in finding more effective mapping approach. As I say schemas were provided by customer, so I cant 改变它们。我也分析了这个模式,可以减少它们的数量(5-10次),但是还有很多日常工作要做。
  • @2dy 恐怕这种“例行”工作是无法避免的。 XML 数据建模和关系数据建模太不相似了。这就是为什么我建议查看底层数据并专注于将其加载到合理的数据库模式中。否则,当客户尝试使用 SQL 分析数据时,混乱将继续存在。
  • 感谢您的回答。恐怕你是对的。看来没有别的办法了,只能数据分析了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2019-05-01
  • 2012-08-06
  • 2022-01-23
  • 2020-06-23
相关资源
最近更新 更多