2

さまざまな複雑なタイプの xsd ファイルがたくさんあります。Oracle データベースにデータをインポートしたいのですが、データ量が膨大で、頭がおかしくなり、xsd2db や altova xmlspy を使用できません。私はそれを助けることができるシンプルで便利なetlツールを探しています。xsdでddlを生成するGUIツールを知っている人はいますか?

4

1 に答える 1

2

これは私のコメントのフォローアップです。私はこれを答えとして位置付けているわけではありませんが、あなたが何を求めているのか、そしておそらくそれに対して何ができるのかをより理解するのに役立つはずです. 確かに、@a_horse_with_no_name の良い例になるはずです...

私は xmlspy には詳しくありませんが、xsd2db で見たものを考えると、XML スキーマから DataSet を推測する .NET の機能について考えるようになりました。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 DataSet に変換するのは簡単で、非常にきれいな出力が得られます。

ここに画像の説明を入力

もう少し複雑な XML では、エンティティ (必要に応じてデータベース内のテーブル) の数が急増する可能性があることは容易に想像できます...

サイドバーとして、DataSet を含むプロセスを念頭に置いて XSD を設計する場合、PackingList要素を削除し、LineItemコレクションをShippingManifestの下で繰り返されるように移動すると、 PackingListエンティティのない単純なレイアウトになります。

ここに画像の説明を入力

XSD データ モデルを .NET などのリレーショナル モデルに変換する自動ツールは、通常、高度に正規化された構造を生成するように設計されています。非正規化は、明らかな理由からユーザーに任されていると思います。

QTAssistantの XML Builder は異なります。私たちの要件は、.NET の XSD to Dataset が機能しない場所で機能する ER モデルを作成し、可能な場合は少数のエンティティを含む出力を作成することでした。これは、QTAssistant が同じものに対して生成するものです。

ここに画像の説明を入力

ここで QTAssistant が行ったことは、1 対 1 の関係にあるすべてのエンティティをマージすることでした。モデリングの観点から、それは明らかな罪です。特に、データをキャプチャできる単純な構造に関心のあるユーザーにとっては、その利点があります (より具体的にはテスト データ)。

生成されたマッピング (XSD から ER) は双方向です。これは、データベースから有効な XML を生成したり、XML データをデータベースに「細断」したりするために使用できることを意味します (細断は DML ステートメントを生成することによって行われます)。このテクノロジの使用方法: テスト ケースを Excel スプレッドシートに保存し、XML を生成して Web サービスに送信し、結果を Excel に保存します。

また、XSLT を介して DDL に変換できる構造を記述した XML ファイルも生成します。そして、これは、スキーマによっては、物事が混乱する可能性がある場所です. 単純型が制約されていない XSD を見るのはかなり一般的です。最大長のない文字列、または最大長のないパターンの使用。制約のない小数など。これらは、私たちの場合、すぐに使える DDL を生成する方法がなく、カスタマイズ用のフックを提供する理由のほんの一部です。

それで、私のコメントを締めくくるには、私はあなたが何をしたいのかをほとんど知っています (Oracle の XML 機能、または XML データベースと XQuery などの他のことは除外されていると仮定する必要があります)。残念ながら、ここでは XSD が非常に重要なので、私のコメントに従ってそれらを共有できる場合は、見てみましょう。ここでどれだけ共有するかはあなた次第です。

于 2012-11-22T00:09:53.540 に答える