2

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

4

1 回答 1

2

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

我不熟悉 xmlspy,但鉴于我在 xsd2db 中看到的内容,它让我想到了 .NET 从 XML Schema 推断 DataSet 的能力。虽然XSD 本身的创作风格可能会影响 DataSet 的派生方式,但对于较大的 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 时要牢记涉及 DataSet 的过程,则删除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 在这里真的很重要,所以如果你可以按照我的评论分享这些内容,我可以看看——这取决于你想在这里分享多少。

于 2012-11-22T00:09:53.540 回答