【问题标题】:GUI tool to integrate xsd/xml into database将 xsd/xml 集成到数据库中的 GUI 工具
【发布时间】:2012-11-18 08:24:17
【问题描述】:

我有很多不同复杂类型的 xsd 文件。我想将数据导入我的 oracle 数据库,但数据量如此之大,我无法使用 xsd2db 或 altova xmlspy,因为这让我大吃一惊。我正在寻找可以帮助我的简单实用的 etl 工具。有谁知道通过 xsd 生成 ddl 的 gui 工具?

【问题讨论】:

  • 我不明白这个。 XSD(XML 模式定义)描述 XML 文件的格式,而不是内容。它怎么可能包含数据?但由于它也是一个 XML 文件,你应该能够编写一个 XSLT 转换来做到这一点。
  • @a_horse_with_no_name xml 我有:xml 文件中的数据,xsd 定义(xml 文件使用它),oracle db。我想通过xsd生成oracle ddl脚本并将xml中的数据加载到表中。
  • 你能给我们举几个例子吗?
  • 我有一个可以用于此的产品... 在详细介绍之前要考虑的一件事是,某些 XSD 模型不能简化到超出某个点。因此,如果您仍然感兴趣并且可以分享 XSD,我可以在此之后发表更多评论。如果您选择或必须这样做,您可以使用我网站上的支持电子邮件地址私下将 XSD 发送给我。稍后我将尝试通过一个“答案”来说明我所说的简化是什么意思。

标签: database xsd etl


【解决方案1】:

这是对我的comment 的跟进;我不是将其定位为答案,但它应该可以帮助您更多地了解您所追求的目标,以及您可以做些什么。当然,这应该是@a_horse_with_no_name 的一个很好的例子......

我不熟悉 xmlspy,但鉴于我在 xsd2db 中看到的内容,它让我想到了 .NET 从 XML Schema 推断 DataSet 的能力。虽然authoring style of the XSD itself may affect the way a DataSet is derived,但对于较大的 XSD 主体而言,它几乎是微不足道的。更重要的是,推导很有可能甚至不起作用(实际上有很多限制)。

根据我自己的经验,.NET 中的派生过程为您提供了一个非常规范化的结构。为了说明,我将介绍一个示例 XML:

<ShippingManifest>
    <Date>2012-11-21</Date>
    <InvoiceNumber>123ABC</InvoiceNumber>
    <Customer>
        <FirstName>Sample</FirstName>
        <LastName>Customer</LastName>
    </Customer>
    <Address>
        <UnitNumber>2A</UnitNumber>
        <StreetNumber>123</StreetNumber>
        <StreetName>A Street</StreetName>
        <Municipality>Toronto</Municipality>
        <ProvinceCode>ON</ProvinceCode>
        <PostalCode>X9X 9X9</PostalCode>
    </Address>
    <PackingList>
        <LineItem>
            <ID>Box1</ID>
            <Load>1-233</Load>
            <Description>Package box</Description>
            <Items>22</Items>
            <Cartons>22</Cartons>
            <Weight>220</Weight>
            <Length>10</Length>
            <Width>10</Width>
            <Height>10</Height>
            <Volume>1000</Volume>           
        </LineItem>
        <LineItem>
            <ID>Box2</ID>
            <Load>456-233</Load>
            <Description>Package box</Description>
            <Items>22</Items>
            <Cartons>22</Cartons>
            <Weight>220</Weight>
            <Length>10</Length>
            <Width>10</Width>
            <Height>10</Height>
            <Volume>1000</Volume>           
        </LineItem> 
    </PackingList>
</ShippingManifest>

从概念上讲,它的结构非常简单:发货清单实体、客户、发货地址和装箱单。

将其转换为 ADO.NET 数据集是一个简单的练习,输出非常干净。

应该很容易想象实体(如果您愿意,可以在您的数据库中的表)的数量会如何增加一点更复杂的 XML...

作为侧边栏,如果设计 XSD 时要牢记涉及数据集的过程,则删除 PackingList 元素并将 LineItem 集合移动为在 下重复ShippingManifest 提供了一种稍微简化的布局:没有 PackingList 实体。

用于将 XSD 数据模型转换为关系模型(例如 .NET)的自动工具通常用于生成高度规范化的结构。出于显而易见的原因,我想非规范化留给用户。

QTAssistant 的 XML Builder 不同。我们的要求是创建一个 ER 模型,该模型可以在 .NET 的 XSD 到数据集无法使用的地方工作,并且在可能的情况下输出包含较少数量的实体。这是 QTAssistant 生成的相同内容:

QTAssistant 在这里所做的是合并所有参与一对一关系的实体。从建模的角度来看,这是一个明显的罪过。它确实有它的好处,特别是对于我们对能够捕获数据的简单结构感兴趣的用户(更具体的测试数据)。

生成的映射(XSD 到 ER)是双向的。这意味着它可以用于从数据库生成有效的 XML,或者将 XML 数据“分解”到数据库中(分解是通过生成 DML 语句来完成的)。该技术的使用方式:测试用例存储在 Excel 电子表格中,生成 XML,发送到 Web 服务,然后将结果存储回 Excel。

我们还生成一个 XML 文件来描述可以通过 XSLT 转换为 DDL 的结构。这就是事情可能会变得混乱的地方,具体取决于您的架构。简单类型不受限制的 XSD 很常见:没有最大长度的字符串,或者使用没有最大长度的模式;无约束的小数等。这些只是为什么在我们的例子中,我们没有开箱即用的直接方式来生成 DDL,而是提供自定义挂钩。

所以,结束我的评论,我几乎知道你想做什么(我必须假设其他事情,如 Oracle 的 XML 功能,或 XML 数据库和 XQuery 等已被排除)。不幸的是,XSD 在这里真的很重要,所以如果你可以按照我的评论分享这些内容,我可以看看 - 你想在这里分享多少取决于你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多