[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[VCARDDAV] Coding for timezone values using tzid (was I-D Action:draft-ietf-vcarddav-vcardrev-07.txt)



I would like to strongly suggest that the TZ property be defined to use values from the tz database, i.e.

[TZDB] Eggert, P. and A. Olson, "Sources for Time Zone and Daylight Saving Time Data", <http://www.twinsun.com/tz/tz-link.htm>, updated periodically.

This was discussed at IETF 74, and the main objection seemed to be worry that the tz database may disappear. There was also discussion of creating an IANA registry and a draft is available.

The tz database is already the de-facto standard, it is in the public-domain and the information is widely replicated; the notion that it could actually “disappear” is absurd. The concern is probably really over other things that could happen, including:
- The tz database may no longer be published at twinsun.com / nih.gov.
- The tz database could stop being updated (or be insufficiently updated).
- Multiple derived implementations (forks) could arise.
- Endpoints could be using different versions of the database.

If situations 1 or 2 occur, the database doesn’t disappear, it just stops being updated (it will still exist in the public domain and be widely available on the Internet, in many unix implementations, etc). Because it is so widely used, it is almost certain that if this ever did occur that at least one derivative would arise. At that point would also be an appropriate time for whoever takes it over to create it as an IANA registry (or under some other standards body).

What could happen if it stops being updated (which I think is unlikely; the tz database has already existed longer than vCard I think) is that in the meanwhile individual implementations could start to diverge, and there is even the possibility that multiple forks arise (multiple standards bodies take it over). This situation however is not really different than the normal situation where implementations simply use different versions of the database, it has been individually modified, or is only partially supported (e.g. a mobile device may only recognize a limited subset).

These problems are not really solved by moving it into a IANA registry – implementations could still use different versions of the registry. In fact creating an IANA registry whilst the main tz database is still healthy and strong, whilst well intentioned, could actually be counter-productive – a lot of effort keeping things in sync to achieve no real benefit over simply using tz database directly … and if they aren’t in sync you *cause* problem 3.

So, the focus should be on solving the real problem of handling unrecognised values, e.g. if using different versions of the database. The first thought may be to add a “version” attribute, but this is only of limited use.

e.g. If you used version 2009h, but I have updated to version 2009i (or the other way around), what can really be done about it? Even if I did have the historic version available, the newer one could very well have corrections in it (which I should probably be using anyway).

This also doesn’t solve the problem of what happens if you say version 2009h, and I have something called 2009h, but the value you specify still doesn’t exist in my copy.

So, really what it boils down to is how to handle unrecognized values.

The first point is we should specify to use the tz database for specifying timezones so that in most cases both sides have the best chance to understand what is meant. For this purpose the tz database is stable enough for future use, even if it never ever gets updated ever again, the historic 2009i version (i.e. current version) is going to be easily sufficient for the majority of cases. The current database has several hundred values that could be used, each well enough defined for both sides to usually understand what is meant. (The actual rules will surely change in the next 10 years, but the vCard standard isn’t concerned so much with the rules but with consistent identifiers.)

To handle unrecognized values (say a mobile device with only a limited number of timezones), one option is to handle all unrecognized values in some default manner, e.g. the same way you would handle if the property is missing altogether.

Another way would be to make the field structured text and allow both a TZID and, for fallback purposes, an offset as at the time specified in REV.
e.g.
TZ:Australia/Sydney;+10:00
REV:20090612T102345Z

If you do allow offset, then it needs to be defined "as at a particular time", e.g. defined as at the REV time of the vCard. (This means you don't need to change the card when DST changes unless you also change the REV time; alternatively if you do update the offset you would need to change the REV time as well).

Note that the tz database is already used in other standards, so if you aren't happy with referencing it directly, you could, for example, reference the subset in Unicode Technical Standard #35 (UTS35) - Local Data Markup Language (LDML). Note that Unicode/LDML recognised the issue of wanting stable identifiers when the tz database may change, so they define a paricular limited subset and alias/mapping to those canonical values. (This, of course, involves additional processing and so may not be desireable). UTS35 LDML also includes a mapping from Microsoft Windows timezone names to the canonical TZIDs.

[UTS35] Davis, M., "Unicode Locale Data Markup Language (LDML)", Unicode Technical Standard #35, version 1.7, May 2007.

Another possibility is that the tz database is already referenced in RFC 4833 (DHCPv4), and a data type for the field (in DHCP) is registered with IANA (just the field definition, not the values itself). This means that vCard could simply refer to the field as "a value as defined for the DHCPv4 IPv4 option code 100", or "a value defined for the DHCPv4 IPv6 option OPTION_NEW_TZDB_TIMEZONE(42)".

[RFC4833] Lear, E., and P. Eggert, "Timezone Options for DHCP", RFC 4833, April 2007.

I think it is simplest to just directly refer to the tz database as the de-facto standard for this value (unless someone disagrees that it is a de-facto standard). Having the first value in the field being “a value from the tz database” (effectively the same as DHCPv4 RFC 4833 refers to it) has no practical difference from it being a value from an IANA registry “which we promise to keep up to date with the TZ database”.

Implementers will still go to the TZ database for their implementation of actual rules, and still have exactly the same problems of unrecognized values or different versions of the database. In fact, putting the IANA registry into the mix could increase problems (increase potential mismatch).

If you still want to publish something via the IETF, then maybe a Best Current Practice note or an Informational note (referring to using the TZ database) might be more appropriate than creating an IANA registry via RFC – support for it being a BCP could be that it is widely deployed in existing (unix) systems as the way to refer to timezones, and in fact already referenced by RFCs and other standards such as Unicode.

In this case, vCard should probably still refer to the tz database as the primary normative reference, and make any draft BCP purely informational (to avoid depending on it).

Sly Gryphon