2011-12-03 12 views
2

直感的に、「拡張」は、基本タイプを変更するのではなく、基本タイプに何かを追加することを意味します。次のXSDXMLスキーマ拡張のセマンティクス

<complexType name="B"> 
    <attribute name="A1" type="int" use="required" /> 
    <anyAttribute namespace="##other" processContents="strict" /> 
</complexType> 
<complexType name="D"> 
    <complexContent > 
     <extension base="tns:B"> 
      <!--???--> 
      <attribute name="A1" type="int" use="optional" /> 
      <anyAttribute namespace="##other" processContents="lax" /> 
     </extension> 
    </complexContent> 
</complexType> 

コンパイルしないでください。しかし、XML Schemaコンパイラ(System.Xml.Schema.XmlSchema)はエラーを投げません。このカウンター直感的デザインの合理性は何ですか?スキーマに問題があります

+0

私はその理由を知っています:XMLスキーマは「構造型」であり、「名目型」ではありません...... –

答えて

0

:Dで

  • は、あなたが二度目A1属性を追加しようとしています。

拡張子に何かをリストすると、定義に追加されます。この場合、「A1」はすでにそこにあります。すべての拡張インスタンスは、ベースの有効なインスタンスである必要があります。 A1が存在しない場合、それは有効なメンバーではない。

オプションにしたい場合は、Bタイプを制限する必要があるようです。