Pregunta

Estoy tratando de definir una regla de esquema en el XSD, para los que una cadena es de 8 caracteres:

<PostedDate>42183296</PostedDate>

y de relleno del espacio también se permite:

<PostedDate>        </PostedDate>

lo que me llevó a la XSD:

<xs:simpleType name="DateFormat">
   <xs:restriction base="xs:string">
      <xs:length value="8" />            //exactly 8 characters long
</xs:simpleType>

pero el valor puede también estar vacía (es decir, cero caracteres de largo):

<PostedDate></PostedDate>
<PostedDate />

lo que me llevó a tratar ingenuamente:

<xs:simpleType name="DateFormat">
   <xs:restriction base="xs:string">
      <xs:length value="8" />            //exactly 8 characters long
      <xs:length value="0" />            //exactly 0 characters long
</xs:simpleType>

Lo que por supuesto no está permitido.

Como es a menudo el caso en XSD, la mayoría de los formatos no se pueden representar fácilmente con XSD, así que decidimos probar una regla de expresión regular:

.{8} | ""

, que tratar de convertir a XSD I Tipo:

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value=".{8}|''" />
    </xs:restriction>
</xs:simpleType>

Pero no funcionó:

''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'

también intenté

  • <xs:pattern value="[0-9]{8}|''" />
  • <xs:pattern value="([0-9]{8})|('')" />
  • <xs:pattern value="(\d{8})|('')" />

Puede alguien otra cosa de un patrón que resuelve el argumento de la comparación, ya sea  - algún patrón específico  - vacío

Bono: punto Puede alguien al lugar en el la documentación XSD que dice que coincide con \d dígitos? O lo que los demás códigos de patrones especiales son?

¿Fue útil?

Solución

Puedo adivinar que los patrones deben parecerse a \d{8}| que significa "ocho dígitos o nada", pero no ocho dígitos o dos citas. Sin embargo, esto no explica por qué no se corresponde 20101111. ¿Seguro que no hay espacios en blanco u otros símbolos adicionales en el valor del elemento?
\d se dice que coincide con los dígitos en la sección "carácter de clase F.1.1 Escapes"

Otros consejos

También en la misma situación como la cadena vacía se permite en caso contrario debe 6 números de longitud. Por fin he usado como la siguiente. Esto funciona para mí

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top