2009-08-26 10 views
23

両方を有する:は、私は、XMLのこの部分を検証するXMLスキーマを記述しようとしているXMLスキーマの属性と要素の制限

<date isodate="2007-03-14">14 march 2007</date> 

属性isodateが、それは、xsに設定し、型の必要があります:日付とコンテンツの長さは最大50文字です。

私はそれが一つのブロック内のXMLスキーマ定義を記述することができます場合は、おそらくこのようなものだろう:

<xs:element name="date" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="50"/> 
     </xs:restriction> 
     <xs:attribute name="isodate" type="xs:date" use="required"/> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

上記のコードは動作しません、と私は本当に理由を把握することはできません。唯一の私が発見した問題を回避するには、次のようにそれを別の型に規制部を抜け出す、とリンクすることです:私は質問が1つのブロックに定義を記述する方法である

<xs:simpleType name="reviewDate"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="50"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="date" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="reviewDate"> 
       <xs:attribute name="isodate" type="xs:date" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

スキーマビットがあるようにより読みやすく、スキーマの他の部分の型を参照しません。

+0

@Alexander:XMLセクションを適切にフォーマットするには、XMLを強調表示し、ツールバーの[コード]ボタン(101 010)をクリックします。それはあなたに良い結果をもたらします - バックティックを使用することは、単一の単語または短いフレーズのためにのみ役立ちます - 複数の行にうまくいきません。 –

答えて

15

XSDの1つのブロックに制限と拡張の両方をマージすることはできません。あなたが "ReviewDate"シンプルタイプで持っている解決策は、私が知っている最良の解決策です。

マルク・