【问题标题】:How can I create database tables from XSD files?如何从 XSD 文件创建数据库表?
【发布时间】:2010-09-13 09:45:40
【问题描述】:

我有一组 XSD,我从中生成数据访问类、存储过程等。

我没有从这些生成数据库表的方法 - 是否有工具可以为我生成 DDL 语句?

这与Create DB table from dataset table 不同,因为我没有数据集表,而是 XSD。

【问题讨论】:

    标签: .net sql database xsd code-generation


    【解决方案1】:

    有一个名为XSD2DB 的命令行工具,它从 xsd 文件生成数据库,可在 sourceforge 获得。

    【讨论】:

    • 不幸的是它对我不起作用。它引发了错误 - System.Data.DataException: DataSet Object does not support list and union attributes of element simpleType.
    • System.Data.DataException:未定义的数据类型:'token'。
    • 不适用于我,也不适用于非常简单的复杂类型。 MsSql 2012
    • 我意识到这个问题已经死了,但我做了一些挖掘,发现 XSD2DB 抛出这种类型的异常的原因是因为它使用 DataSet 来解释 XML Schema,什么时候应该使用XmlSchemaSetXmlSchema 编译和操作模式文件。该代码非常依赖于DataSet 实现,但是,因此我没有深入研究将其修改为功能性。
    【解决方案2】:

    商业产品:Altova 的XML Spy

    请注意,没有通用的解决方案。 XSD 可以轻松描述未映射到关系数据库的内容。

    虽然您可以尝试“自动化”此操作,但您的 XSD 必须在设计时考虑到关系数据库,否则效果不佳。

    如果 XSD 的功能映射不好,您必须 (1) 设计某种映射,然后 (2) 编写自己的应用程序将 XSD 转换为 DDL。

    去过那里,做到了。雇佣工作——没有可用的开源。

    【讨论】:

    • XML Spy 2015 对我没有任何帮助,但 XSD2DB 有帮助。
    【解决方案3】:

    我使用 XSLT 来做到这一点。 编写您的 XSD,然后通过输出 SQL 命令的手写 XSLT 传递您的数据模型。编写 XSLT 比您可能编写的自定义程序/脚本更快且可重用。

    至少我在工作中是这样的,多亏了我有时间在 SO 上闲逛:)

    【讨论】:

    【解决方案4】:

    使用 XSD 文件创建 SQL 数据库模式的最佳方法是一个名为 Altova XMLSpy 的程序,这非常简单:

    1. 创建一个新项目
    2. 在 DTDs / Schemas 文件夹中右键单击并选择添加文件
    3. 选择 XSD 文件
    4. 双击打开添加的XSD文件
    5. 转到工具栏并查看转换
    6. 他们选择从 XML 模式创建结构数据库
    7. 选择数据源
    8. 最后让它导出路由调用,立即将它们的脚本架构留给 SQL Server 来执行查询。

    希望对你有帮助。

    【讨论】:

    • 作为 XmlSpy 2015 从 XML 模式创建结构数据库似乎不是一个选项。 Conversion 下唯一相关的选项是从数据库创建 XML 模式。
    • @ChrisMarisic 如果您只是打开 XML 间谍并检查转换菜单,它将仅显示从数据库选项创建 XML 模式。您需要做的是,首先在 xml spy 中打开您的 xml 架构文件,然后您可以使用许多选项,包括从 XML 架构创建数据库结构。希望这对其他人有所帮助。
    【解决方案5】:

    XML 模式描述分层数据模型,可能无法很好地映射到关系数据模型。将 XSD 映射到数据库表与将对象映射到数据库表非常相似,实际上您可以使用像 Castor 这样的框架来实现这两者,它允许您采用 XML 模式并生成类、数据库表和数据访问代码。我想现在有很多工具可以做同样的事情,但是会有一个学习曲线,默认映射很可能不是你想要的,所以你必须花时间定制你使用的任何工具。

    XSLT 可能是准确生成所需代码的最快方式。如果是小型架构硬编码,它可能比评估和学习一堆新技术更快。

    【讨论】:

      【解决方案6】:

      使用 Axis wsdl2java(可以接收 .xsd 文件)创建 Java 模型。

      使用用于 Java 的数据库生成工具,该工具采用 Java 模型。当然像 Hibernate 这样的东西可以做到这一点?我写了自己的工具(需要几天时间,也用 Java 生成 CRUD 代码)来节省自己的工作时间,也许这会是一个不错的个人项目?

      或者只是手动执行,以便您可以检查一切是否正确且良好!数据库工具现在已经足够好了,您可以轻松地为模型创建表而不会出现太多问题。

      【讨论】:

        【解决方案7】:

        可能会看看 Visual Studio 2k8 中的 XSD 工具...我已经从 xsd 创建了一个关系数据集,它可能会以某种方式帮助你。

        【讨论】:

        • 可以使用xsd.exe生成模式,但必须自己添加关系,参见the XML Bulk Load Examples on MSDN,或this question中的示例。 (我似乎记得修复了一些数据类型,但也许那是从XML 生成XSD。)
        • 正如我曾经提到的herexsd.exe 的目录似乎在 Windows 7 上发生了变化。我在 许多 Microsoft SDKs 目录中有它,所以它 似乎不再依赖 Visual Studio(?)。一个目录是:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools.
        【解决方案8】:

        hyperjaxb(版本 2 和 3)实际上生成休眠映射文件和相关实体对象,并且还对给定的 XSD 和示例 XML 文件进行往返测试。您可以捕获日志输出并自己查看 DDL 语句。 我不得不稍微调整它们,但它为您提供了一个基本的蓝图。

        【讨论】: