W3C home > Mailing lists > Public > xmlschema-dev@w3.org > February 2003

Re: custom date type in xml schema

From: Paul Warren <pdw@decisionsoft.com>
Date: 06 Feb 2003 10:49:40 +0000
To: Jeni Tennison <jeni@jenitennison.com>
Cc: Hanna <lhnhanna@hotmail.com>, xmlschema-dev@w3.org
Message-Id: <1044528580.24236.127.camel@tobol.dsl.local>

On Thu, 2003-02-06 at 10:15, Jeni Tennison wrote:

> <xs:simpleType name="mydatetype">
>   <xs:restriction base="xs:token">
>     <xs:pattern value="[0-9]{2}-[0-9]{2}-[0-9]{4}" />
>   </xs:restriction>
> </xs:simpleType>
> Note that this doesn't test things like:
>   - that the days range between 01 and 31 and the months between 01
>     and 12
>   - that the day that you have given for a month is valid (so you
>     don't allow 31-04-2002)
>   - that the day that you have given for February is valid, taking
>     into account leap years (so you don't allow 29-02-2003, but do
>     allow 29-02-2004)
> You can't test all that with a regular expression, so if you want to
> enforce valid dates you'll need to write some extra checking code.

I'm being tedious, but you can:



That uses some Perl-isms (the "(?:" notation)) which I don't think are
allowed in XML Schema, but simple brackets should do.  IIRC it does
dates of the format YYYYMMDD, but it should be possible to re-jig it to
other formats.  If you think that's bad, have a look at what it takes to
do email addresses [1].

Getting back to the original question, my preferred solution would be to
use the standard XML Schema type and transform upon serialisation /
deserialisation, although I appreciate that this is not answering the
question asked.  This solution allows you to make use of the date
validation code built into schema validating parsers.

[1] http://www.ex-parrot.com//~pdw/Mail-RFC822-Address.html
Paul Warren, Client Services           DecisionSoft Limited
+44-1865-203192                        http://www.decisionsoft.com
Received on Thursday, 6 February 2003 05:49:44 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 23:15:09 UTC