0

次の XSD/XML 型定義があります。多くのビジネス ユニット/アプリケーションで使用されています。

<xsd:simpleType name="NAICSCodeType">
        <xsd:annotation>
            <xsd:documentation>NAICSCode</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="000001"/>
            <xsd:maxInclusive value="999000"/>
        </xsd:restriction>
    </xsd:simpleType>

これは「整数」データ型として定義されているため、入力の先頭のゼロが削除されます。例: 0078 は解析後に 78 になります。

先頭のゼロを削除せずに入力をそのまま渡す必要があります。たとえば、0078は解析後に 0078 になります。

理想的な修正は、制限ベースで整数を文字列に変更することです。他のグループからバイインされているため、スターターではありません。

望ましい結果のために上記のデータ型を再定義する方法はありますか?

どうすればいいのですか?

本やネットもあまり役に立っていないように見えるので、これが理論的に可能かどうか疑問に思い始めています

4

2 に答える 2

1

問題の値が実際には整数ではなく、数字のみで構成される文字列であるかのように聞こえます。同じ値に名前を付ける 3 つの方法ではなく、78 と 078 と 0078 が 3 つの異なる値である場合、スキーマはそれらが整数であると言うのはなぜですか?

もちろん、字句スペースの先行ゼロまたは固定桁数を要求することで xs:integer を制限できます。ただし、ドキュメントを読み取るソフトウェアがドキュメントを再シリアル化したり、値を他のソフトウェアに渡したりする方法に影響を与える可能性はほとんどありません。

于 2014-01-15T20:11:27.410 に答える
1

理論的には、存在しないはずです。私の知る限り、あなたが説明したものを取得するように構成できる、すぐに使用できる XML シリアライザーはありません。先頭のゼロとパディングの空白は、固定長レコード時代の名残です (例は、COBOL コピーブックの PIC 9(6) です)。

プラットフォームによっては、カスタム シリアライザーを作成できる場合があります。私の店では、それはまったく間違っていると主張します。

強制される場合は、XSDの「プライベート」バリエーション(文字列に基づく)を使用するだけなので、あなたの側でフォーマットを実装して完了します。プライベートとは、必要なコードを生成するために内部で使用した XSD アーティファクトを他のグループと「共有」する必要がないことを意味します。これにより、参照する「入力」を最小限のオーバーヘッドで作成できます。スキーマの「リファクタリング」は、最小限のオーバーヘッドで実行できます...

これを我慢しなければならないということは、あなたの環境では対処すべき明らかにより大きな問題があることを示しているからです。それは、XML とレガシー システムを適切に橋渡しする方法を必ずしも理解していないことから始まります (もちろん大げさな推測です)。

于 2014-01-09T23:04:08.640 に答える