Ich versuche, ein Schema Regel in XSD zu definieren, für die eine Zeichenfolge ist 8 Zeichen lang:XSD regulären Ausdruck: diese oder nichts
<PostedDate>42183296</PostedDate>
und raumfüllend ist auch erlaubt:
<PostedDate> </PostedDate>
die der XSD führte mich:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
</xs:simpleType>
aber der Wert kann auch e sein mpty (d.h. 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 entschied ich einen regulären Ausdruck Regel zu versuchen:
.{8} | ""
die i-Typ zu konvertieren versuchen, XSD:
<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 für ein Muster, das das Problem löst passende entweder - einige spezifische Muster - leer
Bonus: können jemand zeigt auf den Platz in the XSD documentation, die besagt, dass \d
mit Ziffern übereinstimmt? Oder was sind die anderen speziellen Mustercodes?
Ich denke '\ d {8}?' Sollte funktionieren. '?' bedeutet, dass alles, was davor ist, optional ist. –