I am defining an XSD. I need to define an element which takes date in format yyyymmdd. How can I define a restriction in XSD to only accept this format?
Asked
Active
Viewed 3.1k times
2 Answers
14
You could always define it as a restricted simple type based on a string, restricted by a regular expression:
<xs:simpleType name="FormattedDateType">
<xs:restriction base="xs:string">
<xs:pattern value="\d{8}"/>
</xs:restriction>
</xs:simpleType>
If you want to get really smart, you can tweak the regular expression to be even more of a match for a date (e.g. contains the info that month can only be 01 - 12 and so forth):
<xs:simpleType name="FormattedDateType">
<xs:restriction base="xs:string">
<xs:pattern value="\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])"/>
</xs:restriction>
</xs:simpleType>
Marc

marc_s
- 732,580
- 175
- 1,330
- 1,459
-
Marc I knew this expression but I thought its not the right way. I thought I need to extend xs:date and override the format. – Bhushan Bhangale Jun 26 '09 at 09:04
-
Quite honestly, I never thought of restricting xs:date or xs:dateTime, and setting a pattern - not sure if it'll work - give it a try! – marc_s Jun 26 '09 at 10:23
-
3You can't extend a simple type (not via xs:extension) and you can't restrict something to be not valid as part of the base. A 'yyyymmdd' formatted date is not a valid xs:date (it requires the 'yyyy-mm-dd' format) so you need something like marc_s' solution – Nic Gibson Jun 26 '09 at 10:24
-
Shouldn't be a problem though. You can just use an adapter to get the actual stringly-typed date value in your app. – Cheeso Jun 29 '09 at 20:37
-2
If you want the format of MM/DD/YYYY in xml then this code can help you for this format
<xs:element name="StartDate">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{2}[/]\d{2}[/]\d{4}"/>
<xs:length value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Sunil
- 482
- 6
- 12
-
-
@SamirVasani, I didn't think XML schemas supported anchor elements like ^ and $ when pattern matching. Have you tested your suggestion? – Richard A Oct 03 '17 at 01:17
-
1Careful when using this expression since it allows invalid dates like 98/76/4321 – Chalkos Feb 06 '18 at 16:08