2009-03-24 4 views
0

Visual StudioとOxygenの両方を使用してXMLサンプルファイルを使用してXSDを生成すると、<xs:element ref="ELEMENTNAME" />実際の要素名。ファイルの後半には、要素が何であるかを定義する要素<xs:element name="ELEMENTNAME" type="xs:string" />があります。例えば、ここに抜粋です:REF要素を除いたXSDファイルを生成する - リテラルなXSDファイルを作成するだけです

<xs:element name="Header"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="VersionNumber" /> 
     <xs:element ref="BillerGroupID" /> 
     <xs:element ref="BillerGroupShortName" /> 
     <xs:element ref="BillerID" /> 
     <xs:element ref="BillerShortName" /> 
     <xs:element ref="FileIndicator" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:element name="VersionNumber" type="xs:string" /> 
<xs:element name="BillerGroupID" type="xs:string" /> 
<xs:element name="BillerGroupShortName" type="xs:string" /> 
<xs:element name="BillerID" type="xs:string" /> 
<xs:element name="BillerShortName" type="xs:string" /> 
<xs:element name="FileIndicator" type="xs:string" /> 

がここでの問題だ - 私はマイクロソフトのBizTalkを使用しています、そして、彼らはすべてのルートレベルにしているので、それが可能なスキーマとして一つ一つの「要素」タグを見て - ヘッダー、すべての単一の子要素と一緒に。私はちょうど1つのスキーマを利用可能にしたいと思っています - ヘッダー、この場合、 - そして残りを隠す。

明白な解決策は、手動でREF文を削除し、手動でこのように見えるように私のファイルを編集するように思わ:

<xs:element name="Header"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="VersionNumber" type="xs:string" /> 
     <xs:element name="BillerGroupID" type="xs:string" /> 
     <xs:element name="BillerGroupShortName" type="xs:string" /> 
     <xs:element name="BillerID" type="xs:string" /> 
     <xs:element name="BillerShortName" type="xs:string" /> 
     <xs:element name="FileIndicator" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

しかし、私のファイルは巨大で、要素の数千人が含まれているので、これではありません本当に実現可能です。 REFを使わずにファイルを生成するツールを私のツールに教える方法はありますか?その代わりに、ルートレベルではなく、どこにあるべきかの要素のコピーを置くだけですか?

答えて

3

Visual Studio BizTalkプロジェクトをお持ちの場合は、[生成されたアイテムを追加]を選択し、[スキーマを生成]を選択します。

ドロップダウンリストで、「well formed xml」を選択します。アクティブ化するスクリプトを実行する前にそのオプションを使用した人がいない場合は、下のリンクを参照してください。

VSは、必要なスキーマの種類を生成します。 VSは、この人のサンプルを参照してください。間違った:)

推測場合は、データ型を調整する必要がありますAdd generated schemas

+0

"Well-Formed XML"オプションをインストールする必要がありましたが、単一のREFなしで魅力的に機能しました。あなたのヒントありがとう! – SqlRyan

0

私はこの変換を実行するXSLTを書くのは比較的簡単だろうと思っています。 ref属性を検出し、XPathの値を使用して実際の定義を見つけ出し、それを出力にコピーすることができます。書くのは非常に難しいはずがありません。

+0

私は変革を書くことができますが、なぜツールは、単にファイルを最初の場所でそのように生成することはできませんか?要素のコピーが複数ある場合に備えて、REFのポイントを理解していますが、ファイルを作成しないボックスをチェックする必要があるようです。 – SqlRyan

+0

あなたは、他の何かの欠点を回避するツールを探しているようです。おそらくどこかでそれを行うツールが見つかるでしょうが、XSLTはおそらく書いた方が早く、別のツールを追加する必要はありません。 –

0

使用しているVSのバージョンはどれですか?私は、Visual Studio 2008で、あなたの例を試してみました、そしてそれはXSDにあなたがそれを望むように見える方法で生成された:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Header"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="VersionNumber" type="xs:string" /> 
     <xs:element name="BillerGroupID" type="xs:string" /> 
     <xs:element name="BillerGroupShortName" type="xs:string" /> 
     <xs:element name="BillerID" type="xs:string" /> 
     <xs:element name="BillerShortName" type="xs:string" /> 
     <xs:element name="FileIndicator" type="xs:string" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

VS 2005が同じことをするだろうように見えますが。

VSオプションダイアログを見ても、XSDの生成方法を制御するものは見当たりませんでした。 (おそらくどこかに設定ファイルがありますか?)

+0

これは私が提供した小さな例でも機能しますが、VS2008でXMLファイル全体を実行すると、REFがたくさんあるスキーマが生成されます。しかし、アイデアをありがとう! – SqlRyan

関連する問題