- From: Steven Pemberton <steven.pemberton@cwi.nl>
- Date: Tue, 25 Nov 2025 21:19:47 +0000
- To: ixml <public-ixml@w3.org>
As a follow on from the ambiguity discussion, here is how to accept dates,
and report them as either us, international, or ambiguous:
dates: (date, -#a)*.
-date: us; int; ambi.
us: month, -"/", day, -"/", year.
int: day, -"/", month, -"/", year.
ambi: monthday, -"/", monthday, -"/", year.
monthday: -month.
day: "1", ["3"-"9"]; "2", ["0"-"9"]; "3", ["0"-"1"].
month: "0"?, ["1"-"9"]; "1", ["0"-"2"].
year: d, d, d, d.
-d: ["0"-"9"].
This reports
<int>
<day>31</day>
<month>12</month>
<year>1999</year>
</int>
<us>
<month>12</month>
<day>31</day>
<year>1999</year>
</us>
<ambi>
<monthday>11</monthday>
<monthday>12</monthday>
<year>2025</year>
</ambi>
If you object to the fact that it reports 11/11/2025 as ambiguous, then
strap yourself in:
dates: (date, -#a)*.
-date: us; int; ambi.
us: month, -"/", day, -"/", year.
int: day, "/", month, "/", year;
d1, -"/", m1, -"/",year;
d2, -"/", m2, -"/",year;
d3, -"/", m3, -"/",year;
d4, -"/", m4, -"/",year;
d5, -"/", m5, -"/",year;
d6, -"/", m6, -"/",year;
d7, -"/", m7, -"/",year;
d8, -"/", m8, -"/",year;
d9, -"/", m9, -"/",year;
d10, -"/", m10, -"/",year;
d11, -"/", m11, -"/",year;
d12, -"/", m12, -"/",year.
d1>day: "0"?, "1".
d2>day: "0"?, "2".
d3>day: "0"?, "3".
d4>day: "0"?, "4".
d5>day: "0"?, "5".
d6>day: "0"?, "6".
d7>day: "0"?, "7".
d8>day: "0"?, "8".
d9>day: "0"?, "9".
d10>day: "10".
d11>day: "11".
d12>day: "12".
m1>month: "0"?, "1".
m2>month: "0"?, "2".
m3>month: "0"?, "3".
m4>month: "0"?, "4".
m5>month: "0"?, "5".
m6>month: "0"?, "6".
m7>month: "0"?, "7".
m8>month: "0"?, "8".
m9>month: "0"?, "9".
m10>month: "10".
m11>month: "11".
m12>month: "12".
ambi: dm1, -"/", md1, -"/", year;
dm2, -"/", md2, -"/", year;
dm3, -"/", md3, -"/", year;
dm4, -"/", md4, -"/", year;
dm5, -"/", md5, -"/", year;
dm6, -"/", md6, -"/", year;
dm7, -"/", md7, -"/", year;
dm8, -"/", md8, -"/", year;
dm9, -"/", md9, -"/", year;
dm10, -"/", md10, -"/", year;
dm11, -"/", md11, -"/", year;
dm12, -"/", md12, -"/", year.
dm1>daymonth: "0"?, "1".
dm2>daymonth: "0"?, "2".
dm3>daymonth: "0"?, "3".
dm4>daymonth: "0"?, "4".
dm5>daymonth: "0"?, "5".
dm6>daymonth: "0"?, "6".
dm7>daymonth: "0"?, "7".
dm8>daymonth: "0"?, "8".
dm9>daymonth: "0"?, "9".
dm10>daymonth: "10".
dm11>daymonth: "11".
dm12>daymonth: "12".
md1>daymonth: "0"?, ["23456789"]; "1", ["012"].
md2>daymonth: "0"?, ["13456789"]; "1", ["012"].
md3>daymonth: "0"?, ["12456789"]; "1", ["012"].
md4>daymonth: "0"?, ["12356789"]; "1", ["012"].
md5>daymonth: "0"?, ["12346789"]; "1", ["012"].
md6>daymonth: "0"?, ["12345789"]; "1", ["012"].
md7>daymonth: "0"?, ["12345689"]; "1", ["012"].
md8>daymonth: "0"?, ["12345679"]; "1", ["012"].
md9>daymonth: "0"?, ["12345678"]; "1", ["012"].
md10>daymonth: "0"?, ["123456789"]; "1", ["12"].
md11>daymonth: "0"?, ["123456789"]; "1", ["02"].
md12>daymonth: "0"?, ["123456789"]; "1", ["01"].
day: "1", ["3"-"9"]; "2", ["0"-"9"]; "3", ["0"-"1"].
month: "0"?, ["1"-"9"]; "1", ["0"-"2"].
year: d, d, d, d.
-d: ["0"-"9"].
which produces
<int>
<day>11</day>
<month>11</month>
<year>2025</year>
</int>
<ambi>
<daymonth>11</daymonth>
<daymonth>12</daymonth>
<year>2025</year>
</ambi>
<us>
<month>11</month>
<day>13</day>
<year>2025</year>
</us>
Steven
Received on Tuesday, 25 November 2025 21:19:54 UTC