サード パーティの XML スキーマに従ってサード パーティの XML ドキュメントを受け取るという問題があります。スキーマは、 xs:integer 要素でパターン制限を使用します。
<xs:simpleType name="NumericInteger_Length8To8">
<xs:annotation>
<xs:documentation xml:lang="en">Format limitations: n8</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:integer">
<xs:pattern value="-?[0-9]{8,8}" />
</xs:restriction>
</xs:simpleType>
受信した XML は、先頭の 1 桁以上がゼロである 8 桁の整数を示しています。
<exampleCode>01234567</exampleCode>
この XML を解析すると、パターンに一致するため有効です。次に、同じ XML をテキスト メッセージとしてもう一度送信する必要があります。私の XML レンダラーは、整数の正規表現を送信するため、先行ゼロなしで次のようになります。
<exampleCode>1234567</exampleCode>
受信システムは、送信したメッセージを検証しようとし、値 1234567 がパターン制限に一致しなくなったため、エラーをスローします。
受信した XML は XML ドキュメントとしてシステムに内部的に保存されるため、実際の整数に変換され、字句表現が失われます。次に、XML ドキュメントをレンダリングすると、最初の字句表現が明らかに失われているため、先行ゼロはありません。この問題を回避する良い方法がわかりません。唯一の可能性は、XML スキーマを内部で変更することです。たとえば、型定義を xs:string にして、変更なしで渡されるようにしますが、(サードパーティの) スキーマには触れたくないでしょう。
私の質問は、これが xs:integer のパターン ファセットの有効な使用であるかどうかです。サード パーティの XML スキーマは有効なスキーマですか? W3 はパターンの使用に制限やガイドラインを課していますか?
同様の問題をいくつかしか見つけることができませんでした。
http://technet.microsoft.com/en-us/library/ms190665(v=sql.90).aspx (正規形 ... セクション) http://mail-archives.apache.org/mod_mbox/xerces- j-users/200409.mbox/%3C20040909151622.GA9712@hamachi.dyndns.org%3E