Pergunta

Estou tentando definir uma regra do esquema no XSD, para a qual uma string tem 8 caracteres:

<PostedDate>42183296</PostedDate>

E também é permitido a preenchimento de espaço:

<PostedDate>        </PostedDate>

O que me levou ao XSD:

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

mas o valor posso também esteja vazio (ou seja, caracteres zero):

<PostedDate></PostedDate>
<PostedDate />

O que me levou a tentar 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>

O que, é claro, não é permitido.

Como costuma ser o caso no XSD, a maioria dos formatos não pode ser representada facilmente com o XSD, então optei por experimentar uma regra de expressão regular:

.{8} | ""

que tentando converter para xsd eu digito:

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

Mas não funcionou:

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

Eu também tentei

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

Qualquer pessoa de outra pessoa pode ser um padrão que resolva o problema correspondente - algum padrão específico - vazio

Bônus: Alguém pode apontar para o lugar em A documentação do XSD Isso diz isso \d Matches dígitos? Ou quais são os outros códigos de padrão especiais?

Foi útil?

Solução

Posso adivinhar que os padrões devem parecer \d{8}| Isso significa "oito dígitos ou nada", mas não oito dígitos ou duas citações. No entanto, isso não explica, por que 20101111 não é correspondido. Tem certeza de que não há espaços em branco ou outros símbolos adicionais no valor do elemento?
\d Diz -se que corresponde a dígitos na seção "F.1.1 Classe de caracteres escapes"

Outras dicas

Eu também na mesma situação, como a corda vazia, é permitida, caso contrário, ela deve 6 números de comprimento. Por fim, usei como o seguinte. Isso funciona para mim

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top