Question

Je suis en train de définir une règle de régime en XSD, pour lequel une chaîne est de 8 caractères:

<PostedDate>42183296</PostedDate>

et de remplissage d'espace est également autorisé:

<PostedDate>        </PostedDate>

ce qui m'a amené à la XSD:

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

mais la valeur peut également être vide (à savoir zéro caractères):

<PostedDate></PostedDate>
<PostedDate />

ce qui m'a amené à essayer naïvement:

<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>

Ce qui bien sûr n'est pas autorisé.

Comme est souvent le cas dans XSD, la plupart des formats ne peuvent pas être représentés facilement avec XSD, donc je choisi d'essayer une règle d'expression régulière:

.{8} | ""

qui essaie de convertir XSD type i:

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

Mais ça n'a pas marché:

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

i essayé aussi

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

Quelqu'un peut-il autre chose d'un modèle qui permet de résoudre la mise en correspondance d'émission soit  - un certain modèle spécifique  - vide

Bonus: Quelqu'un peut-il le point à l'endroit la documentation XSD qui dit que \d correspond chiffres? Ou ce que les autres codes de motif spéciaux sont?

Était-ce utile?

La solution

Je devine que bagouts devrait ressembler à \d{8}| qui signifie « huit chiffres ou rien », mais pas huit chiffres ou deux citations. Toutefois, cela n'explique pas, pourquoi 20101111 ne correspond pas. Êtes-vous sûr qu'il n'y a pas d'autres symboles ou espaces blancs supplémentaires dans la valeur de l'élément
\d est dit pour correspondre à des chiffres dans la section « F.1.1 Caractère classe Escapes »

Autres conseils

J'ai aussi dans la même situation comme une chaîne vide est autorisée sinon il doit 6 numéros de longueur. Enfin je comme ce qui suit. Cela fonctionne pour moi

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top