2011-10-27 17 views
2

私はXML Schemaの初心者です。私の考えでは、かなり単純な問題を解決しようとしています:XML Schema:制限付きの属性とテキストを持つ要素

テキストと属性の両方を持つタグすなわち
<foo bar="123">some text</foo> 

。基本的に、私はこれはextension施設で行うことができる方法を知っています。むしろ直感的ではないように思えますが、うまくいきます。これは基本的なイディオムです:

<xs:element name="option"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="value" type="xs:string"> 
     </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

しかし、私はまた、テキストと属性に制限を課したい!テキストは特定の長さを超えてはならず、属性は特定の範囲内の整数でなければなりません。それをどうすれば実現できますか?拡張機能を使用すると、テキストの制限を使用できないようです。

答えて

2

利用<xs:restriction>の代わりに拡張。単純な型を別々に宣言し、他の構造体で参照することができます。

EDIT:私の時間を割いて謝罪。常にそれはあなたがどこにも私の国のトラフィックで得ることができないと私は単純に後戻り叫んとのろいのポイントに遅れて到着判明したとして、昨日、いくつかのイベントに行ってきました。私は代わりに夕食を飲みに過ごしました。

しかし、今、私は冷静だし、でもその状態で、これは私が思い付くことをどうにかベストです:

<xs:element name="option"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:restriction base="optionType"> 
       <xs:maxLength value="10" /> 
      </xs:restriction> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="optionType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="value"> 
       <xs:simpleType> 
        <xs:restriction base="xs:integer"> 
         <xs:minInclusive value="0" /> 
         <xs:maxInclusive value="10" /> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

GAWD私のああ。だから、あなたはエクステンションの制限をすることになっているようです。上記のように、要素optionの内容は、最大長10の文字列と属性valueに[0、10](範囲を含む)の整数に制限されます。

うん、それは確か...

+0

あまりにも冗長ではありません。しかし、私は* * 'を使用する必要があります私は誤解ではないよ場合は、これが最初の場所で仕事を得るために'。 – dietr

+0

ああ、XMLスキーマは...なぜあなたはハデスの外にあなたの方法を爪ましたか?私は今すぐ出発する必要がありますが、後でチェックして誰かが答えを出していないかどうかをさらに調べます。 –

関連する問題