2012-03-30 6 views
4

と小数小数点以下の桁数を要求する - 1.00は有効ですが、1、1.0および1.000が全てです無効。は私が例えば正確に2</p> <p>に数値の小数小数点以下の桁数を制限したいXMLスキーマ

これは、同様の質問です:Specify amount of decimal places of an xs:decimal in an XML schema
、これは答えが提供されました:

<xs:simpleType name="twoPlacesDecimal" id="twoPlacesDecimal"> 
    <xs:restriction base="xs:decimal"> 
     <xs:fractionDigits fixed="true" value="2" /> 
    </xs:restriction> 
</xs:simpleType> 

は残念ながら、これだけは2に小数点以下の桁数を制限し、ゼロまたは1小数点以下の桁数で数値を可能にします。

+3

-1.00は有効ですか? – Dave

+0

これを追加する必要があります - 非負の数字だけを受け入れるべきですが、これは正規表現の簡単な変更です。 – Matt

答えて

2

これまで私がこれをやっていたとき、私は正規表現マッチャーを使いました。私はあなただけではtotalfractionDigits制限があることを行うことができるとは思わないが、それは正規表現パターンの制限、のようなものでも可能かもしれ

<xsd:simpleType name="exactlyTwoAfterDecimal"> 
    <xsd:restriction base="xsd:token"> 
     <xsd:pattern value="^-?\d+\.\d\d$"/> 
    </xsd:restriction> 
</xsd:simpleType> 
3

使用できる正規表現は、このようなものです
<xs:restriction base="decimal"> 
    <xs:pattern value="[+-]?\d+\.\d{2}"/> 
</xs:restriction> 
+0

小数点をオプションにし、1や1.0のような値を許可する場合は、小数点をオプションにして、次のような範囲を許可する必要があります。 '' – fourgablesguy

+0

@fourgablesguyあなたの正規表現は10、1.0、1.00のような値で動作しますが、0-9では動作しません。それらの値に対してどのように機能するかについての入力はありますか? – sanpaco

+1

Nvm私はそれを理解しました。正しい正規表現は '\ d + \。?\ d {0,2}'でなければなりません。 – sanpaco

3

正規表現を使用して小数点以下の桁数を強制的に2にすることはできますが、これは賢明ですか?このスキーマに準拠していると思われるドキュメントを作成する人は、人生をもっと苦にしています。たとえば、XSLTやXQueryによって生成されたデフォルトのシリアル化を使用することはできません。代わりに独自のシリアル化を作成する必要があります。それが受け入れることでもっと自由になるように仕様を変更する方が良いのではないでしょうか?

関連する問題