我有很多复杂类型的xsd文件。我想把数据导入我的Oracle数据库,但是数据量太大了,我不能使用xsd2db或altova xmlspy,因为它让我大吃一惊。我正在寻找简单和有用的etl工具,可以帮助我。有人知道用xsd生成ddl的gui工具吗?

最佳答案

这是我comment的后续行动;我不认为这是一个答案,但它应该有助于你了解更多你在追求什么,也许你可以做些什么。当然,这应该是一个很好的例子,@a_horse_with_no_name…
我不熟悉xmlspy,但鉴于我在xsd2db中看到的情况,它让我想到了从xml模式推断数据集的.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>

从概念上讲,它的结构非常简单:装运清单实体、客户、装运地址和装箱单。
将其转换为ADO.NET数据集是一个简单的练习,输出非常干净。
很容易想象实体的数量(数据库中的表,如果你愿意的话)会以多大的速度增长,只需要一点更复杂的XML……
作为一个侧栏,如果在设计xsd时考虑到涉及数据集的流程,那么删除packinglist元素并在shippingmanifest下重复移动lineitem集合将提供一个稍微简化的布局:一个没有packinglist实体的布局。
将xsd数据模型转换为关系模型(如.net)的自动工具通常被设计为生成高度规范化的结构。非规范化,我想,留给用户是有明显原因的。
QTAssistant的xml生成器不同。我们的要求是创建一个er模型,该模型可以在.net的xsd to dataset不工作的情况下工作,并在可能的情况下使用包含较少实体的输出。这是qtassiant为同一个生成的:
qtassiant在这里所做的,是合并所有参与一对一关系的实体。从模特的角度来看,这显然是一种罪恶。它确实有它的好处,特别是对于那些对能够捕获数据的简单结构感兴趣的用户(测试数据更加具体)。
生成的映射(xsd到er)是双向的。这意味着它可以用于从数据库生成有效的xml,或者将xml数据“分解”到数据库中(分解是通过生成dml语句来完成的)。使用这种技术的方式是:测试用例存储在excel电子表格中,生成xml,发送到web服务,结果存储在excel中。
我们还生成一个xml文件,描述通过xslt可以转换为ddl的结构。这就是事情可能变得一团糟的地方,这取决于你的模式。在简单类型不受约束的情况下看到XSDs是相当常见的:没有最大长度的字符串,或者使用没有最大长度的模式;无约束小数等。这只是一些原因,在我们的例子中,我们没有直接的方式来生成DDL,而是提供定制的钩子。
所以,在结束我的评论时,我非常清楚你想做什么(我必须假设其他事情,比如Oracle的XML功能,或者XML数据库和XQuery等等,已经被排除在外了)。不幸的是,xsd在这里真的很重要,所以如果你能根据我的评论分享这些,我可以看看-它将取决于你有多想在这里分享。

10-06 16:06
查看更多