Domanda

Sto cercando di definire una regola di regime nel XSD, per i quali una stringa è lunga 8 caratteri:

<PostedDate>42183296</PostedDate>

e lo spazio-riempimento è anche permesso:

<PostedDate>        </PostedDate>

che mi ha portato alla XSD:

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

ma il valore possono anche essere vuoto (cioè lungo zero caratteri):

<PostedDate></PostedDate>
<PostedDate />

, che mi ha portato a cercare 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>

Il che, naturalmente, non è consentito.

Come è spesso il caso in XSD, la maggior parte dei formati non possono essere rappresentati facilmente con XSD, così ho deciso di provare una normale regola di espressione:

.{8} | ""

, che si cerca di convertire in XSD I Tipo:

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

Ma non ha funzionato:

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

Ho anche provato

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

Qualcuno può altra cosa di un modello che risolve il problema di corrispondenza sia  - qualche modello specifico  - vuoto

Bonus: Qualcuno può puntare al posto in la documentazione XSD che dice che \d corrisponde cifre? O che cosa gli altri codici di modello speciale sono?

È stato utile?

Soluzione

Posso immaginare che gli schemi dovrebbe essere simile \d{8}| che significa "otto cifre o niente", ma non otto cifre o due citazioni. Tuttavia questo non spiega, perché 20101111 non corrisponde. Sei sicuro che non ci siano spazi bianchi o altri simboli aggiuntivi del valore dell'elemento?
\d si dice per abbinare le cifre nella sezione "F.1.1 carattere di classe Escapes"

Altri suggerimenti

anche nella stessa situazione come stringa vuota viene consentito altrimenti deve 6 numeri lunghezza. Alla fine ho usato come il seguente. Questo funziona per me

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top