estoy tratando de definir una regla de esquema en el XSD, para los que una cadena es de 8 caracteres de longitud:XSD patrón de expresión regular: esto o nada
<PostedDate>42183296</PostedDate>
y también se permite el espacio de llenado:
<PostedDate> </PostedDate>
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 ser también correo mpty (es decir cero caracteres de longitud):
<PostedDate></PostedDate>
<PostedDate />
lo que me llevó a probar 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 suele ser el caso en el XSD, la mayoría de los formatos no se puede representar fácilmente con XSD, así que decidimos probar una regla de expresión regular:
.{8} | ""
el 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 cualquier otra cosa de un patrón que resuelve el problema de que concuerde con cualquiera - algún patrón específico - vacío
Bono: puede cualquier persona apunta al lugar en the XSD documentation que dice que \d
coincide con los dígitos? ¿O cuáles son los otros códigos de patrón especiales?
Creo que '\ d {8}?' Debería funcionar. '?' significa que lo que sea antes es opcional. –