用于将xsd / xml集成到数据库中的GUI工具

时间:2012-11-18 08:24:17

标签: database xsd etl

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

1 个答案:

答案 0 :(得分:2)

这是我comment的后续跟进;我不是将此定位为答案,但它应该有助于您了解您所追求的更多内容,以及您可以采取的措施。当然,它应该是@a_horse_with_no_name ...

的一个很好的例子

我不熟悉xmlspy,但鉴于我在xsd2db中看到的内容,它让我想到了从XML Schema推断出DataSet的.NET能力。虽然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>

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

enter image description here

将其转换为ADO.NET DataSet是一项简单的练习,输出非常干净。

enter image description here

应该很容易想象实体的数量(数据库中的表,如果你愿意的话)可能会变得更加复杂的XML ......

作为侧边栏,如果设计XSD时请记住涉及DataSet的过程,然后删除 PackingList 元素并将 LineItem 集合移动到下重复ShippingManifest 给出了一个简化的布局:一个没有 PackingList 实体。

enter image description here

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

QTAssistant的XML Builder与众不同。我们的要求是创建一个ER模型,它可以在.NET的XSD到数据集没有的情况下工作,并且在可能的情况下输出包含较少数量的实体。这就是QTAssistant为此生成的内容:

enter image description here

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

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

我们还生成一个XML文件,描述通过XSLT可以转换为DDL的结构。根据您的架构,这可能会让事情变得混乱。看到简单类型不受约束的XSD很常见:没有maxlength的字符串,或者没有最大长度的模式;这些只是为什么在我们的例子中,我们没有开箱即用的方法来生成DDL,而是提供自定义的钩子。

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