私はXMLスキーマを扱うのが慣れているので、私の無能さを許してください。XMLスキーマ。有効な属性値のリストから倍数
リストから1つ以上の空白で区切られた文字列値を含む必要がある属性を作成しようとしています。このリストは、典型的な4つのHTTP要求メソッドです。 get
,post
,put
およびdelete
である。
ので、有効な要素が含まれます:
<rule methods="get" />
<rule methods="get post" />
<rule methods="post put delete" />
を無効の要素が含まれるのに対し:
<rule methods="get get" />
<rule methods="foobar post" />
<rule methods="get;post;put" />
を私が列挙し、長さをだまししようとしましたが、私は、私は理解してるとは思いません何をする必要があるのですか(、実際に可能ならばそれは問題ありませんが、それはである必要があります)
これは私が今ではだところ、おかげで@tdruryすることです:反復(などget get
として、あるいはpost post post
)および不在の空白(などgetpost
やpostputdelete
などを除き、作品
<xs:attribute name="methods" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:pattern value="(?:(?:get|post|put|delete)\s?){1,4}" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
)
編集:
これをちょっと試してみた後、考えられるすべてのシーケンスを列挙したアイデアを思いつきました。ありがたいことに、このリストは4つの通常の輸送方法、get
、post
、put
、およびdelete
に固定(を当面)であるので、私は考え出し:
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:enumeration value="delete" />
<xs:enumeration value="put" />
<xs:enumeration value="put delete" />
<xs:enumeration value="post" />
<xs:enumeration value="post delete" />
<xs:enumeration value="post put" />
<xs:enumeration value="post put delete" />
<xs:enumeration value="get" />
<xs:enumeration value="get delete" />
<xs:enumeration value="get put" />
<xs:enumeration value="get put delete" />
<xs:enumeration value="get post" />
<xs:enumeration value="get post delete" />
<xs:enumeration value="get post put" />
<xs:enumeration value="get post put delete" />
</xs:restriction>
は、誰もがその理由を見ることができ、これはをすることをはいいアイデアでしょうか?
あなたは単純に制限として正規表現を使用することができます
ありがとう@それは近いですが、 'get?(get:post | put | delete)\ s?){1,4}' 'get get 'や' getpost'などがあります。重複を無効にする方法はありません。 – Dan