我試圖定義(XSD)的方案規則,爲此,一個字符串是8個字符長:XSD正則表達式模式:這個或全無
<PostedDate>42183296</PostedDate>
和空間填充也被允許:
<PostedDate> </PostedDate>
這使我的XSD:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
</xs:simpleType>
但值可以也通過電子郵件空(即零個字符):
<PostedDate></PostedDate>
<PostedDate />
害得我天真地嘗試:
<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>
這當然是不允許的。
正如經常在XSD的情況下,大多數的格式不能輕易與XSD代表,所以我選擇嘗試正則表達式規則:
.{8} | ""
它試圖轉換爲xsd I型:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value=".{8}|''" />
</xs:restriction>
</xs:simpleType>
但它沒有工作:
''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'
我也嘗試
<xs:pattern value="[0-9]{8}|''" />
<xs:pattern value="([0-9]{8})|('')" />
<xs:pattern value="(\d{8})|('')" />
可以在解決了只要符合 問題的模式的其他任何人的東西 - 一些特定的模式 - 空
獎勵:能任何人都指向的地方表示\d
與數字相符?或者其他特殊模式代碼是什麼?
我認爲'\ d {8}?'應該工作。 '?'意味着任何之前它是可選的。 – 2012-08-16 04:10:04