XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
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:

    <meeting>
        <start>09:00:00</start>
        <end>10:00:00</end>
    </meeting>

Example #2

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

    <conference>
        <start>2011-08-03</start>
        <end>2011-08-06</end>
    </conference>

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:

    <employment>
        <start>1990-10-09</start>
    </employment>

Example #4

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

    <flight>
        <start>2007-07-08T16:00:00+08:00</start>
        <end>2007-07-08T14:00:00-05:00</end>
    </flight>


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:sequence>
            <xs:element name="start">
                <xs:simpleType>
                    <xs:union memberTypes="xs:date xs:time 
                                           xs:dateTime" />
                </xs:simpleType>
            </xs:element>
            <xs:element name="end" minOccurs="0">
                <xs:simpleType>
                    <xs:union memberTypes="xs:date xs:time 
                                           xs:dateTime" />
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
        <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()" />
    </xs:complexType>

Comments welcome.

/Roger


[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