0

固定桁数と必要に応じて先行ゼロを持つint型の「ID」属性を取得したいと思います。

したがって、この番号がたとえば6で、1と入力すると、000001になります。

4

1 に答える 1

0

XSDは、ここで念頭に置いているような文字列操作を提供していません。IDに10進数の6桁を含める場合は、10進数の6桁が必要になるようにIDを定義できます。または、ユーザーが「1」として値を指定できるようにする場合は、IDを最大6桁で定義できます。ただし、一般に、「ユーザーが文字列Xを入力し、システムが自動的に文字列Yにマップする」という形式のルールは、XSDの範囲外です。

この状況に対処する方法を理解するには、なぜこの種の文字列マッピングが必要なのかを自問してください(そしておそらくこの質問を読んでいる人に説明してください)。「1」と「01」と「000001」がすべて同じ値にマップされるようにする場合は、属性を整数として宣言することですでにそれが行われます。それが他の何かである場合(私は別の動機を思い付くのに苦労しています)、別の解決策が適切である可能性があります。

しかし、あなたが実際に尋ねた質問に移りましょう。

字句表現で正確に6桁のサブタイプを定義するにはxs:integer、次のように記述します。

<xs:attribute name="ID">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:pattern value=".{6}"></xs:pattern>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>

または、(Sean Kennyがコメントで示唆しているように)本当に必要なのが整数ではなく、正確に6桁の10進数の文字列である場合:

<xs:attribute name="ID">
  <xs:simpleType>
    <xs:restriction base="xs:token">
      <xs:pattern value="\d{6}"></xs:pattern>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>

最大6桁を許可する整数のサブタイプを定義するには、上記のパターンでに変更{6}するか、1000000を使用するか、6に設定します。{1,6}maxExclusivetotalDigits

これはすべて、問題がデータ型の定義であり、一意性の制約を課すことではないことを前提としています。

于 2012-08-20T14:52:50.940 に答える