tôi đang cố gắng để xác định một quy tắc chương trình trong XSD, mà một chuỗi dài 8 ký tự:XSD mẫu biểu thức chính quy: này hoặc không có gì
<PostedDate>42183296</PostedDate>
và không gian-điền cũng được phép:
<PostedDate> </PostedDate>
đó dẫn tôi đến XSD:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:length value="8" /> //exactly 8 characters long
</xs:simpleType>
nhưng giá trị thể cũng có e mpty (tức là zero ký tự):
<PostedDate></PostedDate>
<PostedDate />
đó dẫn tôi đến ngây thơ thử:
<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>
Trong đó tất nhiên là không được phép.
Như thường là trường hợp trong XSD, hầu hết các định dạng không thể được biểu diễn một cách dễ dàng với XSD, vì vậy tôi đã lựa chọn để thử một quy tắc biểu thức chính quy:
.{8} | ""
mà cố gắng để chuyển đổi sang XSD tôi gõ:
<xs:simpleType name="DateFormat">
<xs:restriction base="xs:string">
<xs:pattern value=".{8}|''" />
</xs:restriction>
</xs:simpleType>
Nhưng nó đã không làm việc:
''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'
tôi cũng đã cố gắng
<xs:pattern value="[0-9]{8}|''" />
<xs:pattern value="([0-9]{8})|('')" />
<xs:pattern value="(\d{8})|('')" />
Can điều bất cứ ai khác trong một mô hình giải quyết vấn đề phù hợp với một trong hai - một số mô hình cụ thể - trống
Bonus: thể bất kỳ ai trỏ đến địa điểm ở the XSD documentation cho biết rằng \d
là chữ số phù hợp? Hoặc các mã mẫu đặc biệt khác là gì?
Tôi nghĩ rằng '\ d {8}? 'Nên hoạt động. '?' có nghĩa là bất cứ điều gì trước khi nó là tùy chọn. –