-1

以下の xsd スキーマに問題があります。このようにカンマ区切りの文字列を 1 文字だけに制限するにはどうすればよいですか

    <status>A,B,C,D</status> 

現在、以下のコードを使用して、文字列のコンマ区切りリストを作成しています。

    <xs:simpleType name="order">
<xs:annotation>
  <xs:documentation>
  Comma-separated list of anything
  </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
  <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
</xs:restriction>

4

3 に答える 3

2

使用する

    <xs:element name="status">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="((([A-Z][,]+)+)([A-Z]?))|([A-Z]))"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

検証します:

  <status>A</status>
  <status>A,</status>
  <status>A,B</status>
  <status>A,B,C,D</status>
  <status>A,B,C,D,</status>

そして避ける

  <status>AA</status>
  <status>AA,</status>
  <status></status>
  <status>AAAA,BBBB,CCCC,DDDD,</status>
于 2013-05-16T10:38:39.973 に答える
0

@ Navin Rawatの回答ではカンマの使用が許可されていますが、それはおそらく 問題に対する最善/ほとんどの解決策ではありません。XML

より良い解決策は、次のスキーマ コードのように、 XML リストを使用することです

<xs:schema>
<xs:simpleType name="character">
  <xs:restriction base="xs:string">
    <xs:maxLength value="1" />
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="order">
  <xs:annotation>
    <xs:documentation>
    Space-separated list of single characters
    </xs:documentation>
  </xs:annotation>
  <xs:list itemType="character" />
</xs:simpleType>
</xs:schema>

ご覧のとおりxs:restriction、各文字列の長さを 1 にするために、正規表現ではなく を使用しています。唯一の欠点は、文字列をコンマ区切りではなく空白で区切る必要があることです。

于 2016-02-21T16:45:05.753 に答える