0

ドキュメント X をドキュメント Y にマッピングする必要がありますが、どちらも非常に似ています。X には、次の [フラグメント] XSD があります。

<xsd:complexType>
   <xsd:sequence>
      <xsd:choice minOccurs="3" maxOccurs="unbounded">
             <xsd:element maxOccurs="unbounded" ref="A" /> 
             <xsd:element maxOccurs="unbounded" ref="B" /> 
             <xsd:element maxOccurs="unbounded" ref="C" /> 
             <xsd:element minOccurs="0" maxOccurs="unbounded" ref="D"/> 
      </xsd:choice>
   </xsd:sequence>
</xsd:complexType>

Y には同じ要素 (A、B、C) がありますが、それらはシーケンス内にありません。

次の入力でマップをテストすると、問題が発生します。

<doc-X>
    <A>...</A>
    <B>...</B>            
    <C>...</C>
    <D>...</D>            
    <C>...</C>
    <D>...</D>            
</doc-X>    

私はこのようなものを得る:

<doc-Y>
    <A>...</A>
    <B>...</B>            
    <C>...</C>
    <C>...</C>            
    <D>...</D>
    <D>...</D>            
</doc-Y>

各要素を他のスキーマの対応するペアにマップするだけなので、なぜこれが起こっているのかわかりません。

編集: PreserveSequenceOrderプロパティを「はい」に設定しようとしましたが、うまくいきませんでした

4

2 に答える 2

0

XSD自体は、兄弟要素が任意の順序で表示されることを保証するものではありません。あなたが説明したことから、出力はそのスキーマに従って完全に有効であるように思えます。テストマップで実際に失敗していませんか?

完全なスキーマとドキュメントインスタンスを投稿する方法はありますか?

于 2011-03-29T20:37:26.317 に答える
0

その出力を取得しているのは、Map が常に出力ドキュメント ( Document Y) の接続を一番上の要素から一番下の要素まで探しているためです。したがって、あなたの場合、最初の要素A(ドキュメントY内)リンク、その後B、その後Cを実行します。

このように出力ドキュメント(ドキュメントY)xsdをsthに変更してみてください

    <xsd:complexType>
       <xsd:sequence>
          <xsd:choice minOccurs="3" maxOccurs="unbounded">
                 <xsd:element maxOccurs="unbounded" ref="D" /> 
                 <xsd:element maxOccurs="unbounded" ref="C" /> 
                 <xsd:element maxOccurs="unbounded" ref="B" /> 
                 <xsd:element minOccurs="0" maxOccurs="unbounded" ref="A"/> 
          </xsd:choice>
       </xsd:sequence>

</xsd:complexType>

あなたは違いを見るでしょう.....

于 2011-03-31T11:24:20.343 に答える