2016-06-29 5 views
-3

拡張ベースを使用する複合タイプ「A」があります。「Base」には一連の要素が続きます。ここで、拡張base-'Base 'は複合型そのものであり、シーケンスex(Element 1,2,3)内で複数の要素参照を持ちます。私が持っている問題は、XMLを検証しようとすると、「A」要素に無効な子「1」があり、XML上の他の可能な要素がリストされているというエラーです。私はグループで働いているので、私はXMLではなくスキーマに変更を加えることができます。私はそれを説明している場合、コメントを見た後、私は上より少し詳しく説明するつもりですので、Complextypeでのトラブルシューティング

これは、スキーマ

<xsd:complexType name="A"> 
     <xsd:complexContent> 
      <xsd:extension base="Base" > 
       <xsd:sequence minOccurs="0" maxOccurs="unbounded"> 
        <xsd:element name="B" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="BData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
        <xsd:element name="C" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="CData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
        <xsd:element name="D" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="DData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 

XMLが

<A> 
    <D/> 
    <B/> 
    <C/> 
    <T>  <---- This is the element from the base'Base' that gives me the error> 
    <......> 
    </T> 
</A> 

OKです下回っSRY奇妙な例は次のようになります私の質問。これは私の初めての質問投稿です。私が直面している問題は仕事に関連しているので、特定の詳細を投稿することはできません。したがって、主な問題は「A」です。だから私は複数のXMLを検証すると仮定して編集しているスキーマを持っている。ですから、Complextype Aが各要素を有効にする方法を見つけることが目標ですが、要素が呼び出されても、エラーの順序や回数に関わらず拡張子を作成することはできません。私は 'all'要素を研究しましたが、その問題は1回しか発生しないということです。結論:順序は無制限であるが順序は制限され、順序制約はないが1回に制限される。これは、あらゆる解決策が歓迎される問題のウサギの穴のようなものです。

+1

XML要素名は数字で始めることはできません。 – kjhughes

+0

閉じる 'xsd:sequence'要素がありません。 – kjhughes

+0

参照された 'Base'宣言は含まれていません。 – kjhughes

答えて

0

XSD 1.0では、すべての複合型拡張が、最初のメンバーが基本型で定義された複合型で、2番目のメンバーが拡張で指定されたコンテンツモデルであるシーケンスを作成します。基本的なタイプの消費者への保証は、要素の初めを読めば必要なものを見つけることができ、準備ができていない子供たちが見え始めると、読書を止めることができるということです。 (あるいは、正式には、拡張型Eの任意の有効なインスタンスIに、Iの子孫のシーケンスの接頭辞があり、基本型Eに対して有効です。)

XSD 1.1では、すべてのグループを別のすべてのグループに拡張し、結果として(多くの人々が望む通りに)より大きな全グループを作成することが可能である。シーケンスと選択肢は、XSD 1.0と同じように動作します。

インスタンスの問題は、拡張機能で許可されている要素の前に、代わりに基本型によって許可されている要素があることです。それをあなたのタイプAで合法的にしたいなら、AとBaseの関係はタイプ拡張の一つではなく、別の方法でそれを定義しなければなりません。

関連する問題