diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 | 
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 | 
| commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
| tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7529.txt | |
| parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) | |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7529.txt')
| -rw-r--r-- | doc/rfc/rfc7529.txt | 1179 | 
1 files changed, 1179 insertions, 0 deletions
diff --git a/doc/rfc/rfc7529.txt b/doc/rfc/rfc7529.txt new file mode 100644 index 0000000..a54aa35 --- /dev/null +++ b/doc/rfc/rfc7529.txt @@ -0,0 +1,1179 @@ + + + + + + +Internet Engineering Task Force (IETF)                          C. Daboo +Request for Comments: 7529                                    Apple Inc. +Updates: 5545, 6321, 7265                                    G. Yakushev +Category: Standards Track                                    Google Inc. +ISSN: 2070-1721                                                 May 2015 + + +     Non-Gregorian Recurrence Rules in the Internet Calendaring and +            Scheduling Core Object Specification (iCalendar) + +Abstract + +   This document defines extensions to the Internet Calendaring and +   Scheduling Core Object Specification (iCalendar) (RFC 5545) to +   support use of non-Gregorian recurrence rules.  It also defines how +   Calendaring Extensions to WebDAV (CalDAV) (RFC 4791) servers and +   clients can be extended to support these new recurrence rules. + +Status of This Memo + +   This is an Internet Standards Track document. + +   This document is a product of the Internet Engineering Task Force +   (IETF).  It represents the consensus of the IETF community.  It has +   received public review and has been approved for publication by the +   Internet Engineering Steering Group (IESG).  Further information on +   Internet Standards is available in Section 2 of RFC 5741. + +   Information about the current status of this document, any errata, +   and how to provide feedback on it may be obtained at +   http://www.rfc-editor.org/info/rfc7529. + +Copyright Notice + +   Copyright (c) 2015 IETF Trust and the persons identified as the +   document authors.  All rights reserved. + +   This document is subject to BCP 78 and the IETF Trust's Legal +   Provisions Relating to IETF Documents +   (http://trustee.ietf.org/license-info) in effect on the date of +   publication of this document.  Please review these documents +   carefully, as they describe your rights and restrictions with respect +   to this document.  Code Components extracted from this document must +   include Simplified BSD License text as described in Section 4.e of +   the Trust Legal Provisions and are provided without warranty as +   described in the Simplified BSD License. + + + + + +Daboo & Yakushev             Standards Track                    [Page 1] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +Table of Contents + +   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2 +   2.  Conventions Used in This Document . . . . . . . . . . . . . .   3 +   3.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   4 +   4.  Extended RRULE Property . . . . . . . . . . . . . . . . . . .   6 +     4.1.  Skipping Invalid Dates  . . . . . . . . . . . . . . . . .   6 +     4.2.  Handling Leap Months  . . . . . . . . . . . . . . . . . .   9 +     4.3.  Examples  . . . . . . . . . . . . . . . . . . . . . . . .  10 +   5.  Registering Calendar Systems  . . . . . . . . . . . . . . . .  13 +   6.  Compatibility . . . . . . . . . . . . . . . . . . . . . . . .  13 +   7.  Use with iTIP . . . . . . . . . . . . . . . . . . . . . . . .  14 +   8.  Use with xCal . . . . . . . . . . . . . . . . . . . . . . . .  15 +   9.  Use with jCal . . . . . . . . . . . . . . . . . . . . . . . .  15 +   10. Use with CalDAV . . . . . . . . . . . . . . . . . . . . . . .  16 +     10.1.  CALDAV:supported-rscale-set Property . . . . . . . . . .  17 +   11. Security Considerations . . . . . . . . . . . . . . . . . . .  18 +   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  18 +     12.1.  Normative References . . . . . . . . . . . . . . . . . .  18 +     12.2.  Informative References . . . . . . . . . . . . . . . . .  19 +   Appendix A.  xCal RELAX NG Schema Update  . . . . . . . . . . . .  20 +   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  21 +   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  21 + +1.  Introduction + +   The iCalendar [RFC5545] data format is in widespread use to represent +   calendar data.  iCalendar represents dates and times using the +   Gregorian calendar system only.  It does provide a way to use non- +   Gregorian calendar systems via a "CALSCALE" property, but this has +   never been used.  However, there is a need to support at least non- +   Gregorian recurrence patterns to cover anniversaries, and many local, +   religious, or civil holidays based on non-Gregorian dates. + +   There are several disadvantages to using the existing "CALSCALE" +   property in iCalendar for implementing non-Gregorian calendars: + +   1.  The "CALSCALE" property exists in the top-level "VCALENDAR" +       objects and thus applies to all components within that object. +       In today's multi-cultural society, that restricts the ability to +       mix events from different calendar systems within the same +       iCalendar object, e.g., it would prevent having both the +       Gregorian New Year and Chinese New Year in the same iCalendar +       object. + +   2.  Time zone and daylight saving time rules are typically published +       using Gregorian calendar dates and rules (e.g., "the 3rd Sunday +       in March") and are thus converted to iCalendar "VTIMEZONE" + + + +Daboo & Yakushev             Standards Track                    [Page 2] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +       components using Gregorian dates and recurrence rules.  This +       results in the problem whereby one component (the "VTIMEZONE") is +       fixed to the Gregorian calendar system, and another (a "VEVENT") +       wants to use a different non-Gregorian calendar scale; thus, the +       single top-level "CALSCALE" property is again inadequate. + +   This specification solves these issues by allowing the "CALSCALE" to +   remain set to Gregorian but redefining the "RRULE" recurrence rule +   property to accept new items, including one that allows non-Gregorian +   calendar systems to be used.  With this, all the "DATE", "DATE-TIME", +   and "PERIOD" values in the iCalendar object would remain specified +   using the Gregorian calendar system, but repeating patterns in other +   calendar systems could be defined.  It is then up to calendar user +   agents and servers to map between Gregorian and non-Gregorian +   calendar systems in order to expand out recurrence instances.  The +   non-Gregorian recurrence rules can be used in any iCalendar component +   that allows the "RRULE" property to be specified, including +   "VTIMEZONE" components (to allow for possible future use of non- +   Gregorian rules in published daylight saving time data). + +   This specification does not itself define calendar systems; rather, +   it utilizes the calendar system registry defined by the Unicode +   Consortium in their Common Locale Data Repository (CLDR) project +   [UNICODE.CLDR], as implemented in the Unicode (International +   Components for Unicode (ICU)) Library [UNICODE.ICU]. + +   This specification makes the following updates: + +      It updates iCalendar [RFC5545], the XML format for iCalendar +      (xCal) [RFC6321], and the JSON format for iCalendar (jCal) +      [RFC7265], to extend the "RRULE" property definition. + +      It clarifies use of the iCalendar Transport-Independent +      Interoperability Protocol (iTIP) [RFC5546] to specify how the +      extended "RRULE" property should be handled in iTIP messages. + +      It extends CalDAV [RFC4791] to specify how the extended "RRULE" +      property can be supported by CalDAV servers and clients. + +2.  Conventions Used in This Document + +   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and +   "OPTIONAL" in this document are to be interpreted as described in +   [RFC2119]. + + + + + + +Daboo & Yakushev             Standards Track                    [Page 3] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   The notation used in this memo is the ABNF notation of [RFC5234] as +   used by iCalendar [RFC5545].  Any syntax elements shown below that +   are not explicitly defined in this specification come from iCalendar +   [RFC5545], iTIP [RFC5546], and CalDAV [RFC4791]. + +   When XML element types in the namespaces "DAV:" and +   "urn:ietf:params:xml:ns:caldav" are referenced in this document +   outside of the context of an XML fragment, the string "DAV:" and +   "CALDAV:" will be prefixed to the element type names, respectively. + +   When a Gregorian calendar date is shown in text, it will use the +   format "YYYYMMDD", where "YYYY" is the 4-digit year, "MM" the 2-digit +   month, and "DD" the 2-digit day (this is the same format used in +   iCalendar [RFC5545]).  The Chinese calendar will be used as an +   example of a non-Gregorian calendar for illustrative purposes.  When +   a Chinese calendar date is shown in text, it will use the format +   "{C}YYYYMM[L]DD" -- i.e., the same format as Gregorian but with a +   "{C}" prefix, and an optional "L" character after the month element +   to indicate a leap month.  Similarly, {E} and {H} are used in other +   examples as prefixes for Ethiopic (Amete Mihret) and Hebrew dates, +   respectively.  The "{}" prefix is used for purely illustrative +   purposes and never appears in actual dates used in iCalendar or +   related specifications.  Note that the Chinese calendar years shown +   in the examples are based on the Unicode (ICU) [UNICODE.ICU] +   library's Chinese calendar epoch.  While there are several different +   Chinese calendar epochs in common use, the choice of one over another +   does not impact the actual calculation of the Gregorian equivalent +   dates, provided conversion is always done using the same epoch. + +3.  Overview + +   In the Gregorian calendar system, each year is composed of a fixed +   number of months (12), with each month having a fixed number of days +   (between 30 and 31), except for the second month (February), which +   contains either 28 or 29 days (the latter in a leap year).  Weeks are +   composed of 7 days, with day names Monday, Tuesday, Wednesday, +   Thursday, Friday, Saturday, and Sunday.  Years can have either 365 or +   366 days (the latter in a leap year).  The number of whole weeks in a +   year is 52 (though the [ISO.8601.2004] week numbering scheme used by +   iCalendar [RFC5545] can have a numeric count up to 53). + +   In iCalendar, the "RECUR" value type defines various fields used to +   express a recurrence pattern, and those fields are given limits based +   on those of the Gregorian calendar system.  Since other calendar +   systems can have different limits and other behaviors that need to be +   accounted for, the maximum values for the elements in the "RECUR" +   value are not covered by this specification. + + + + +Daboo & Yakushev             Standards Track                    [Page 4] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   To generate a set of recurring instances in a non-Gregorian calendar +   system, the following principles are used: + +   1.  iCalendar data continues to use the "GREGORIAN" calendar system, +       so all "DATE", "DATE-TIME", and "PERIOD" values continue to use +       the Gregorian format and limits. + +   2.  The "RRULE" property is extended to include an "RSCALE" element +       in its value that specifies the calendar system to use for the +       recurrence pattern.  The existing elements of the "RRULE" value +       type are used, but modified to support different upper limits, +       based on the "RSCALE" value, as well as a modification to month +       numbers to allow a leap month to be specified.  Existing +       requirements for the use of "RRULE" all still apply (e.g., the +       "RRULE" has to match the "DTSTART" value of the master instance). +       Other recurrence properties such as "RECURRENCE-ID", "RDATE", and +       "EXDATE" continue to use the Gregorian date format as "CALSCALE" +       is unchanged. + +   When generating instances, the following procedure might be used: + +   1.  Convert the "DTSTART" property value of the master recurring +       component into the date and time components for the calendar +       system specified by the "RSCALE" element in the "RRULE" value. +       This provides the "seed" value for generating subsequent +       recurrence instances. + +   2.  Iteratively generate instances using the "RRULE" value applied to +       the year, month, and day components of the date in the new +       calendar system. + +   3.  For each generated instance, convert the dates and times back +       from the non-Gregorian form into Gregorian and use those values +       for other properties such as "RECURRENCE-ID". + +   Consider the following example for an event representing the Chinese +   New Year: + +   DTSTART;VALUE=DATE:20130210 +   RRULE:RSCALE=CHINESE;FREQ=YEARLY +   SUMMARY:Chinese New Year + +   To generate instances, first the "DTSTART" value "20130210" is +   converted into the Chinese calendar system giving "{C}46500101". +   Next, the year component is incremented by one to give "{C}46510101", +   and that is then converted back into Gregorian as "20140131". +   Additional instances are generated by iteratively increasing the year +   component in the Chinese date and converting back to Gregorian. + + + +Daboo & Yakushev             Standards Track                    [Page 5] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +4.  Extended RRULE Property + +   This specification extends the existing "RRULE" iCalendar property +   value to include a new "RSCALE" element that can be used to indicate +   the calendar system used for generating the recurrence pattern. + +   When "RSCALE" is present, the other changes to "RRULE" are: + +   1.  Elements that include numeric values (e.g., "BYYEARDAY") have +       numeric ranges defined by the "RSCALE" value (i.e., in some +       calendar systems there might be more than 366 days in a year). + +   2.  Month numbers can include an "L" suffix to indicate that the +       specified month is a leap month in the corresponding calendar +       system (see Section 4.2). + +   3.  A "SKIP" element is added to define how "missing" instances are +       handled (see Section 4.1). + +   The syntax for the "RECUR" value is modified in the following +   fashion: + +   ; recur-rule-part is extended from RFC 5545 +   recur-rule-part =/   ("RSCALE" "=" rscale) +                      / ("SKIP" "=" skip) + +   rscale          = (iana-token  ; A CLDR-registered calendar system +                                  ; name. +                    / x-name)     ; A non-standard, experimental +                                  ; calendar system name. +                                  ; Names are case insensitive, +                                  ; but uppercase values are preferred. + +   skip            = ("OMIT" / "BACKWARD" / "FORWARD") +                    ; Optional, with default value "OMIT", and +                    ; MUST NOT be present unless "RSCALE" is present. + +   monthnum        = 1*2DIGIT  ["L"] +                    ; Existing element modified to include a leap +                    ; month indicator suffix. + +4.1.  Skipping Invalid Dates + +   In every calendar system, only certain combinations of day-of-month +   and month values are valid for a given year, e.g., in the Gregorian +   calendar system, January 31st is valid but February 31st is not. +   Similarly, February 29th is valid in a leap year but invalid in a +   non-leap year.  Other calendar systems can also include leap months + + + +Daboo & Yakushev             Standards Track                    [Page 6] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   (see Section 4.2), which vary from year to year.  This poses a +   problem for recurring events where the frequency of recurrence might +   give rise to an invalid date.  For example, a recurring event that +   starts on January 31st and is set to repeat monthly will generate +   invalid dates for months with fewer than 31 days.  The iCalendar +   [RFC5545] specification requires recurrence rule generators to ignore +   any invalid dates generated when iterating the rule.  However, that +   behavior might be surprising to a calendar user born on a leap day +   and whose birthday event only appears on their calendar every four +   years.  There are common conventions used by humans to determine what +   to do in such cases, but those conventions can differ from calendar +   system to calendar system, as well as within the same calendar +   system, depending on the nature of the event.  Typically, humans will +   expect the "missing" events to be moved to an earlier or later +   (valid) date. + +   This specification introduces a new "RRULE" element, "SKIP", for use +   only when the "RSCALE" element is present.  The "SKIP" element allows +   the calendar user agent to specify new options for handling invalid +   dates. + +      "SKIP=OMIT": this is the default option and corresponds to the +      existing iCalendar behavior of simply ignoring the invalid date. + +      "SKIP=BACKWARD": when this option is set, a date with an invalid +      month is changed to the previous (valid) month.  A date with an +      invalid day-of-month is changed to the previous (valid) +      day-of-month. + +      "SKIP=FORWARD": when this option is set, a date with an invalid +      month is changed to the next (valid) month.  A date with an +      invalid day-of-month is changed to the next (valid) day-of-month. + +   Note that for both "BACKWARD" and "FORWARD", if the month is changed +   and results in an invalid day-of-month, then the skip behavior will +   be reapplied as per the day-of-month rules, according to the +   processing order defined below. + +   The month and day-of-month skip behavior is only applied at specific +   points during the processing of an "RRULE" as determined by the order +   in which any "BYxxx" elements are processed.  The order is as follows +   (based on the "RRULE" element processing order defined in +   Section 3.3.10 of [RFC5545]): + +   o  BYMONTH + +   o  SKIP (for invalid month only) + + + + +Daboo & Yakushev             Standards Track                    [Page 7] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   o  BYWEEKNO + +   o  BYYEARDAY + +   o  BYMONTHDAY + +   o  SKIP (for invalid day) + +   o  BYDAY + +   o  BYHOUR + +   o  BYMINUTE + +   o  BYSECOND + +   o  BYSETPOS + +   o  COUNT + +   o  UNTIL + +   It is often possible to avoid having to deal with invalid dates by +   determining the real intent of a human user, e.g., a human creating a +   monthly recurring event that starts on January 31st likely intends +   the event to occur on the last day of every month, in which case that +   could be encoded into an "RRULE" by using the "BYMONTHDAY=-1" +   element. + +   Only a few types of recurrence patterns are likely to need the use of +   "SKIP".  The following is a list of some situations where it might be +   needed: + +   1.  The start date of the recurrence is a leap day in the specified +       calendar system. + +   2.  The start date of the recurrence is in a leap month in the +       specified calendar system. + +   3.  The start date of the recurrence has a day-of-month value greater +       than the smallest day-of-month value for any month in any year in +       the specified calendar system. + +   4.  A "BYMONTHDAY" element in an "RRULE" has a day-of-month value +       greater than the smallest day-of-month value for any month in any +       year in the specified calendar system. + + + + + +Daboo & Yakushev             Standards Track                    [Page 8] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   5.  A "BYMONTH" element in an "RRULE" has a value corresponding to a +       leap month in the specified calendar system. + +   6.  A combination of a "BYMONTHDAY" element and a "BYMONTH" element +       in an "RRULE" has a value corresponding to a leap day in the +       specified calendar system. + +   7.  A "BYYEARDAY" element in an "RRULE" has an absolute value greater +       than the smallest number of days in any year in the specified +       calendar system. + +   8.  A "BYWEEKNO" element in an "RRULE" has an absolute value greater +       than the smallest number of weeks in any year in the specified +       calendar system. + +   Examples of using "SKIP" for some common use cases appear in +   Section 4.3. + +4.2.  Handling Leap Months + +   Leap months can occur in different calendar systems.  For such +   calendar systems, the following rules are applied for "identifying" +   months: + +   1.  Numeric values 1 through N are used to identify regular, non- +       leap, months (where N is the number of months in a regular, non- +       leap, year). + +   2.  The suffix "L" is added to the regular month number to indicate a +       leap month that follows the regular month, e.g., "5L" is a leap +       month that follows the 5th regular month in the year. + +   Care has to be taken when mapping the month identifiers used here +   with those of any underlying calendar system library being used.  In +   particular, the Hebrew calendar system used by Unicode (ICU) +   [UNICODE.ICU] uses a month number scheme of 1 through 13, with month +   6 being the leap month, and in non-leap years, month 6 is skipped. +   Thus, ICU months 1 through 5 map to iCalendar months 1 through 5, ICU +   month 6 maps to iCalendar month "5L", and ICU months 7 through 13 map +   to iCalendar months 6 through 12. + + + + + + + + + + + +Daboo & Yakushev             Standards Track                    [Page 9] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +4.3.  Examples + +4.3.1.  Chinese New Year + +   Consider the following set of iCalendar properties (from the example +   above): + +   DTSTART;VALUE=DATE:20130210 +   RRULE:RSCALE=CHINESE;FREQ=YEARLY +   SUMMARY:Chinese New Year + +   These define a recurring event for the Chinese New Year, with the +   first instance being the one in Gregorian year 2013. + +   The Chinese date corresponding to the first instance is +   "{C}46500101".  The table below shows the initial instance and the +   next four, each of which is determined by adding the appropriate +   amount to the year component of the Chinese date.  Also shown is the +   conversion back to the Gregorian date: + +                +--------------+--------------------------+ +                | Chinese Date | Gregorian Date           | +                +--------------+--------------------------+ +                | {C}46500101  | 20130210 - DTSTART value | +                | {C}46510101  | 20140131                 | +                | {C}46520101  | 20150219                 | +                | {C}46530101  | 20160208                 | +                | {C}46540101  | 20170128                 | +                +--------------+--------------------------+ + +4.3.2.  Ethiopic 13th Month + +   Consider the following set of iCalendar properties: + +   DTSTART;VALUE=DATE:20130906 +   RRULE:RSCALE=ETHIOPIC;FREQ=MONTHLY;BYMONTH=13 +   SUMMARY:First day of 13th month + +   These define a recurring event for the first day of the 13th month, +   with the first instance being the one in Gregorian year 2013.  While +   there are a number of alternative ways of writing the "RRULE" above +   to achieve the same pattern of recurring dates, the one above was +   chosen to illustrate a "BYMONTH" value exceeding the limit of 12, +   previously described in iCalendar (Section 3.3.10 of [RFC5545]). + + + + + + + +Daboo & Yakushev             Standards Track                   [Page 10] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   The Ethiopic date corresponding to the first instance is +   "{E}20051301".  The table below shows the initial instance and the +   next four, each of which is determined by adding the appropriate +   amount to the year component of the Ethiopic date.  Also shown is the +   conversion back to the Gregorian date: + +               +---------------+--------------------------+ +               | Ethiopic Date | Gregorian Date           | +               +---------------+--------------------------+ +               | {E}20051301   | 20130906 - DTSTART value | +               | {E}20061301   | 20140906                 | +               | {E}20071301   | 20150906                 | +               | {E}20081301   | 20160906                 | +               | {E}20091301   | 20170906                 | +               +---------------+--------------------------+ + +   Note that in this example, the value of the "BYMONTH" component in +   the "RRULE" matches the Ethiopic month value and not the Gregorian +   month. + +4.3.3.  Hebrew Anniversary Starting in a Leap Month + +   Consider the following set of iCalendar properties: + +   DTSTART;VALUE=DATE:20140208 +   RRULE:RSCALE=HEBREW;FREQ=YEARLY;BYMONTH=5L;BYMONTHDAY=8;SKIP=FORWARD +   SUMMARY:Anniversary + +   These define a recurring event for the 8th day of the Hebrew month of +   Adar I (the leap month identified by "5L"), with the first instance +   being the one in Gregorian year 2014. + +   The Hebrew date corresponding to the first instance is +   "{H}577405L08", which is a leap month in year 5774.  The table below +   shows the initial instance and the next four, each of which is +   determined by adding the appropriate amount to the year component of +   the Hebrew date, taking into account that only year 5776 is a leap +   year.  Thus, in other years the Hebrew month component is adjusted +   forward to month 6.  Also shown is the conversion back to the +   Gregorian date: + + + + + + + + + + + +Daboo & Yakushev             Standards Track                   [Page 11] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +                +--------------+--------------------------+ +                | Hebrew Date  | Gregorian Date           | +                +--------------+--------------------------+ +                | {H}577405L08 | 20140208 - DTSTART value | +                | {H}57750608  | 20150227                 | +                | {H}577605L08 | 20160217                 | +                | {H}57770608  | 20170306                 | +                | {H}57780608  | 20180223                 | +                +--------------+--------------------------+ + +4.3.4.  Gregorian Leap Day with SKIP + +   Consider the following set of iCalendar properties: + +   DTSTART;VALUE=DATE:20120229 +   RRULE:FREQ=YEARLY +   SUMMARY:Anniversary + +   These define a recurring event for the 29th of February, 2012, in the +   standard iCalendar calendar scale -- Gregorian.  The standard +   iCalendar behavior is that non-existent dates in a recurrence set are +   ignored.  Thus, the properties above would only generate instances in +   leap years (2016, 2020, etc.), which is likely not what users expect. +   The new "RSCALE" option defined by this specification provides the +   "SKIP" element, which can be used to "fill in" the missing instances +   in an appropriate fashion.  The set of iCalendar properties below +   does that: + +   DTSTART;VALUE=DATE:20120229 +   RRULE:RSCALE=GREGORIAN;FREQ=YEARLY;SKIP=FORWARD +   SUMMARY:Anniversary + +   With these properties, the "missing" instances in non-leap years now +   appear on the 1st of March in those years: + +      +-------------------------------+----------------------------+ +      | Instances (with SKIP=FORWARD) | Instances (without RSCALE) | +      +-------------------------------+----------------------------+ +      | 20120229                      | 20120229 - DTSTART value   | +      | 20130301                      |                            | +      | 20140301                      |                            | +      | 20150301                      |                            | +      | 20160229                      | 20160229                   | +      | 20170301                      |                            | +      +-------------------------------+----------------------------+ + + + + + + +Daboo & Yakushev             Standards Track                   [Page 12] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +5.  Registering Calendar Systems + +   This specification uses the Unicode Consortium's registry of calendar +   systems [UNICODE.CLDR] to define valid values for the "RSCALE" +   element of an "RRULE".  Note that the underscore character "_" is +   never used in CLDR-based calendar system names.  New values can be +   added to this registry following Unicode Consortium rules.  It is +   expected that many implementations of non-Gregorian calendars will +   use software libraries provided by Unicode (ICU) [UNICODE.ICU], and +   hence it makes sense to reuse their registry rather than creating a +   new one.  "RSCALE" values are case insensitive, but uppercase is +   preferred. + +   CLDR supports the use of "alias" values as alternative names for +   specific calendar systems.  These alias values can be used as +   "RSCALE" values and are treated the same as the equivalent CLDR +   calendar system they are an alias for. + +   When using the CLDR data, calendar agents SHOULD take into account +   the "deprecated" value and use the alternative "preferred" calendar +   system.  In particular, the "islamicc" calendar system is considered +   deprecated in favor of the "islamic-civil" calendar system. + +6.  Compatibility + +   For calendar user agents that do not support the "RSCALE" element, or +   do not support the calendar system specified by the "RSCALE" element +   value, the following behaviors are possible when processing iCalendar +   data: + +   1.  The calendar user agent can reject the entire iCalendar object +       within which at least one iCalendar component uses the +       unrecognized "RSCALE" element or element value. + +   2.  The calendar user agent can reject just the iCalendar components +       containing an unrecognized "RSCALE" element or element value. +       Note that any overridden components associated with those +       rejected components MUST also be rejected (i.e., any other +       components with the same "UID" property value as the one with the +       unrecognized "RSCALE" element or element value). + +   3.  The calendar user agent can fall back to a non-recurring behavior +       for the iCalendar component containing the unrecognized "RSCALE" +       element or element value (effectively ignoring the "RRULE" +       property).  However, any overridden components SHOULD be rejected +       as they would represent "orphaned" instances that would seem to +       be out of place. + + + + +Daboo & Yakushev             Standards Track                   [Page 13] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   In general, the best choice for a calendar user agent would be option +   (2) above, as it would be the least disruptive choice.  Note that +   when processing iTIP [RFC5546] messages, the manner of the rejection +   is covered as discussed in the next section. + +7.  Use with iTIP + +   iTIP [RFC5546] defines how iCalendar data can be sent between +   calendar user agents to schedule calendar components between calendar +   users.  It is often not possible to know the capabilities of a +   calendar user agent to which an iTIP message is being sent, but iTIP +   defines fallback behavior in such cases. + +   For calendar user agents that do not support the "RSCALE" element, +   the following can occur when iTIP messages containing an "RSCALE" +   element are received: + +      The receiving calendar user agent can reject the entire iTIP +      message and return an iTIP reply with a "REQUEST-STATUS" property +      set to the "3.1" status code (as per Section 3.6.14 of [RFC5546]). + +      The receiving calendar user agent can fall back to a non-recurring +      behavior for the calendar component (effectively ignoring the +      "RRULE" property) and return an iTIP reply with a "REQUEST-STATUS" +      property set to the "2.3", "2.5", "2.8", or "2.10" status codes +      (as per Sections 3.6.4, 3.6.6, 3.6.9, or 3.6.11, respectively, of +      [RFC5546]). + +   For calendar user agents that support the "RSCALE" element but do not +   support the calendar system specified by the "RSCALE" element value, +   the following can occur: + +      The iTIP message SHOULD be rejected, returning a "REQUEST-STATUS" +      property set to the "3.1" status code (as per Section 3.6.14 of +      [RFC5546]). + +      If the iTIP message is accepted and the calendar component treated +      as non-recurring, an iTIP reply with a "REQUEST-STATUS" property +      set to the "2.8" or "2.10" status codes (as per Sections 3.6.9 or +      3.6.11, respectively, of [RFC5546]) SHOULD be returned. + +   As noted in Section 6, the best choice is to reject the entire iTIP +   message. + + + + + + + + +Daboo & Yakushev             Standards Track                   [Page 14] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +8.  Use with xCal + +   xCal [RFC6321] defines how iCalendar data is represented in XML. +   This specification extends the <recur> XML element in Section 3.6.10 +   of [RFC6321] in the following manner: + +   1.  A new <rscale> XML element is defined as a child element of +       <recur>.  The content of this element MUST be a string whose +       value is the "RSCALE" element value of the "RRULE", with case +       preserved. + +   2.  A new <skip> XML element is defined as a child element of +       <recur>.  The content of this element MUST be a string whose +       value is the "SKIP" element value of the "RRULE", with case +       preserved. + +   3.  The <bymonth> XML element is redefined to support either numeric +       or string values as its content (as per Section 4.2). + +   Extensions to the RELAX NG schema in Appendix A of [RFC6321] are +   defined in Appendix A of this document. + +   Example: the iCalendar "RRULE" property: + +   RRULE:RSCALE=GREGORIAN;FREQ=YEARLY;SKIP=FORWARD + +   would be represented in XML as: + +   <rrule> +     <recur> +       <rscale>GREGORIAN</rscale> +       <freq>YEARLY</freq> +       <skip>FORWARD</skip> +     </recur> +   </rrule> + +9.  Use with jCal + +   jCal [RFC7265] defines how iCalendar data is represented in JSON. +   This specification extends the "recur" JSON object defined in +   Section 3.6.10 of [RFC7265] in the following manner: + +   1.  A new "rscale" child member is defined.  This MUST be a string +       whose value is the "RSCALE" element value of the "RRULE", with +       case preserved. + + + + + + +Daboo & Yakushev             Standards Track                   [Page 15] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   2.  A new "skip" child member is defined.  This MUST be a string +       whose value is the "SKIP" element value of the "RRULE", with case +       preserved. + +   3.  The "bymonth" child member is redefined to support either numeric +       or string values.  If the "BYMONTH" element value is an integer, +       then a numeric JSON value MUST be used.  If the "BYMONTH" element +       value is an integer with the "L" suffix (as per Section 4.2), +       then a JSON string value MUST be used. + +   Example: the iCalendar "RRULE" property: + +   RRULE:RSCALE=GREGORIAN;FREQ=YEARLY;SKIP=FORWARD + +   would be represented in JSON as: + +   [ +     "rrule", +     {}, +     "recur", +     { +       "rscale": "GREGORIAN", +       "freq": "YEARLY", +       "skip": "FORWARD" +     } +   ] + +10.  Use with CalDAV + +   The CalDAV [RFC4791] calendar access protocol allows clients and +   servers to exchange iCalendar data.  In addition, CalDAV clients are +   able to query calendar data stored on the server, including time- +   based queries.  Since an "RSCALE" element value determines the time +   ranges for recurring instances in a calendar component, CalDAV +   servers need to support it to interoperate with clients also using +   the "RSCALE" element. + +   A CalDAV server advertises a CALDAV:supported-rscale-set Web +   Distributed Authoring and Versioning (WebDAV) property on calendar +   home or calendar collections if it supports use of the "RSCALE" +   element as described in this specification.  The server can advertise +   a specific set of supported calendar systems by including one or more +   CALDAV:supported-rscale XML elements within the +   CALDAV:supported-rscale-set XML element.  If no +   CALDAV:supported-rscale XML elements are included in the WebDAV +   property, then clients can try any calendar system value but need to +   be prepared for a failure when attempting to store the calendar data. + + + + +Daboo & Yakushev             Standards Track                   [Page 16] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +   Clients MUST NOT attempt to store iCalendar data containing "RSCALE" +   elements if the CALDAV:supported-rscale-set WebDAV property is not +   advertised by the server. + +   The server SHOULD return an HTTP 403 response with a DAV:error +   element containing a CALDAV:supported-rscale XML element, if a client +   attempts to store iCalendar data with an "RSCALE" element value not +   supported by the server. + +   It is possible for an "RSCALE" value to be present in calendar data +   on the server being accessed by a client that does not support an +   "RSCALE" element or its specified value.  It is expected that +   existing clients, unaware of "RSCALE", will fail gracefully by +   ignoring the calendar component, while still processing other +   calendar data on the server (as per option (2) in Section 6). + +10.1.  CALDAV:supported-rscale-set Property + +   Name:  supported-rscale-set + +   Namespace:  urn:ietf:params:xml:ns:caldav + +   Purpose:  Enumerates the set of supported iCalendar "RSCALE" element +      values supported by the server. + +   Protected:  This property MUST be protected and SHOULD NOT be +      returned by a PROPFIND allprop request (as defined in Section 14.2 +      of [RFC4918]). + +   Description:  See above. + +   Definition: + +   <!ELEMENT supported-rscale-set (supported-rscale*)> +   <!ELEMENT supported-rscale (#PCDATA)> +   <!-- PCDATA value: string - case insensitive but +        uppercase preferred --> + +   Example: + +   <C:supported-rscale-set +        xmlns:C="urn:ietf:params:xml:ns:caldav"> +     <C:supported-rscale>GREGORIAN</C:supported-rscale> +     <C:supported-rscale>CHINESE</C:supported-rscale> +     <C:supported-rscale>ISLAMIC-CIVIL</C:supported-rscale> +     <C:supported-rscale>HEBREW</C:supported-rscale> +     <C:supported-rscale>ETHIOPIC</C:supported-rscale> +   </C:supported-rscale-set> + + + +Daboo & Yakushev             Standards Track                   [Page 17] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +11.  Security Considerations + +   This specification does not introduce any additional security +   concerns beyond those described in [RFC5545], [RFC5546], and +   [RFC4791]. + +12.  References + +12.1.  Normative References + +   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate +              Requirement Levels", BCP 14, RFC 2119, March 1997, +              <http://www.rfc-editor.org/info/rfc2119>. + +   [RFC4791]  Daboo, C., Desruisseaux, B., and L. Dusseault, +              "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, +              March 2007, <http://www.rfc-editor.org/info/rfc4791>. + +   [RFC4918]  Dusseault, L., Ed., "HTTP Extensions for Web Distributed +              Authoring and Versioning (WebDAV)", RFC 4918, June 2007, +              <http://www.rfc-editor.org/info/rfc4918>. + +   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax +              Specifications: ABNF", STD 68, RFC 5234, January 2008, +              <http://www.rfc-editor.org/info/rfc5234>. + +   [RFC5545]  Desruisseaux, B., Ed., "Internet Calendaring and +              Scheduling Core Object Specification (iCalendar)", RFC +              5545, September 2009, +              <http://www.rfc-editor.org/info/rfc5545>. + +   [RFC5546]  Daboo, C., Ed., "iCalendar Transport-Independent +              Interoperability Protocol (iTIP)", RFC 5546, December +              2009, <http://www.rfc-editor.org/info/rfc5546>. + +   [RFC6321]  Daboo, C., Douglass, M., and S. Lees, "xCal: The XML +              Format for iCalendar", RFC 6321, August 2011, +              <http://www.rfc-editor.org/info/rfc6321>. + +   [RFC7265]  Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON +              Format for iCalendar", RFC 7265, May 2014, +              <http://www.rfc-editor.org/info/rfc7265>. + +   [UNICODE.CLDR] +              The Unicode Consortium, "CLDR calendar.xml Data", Unicode +              Consortium CLDR, +              <http://www.unicode.org/repos/cldr/tags/latest/common/ +              bcp47/calendar.xml>. + + + +Daboo & Yakushev             Standards Track                   [Page 18] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +12.2.  Informative References + +   [ISO.8601.2004] +              International Organization for Standardization, "Data +              elements and interchange formats - Information interchange +              - Representation of dates and times", ISO Standard 8601, +              December 2004. + +   [UNICODE.ICU] +              "International Components for Unicode", April 2014, +              <http://site.icu-project.org>. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Daboo & Yakushev             Standards Track                   [Page 19] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +Appendix A.  xCal RELAX NG Schema Update + +   The following changes are made to the RELAX NG schema defined in +   Appendix A of [RFC6321]. + +   # 3.3.10 RECUR +   # This extension adds type-rscale and type-skip, +   # and modifies type-bymonth + +   value-recur = element recur { +       type-rscale?, +       type-freq, +       (type-until | type-count)?, +       element interval { +           xsd:positiveInteger +       }?, +       type-bysecond*, +       type-byminute*, +       type-byhour*, +       type-byday*, +       type-bymonthday*, +       type-byyearday*, +       type-byweekno*, +       type-bymonth*, +       type-bysetpos*, +       element wkst { type-weekday }?, +       type-skip? +   } + + +   type-rscale = element rscale { +       xsd:string +   } + +   type-bymonth = element bymonth { +       xsd:positiveInteger | +       xsd:string +   } + +   type-skip = element skip { +       "OMIT" | +       "BACKWARD" | +       "FORWARD" +   } + + + + + + + +Daboo & Yakushev             Standards Track                   [Page 20] + +RFC 7529               iCalendar RSCALE Extension               May 2015 + + +Acknowledgments + +   Thanks to the following for feedback: Mark Davis, Mike Douglass, +   Donald Eastlake, Peter Edberg, Marten Gajda, Philipp Kewisch, Barry +   Leiba, Jonathan Lennox, Ken Murchison, Arnaud Quillaud, Dave Thewlis, +   and Umaoka Yoshito. + +   This specification originated from work at the Calendaring and +   Scheduling Consortium, which has helped with the development and +   testing of implementations. + +Authors' Addresses + +   Cyrus Daboo +   Apple Inc. +   1 Infinite Loop +   Cupertino, CA  95014 +   United States + +   EMail: cyrus@daboo.name +   URI:   http://www.apple.com/ + + +   Gregory Yakushev +   Google Inc. +   Brandschenkestrasse 100 +   8002 Zurich +   Switzerland + +   EMail: gyakushev@yahoo.com +   URI:   http://www.google.com/ + + + + + + + + + + + + + + + + + + + + +Daboo & Yakushev             Standards Track                   [Page 21] +  |