OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
ANN: Portable Data Component -- start/end

Hi Folks,

There are many examples where the start and end time (date, dateTime) must be recorded:

Example #1

Record the start and end time of a meeting. The meeting starts at 9am and ends at 10am:


Example #2

Record the start and end date of a conference. The conference starts on August 3, 2011 and ends on August 6, 2011:


Example #3

Sometimes there is a start date but no end date. The person started working for a company on October 9, 1990 and is still employed:


Example #4

A person left Beijing at 4pm on Saturday and arrived in New York at 2pm the same day!  


Rule: End Value is Greater Than Start Value

Common among all the examples is that the end value is greater than the start value:

  - The meeting end time is greater than the meeting start time.
  - The conference end date is greater than the conference start date.
  - The flight end date/time, when adjusted for time zone differences, is greater than the flight start date/time.

There is a co-constraint between the value of end and the value of start.

This is an ideal candidate for a portable data component. We can create an XML Schema complexType that declares the start and end elements, and use the new assert element to express the co-constraint:

    <xs:complexType name="start-end-date-time">
            <xs:element name="start">
                    <xs:union memberTypes="xs:date xs:time 
                                           xs:dateTime" />
            <xs:element name="end" minOccurs="0">
                    <xs:union memberTypes="xs:date xs:time 
                                           xs:dateTime" />
        <xs:assert test="
              if (exists(end)) then 
                  if (start castable as xs:dateTime) then
                      xs:dateTime(end) gt xs:dateTime(start)
                  else if (start castable as xs:date) then
                      xs:date(end) gt xs:date(start)
                  else if (start castable as xs:time) then
                      xs:time(end) gt xs:time(start)
                  else true()
              else true()" />

Comments welcome.


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS