8

タイプまたは別の単純な整数タイプのXMLファイルに数値を格納したいのですが、ユーザーが数値を16進形式で入力できるようにします。関連するものが見つからないため、XML標準ではこれが許可されていますか?

たとえば、XSDが次のように言っている場合:

<xs:element name="value" type="xs:integer" use="required" />

次に、XMLで次のように記述できるようにします。

<value>0xFF00FF</value>

または、16進数の表記が何であれ。

明らかに私はそれを試すことができますが、それはそれが標準であるかどうかではなく、1つの特定の実装でのサポートを証明するだけです。XMLに保存するとベースが失われるかどうかは特に気にしません。

4

4 に答える 4

6

要素で正規表現を使用し<xs:pattern>ます。

<xs:element name="value" use="required">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="0x[0-9A-Fa-f]+|[0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

これにより、10進数と16進数の両方を格納できます(必須の0xプレフィックス付き)。ただし、文字列を数値に変換する際には、具体的に処理する必要があります。

于 2015-05-27T09:06:56.507 に答える
5

私はそうは思わない。xs:integerの派生/サブセットタイプでありxs:decimal、その表現は次のように定義されます。

10進数は、10進数のインジケーターとしてピリオドで区切られた10進数の有限長シーケンス(#x30〜#x39)で構成される字句表現を持ちます。オプションの先行記号を使用できます。符号を省略すると、「+」と見なされます。先頭と末尾のゼロはオプションです。小数部がゼロの場合、ピリオドとそれに続くゼロは省略できます。例:-1.23、12678967.543233、+ 100000.00、210。

数値のセマンティックは失われますが、0xを削除してhexBinaryに設定することができます。

于 2012-08-01T18:23:14.400 に答える
4

私はこれを自分で必要とし、ここに巻き込まれました。

これは32ビットの符号なし整数型で、16進数または10進数のいずれかで値を入力できます。

<xs:simpleType name="U32BitHexInt">
  <xs:union memberTypes="xs:unsignedInt">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:pattern value="0x[0-9A-Fa-f]{8}"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>
于 2016-04-25T01:56:34.720 に答える
2

XSDはこれを許可していません。

ただし、XSD 1.1では、プレレキシカルファセットを含む実装定義のファセットが許可されており、Saxonはこの自由を利用して、ここで説明するsaxon:preprocessファセットを提供します。

http://www.saxonica.com/documentation/#!schema-processing/extensions11/preprocess

これにより、整数型の字句表現として16進表記を受け入れることができます。唯一の欠点(おそらく大きなものです!)は、Saxonでのみ機能することです。

于 2012-08-01T22:16:23.557 に答える