[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
ANN: Portable Data Component -- start/end
- From: "Costello, Roger L." <costello@mitre.org>
- To: "xml-dev@lists.xml.org" <xml-dev@lists.xml.org>
- Date: Sat, 16 Apr 2011 13:04:54 -0400
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]