Dates in XML
Toby Speight
tms at ansa.co.uk
Thu Jul 9 11:37:04 BST 1998
Andrew> Andrew Layman <URL:mailto:andrewl at microsoft.com>
=> In article
=> <5BF896CAFE8DD111812400805F1991F7038CA586 at red-msg-08.dns.microsoft.com>,
=> Andrew wrote:
Andrew> Regarding the difficulty of writing a parser for arbitrary date formats, we
Andrew> propose using only one date format, specifically a profile of ISO 8601.
Andrew> This greatly aids interoperability.
In one document type of my own, I use IS-8601 for dates, using the
"yyyy-mm-dd" profile; dd and possibly also mm may be omitted for
reduced precision.
Andrew> Andrew Layman <andrewl at microsoft.com> wrote (in part):
Andrew>
Andrew> One thing I notice in the example shown below is that the
Andrew> element contains the date twice, once in an easily-parsed
Andrew> form, once in what appears to be a display form. I would
Andrew> hope that the parsable form is all that is needed, with an
Andrew> application able to produce the appropriate display when
Andrew> needed.
Andrew>
Andrew> <some-date-element type="ISO 8601" value="19980708">July
Andrew> 8, 1998</some-date-value>
Andrew>
Andrew> While it is easy for an application (written in a
Andrew> Turing-complete language) to go from a canonical date
Andrew> representation to some (presumably localized) pretty-printed
Andrew> version, it is not clear to me how you would do this with the
Andrew> standard *ML style sheet mechanisms (either CSS or XSL).
Perhaps you could port the DSSSL code from the stylesheet I use with
the XML I mentioned earlier (CSS isn't expressive enough; I don't know
enough about XSL):
;; given a date string of the form "yyyy[-mm[-dd]]", return an
;; English-local string "[[dd ]Month ]yyyy"
(define (PRETTY-DATE x)
(if (not (string? x))
(node-list-error (string-append "Bad or missing date attribute") (current-node))
(let ((year (cond ((< (string-length x) 4)
(node-list-error (string-append "Bad date (YYYY): \"" x "\"") (current-node)))
(#t (substring x 0 4))))
(month (cond ((< (string-length x) 5)
"--")
((not (char=? #\- (string-ref x 4)))
(node-list-error (string-append "Bad date (YYYY-): \"" x "\"") (current-node)))
((< (string-length x) 7)
(node-list-error (string-append "Bad date (YYYY-MM): \"" x "\"") (current-node)))
(#t (substring x 5 7))))
(day (cond ((< (string-length x) 8)
"--")
((not (char=? #\- (string-ref x 7)))
(node-list-error (string-append "Bad date (YYYY-MM-): \"" x "\"") (current-node)))
((< (string-length x) 10)
(node-list-error (string-append "Bad date (YYYY-MM-DD): \"" x "\"") (current-node)))
(#t (substring x 8 10)))))
(string-append
(case day
(("--") "")
(else (string-append (number->string (string->number day)) " ")))
(case month
(("--") "")
(("01") "January ") (("02") "February ") (("03") "March " ) (("04") "April ")
(("05") "May ") (("06") "June ") (("07") "July ") (("08") "August ")
(("09") "September ") (("10") "October ") (("11") "November ") (("12") "December ")
(else (node-list-error (string-append "Bad month: \"" month "\"") (current-node))))
year))))
Andrew> The benefit of the sample syntax is that the element content
Andrew> would be apparent, for example, to any HTML browser that
Andrew> latched on to it and which followed the rule that unknown
Andrew> tags are ignored, but their contents are processed.
Another advantage is that one may specify the date/time using
completely arbitrary natural language, eg
<!ATTLIST date
date CDATA #REQUIRED
type NMTOKEN "IS-8601">
<date date="1999-04-02">Good Friday</date>
OTOH, there's the disadvantage that there's nothing to stop people
using ambiguous formats such as 2/4/99 in the free text (though you
might be able to catch some of these automatically).
--
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)
More information about the Xml-dev
mailing list