[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] 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] |
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|