[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Dates in XML

  • From: Toby Speight <tms@a...>
  • To: "XML developers' list" <xml-dev@i...>
  • Date: 09 Jul 1998 10:38:03 +0100

dates in xml
Andrew> Andrew Layman <URL:mailto:andrewl@m...>

=> In article
=> <5BF896CAFE8DD111812400805F1991F7038CA586@r...>,
=> 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@m...> 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@i...
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo@i... the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo@i... the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa@i...)


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.