Esquema XSD: ¿Cómo especificar el número de dígitos en un valor?
-
26-09-2019 - |
Pregunta
Quiero limitar el número de dígitos permitidos en un elemento a 6:
<AccountNumber>123456</AccountNumber>
<AccountNumber>999999</AccountNumber>
<AccountNumber>000000</AccountNumber>
La especificación del formato de campo es de 6 dígitos, numérico, con tráfico cero.
Leí que podría querer usar la totalDigits
restricción, basada en:
totalDigits
Especifica el número exacto de dígitos permitidos. Debe ser mayor que cero
Entonces tengo el tipo simple:
<xs:simpleType name="AccountNumber">
<xs:restriction base="xs:int">
<xs:totalDigits value="6"/>
</xs:restriction>
</xs:simpleType>
Y aunque atrapa números no válidos, como:
<AccountNumber>1234567</AccountNumber>
<AccountNumber>0000000</AccountNumber>
<AccountNumber></AccountNumber>
No atrapa números no válidos:
<AccountNumber>12345</AccountNumber>
<AccountNumber>01234</AccountNumber>
<AccountNumber>00123</AccountNumber>
<AccountNumber>00012</AccountNumber>
<AccountNumber>00001</AccountNumber>
<AccountNumber>00000</AccountNumber>
<AccountNumber>0000</AccountNumber>
<AccountNumber>000</AccountNumber>
<AccountNumber>00</AccountNumber>
<AccountNumber>0</AccountNumber>
¿Cuál es una restricción sugerida para especificar el número exacto de dígitos permitidos?
Solución
Necesitas usar xs:pattern
y proporcionar una expresión regular para limitarla a un número.
<xs:simpleType name="AccountNumber">
<xs:restriction base="xs:int">
<xs:pattern value="\d{6}"/>
</xs:restriction>
</xs:simpleType>
Otros consejos
Esta es la forma más simple
<xs:element name="prodid">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Probablemente usaría XS: Mininclusive y XS: Maxinclusive.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow