1

サンプル xsd

<xsd:simpleType name="test">
        <xsd:restriction base="xsd:token">
            <xsd:pattern value="[a-zA-Z0-9\-]{1,17}"/>
        </xsd:restriction>
    </xsd:simpleType>

このパターンをブロック ゼロに変更するにはどうすればよいですか。(それは可能ですか)
詳細情報:
0 は許可されません
00 ,000,0000 などは許可されません
10 は有効であり、許可されるべきです

4

3 に答える 3

1

トークン内の 0 の出現を禁止するのではなく、ゼロのみで構成されるトークンを禁止するだけの場合 (つまり、'10' と '01' は受け入れられますが、'0' と '00' などは拒否されます)。おそらくこれはあなたが望むことをするでしょう:

<xs:simpleType name="test">
  <xs:restriction>
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:pattern value="[a-zA-Z0-9\-]{1,17}"/>
      </xs:restriction>
    </xs:simpleType>
    <xs:pattern value=".*[^0].*"/>
  </xs:restriction>
</xs:simpleType>

基本的な考え方は、すでに定義した型から始めて、字句空間のすべてのメンバーが 0 以外の文字を 1 つ持つ必要があるという制約を追加して、制限によってその型から別の型を派生させることです。

于 2012-12-08T01:32:40.050 に答える
1

XML は先読みをサポートしていないため、長さ 17 までの文字列に対してこれをアサートする正規表現は非常に醜いものになる可能性があります。しかし、長さの制約を別の制限に抽出できると思います。

<xsd:simpleType name="test">
    <xsd:restriction base="xsd:token">
        <xsd:pattern value="[a-zA-Z0-9\-]*[a-zA-Z1-9\-][a-zA-Z0-9\-]*"/>
        <xsd:minLength value="1"/>
        <xsd:maxLength value="17"/>
    </xsd:restriction>
</xsd:simpleType>

現在、パターンにはゼロ以外の文字が 1 つ必要です (許可されている文字クラス外)。

于 2012-11-19T10:01:44.410 に答える
0

どうですか

<xsd:pattern value="[a-zA-Z1-9\-]|[a-zA-Z0-9\-]{2,17}"/>

于 2012-11-19T12:45:09.600 に答える