Frage

Ich versuche, eine Regelung Regel in XSD zu definieren, für die eine Zeichenfolge 8 Zeichen lang ist:

<PostedDate>42183296</PostedDate>

und raumfüllend ist auch erlaubt:

<PostedDate>        </PostedDate>

, die mich auf die XSD führte:

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

aber der Wert können auch leer sein (das heißt null Zeichen):

<PostedDate></PostedDate>
<PostedDate />

, die mich dazu gebracht, zu naiv versuchen:

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

Was natürlich nicht erlaubt.

Wie es oft der Fall in XSD, können die meisten Formate nicht ohne weiteres mit XSD dargestellt werden, so dass ich eine regulären Ausdruck Regel versuchen entschieden:

.{8} | ""

, die zu XSD konvertieren versuchen, i-Typ:

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

Aber es hat nicht funktioniert:

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

Ich habe auch versucht,

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

Kann jemand anderes, was von einem Muster, das löst das Problem Anpassung entweder  - einige spezifische Muster  - leer

Bonus: kann jeder Punkt auf der Stelle in der XSD-Dokumentation die besagt, dass \d Ziffern übereinstimmt? Oder, was die anderen speziellen Mustercodes sind?

War es hilfreich?

Lösung

Ich kann vermuten, dass prasselt wie \d{8}| aussehen soll, dass bedeutet „acht Ziffern oder nichts“, aber nicht mehr als acht Ziffern oder zwei Zitate. Dies gilt jedoch nicht erklären, warum 20101111 nicht abgestimmt. Sind Sie sicher, dass es keine Leerzeichen oder andere zusätzliche Symbole in dem Elementwert sind?
\d wird die Ziffern im Abschnitt „F.1.1 Zeichenklasse Escapes“ passen

Andere Tipps

ich auch in der gleichen Situation wie leere Zeichenkette sonst erlaubt es muss 6 Länge Zahlen. Endlich habe ich wie folgt aus. Dies funktioniert für mich

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top