/ / Requiere un número de decimales con un esquema XML - xml, xsd

Requiere un número de decimales con un esquema XML - xml, xsd

Quiero restringir el número de decimales fraccionarios de un número a exactamente 2.

Por ejemplo, 1.00 es válido, pero 1, 1.0 y 1.000 no son válidos.

Esta es una pregunta similar: Especifique la cantidad de decimales de un xs: decimal en un esquema XML
Y esta fue la respuesta provista:

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

Desafortunadamente, esto solo limita el número de decimales a 2, y permite números con cero o un decimal.

Respuestas

2 para la respuesta № 1

Cuando hice esto en el pasado, utilicé un comparador de expresiones regulares. La expresión regular que puedes usar es algo como esto:

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

3 para la respuesta № 2

No creo que puedas hacer eso con el total y fractionDigits restricciones solo, pero puede ser posible con una restricción de patrón Regex, algo como:

<xs:restriction base="decimal">
<xs:pattern value="[+-]?d+.d{2}"/>
</xs:restriction>

3 para la respuesta № 3

Puedes forzar el número de decimales a serexactamente dos usando una expresión regular, pero es esto sabio? Usted está haciendo la vida más difícil para cualquier persona que genere documentos que deben cumplir con este esquema. Por ejemplo, no podrán utilizar la serialización predeterminada producida por XSLT o XQuery, sino que tendrán que escribir la suya propia. ¿No es mejor cambiar la especificación para ser un poco más liberal en lo que acepta?