On 03/02/10 15:26, Syd Bauman wrote:
http://www.w3.org/TR/xslt20/#format-date defines
format-dateTime( $value as xs:dateTime?,
$picture as xs:string,
$language as xs:string?,
$calendar as xs:string?,
$country as xs:string?) as xs:string?
The picture string is fairly regular.
Has anyone produced a relaxng expression which captures it please?
I hadn't, but just took a crack at it. I think
xsd:token { pattern =
"(([^\[\]]|\[\[|\]\])+|\[[YMDdFWwHhPmsfZzCE](((\p{Nd}|\p{Nl}|\p{No}|\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo})+|N|n|Nn)[to]?)?(,([0-9]+|\*)(-[0-9]+|\*)?)?\])+"
}
does the job, (Note xsd:token, not xsd:string, as I wrote this
presuming the string to be matched has already been run through
normalize-space().) Not very well tested. See
http://dev.stg.brown.edu/staff/Syd_Bauman/temp/format-dateTime-picture-validate.tgz.
I took note from John Cowan that comments can be used Syd!
I'm ignoring certain values (simplicity).
So far I've generated
<element name='doc'>
<oneOrMore>
<element name='dateTime'>
<data type='string'>
<param
name='pattern'><!--
Year -->(\[Y(01|0001)?\][^\[]?)<!--
Month -->(\[M(1|01)?\]?[^\[]?)<!--
Day -->(\[D(1|01)?\])?<!--
Hour -->(T\[H[01]{0,2}\]:<!--
Minutes -->\[m(1|01)?\]:<!--
Seconds -->\[s(1|01)?\]\.<!--
decimal seconds -->\[f(1|01|001)?\])?</param>
</data>
</element>
with test data of
<doc>
<dateTime>[Y0001]-[M01]-[D]</dateTime>
<dateTime>[Y](_at_)[M]@[D]</dateTime>
<dateTime>[Y0001]-[M01]-[D1]</dateTime>
<dateTime>[Y]-[M1]-[D1]</dateTime>
<dateTime>[Y]-[M]-[D]T[H]:[m1]:[s].[f]</dateTime>
<dateTime>[Y][M]-[D01]T[H01]:[m01]:[s01].[f001]</dateTime>
<dateTime>[Y][M]-[D01]T[H01]:[m01]:[s01].[f001]</dateTime>
<!-- Errors -->
<dateTime>[Y100][M][D]T[H]:[m]:[s].[f]</dateTime>
<dateTime>[Y][M100][D]T[H]:[m]:[s].[f]</dateTime>
<dateTime>[Y][M][D10]T[H]:[m]:[s].[f]</dateTime>
<dateTime>[Y][M][D10]T[H]:[m10]:[s].[f]</dateTime>
<dateTime>[Y]-[M]-[D01]T[H01]:[m01]:[s0001].[f001]</dateTime>
</doc>
and exclusions of
YWw for 'Two thousand and ten'
MNn for December
Dlo for 31st
DWo for twentieth
Its for a graph X axis, using dates.
As you see, we only need the Y M D H m s parts
which makes it a little easier.
I thought someone may have done it already
Thanks though. Appreciated.
regards
--
Dave Pawson
XSLT XSL-FO FAQ.
http://www.dpawson.co.uk
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--