Network Working Group                                           C. Daboo
Request for Comments: 4791                                         Apple
Category: Standards Track                                B. Desruisseaux
                                                                  Oracle
                                                            L. Dusseault
                                                             CommerceNet
                                                              March 2007
        
Network Working Group                                           C. Daboo
Request for Comments: 4791                                         Apple
Category: Standards Track                                B. Desruisseaux
                                                                  Oracle
                                                            L. Dusseault
                                                             CommerceNet
                                                              March 2007
        

Calendaring Extensions to WebDAV (CalDAV)

WebDAV(CalDAV)的日历扩展

Status of This Memo

关于下段备忘

This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited.

本文件规定了互联网社区的互联网标准跟踪协议,并要求进行讨论和提出改进建议。有关本协议的标准化状态和状态,请参考当前版本的“互联网官方协议标准”(STD 1)。本备忘录的分发不受限制。

Copyright Notice

版权公告

Copyright (C) The IETF Trust (2007).

版权所有(C)IETF信托基金(2007年)。

Abstract

摘要

This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV.

本文档定义了Web分布式创作和版本控制(WebDAV)协议的扩展,以指定基于iCalendar格式访问、管理和共享日历和日程安排信息的标准方式。本文档定义了CalDAV的“日历访问”功能。

Table of Contents

目录

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  5
     1.1.  Notational Conventions . . . . . . . . . . . . . . . . . .  5
     1.2.  XML Namespaces and Processing  . . . . . . . . . . . . . .  5
     1.3.  Method Preconditions and Postconditions  . . . . . . . . .  6
   2.  Requirements Overview  . . . . . . . . . . . . . . . . . . . .  6
   3.  Calendaring Data Model . . . . . . . . . . . . . . . . . . . .  7
     3.1.  Calendar Server  . . . . . . . . . . . . . . . . . . . . .  7
     3.2.  Recurrence and the Data Model  . . . . . . . . . . . . . .  8
   4.  Calendar Resources . . . . . . . . . . . . . . . . . . . . . .  9
     4.1.  Calendar Object Resources  . . . . . . . . . . . . . . . .  9
     4.2.  Calendar Collection  . . . . . . . . . . . . . . . . . . . 10
   5.  Calendar Access Feature  . . . . . . . . . . . . . . . . . . . 11
     5.1.  Calendar Access Support  . . . . . . . . . . . . . . . . . 11
       5.1.1.  Example: Using OPTIONS for the Discovery of
               Calendar Access Support  . . . . . . . . . . . . . . . 12
     5.2.  Calendar Collection Properties . . . . . . . . . . . . . . 12
       5.2.1.  CALDAV:calendar-description Property . . . . . . . . . 12
       5.2.2.  CALDAV:calendar-timezone Property  . . . . . . . . . . 13
       5.2.3.  CALDAV:supported-calendar-component-set Property . . . 14
       5.2.4.  CALDAV:supported-calendar-data Property  . . . . . . . 15
       5.2.5.  CALDAV:max-resource-size Property  . . . . . . . . . . 16
       5.2.6.  CALDAV:min-date-time Property  . . . . . . . . . . . . 17
       5.2.7.  CALDAV:max-date-time Property  . . . . . . . . . . . . 18
       5.2.8.  CALDAV:max-instances Property  . . . . . . . . . . . . 19
       5.2.9.  CALDAV:max-attendees-per-instance Property . . . . . . 19
       5.2.10. Additional Precondition for PROPPATCH  . . . . . . . . 20
     5.3.  Creating Resources . . . . . . . . . . . . . . . . . . . . 20
       5.3.1.  MKCALENDAR Method  . . . . . . . . . . . . . . . . . . 20
         5.3.1.1.  Status Codes . . . . . . . . . . . . . . . . . . . 22
         5.3.1.2.  Example: Successful MKCALENDAR Request . . . . . . 23
       5.3.2.  Creating Calendar Object Resources . . . . . . . . . . 25
         5.3.2.1.  Additional Preconditions for PUT, COPY, and
                   MOVE . . . . . . . . . . . . . . . . . . . . . . . 26
       5.3.3.  Non-Standard Components, Properties, and Parameters  . 28
       5.3.4.  Calendar Object Resource Entity Tag  . . . . . . . . . 28
   6.  Calendaring Access Control . . . . . . . . . . . . . . . . . . 29
     6.1.  Calendaring Privilege  . . . . . . . . . . . . . . . . . . 29
       6.1.1.  CALDAV:read-free-busy Privilege  . . . . . . . . . . . 29
     6.2.  Additional Principal Property  . . . . . . . . . . . . . . 30
       6.2.1.  CALDAV:calendar-home-set Property  . . . . . . . . . . 30
   7.  Calendaring Reports  . . . . . . . . . . . . . . . . . . . . . 31
     7.1.  REPORT Method  . . . . . . . . . . . . . . . . . . . . . . 31
     7.2.  Ordinary Collections . . . . . . . . . . . . . . . . . . . 31
     7.3.  Date and Floating Time . . . . . . . . . . . . . . . . . . 32
     7.4.  Time Range Filtering . . . . . . . . . . . . . . . . . . . 32
     7.5.  Searching Text: Collations . . . . . . . . . . . . . . . . 33
        
   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  5
     1.1.  Notational Conventions . . . . . . . . . . . . . . . . . .  5
     1.2.  XML Namespaces and Processing  . . . . . . . . . . . . . .  5
     1.3.  Method Preconditions and Postconditions  . . . . . . . . .  6
   2.  Requirements Overview  . . . . . . . . . . . . . . . . . . . .  6
   3.  Calendaring Data Model . . . . . . . . . . . . . . . . . . . .  7
     3.1.  Calendar Server  . . . . . . . . . . . . . . . . . . . . .  7
     3.2.  Recurrence and the Data Model  . . . . . . . . . . . . . .  8
   4.  Calendar Resources . . . . . . . . . . . . . . . . . . . . . .  9
     4.1.  Calendar Object Resources  . . . . . . . . . . . . . . . .  9
     4.2.  Calendar Collection  . . . . . . . . . . . . . . . . . . . 10
   5.  Calendar Access Feature  . . . . . . . . . . . . . . . . . . . 11
     5.1.  Calendar Access Support  . . . . . . . . . . . . . . . . . 11
       5.1.1.  Example: Using OPTIONS for the Discovery of
               Calendar Access Support  . . . . . . . . . . . . . . . 12
     5.2.  Calendar Collection Properties . . . . . . . . . . . . . . 12
       5.2.1.  CALDAV:calendar-description Property . . . . . . . . . 12
       5.2.2.  CALDAV:calendar-timezone Property  . . . . . . . . . . 13
       5.2.3.  CALDAV:supported-calendar-component-set Property . . . 14
       5.2.4.  CALDAV:supported-calendar-data Property  . . . . . . . 15
       5.2.5.  CALDAV:max-resource-size Property  . . . . . . . . . . 16
       5.2.6.  CALDAV:min-date-time Property  . . . . . . . . . . . . 17
       5.2.7.  CALDAV:max-date-time Property  . . . . . . . . . . . . 18
       5.2.8.  CALDAV:max-instances Property  . . . . . . . . . . . . 19
       5.2.9.  CALDAV:max-attendees-per-instance Property . . . . . . 19
       5.2.10. Additional Precondition for PROPPATCH  . . . . . . . . 20
     5.3.  Creating Resources . . . . . . . . . . . . . . . . . . . . 20
       5.3.1.  MKCALENDAR Method  . . . . . . . . . . . . . . . . . . 20
         5.3.1.1.  Status Codes . . . . . . . . . . . . . . . . . . . 22
         5.3.1.2.  Example: Successful MKCALENDAR Request . . . . . . 23
       5.3.2.  Creating Calendar Object Resources . . . . . . . . . . 25
         5.3.2.1.  Additional Preconditions for PUT, COPY, and
                   MOVE . . . . . . . . . . . . . . . . . . . . . . . 26
       5.3.3.  Non-Standard Components, Properties, and Parameters  . 28
       5.3.4.  Calendar Object Resource Entity Tag  . . . . . . . . . 28
   6.  Calendaring Access Control . . . . . . . . . . . . . . . . . . 29
     6.1.  Calendaring Privilege  . . . . . . . . . . . . . . . . . . 29
       6.1.1.  CALDAV:read-free-busy Privilege  . . . . . . . . . . . 29
     6.2.  Additional Principal Property  . . . . . . . . . . . . . . 30
       6.2.1.  CALDAV:calendar-home-set Property  . . . . . . . . . . 30
   7.  Calendaring Reports  . . . . . . . . . . . . . . . . . . . . . 31
     7.1.  REPORT Method  . . . . . . . . . . . . . . . . . . . . . . 31
     7.2.  Ordinary Collections . . . . . . . . . . . . . . . . . . . 31
     7.3.  Date and Floating Time . . . . . . . . . . . . . . . . . . 32
     7.4.  Time Range Filtering . . . . . . . . . . . . . . . . . . . 32
     7.5.  Searching Text: Collations . . . . . . . . . . . . . . . . 33
        
       7.5.1.  CALDAV:supported-collation-set Property  . . . . . . . 34
     7.6.  Partial Retrieval  . . . . . . . . . . . . . . . . . . . . 34
     7.7.  Non-Standard Components, Properties, and Parameters  . . . 35
     7.8.  CALDAV:calendar-query REPORT . . . . . . . . . . . . . . . 36
       7.8.1.  Example: Partial Retrieval of Events by Time Range . . 38
       7.8.2.  Example: Partial Retrieval of Recurring Events . . . . 42
       7.8.3.  Example: Expanded Retrieval of Recurring Events  . . . 45
       7.8.4.  Example: Partial Retrieval of Stored Free Busy
               Components . . . . . . . . . . . . . . . . . . . . . . 48
       7.8.5.  Example: Retrieval of To-Dos by Alarm Time Range . . . 50
       7.8.6.  Example: Retrieval of Event by UID . . . . . . . . . . 51
       7.8.7.  Example: Retrieval of Events by PARTSTAT . . . . . . . 53
       7.8.8.  Example: Retrieval of Events Only  . . . . . . . . . . 55
       7.8.9.  Example: Retrieval of All Pending To-Dos . . . . . . . 59
       7.8.10. Example: Attempt to Query Unsupported Property . . . . 62
     7.9.  CALDAV:calendar-multiget REPORT  . . . . . . . . . . . . . 63
       7.9.1.  Example: Successful CALDAV:calendar-multiget REPORT  . 64
     7.10. CALDAV:free-busy-query REPORT  . . . . . . . . . . . . . . 66
       7.10.1. Example: Successful CALDAV:free-busy-query REPORT  . . 68
   8.  Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . 69
     8.1.  Client-to-Client Interoperability  . . . . . . . . . . . . 69
     8.2.  Synchronization Operations . . . . . . . . . . . . . . . . 69
       8.2.1.  Use of Reports . . . . . . . . . . . . . . . . . . . . 69
         8.2.1.1.  Restrict the Time Range  . . . . . . . . . . . . . 69
         8.2.1.2.  Synchronize by Time Range  . . . . . . . . . . . . 70
         8.2.1.3.  Synchronization Process  . . . . . . . . . . . . . 70
       8.2.2.  Restrict the Properties Returned . . . . . . . . . . . 72
     8.3.  Use of Locking . . . . . . . . . . . . . . . . . . . . . . 72
     8.4.  Finding Calendars  . . . . . . . . . . . . . . . . . . . . 72
     8.5.  Storing and Using Attachments  . . . . . . . . . . . . . . 74
       8.5.1.  Inline Attachments . . . . . . . . . . . . . . . . . . 74
       8.5.2.  External Attachments . . . . . . . . . . . . . . . . . 75
     8.6.  Storing and Using Alarms . . . . . . . . . . . . . . . . . 76
   9.  XML Element Definitions  . . . . . . . . . . . . . . . . . . . 77
     9.1.  CALDAV:calendar XML Element  . . . . . . . . . . . . . . . 77
     9.2.  CALDAV:mkcalendar XML Element  . . . . . . . . . . . . . . 77
     9.3.  CALDAV:mkcalendar-response XML Element . . . . . . . . . . 78
     9.4.  CALDAV:supported-collation XML Element . . . . . . . . . . 78
     9.5.  CALDAV:calendar-query XML Element  . . . . . . . . . . . . 78
     9.6.  CALDAV:calendar-data XML Element . . . . . . . . . . . . . 79
       9.6.1.  CALDAV:comp XML Element  . . . . . . . . . . . . . . . 80
       9.6.2.  CALDAV:allcomp XML Element . . . . . . . . . . . . . . 81
       9.6.3.  CALDAV:allprop XML Element . . . . . . . . . . . . . . 81
       9.6.4.  CALDAV:prop XML Element  . . . . . . . . . . . . . . . 82
       9.6.5.  CALDAV:expand XML Element  . . . . . . . . . . . . . . 82
       9.6.6.  CALDAV:limit-recurrence-set XML Element  . . . . . . . 83
       9.6.7.  CALDAV:limit-freebusy-set XML Element  . . . . . . . . 84
     9.7.  CALDAV:filter XML Element  . . . . . . . . . . . . . . . . 85
        
       7.5.1.  CALDAV:supported-collation-set Property  . . . . . . . 34
     7.6.  Partial Retrieval  . . . . . . . . . . . . . . . . . . . . 34
     7.7.  Non-Standard Components, Properties, and Parameters  . . . 35
     7.8.  CALDAV:calendar-query REPORT . . . . . . . . . . . . . . . 36
       7.8.1.  Example: Partial Retrieval of Events by Time Range . . 38
       7.8.2.  Example: Partial Retrieval of Recurring Events . . . . 42
       7.8.3.  Example: Expanded Retrieval of Recurring Events  . . . 45
       7.8.4.  Example: Partial Retrieval of Stored Free Busy
               Components . . . . . . . . . . . . . . . . . . . . . . 48
       7.8.5.  Example: Retrieval of To-Dos by Alarm Time Range . . . 50
       7.8.6.  Example: Retrieval of Event by UID . . . . . . . . . . 51
       7.8.7.  Example: Retrieval of Events by PARTSTAT . . . . . . . 53
       7.8.8.  Example: Retrieval of Events Only  . . . . . . . . . . 55
       7.8.9.  Example: Retrieval of All Pending To-Dos . . . . . . . 59
       7.8.10. Example: Attempt to Query Unsupported Property . . . . 62
     7.9.  CALDAV:calendar-multiget REPORT  . . . . . . . . . . . . . 63
       7.9.1.  Example: Successful CALDAV:calendar-multiget REPORT  . 64
     7.10. CALDAV:free-busy-query REPORT  . . . . . . . . . . . . . . 66
       7.10.1. Example: Successful CALDAV:free-busy-query REPORT  . . 68
   8.  Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . 69
     8.1.  Client-to-Client Interoperability  . . . . . . . . . . . . 69
     8.2.  Synchronization Operations . . . . . . . . . . . . . . . . 69
       8.2.1.  Use of Reports . . . . . . . . . . . . . . . . . . . . 69
         8.2.1.1.  Restrict the Time Range  . . . . . . . . . . . . . 69
         8.2.1.2.  Synchronize by Time Range  . . . . . . . . . . . . 70
         8.2.1.3.  Synchronization Process  . . . . . . . . . . . . . 70
       8.2.2.  Restrict the Properties Returned . . . . . . . . . . . 72
     8.3.  Use of Locking . . . . . . . . . . . . . . . . . . . . . . 72
     8.4.  Finding Calendars  . . . . . . . . . . . . . . . . . . . . 72
     8.5.  Storing and Using Attachments  . . . . . . . . . . . . . . 74
       8.5.1.  Inline Attachments . . . . . . . . . . . . . . . . . . 74
       8.5.2.  External Attachments . . . . . . . . . . . . . . . . . 75
     8.6.  Storing and Using Alarms . . . . . . . . . . . . . . . . . 76
   9.  XML Element Definitions  . . . . . . . . . . . . . . . . . . . 77
     9.1.  CALDAV:calendar XML Element  . . . . . . . . . . . . . . . 77
     9.2.  CALDAV:mkcalendar XML Element  . . . . . . . . . . . . . . 77
     9.3.  CALDAV:mkcalendar-response XML Element . . . . . . . . . . 78
     9.4.  CALDAV:supported-collation XML Element . . . . . . . . . . 78
     9.5.  CALDAV:calendar-query XML Element  . . . . . . . . . . . . 78
     9.6.  CALDAV:calendar-data XML Element . . . . . . . . . . . . . 79
       9.6.1.  CALDAV:comp XML Element  . . . . . . . . . . . . . . . 80
       9.6.2.  CALDAV:allcomp XML Element . . . . . . . . . . . . . . 81
       9.6.3.  CALDAV:allprop XML Element . . . . . . . . . . . . . . 81
       9.6.4.  CALDAV:prop XML Element  . . . . . . . . . . . . . . . 82
       9.6.5.  CALDAV:expand XML Element  . . . . . . . . . . . . . . 82
       9.6.6.  CALDAV:limit-recurrence-set XML Element  . . . . . . . 83
       9.6.7.  CALDAV:limit-freebusy-set XML Element  . . . . . . . . 84
     9.7.  CALDAV:filter XML Element  . . . . . . . . . . . . . . . . 85
        
       9.7.1.  CALDAV:comp-filter XML Element . . . . . . . . . . . . 85
       9.7.2.  CALDAV:prop-filter XML Element . . . . . . . . . . . . 86
       9.7.3.  CALDAV:param-filter XML Element  . . . . . . . . . . . 87
       9.7.4.  CALDAV:is-not-defined XML Element  . . . . . . . . . . 88
       9.7.5.  CALDAV:text-match XML Element  . . . . . . . . . . . . 88
     9.8.  CALDAV:timezone XML Element  . . . . . . . . . . . . . . . 89
     9.9.  CALDAV:time-range XML Element  . . . . . . . . . . . . . . 90
     9.10. CALDAV:calendar-multiget XML Element . . . . . . . . . . . 94
     9.11. CALDAV:free-busy-query XML Element . . . . . . . . . . . . 95
   10. Internationalization Considerations  . . . . . . . . . . . . . 95
   11. Security Considerations  . . . . . . . . . . . . . . . . . . . 95
   12. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 96
     12.1. Namespace Registration . . . . . . . . . . . . . . . . . . 96
   13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 96
   14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 97
     14.1. Normative References . . . . . . . . . . . . . . . . . . . 97
     14.2. Informative References . . . . . . . . . . . . . . . . . . 98
   Appendix A.  CalDAV Method Privilege Table (Normative) . . . . . . 99
   Appendix B.  Calendar Collections Used in the Examples . . . . . . 99
        
       9.7.1.  CALDAV:comp-filter XML Element . . . . . . . . . . . . 85
       9.7.2.  CALDAV:prop-filter XML Element . . . . . . . . . . . . 86
       9.7.3.  CALDAV:param-filter XML Element  . . . . . . . . . . . 87
       9.7.4.  CALDAV:is-not-defined XML Element  . . . . . . . . . . 88
       9.7.5.  CALDAV:text-match XML Element  . . . . . . . . . . . . 88
     9.8.  CALDAV:timezone XML Element  . . . . . . . . . . . . . . . 89
     9.9.  CALDAV:time-range XML Element  . . . . . . . . . . . . . . 90
     9.10. CALDAV:calendar-multiget XML Element . . . . . . . . . . . 94
     9.11. CALDAV:free-busy-query XML Element . . . . . . . . . . . . 95
   10. Internationalization Considerations  . . . . . . . . . . . . . 95
   11. Security Considerations  . . . . . . . . . . . . . . . . . . . 95
   12. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 96
     12.1. Namespace Registration . . . . . . . . . . . . . . . . . . 96
   13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 96
   14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 97
     14.1. Normative References . . . . . . . . . . . . . . . . . . . 97
     14.2. Informative References . . . . . . . . . . . . . . . . . . 98
   Appendix A.  CalDAV Method Privilege Table (Normative) . . . . . . 99
   Appendix B.  Calendar Collections Used in the Examples . . . . . . 99
        
1. Introduction
1. 介绍

The concept of using HTTP [RFC2616] and WebDAV [RFC2518] as a basis for a calendar access protocol is by no means a new concept: it was discussed in the IETF CALSCH working group as early as 1997 or 1998. Several companies have implemented calendar access protocols using HTTP to upload and download iCalendar [RFC2445] objects, and using WebDAV to get listings of resources. However, those implementations do not interoperate because there are many small and big decisions to be made in how to model calendaring data as WebDAV resources, as well as how to implement required features that aren't already part of WebDAV. This document proposes a way to model calendar data in WebDAV, with additional features to make an interoperable calendar access protocol.

使用HTTP[RFC2616]和WebDAV[RFC2518]作为日历访问协议基础的概念绝不是一个新概念:早在1997年或1998年,IETF CALSCH工作组就讨论过这一概念。一些公司已经实施了日历访问协议,使用HTTP上传和下载iCalendar[RFC2445]对象,并使用WebDAV获取资源列表。但是,这些实现并不具有互操作性,因为在如何将日历数据建模为WebDAV资源以及如何实现WebDAV中尚未包含的所需功能方面,需要做出许多大小决定。本文档提出了一种在WebDAV中对日历数据建模的方法,并提供了一些附加功能,以创建一个可互操作的日历访问协议。

1.1. Notational Conventions
1.1. 符号约定

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照[RFC2119]中所述进行解释。

The term "protected" is used in the Conformance field of property definitions as defined in Section 1.4.2 of [RFC3253].

术语“受保护”用于[RFC3253]第1.4.2节中定义的属性定义的一致性字段。

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.

当本文档在XML片段的上下文之外引用名称空间“DAV:”和“urn:ietf:params:XML:ns:caldav”中的XML元素类型时,字符串“DAV:”和“caldav:”将分别作为元素类型名称的前缀。

1.2. XML Namespaces and Processing
1.2. XML名称空间和处理

Definitions of XML elements in this document use XML element type declarations (as found in XML Document Type Declarations), described in Section 3.2 of [W3C.REC-xml-20060816].

本文档中的XML元素定义使用[W3C.REC-XML-20060816]第3.2节中描述的XML元素类型声明(如XML文档类型声明中所示)。

The namespace "urn:ietf:params:xml:ns:caldav" is reserved for the XML elements defined in this specification, its revisions, and related CalDAV specifications. XML elements defined by individual implementations MUST NOT use the "urn:ietf:params:xml:ns:caldav" namespace, and instead should use a namespace that they control.

命名空间“urn:ietf:params:xml:ns:caldav”是为本规范、其修订版和相关的caldav规范中定义的xml元素保留的。由单个实现定义的XML元素不能使用“urn:ietf:params:XML:ns:caldav”命名空间,而应该使用它们控制的命名空间。

The XML declarations used in this document do not include namespace information. Thus, implementers must not use these declarations as the only way to create valid CalDAV properties or to validate CalDAV XML element types. Some of the declarations refer to XML elements defined by WebDAV [RFC2518], which use the "DAV:" namespace. Wherever such XML elements appear, they are explicitly prefixed with "DAV:" to avoid confusion.

本文档中使用的XML声明不包括名称空间信息。因此,实现者不能将这些声明用作创建有效CalDAV属性或验证CalDAV XML元素类型的唯一方法。有些声明引用WebDAV[RFC2518]定义的XML元素,这些元素使用“DAV:”命名空间。无论这些XML元素出现在哪里,它们都会显式地加上前缀“DAV:”,以避免混淆。

Also note that some CalDAV XML element names are identical to WebDAV XML element names, though their namespace differs. Care must be taken not to confuse the two sets of names.

还请注意,一些CalDAV XML元素名称与WebDAV XML元素名称相同,尽管它们的命名空间不同。必须注意不要混淆这两组名称。

Processing of XML by CalDAV clients and servers MUST follow the rules described in [RFC2518]; in particular, Section 14, and Appendix 3 of that specification.

CalDAV客户端和服务器对XML的处理必须遵循[RFC2518]中描述的规则;特别是该规范的第14节和附录3。

1.3. Method Preconditions and Postconditions
1.3. 方法先决条件和后决条件

A "precondition" of a method describes the state of the server that must be true for that method to be performed. A "postcondition" of a method describes the state of the server that must be true after that method has been completed. If a method precondition or postcondition for a request is not satisfied, the response status of the request MUST either be 403 (Forbidden), if the request should not be repeated because it will always fail, or 409 (Conflict), if it is expected that the user might be able to resolve the conflict and resubmit the request.

方法的“先决条件”描述了要执行该方法必须为true的服务器状态。方法的“后置条件”描述了该方法完成后必须为true的服务器状态。如果请求的方法先决条件或后决条件未满足,则请求的响应状态必须为403(禁止),如果请求因总是失败而不应重复,或者409(冲突),如果预期用户可能能够解决冲突并重新提交请求。

In order to allow better client handling of 403 and 409 responses, a distinct XML element type is associated with each method precondition and postcondition of a request. When a particular precondition is not satisfied or a particular postcondition cannot be achieved, the appropriate XML element MUST be returned as the child of a top-level DAV:error element in the response body, unless otherwise negotiated by the request.

为了让客户端更好地处理403和409响应,不同的XML元素类型与请求的每个方法先决条件和后决条件相关联。如果不满足特定的先决条件或无法实现特定的后决条件,则必须将相应的XML元素作为响应体中顶级DAV:error元素的子元素返回,除非请求另行协商。

2. Requirements Overview
2. 需求概述

This section lists what functionality is required of a CalDAV server. To advertise support for CalDAV, a server:

本节列出了CalDAV服务器所需的功能。要公布对CalDAV(服务器)的支持,请执行以下操作:

o MUST support iCalendar [RFC2445] as a media type for the calendar object resource format;

o 必须支持iCalendar[RFC2445]作为日历对象资源格式的媒体类型;

o MUST support WebDAV Class 1 [RFC2518] (note that [rfc2518bis] describes clarifications to [RFC2518] that aid interoperability);

o 必须支持WebDAV 1类[RFC2518](注意[rfc2518bis]描述了对[RFC2518]的澄清,以帮助互操作性);

o MUST support WebDAV ACL [RFC3744] with the additional privilege defined in Section 6.1 of this document;

o 必须使用本文件第6.1节中定义的附加权限支持WebDAV ACL[RFC3744];

o MUST support transport over TLS [RFC2246] as defined in [RFC2818] (note that [RFC2246] has been obsoleted by [RFC4346]);

o 必须支持[RFC2818]中定义的TLS[RFC2246]上的传输(注意[RFC2246]已被[RFC4346]淘汰);

o MUST support ETags [RFC2616] with additional requirements specified in Section 5.3.4 of this document;

o 必须按照本文件第5.3.4节规定的附加要求支持ETAG[RFC2616];

o MUST support all calendaring reports defined in Section 7 of this document; and

o 必须支持本文件第7节中定义的所有日历报告;和

o MUST advertise support on all calendar collections and calendar object resources for the calendaring reports in the DAV:supported-report-set property, as defined in Versioning Extensions to WebDAV [RFC3253].

o 必须在所有日历集合和日历对象资源上公布对DAV:supported report set属性中日历报告的支持,如WebDAV的版本控制扩展[RFC3253]中所定义。

In addition, a server:

此外,服务器:

o SHOULD support the MKCALENDAR method defined in Section 5.3.1 of this document.

o 应支持本文件第5.3.1节中定义的MKCALENDAR方法。

3. Calendaring Data Model
3. 日历数据模型

One of the features that has made WebDAV a successful protocol is its firm data model. This makes it a useful framework for other applications such as calendaring. This specification follows the same pattern by developing all features based on a well-described data model.

使WebDAV成为一个成功的协议的一个特点是其稳固的数据模型。这使它成为日历等其他应用程序的有用框架。本规范遵循相同的模式,基于描述良好的数据模型开发所有特性。

As a brief overview, a CalDAV calendar is modeled as a WebDAV collection with a defined structure; each calendar collection contains a number of resources representing calendar objects as its direct child resource. Each resource representing a calendar object (event, to-do, journal entry, or other calendar components) is called a "calendar object resource". Each calendar object resource and each calendar collection can be individually locked and have individual WebDAV properties. Requirements derived from this model are provided in Section 4.1 and Section 4.2.

作为简要概述,CalDAV日历被建模为具有定义结构的WebDAV集合;每个日历集合包含许多资源,这些资源将日历对象表示为其直接子资源。表示日历对象(事件、待办事项、日记条目或其他日历组件)的每个资源称为“日历对象资源”。每个日历对象资源和每个日历集合都可以单独锁定,并具有单独的WebDAV属性。第4.1节和第4.2节提供了从该模型得出的要求。

3.1. Calendar Server
3.1. 日历服务器

A CalDAV server is a calendaring-aware engine combined with a WebDAV repository. A WebDAV repository is a set of WebDAV collections, containing other WebDAV resources, within a unified URL namespace. For example, the repository "http://www.example.com/webdav/" may contain WebDAV collections and resources, all of which have URLs beginning with "http://www.example.com/webdav/". Note that the root URL, "http://www.example.com/", may not itself be a WebDAV repository (for example, if the WebDAV support is implemented through a servlet or other Web server extension).

CalDAV服务器是与WebDAV存储库相结合的日历感知引擎。WebDAV存储库是一组WebDAV集合,包含统一URL命名空间中的其他WebDAV资源。例如,存储库“http://www.example.com/webdav/可能包含WebDAV集合和资源,所有这些集合和资源的URL都以开头http://www.example.com/webdav/". 请注意,根URL,“http://www.example.com/“”本身可能不是WebDAV存储库(例如,如果WebDAV支持是通过servlet或其他Web服务器扩展实现的)。

A WebDAV repository MAY include calendar data in some parts of its URL namespace, and non-calendaring data in other parts.

WebDAV存储库可能在其URL命名空间的某些部分包含日历数据,在其他部分包含非日历数据。

A WebDAV repository can advertise itself as a CalDAV server if it supports the functionality defined in this specification at any point

如果WebDAV存储库在任何时候都支持本规范中定义的功能,则它可以将自己作为CalDAV服务器进行宣传

within the root of the repository. That might mean that calendaring data is spread throughout the repository and mixed with non-calendar data in nearby collections (e.g., calendar data may be found in /home/lisa/calendars/ as well as in /home/bernard/calendars/, and non-calendar data in /home/lisa/contacts/). Or, it might mean that calendar data can be found only in certain sections of the repository (e.g., /calendar/). Calendaring features are only required in the repository sections that are or contain calendar object resources. Therefore, a repository confining calendar data to the /calendar/ collection would only need to support the CalDAV required features within that collection.

在存储库的根目录中。这可能意味着日历数据分布在整个存储库中,并与附近集合中的非日历数据混合(例如,日历数据可以在/home/lisa/calendars/以及/home/bernard/calendars/中找到,而非日历数据可以在/home/lisa/contacts/中找到)。或者,这可能意味着只能在存储库的某些部分中找到日历数据(例如,/calendar/)。日历功能仅在属于或包含日历对象资源的存储库部分中需要。因此,将日历数据限制到/calendar/collection的存储库只需要支持该集合中CalDAV所需的功能。

The CalDAV server or repository is the canonical location for calendar data and state information. Clients may submit requests to change data or download data. Clients may store calendar objects offline and attempt to synchronize at a later time. However, clients MUST be prepared for calendar data on the server to change between the time of last synchronization and when attempting an update, as calendar collections may be shared and accessible via multiple clients. Entity tags and other features make this possible.

CalDAV服务器或存储库是日历数据和状态信息的标准位置。客户可以提交更改数据或下载数据的请求。客户端可以脱机存储日历对象,并在以后尝试同步。但是,客户端必须准备好在上次同步和尝试更新之间更改服务器上的日历数据,因为日历集合可以通过多个客户端共享和访问。实体标记和其他功能使这成为可能。

3.2. Recurrence and the Data Model
3.2. 递归与数据模型

Recurrence is an important part of the data model because it governs how many resources are expected to exist. This specification models a recurring calendar component and its recurrence exceptions as a single resource. In this model, recurrence rules, recurrence dates, exception rules, and exception dates are all part of the data in a single calendar object resource. This model avoids problems of limiting how many recurrence instances to store in the repository, how to keep recurrence instances in sync with the recurring calendar component, and how to link recurrence exceptions with the recurring calendar component. It also results in less data to synchronize between client and server, and makes it easier to make changes to all recurrence instances or to a recurrence rule. It makes it easier to create a recurring calendar component and to delete all recurrence instances.

重复性是数据模型的一个重要部分,因为它控制预期存在的资源数量。此规范将定期日历组件及其定期异常建模为单个资源。在此模型中,重复规则、重复日期、异常规则和异常日期都是单个日历对象资源中数据的一部分。此模型避免了以下问题:限制存储库中要存储的定期实例的数量;如何使定期实例与定期日历组件保持同步;如何将定期异常与定期日历组件链接。它还减少了客户端和服务器之间要同步的数据,并使更改所有定期实例或定期规则变得更容易。它使创建定期日历组件和删除所有定期实例变得更加容易。

Clients are not forced to retrieve information about all recurrence instances of a recurring component. The CALDAV:calendar-query and CALDAV:calendar-multiget reports defined in this document allow clients to retrieve only recurrence instances that overlap a given time range.

客户端不会被强制检索有关定期组件的所有定期实例的信息。此文档中定义的CALDAV:calendar查询和CALDAV:calendar multiget报告允许客户端仅检索与给定时间范围重叠的重复实例。

4. Calendar Resources
4. 日历资源
4.1. Calendar Object Resources
4.1. 日历对象资源

Calendar object resources contained in calendar collections MUST NOT contain more than one type of calendar component (e.g., VEVENT, VTODO, VJOURNAL, VFREEBUSY, etc.) with the exception of VTIMEZONE components, which MUST be specified for each unique TZID parameter value specified in the iCalendar object. For instance, a calendar object resource can contain one VEVENT component and one VTIMEZONE component, but it cannot contain one VEVENT component and one VTODO component. Instead, the VEVENT and VTODO components would have to be stored in separate calendar object resources in the same collection.

日历集合中包含的日历对象资源不得包含一种以上类型的日历组件(例如,VEVENT、VTODO、VJOURNAL、VFREEBUSY等),但VTIMEZONE组件除外,必须为iCalendar对象中指定的每个唯一TZID参数值指定这些组件。例如,日历对象资源可以包含一个VEVENT组件和一个VTIMEONE组件,但不能包含一个VEVENT组件和一个VTODO组件。相反,VEVENT和VTODO组件必须存储在同一集合中单独的日历对象资源中。

Calendar object resources contained in calendar collections MUST NOT specify the iCalendar METHOD property.

日历集合中包含的日历对象资源不得指定iCalendar方法属性。

The UID property value of the calendar components contained in a calendar object resource MUST be unique in the scope of the calendar collection in which they are stored.

日历对象资源中包含的日历组件的UID属性值在其存储的日历集合范围内必须是唯一的。

Calendar components in a calendar collection that have different UID property values MUST be stored in separate calendar object resources.

日历集合中具有不同UID属性值的日历组件必须存储在单独的日历对象资源中。

Calendar components with the same UID property value, in a given calendar collection, MUST be contained in the same calendar object resource. This ensures that all components in a recurrence "set" are contained in the same calendar object resource. It is possible for a calendar object resource to just contain components that represent "overridden" instances (ones that modify the behavior of a regular instance, and thus include a RECURRENCE-ID property) without also including the "master" recurring component (the one that defines the recurrence "set" and does not contain any RECURRENCE-ID property).

给定日历集合中具有相同UID属性值的日历组件必须包含在同一日历对象资源中。这样可以确保重复“集合”中的所有组件都包含在同一日历对象资源中。日历对象资源可能只包含表示“重写”实例的组件(修改常规实例行为的组件,因此包含RECURRENCE-ID属性),而不包含“主”定期组件(定义定期“集合”的组件)并且不包含任何递归ID属性)。

For example, given the following iCalendar object:

例如,给定以下iCalendar对象:

   BEGIN:VCALENDAR
   PRODID:-//Example Corp.//CalDAV Client//EN
   VERSION:2.0
   BEGIN:VEVENT
   UID:1@example.com
   SUMMARY:One-off Meeting
   DTSTAMP:20041210T183904Z
   DTSTART:20041207T120000Z
   DTEND:20041207T130000Z
   END:VEVENT
   BEGIN:VEVENT
   UID:2@example.com
   SUMMARY:Weekly Meeting
   DTSTAMP:20041210T183838Z
   DTSTART:20041206T120000Z
   DTEND:20041206T130000Z
   RRULE:FREQ=WEEKLY
   END:VEVENT
   BEGIN:VEVENT
   UID:2@example.com
   SUMMARY:Weekly Meeting
   RECURRENCE-ID:20041213T120000Z
   DTSTAMP:20041210T183838Z
   DTSTART:20041213T130000Z
   DTEND:20041213T140000Z
   END:VEVENT
   END:VCALENDAR
        
   BEGIN:VCALENDAR
   PRODID:-//Example Corp.//CalDAV Client//EN
   VERSION:2.0
   BEGIN:VEVENT
   UID:1@example.com
   SUMMARY:One-off Meeting
   DTSTAMP:20041210T183904Z
   DTSTART:20041207T120000Z
   DTEND:20041207T130000Z
   END:VEVENT
   BEGIN:VEVENT
   UID:2@example.com
   SUMMARY:Weekly Meeting
   DTSTAMP:20041210T183838Z
   DTSTART:20041206T120000Z
   DTEND:20041206T130000Z
   RRULE:FREQ=WEEKLY
   END:VEVENT
   BEGIN:VEVENT
   UID:2@example.com
   SUMMARY:Weekly Meeting
   RECURRENCE-ID:20041213T120000Z
   DTSTAMP:20041210T183838Z
   DTSTART:20041213T130000Z
   DTEND:20041213T140000Z
   END:VEVENT
   END:VCALENDAR
        

The VEVENT component with the UID value "1@example.com" would be stored in its own calendar object resource. The two VEVENT components with the UID value "2@example.com", which represent a recurring event where one recurrence instance has been overridden, would be stored in the same calendar object resource.

“具有UID值的VEVENT组件”1@example.com“将存储在其自己的日历对象资源中。具有UID值的两个VEVENT组件”2@example.com“”将存储在同一日历对象资源中,它表示一个重复事件,其中一个重复实例已被重写。

4.2. Calendar Collection
4.2. 日历集

A calendar collection contains calendar object resources that represent calendar components within a calendar. A calendar collection is manifested to clients as a WebDAV resource collection identified by a URL. A calendar collection MUST report the DAV: collection and CALDAV:calendar XML elements in the value of the DAV: resourcetype property. The element type declaration for CALDAV: calendar is:

日历集合包含表示日历中的日历组件的日历对象资源。日历集合向客户端显示为由URL标识的WebDAV资源集合。日历集合必须在DAV:resourcetype属性的值中报告DAV:collection和CALDAV:calendar XML元素。CALDAV:calendar的元素类型声明为:

       <!ELEMENT calendar EMPTY>
        
       <!ELEMENT calendar EMPTY>
        

A calendar collection can be created through provisioning (i.e., automatically created when a user's account is provisioned), or it can be created with the MKCALENDAR method (see Section 5.3.1). This method can be useful for a user to create additional calendars (e.g., soccer schedule) or for users to share a calendar (e.g., team events or conference rooms). However, note that this document doesn't define the purpose of extra calendar collections. Users must rely on non-standard cues to find out what a calendar collection is for, or use the CALDAV:calendar-description property defined in Section 5.2.1 to provide such a cue.

日历集合可以通过设置创建(即,设置用户帐户时自动创建),也可以使用MKCALENDAR方法创建(请参见第5.3.1节)。此方法对于用户创建其他日历(例如,足球日程)或用户共享日历(例如,团队活动或会议室)非常有用。但是,请注意,本文档并未定义额外日历集合的用途。用户必须依赖非标准提示来确定日历集合的用途,或者使用第5.2.1节中定义的CALDAV:calendar description属性来提供此类提示。

The following restrictions are applied to the resources within a calendar collection:

以下限制适用于日历集合中的资源:

a. Calendar collections MUST only contain calendar object resources and collections that are not calendar collections, i.e., the only "top-level" non-collection resources allowed in a calendar collection are calendar object resources. This ensures that calendar clients do not have to deal with non-calendar data in a calendar collection, though they do have to distinguish between calendar object resources and collections when using standard WebDAV techniques to examine the contents of a collection.

a. 日历集合只能包含日历对象资源和非日历集合的集合,即日历集合中唯一允许的“顶级”非集合资源是日历对象资源。这确保了日历客户端不必处理日历集合中的非日历数据,尽管在使用标准WebDAV技术检查集合内容时,它们必须区分日历对象资源和集合。

b. Collections contained in calendar collections MUST NOT contain calendar collections at any depth, i.e., "nesting" of calendar collections within other calendar collections at any depth is not allowed. This specification does not define how collections contained in a calendar collection are used or how they relate to any calendar object resources contained in the calendar collection.

b. 日历集合中包含的集合不得包含任何深度的日历集合,即不允许在任何深度的其他日历集合中“嵌套”日历集合。本规范不定义如何使用日历集合中包含的集合,也不定义它们与日历集合中包含的任何日历对象资源的关系。

Multiple calendar collections MAY be children of the same collection.

多个日历集合可能是同一集合的子集合。

5. Calendar Access Feature
5. 日历访问功能
5.1. Calendar Access Support
5.1. 日历访问支持

A server supporting the features described in this document MUST include "calendar-access" as a field in the DAV response header from an OPTIONS request on any resource that supports any calendar properties, reports, method, or privilege. A value of "calendar-access" in the DAV response header MUST indicate that the server supports all MUST level requirements specified in this document.

支持本文档中所述功能的服务器必须在支持任何日历属性、报告、方法或权限的任何资源上的选项请求的DAV响应标头中包含“日历访问”字段。DAV响应标头中的“日历访问”值必须表明服务器支持本文档中指定的所有必须级别要求。

5.1.1. Example: Using OPTIONS for the Discovery of Calendar Access Support

5.1.1. 示例:使用选项查找日历访问支持

   >> Request <<
        
   >> Request <<
        
   OPTIONS /home/bernard/calendars/ HTTP/1.1
   Host: cal.example.com
        
   OPTIONS /home/bernard/calendars/ HTTP/1.1
   Host: cal.example.com
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 200 OK
   Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
   Allow: PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
   DAV: 1, 2, access-control, calendar-access
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Length: 0
        
   HTTP/1.1 200 OK
   Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
   Allow: PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
   DAV: 1, 2, access-control, calendar-access
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Length: 0
        

In this example, the OPTIONS method returns the value "calendar-access" in the DAV response header to indicate that the collection "/home/bernard/calendars/" supports the properties, reports, method, or privilege defined in this specification.

在本例中,OPTIONS方法在DAV响应头中返回值“calendar access”,以指示集合“/home/bernard/calendars/”支持本规范中定义的属性、报告、方法或权限。

5.2. Calendar Collection Properties
5.2. 日历集合属性

This section defines properties for calendar collections.

本节定义日历集合的属性。

5.2.1. CALDAV:calendar-description Property
5.2.1. CALDAV:日历描述属性

Name: calendar-description

名称:日历说明

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Provides a human-readable description of the calendar collection.

目的:提供日历集合的可读说明。

Conformance: This property MAY be defined on any calendar collection. If defined, it MAY be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]). An xml:lang attribute indicating the human language of the description SHOULD be set for this property by clients or through server provisioning. Servers MUST return any xml:lang attribute if set for the property.

一致性:此属性可以在任何日历集合上定义。如果已定义,则可以对其进行保护,且不应通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节中的定义)。客户端或通过服务器配置为此属性设置一个xml:lang属性,该属性指示描述的人类语言。如果为属性设置了xml:lang属性,则服务器必须返回任何该属性。

Description: If present, the property contains a description of the calendar collection that is suitable for presentation to a user. If not present, the client should assume no description for the calendar collection.

描述:如果存在,则属性包含适合向用户演示的日历集合的描述。如果不存在,则客户端不应假定日历集合的描述。

Definition:

定义:

         <!ELEMENT calendar-description (#PCDATA)>
         PCDATA value: string
        
         <!ELEMENT calendar-description (#PCDATA)>
         PCDATA value: string
        

Example:

例子:

         <C:calendar-description xml:lang="fr-CA"
            xmlns:C="urn:ietf:params:xml:ns:caldav"
         >Calendrier de Mathilde Desruisseaux</C:calendar-description>
        
         <C:calendar-description xml:lang="fr-CA"
            xmlns:C="urn:ietf:params:xml:ns:caldav"
         >Calendrier de Mathilde Desruisseaux</C:calendar-description>
        
5.2.2. CALDAV:calendar-timezone Property
5.2.2. CALDAV:日历时区属性

Name: calendar-timezone

名称:日历时区

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a time zone on a calendar collection.

目的:指定日历集合上的时区。

Conformance: This property SHOULD be defined on all calendar collections. If defined, it SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:应在所有日历集合上定义此属性。如果已定义,则不应通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:calendar-timezone property is used to specify the time zone the server should rely on to resolve "date" values and "date with local time" values (i.e., floating time) to "date with UTC time" values. The server will require this information to determine if a calendar component scheduled with "date" values or "date with local time" values overlaps a CALDAV: time-range specified in a CALDAV:calendar-query REPORT. The server will also require this information to compute the proper FREEBUSY time period as "date with UTC time" in the VFREEBUSY component returned in a response to a CALDAV:free-busy-query REPORT request that takes into account calendar components scheduled with "date" values or "date with local time" values. In the absence of this property, the server MAY rely on the time zone of their choice.

描述:CALDAV:calendar时区属性用于指定服务器将“日期”值和“带本地时间的日期”值(即浮动时间)解析为“带UTC时间的日期”值所依赖的时区。服务器将需要此信息来确定使用“日期”值或“带有本地时间的日期”值计划的日历组件是否与CALDAV:日历查询报告中指定的CALDAV:时间范围重叠。服务器还需要此信息来计算VFREEBUSY组件中的适当忙/闲时间段,该组件是在响应CALDAV:free-busy查询报告请求时返回的,该请求考虑了使用“date”值或“date with local time”值计划的日历组件。如果没有此属性,服务器可能依赖于其选择的时区。

Note: The iCalendar data embedded within the CALDAV:calendar-timezone XML element MUST follow the standard XML character data encoding rules, including use of &lt;, &gt;, &amp; etc. entity encoding or the use of a <![CDATA[ ... ]]> construct. In the later case, the iCalendar data cannot contain the character sequence "]]>", which is the end delimiter for the CDATA section.

注意:CALDAV:calendar时区XML元素中嵌入的iCalendar数据必须遵循标准的XML字符数据编码规则,包括使用&lt&gt&amp;等。实体编码或使用<![CDATA[…]]>构造。在后一种情况下,iCalendar数据不能包含字符序列“]]>”,这是CDATA节的结束分隔符。

Definition:

定义:

<!ELEMENT calendar-timezone (#PCDATA)> PCDATA value: an iCalendar object with exactly one VTIMEZONE component.

<!元素日历时区(#PCDATA)>PCDATA值:一个iCalendar对象,正好有一个VTIMEZONE组件。

Example:

例子:

   <C:calendar-timezone
       xmlns:C="urn:ietf:params:xml:ns:caldav">BEGIN:VCALENDAR
   PRODID:-//Example Corp.//CalDAV Client//EN
   VERSION:2.0
   BEGIN:VTIMEZONE
   TZID:US-Eastern
   LAST-MODIFIED:19870101T000000Z
   BEGIN:STANDARD
   DTSTART:19671029T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   TZNAME:Eastern Standard Time (US &amp; Canada)
   END:STANDARD
   BEGIN:DAYLIGHT
   DTSTART:19870405T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   TZNAME:Eastern Daylight Time (US &amp; Canada)
   END:DAYLIGHT
   END:VTIMEZONE
   END:VCALENDAR
   </C:calendar-timezone>
        
   <C:calendar-timezone
       xmlns:C="urn:ietf:params:xml:ns:caldav">BEGIN:VCALENDAR
   PRODID:-//Example Corp.//CalDAV Client//EN
   VERSION:2.0
   BEGIN:VTIMEZONE
   TZID:US-Eastern
   LAST-MODIFIED:19870101T000000Z
   BEGIN:STANDARD
   DTSTART:19671029T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   TZNAME:Eastern Standard Time (US &amp; Canada)
   END:STANDARD
   BEGIN:DAYLIGHT
   DTSTART:19870405T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   TZNAME:Eastern Daylight Time (US &amp; Canada)
   END:DAYLIGHT
   END:VTIMEZONE
   END:VCALENDAR
   </C:calendar-timezone>
        
5.2.3. CALDAV:supported-calendar-component-set Property
5.2.3. CALDAV:支持的日历组件集属性

Name: supported-calendar-component-set

名称:支持的日历组件集

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies the calendar component types (e.g., VEVENT, VTODO, etc.) that calendar object resources can contain in the calendar collection.

目的:指定日历对象资源可以包含在日历集合中的日历组件类型(例如,VEVENT、VTODO等)。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:supported-calendar-component-set property is used to specify restrictions on the calendar component types that calendar object resources may contain in a calendar collection. Any attempt by the client to store calendar object resources with component types not listed in this property, if it exists, MUST result in an error, with the CALDAV:supported-calendar-component precondition (Section 5.3.2.1) being violated. Since this property is protected, it cannot be changed by clients using a PROPPATCH request. However, clients can initialize the value of this property when creating a new calendar collection with MKCALENDAR. The empty-element tag <C:comp name="VTIMEZONE"/> MUST only be specified if support for calendar object resources that only contain VTIMEZONE components is provided or desired. Support for VTIMEZONE components in calendar object resources that contain VEVENT or VTODO components is always assumed. In the absence of this property, the server MUST accept all component types, and the client can assume that all component types are accepted.

描述:CALDAV:supported calendar component set属性用于指定对日历对象资源在日历集合中可能包含的日历组件类型的限制。如果客户端试图使用此属性中未列出的组件类型存储日历对象资源(如果存在),则必须导致错误,并违反CALDAV:受支持的日历组件先决条件(第5.3.2.1节)。由于此属性受保护,因此客户端无法使用PROPPATCH请求对其进行更改。但是,当使用MKCALENDAR创建新的日历集合时,客户端可以初始化此属性的值。只有在提供或需要对仅包含VTIMEZONE组件的日历对象资源的支持时,才必须指定空元素标记<C:comp name=“VTIMEZONE”/>。始终假定在包含VEVENT或VTODO组件的日历对象资源中支持VTIMEZONE组件。如果没有此属性,服务器必须接受所有组件类型,客户端可以假定所有组件类型都被接受。

Definition:

定义:

         <!ELEMENT supported-calendar-component-set (comp+)>
        
         <!ELEMENT supported-calendar-component-set (comp+)>
        

Example:

例子:

         <C:supported-calendar-component-set
             xmlns:C="urn:ietf:params:xml:ns:caldav">
           <C:comp name="VEVENT"/>
           <C:comp name="VTODO"/>
         </C:supported-calendar-component-set>
        
         <C:supported-calendar-component-set
             xmlns:C="urn:ietf:params:xml:ns:caldav">
           <C:comp name="VEVENT"/>
           <C:comp name="VTODO"/>
         </C:supported-calendar-component-set>
        
5.2.4. CALDAV:supported-calendar-data Property
5.2.4. CALDAV:支持的日历数据属性

Name: supported-calendar-data

名称:支持的日历数据

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies what media types are allowed for calendar object resources in a calendar collection.

用途:指定日历集合中日历对象资源允许的媒体类型。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:supported-calendar-data property is used to specify the media type supported for the calendar object resources contained in a given calendar collection (e.g., iCalendar version 2.0). Any attempt by the client to store calendar object

描述:CALDAV:supported calendar data属性用于指定给定日历集合(例如iCalendar 2.0版)中包含的日历对象资源支持的媒体类型。客户端存储日历对象的任何尝试

resources with a media type not listed in this property MUST result in an error, with the CALDAV:supported-calendar-data precondition (Section 5.3.2.1) being violated. In the absence of this property, the server MUST only accept data with the media type "text/calendar" and iCalendar version 2.0, and clients can assume that the server will only accept this data.

此属性中未列出媒体类型的资源必须导致错误,并违反CALDAV:supported calendar data前提条件(第5.3.2.1节)。如果没有此属性,服务器只能接受媒体类型为“text/calendar”且iCalendar版本为2.0的数据,客户端可以假定服务器将只接受此数据。

Definition:

定义:

         <!ELEMENT supported-calendar-data (calendar-data+)>
        
         <!ELEMENT supported-calendar-data (calendar-data+)>
        

Example:

例子:

         <C:supported-calendar-data
            xmlns:C="urn:ietf:params:xml:ns:caldav">
           <C:calendar-data content-type="text/calendar" version="2.0"/>
         </C:supported-calendar-data>
        
         <C:supported-calendar-data
            xmlns:C="urn:ietf:params:xml:ns:caldav">
           <C:calendar-data content-type="text/calendar" version="2.0"/>
         </C:supported-calendar-data>
        
5.2.5. CALDAV:max-resource-size Property
5.2.5. CALDAV:最大资源大小属性

Name: max-resource-size

名称:最大资源大小

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Provides a numeric value indicating the maximum size of a resource in octets that the server is willing to accept when a calendar object resource is stored in a calendar collection.

用途:提供一个数字值,指示当日历对象资源存储在日历集合中时,服务器愿意接受的资源的最大大小(以八位字节为单位)。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:max-resource-size is used to specify a numeric value that represents the maximum size in octets that the server is willing to accept when a calendar object resource is stored in a calendar collection. Any attempt to store a calendar object resource exceeding this size MUST result in an error, with the CALDAV:max-resource-size precondition (Section 5.3.2.1) being violated. In the absence of this property, the client can assume that the server will allow storing a resource of any reasonable size.

描述:CALDAV:max resource size用于指定一个数值,该数值表示当日历对象资源存储在日历集合中时服务器愿意接受的最大大小(以八位字节为单位)。任何存储超过此大小的日历对象资源的尝试都必须导致错误,并违反CALDAV:max resource size前提条件(第5.3.2.1节)。如果没有此属性,客户端可以假定服务器将允许存储任何合理大小的资源。

Definition:

定义:

         <!ELEMENT max-resource-size (#PCDATA)>
         PCDATA value: a numeric value (positive integer)
        
         <!ELEMENT max-resource-size (#PCDATA)>
         PCDATA value: a numeric value (positive integer)
        

Example:

例子:

         <C:max-resource-size xmlns:C="urn:ietf:params:xml:ns:caldav"
         >102400</C:max-resource-size>
        
         <C:max-resource-size xmlns:C="urn:ietf:params:xml:ns:caldav"
         >102400</C:max-resource-size>
        
5.2.6. CALDAV:min-date-time Property
5.2.6. CALDAV:最小日期时间属性

Name: min-date-time

名称:最小日期时间

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Provides a DATE-TIME value indicating the earliest date and time (in UTC) that the server is willing to accept for any DATE or DATE-TIME value in a calendar object resource stored in a calendar collection.

目的:提供一个日期时间值,指示服务器愿意为存储在日历集合中的日历对象资源中的任何日期或日期时间值接受的最早日期和时间(UTC)。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:min-date-time is used to specify an iCalendar DATE-TIME value in UTC that indicates the earliest inclusive date that the server is willing to accept for any explicit DATE or DATE-TIME value in a calendar object resource stored in a calendar collection. Any attempt to store a calendar object resource using a DATE or DATE-TIME value earlier than this value MUST result in an error, with the CALDAV:min-date-time precondition (Section 5.3.2.1) being violated. Note that servers MUST accept recurring components that specify instances beyond this limit, provided none of those instances have been overridden. In that case, the server MAY simply ignore those instances outside of the acceptable range when processing reports on the calendar object resource. In the absence of this property, the client can assume any valid iCalendar date may be used at least up to the CALDAV:max-date-time value, if that is defined.

描述:CALDAV:min日期时间用于指定以UTC为单位的iCalendar日期时间值,该值指示服务器愿意接受的最早包含日期,用于存储在日历集合中的日历对象资源中的任何显式日期或日期时间值。使用早于此值的日期或日期时间值存储日历对象资源的任何尝试都必须导致错误,并违反CALDAV:min DATE TIME前提条件(第5.3.2.1节)。请注意,服务器必须接受指定超出此限制的实例的周期性组件,前提是这些实例均未被重写。在这种情况下,在处理日历对象资源上的报告时,服务器可能会忽略那些超出可接受范围的实例。在没有此属性的情况下,客户机可以假设任何有效的iCalendar日期至少可以使用到CALDAV:max date time值(如果已定义)。

Definition:

定义:

         <!ELEMENT min-date-time (#PCDATA)>
         PCDATA value: an iCalendar format DATE-TIME value in UTC
        
         <!ELEMENT min-date-time (#PCDATA)>
         PCDATA value: an iCalendar format DATE-TIME value in UTC
        

Example:

例子:

         <C:min-date-time xmlns:C="urn:ietf:params:xml:ns:caldav"
         >19000101T000000Z</C:min-date-time>
        
         <C:min-date-time xmlns:C="urn:ietf:params:xml:ns:caldav"
         >19000101T000000Z</C:min-date-time>
        
5.2.7. CALDAV:max-date-time Property
5.2.7. calmax-time属性

Name: max-date-time

名称:最长日期时间

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Provides a DATE-TIME value indicating the latest date and time (in UTC) that the server is willing to accept for any DATE or DATE-TIME value in a calendar object resource stored in a calendar collection.

目的:提供一个日期时间值,指示服务器愿意为存储在日历集合中的日历对象资源中的任何日期或日期时间值接受的最新日期和时间(UTC)。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:max-date-time is used to specify an iCalendar DATE-TIME value in UTC that indicates the inclusive latest date that the server is willing to accept for any date or time value in a calendar object resource stored in a calendar collection. Any attempt to store a calendar object resource using a DATE or DATE-TIME value later than this value MUST result in an error, with the CALDAV:max-date-time precondition (Section 5.3.2.1) being violated. Note that servers MUST accept recurring components that specify instances beyond this limit, provided none of those instances have been overridden. In that case, the server MAY simply ignore those instances outside of the acceptable range when processing reports on the calendar object resource. In the absence of this property, the client can assume any valid iCalendar date may be used at least down to the CALDAV: min-date-time value, if that is defined.

描述:CALDAV:max date-time用于指定以UTC为单位的iCalendar日期时间值,该值指示服务器愿意为存储在日历集合中的日历对象资源中的任何日期或时间值接受的包含最新日期。使用晚于此值的日期或日期时间值存储日历对象资源的任何尝试都必须导致错误,并违反CALDAV:max DATE TIME前提条件(第5.3.2.1节)。请注意,服务器必须接受指定超出此限制的实例的周期性组件,前提是这些实例均未被重写。在这种情况下,在处理日历对象资源上的报告时,服务器可能会忽略那些超出可接受范围的实例。在没有此属性的情况下,客户机可以假定任何有效的iCalendar日期都可以至少使用到CALDAV:min日期时间值(如果已定义)。

Definition:

定义:

         <!ELEMENT max-date-time (#PCDATA)>
         PCDATA value: an iCalendar format DATE-TIME value in UTC
        
         <!ELEMENT max-date-time (#PCDATA)>
         PCDATA value: an iCalendar format DATE-TIME value in UTC
        

Example:

例子:

         <C:max-date-time xmlns:C="urn:ietf:params:xml:ns:caldav"
         >20491231T235959Z</C:max-date-time>
        
         <C:max-date-time xmlns:C="urn:ietf:params:xml:ns:caldav"
         >20491231T235959Z</C:max-date-time>
        
5.2.8. CALDAV:max-instances Property
5.2.8. CALDAV:max实例属性

Name: max-instances

名称:最大实例数

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Provides a numeric value indicating the maximum number of recurrence instances that a calendar object resource stored in a calendar collection can generate.

目的:提供一个数值,指示存储在日历集合中的日历对象资源可以生成的最大重复实例数。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:max-instances is used to specify a numeric value that indicates the maximum number of recurrence instances that a calendar object resource stored in a calendar collection can generate. Any attempt to store a calendar object resource with a recurrence pattern that generates more instances than this value MUST result in an error, with the CALDAV:max-instances precondition (Section 5.3.2.1) being violated. In the absence of this property, the client can assume that the server has no limits on the number of recurrence instances it can handle or expand.

描述:CALDAV:max实例用于指定一个数值,该数值指示存储在日历集合中的日历对象资源可以生成的最大重复实例数。任何使用重复模式存储日历对象资源的尝试都会导致错误,并违反CALDAV:max instances前提条件(第5.3.2.1节)。在没有此属性的情况下,客户端可以假定服务器对其可以处理或扩展的重复实例的数量没有限制。

Definition:

定义:

         <!ELEMENT max-instances (#PCDATA)>
         PCDATA value: a numeric value (integer greater than zero)
        
         <!ELEMENT max-instances (#PCDATA)>
         PCDATA value: a numeric value (integer greater than zero)
        

Example:

例子:

         <C:max-instances xmlns:C="urn:ietf:params:xml:ns:caldav"
         >100</C:max-instances>
        
         <C:max-instances xmlns:C="urn:ietf:params:xml:ns:caldav"
         >100</C:max-instances>
        
5.2.9. CALDAV:max-attendees-per-instance Property
5.2.9. CALDAV:每个实例的最大与会者数属性

Name: max-attendees-per-instance

名称:每个实例的最大与会者数

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Provides a numeric value indicating the maximum number of ATTENDEE properties in any instance of a calendar object resource stored in a calendar collection.

目的:提供一个数值,指示存储在日历集合中的日历对象资源的任何实例中的最大与会者属性数。

Conformance: This property MAY be defined on any calendar collection. If defined, it MUST be protected and SHOULD NOT be

一致性:此属性可以在任何日历集合上定义。如果已定义,则必须对其进行保护,而不应

returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

由PROPFIND DAV:allprop请求返回(定义见[RFC2518]第12.14.1节)。

Description: The CALDAV:max-attendees-per-instance is used to specify a numeric value that indicates the maximum number of iCalendar ATTENDEE properties on any one instance of a calendar object resource stored in a calendar collection. Any attempt to store a calendar object resource with more ATTENDEE properties per instance than this value MUST result in an error, with the CALDAV: max-attendees-per-instance precondition (Section 5.3.2.1) being violated. In the absence of this property, the client can assume that the server can handle any number of ATTENDEE properties in a calendar component.

描述:CALDAV:max Attendes per instance用于指定一个数值,该数值指示存储在日历集合中的日历对象资源的任何一个实例上iCalendar ATTENDEE属性的最大数量。如果试图存储每个实例的与会者属性多于此值的日历对象资源,则必须导致错误,并违反CALDAV:每个实例的最大与会者数前提条件(第5.3.2.1节)。如果没有此属性,客户端可以假定服务器可以处理日历组件中任意数量的与会者属性。

Definition:

定义:

         <!ELEMENT max-attendees-per-instance (#PCDATA)>
         PCDATA value: a numeric value (integer greater than zero)
        
         <!ELEMENT max-attendees-per-instance (#PCDATA)>
         PCDATA value: a numeric value (integer greater than zero)
        

Example:

例子:

         <C:max-attendees-per-instance
              xmlns:C="urn:ietf:params:xml:ns:caldav"
         >25</C:max-attendees-per-instance>
        
         <C:max-attendees-per-instance
              xmlns:C="urn:ietf:params:xml:ns:caldav"
         >25</C:max-attendees-per-instance>
        
5.2.10. Additional Precondition for PROPPATCH
5.2.10. PROPPATCH的附加前提条件

This specification requires an additional Precondition for the PROPPATCH method. The precondition is:

本规范要求PROPPATCH方法的附加前提条件。前提是:

(CALDAV:valid-calendar-data): The time zone specified in CALDAV: calendar-timezone property MUST be a valid iCalendar object containing a single valid VTIMEZONE component.

(CALDAV:valid calendar data):CALDAV:calendar timezone属性中指定的时区必须是有效的iCalendar对象,其中包含单个有效的VTIMEZONE组件。

5.3. Creating Resources
5.3. 创造资源

Calendar collections and calendar object resources may be created by either a CalDAV client or by the CalDAV server. This specification defines restrictions and a data model that both clients and servers MUST adhere to when manipulating such calendar data.

日历集合和日历对象资源可以由CalDAV客户端或CalDAV服务器创建。此规范定义了客户端和服务器在处理此类日历数据时必须遵守的限制和数据模型。

5.3.1. MKCALENDAR Method
5.3.1. mk日历法

An HTTP request using the MKCALENDAR method creates a new calendar collection resource. A server MAY restrict calendar collection creation to particular collections.

使用MKCALENDAR方法的HTTP请求将创建新的日历集合资源。服务器可能会将日历集合的创建限制为特定集合。

Support for MKCALENDAR on the server is only RECOMMENDED and not REQUIRED because some calendar stores only support one calendar per user (or principal), and those are typically pre-created for each account. However, servers and clients are strongly encouraged to support MKCALENDAR whenever possible to allow users to create multiple calendar collections to help organize their data better.

仅建议且不要求在服务器上支持MKCALENDAR,因为某些日历存储仅支持每个用户(或主体)一个日历,并且通常为每个帐户预先创建这些日历。但是,强烈建议服务器和客户端尽可能支持MKCALENDAR,以允许用户创建多个日历集合,帮助更好地组织数据。

Clients SHOULD use the DAV:displayname property for a human-readable name of the calendar. Clients can either specify the value of the DAV:displayname property in the request body of the MKCALENDAR request, or alternatively issue a PROPPATCH request to change the DAV:displayname property to the appropriate value immediately after issuing the MKCALENDAR request. Clients SHOULD NOT set the DAV: displayname property to be the same as any other calendar collection at the same URI "level". When displaying calendar collections to users, clients SHOULD check the DAV:displayname property and use that value as the name of the calendar. In the event that the DAV: displayname property is empty, the client MAY use the last part of the calendar collection URI as the name; however, that path segment may be "opaque" and not represent any meaningful human-readable text.

客户端应使用DAV:displayname属性作为日历的可读名称。客户端可以在MKCALENDAR请求的请求正文中指定DAV:displayname属性的值,或者在发出MKCALENDAR请求后立即发出PROPPATCH请求将DAV:displayname属性更改为适当的值。客户端不应将DAV:displayname属性设置为与同一URI“级别”的任何其他日历集合相同。向用户显示日历集合时,客户端应检查DAV:displayname属性,并将该值用作日历的名称。如果DAV:displayname属性为空,客户端可以使用日历集合URI的最后一部分作为名称;然而,该路径段可能是“不透明的”,并且不代表任何有意义的人类可读文本。

If a MKCALENDAR request fails, the server state preceding the request MUST be restored.

如果MKCALENDAR请求失败,则必须恢复请求之前的服务器状态。

Marshalling: If a request body is included, it MUST be a CALDAV:mkcalendar XML element. Instruction processing MUST occur in the order instructions are received (i.e., from top to bottom). Instructions MUST either all be executed or none executed. Thus, if any error occurs during processing, all executed instructions MUST be undone and a proper error result returned. Instruction processing details can be found in the definition of the DAV:set instruction in Section 12.13.2 of [RFC2518].

编组:如果包含请求主体,则它必须是CALDAV:mkcalendar XML元素。指令处理必须按照接收指令的顺序进行(即从上到下)。指令必须全部执行或不执行。因此,如果在处理过程中发生任何错误,则必须撤消所有执行的指令,并返回正确的错误结果。指令处理细节见[RFC2518]第12.13.2节中的DAV:set指令定义。

         <!ELEMENT mkcalendar (DAV:set)>
        
         <!ELEMENT mkcalendar (DAV:set)>
        

If a response body for a successful request is included, it MUST be a CALDAV:mkcalendar-response XML element.

如果包含成功请求的响应正文,则它必须是CALDAV:mkcalendar响应XML元素。

         <!ELEMENT mkcalendar-response ANY>
        
         <!ELEMENT mkcalendar-response ANY>
        

The response MUST include a Cache-Control:no-cache header.

响应必须包括缓存控件:无缓存标头。

Preconditions:

先决条件:

(DAV:resource-must-be-null): A resource MUST NOT exist at the Request-URI;

(DAV:resource必须为null):请求URI中不能存在资源;

(CALDAV:calendar-collection-location-ok): The Request-URI MUST identify a location where a calendar collection can be created;

(CALDAV:日历集合位置确定):请求URI必须标识可以创建日历集合的位置;

(CALDAV:valid-calendar-data): The time zone specified in the CALDAV:calendar-timezone property MUST be a valid iCalendar object containing a single valid VTIMEZONE component;

(CALDAV:valid calendar data):CALDAV:calendar timezone属性中指定的时区必须是有效的iCalendar对象,其中包含单个有效的VTIMEZONE组件;

(DAV:needs-privilege): The DAV:bind privilege MUST be granted to the current user on the parent collection of the Request-URI.

(DAV:needs privilege):必须在请求URI的父集合上将DAV:bind特权授予当前用户。

Postconditions:

后条件:

(CALDAV:initialize-calendar-collection): A new calendar collection exists at the Request-URI. The DAV:resourcetype of the calendar collection MUST contain both DAV:collection and CALDAV:calendar XML elements.

(CALDAV:初始化日历集合):请求URI处存在新的日历集合。日历集合的DAV:resourcetype必须同时包含DAV:collection和CALDAV:calendar XML元素。

5.3.1.1. Status Codes
5.3.1.1. 状态代码

The following are examples of response codes one would expect to get in a response to a MKCALENDAR request. Note that this list is by no means exhaustive.

以下是在对MKCALENDAR请求的响应中期望得到的响应代码示例。请注意,此列表并非详尽无遗。

201 (Created) - The calendar collection resource was created in its entirety;

201(已创建)-日历集合资源已全部创建;

207 (Multi-Status) - The calendar collection resource was not created since one or more DAV:set instructions specified in the request body could not be processed successfully. The following are examples of response codes one would expect to be used in a 207 (Multi-Status) response in this situation:

207(多状态)-由于无法成功处理请求正文中指定的一个或多个DAV:set指令,因此未创建日历集合资源。以下是在此情况下207(多状态)响应中预期使用的响应代码示例:

403 (Forbidden) - The client, for reasons the server chooses not to specify, cannot alter one of the properties;

403(禁止)-由于服务器选择不指定的原因,客户端无法更改其中一个属性;

409 (Conflict) - The client has provided a value whose semantics are not appropriate for the property. This includes trying to set read-only properties;

409(冲突)-客户端提供了一个语义不适合该属性的值。这包括尝试设置只读属性;

424 (Failed Dependency) - The DAV:set instruction on the specified resource would have succeeded if it were not for the failure of another DAV:set instruction specified in the request body;

424(失败的依赖项)-如果不是请求正文中指定的另一条DAV:set指令失败,则指定资源上的DAV:set指令将成功;

423 (Locked) - The specified resource is locked and the client either is not a lock owner or the lock type requires a lock token to be submitted and the client did not submit it; and

423(已锁定)-指定的资源已锁定,客户端不是锁所有者,或者锁类型要求提交锁令牌,但客户端未提交;和

507 (Insufficient Storage) - The server did not have sufficient space to record the property;

507(存储不足)-服务器没有足够的空间来记录属性;

403 (Forbidden) - This indicates at least one of two conditions: 1) the server does not allow the creation of calendar collections at the given location in its namespace, or 2) the parent collection of the Request-URI exists but cannot accept members;

403(禁止)-这表示两种情况中的至少一种:1)服务器不允许在其命名空间中的给定位置创建日历集合,或2)请求URI的父集合存在但无法接受成员;

409 (Conflict) - A collection cannot be made at the Request-URI until one or more intermediate collections have been created;

409(冲突)-在创建一个或多个中间集合之前,无法根据请求URI创建集合;

415 (Unsupported Media Type) - The server does not support the request type of the body; and

415(不支持的媒体类型)-服务器不支持主体的请求类型;和

507 (Insufficient Storage) - The resource does not have sufficient space to record the state of the resource after the execution of this method.

507(存储不足)-执行此方法后,资源没有足够的空间来记录资源的状态。

5.3.1.2. Example: Successful MKCALENDAR Request
5.3.1.2. 示例:成功的MKCALENDAR请求

This example creates a calendar collection called /home/lisa/ calendars/events/ on the server cal.example.com with specific values for the properties DAV:displayname, CALDAV:calendar-description, CALDAV:supported-calendar-component-set, and CALDAV:calendar-timezone.

此示例在服务器cal.example.com上创建一个名为/home/lisa/calendars/events/的日历集合,其中包含属性DAV:displayname、CALDAV:calendar description、CALDAV:supported calendar component set和CALDAV:calendar timezone的特定值。

   >> Request <<
        
   >> Request <<
        
   MKCALENDAR /home/lisa/calendars/events/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   MKCALENDAR /home/lisa/calendars/events/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:mkcalendar xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:set>
       <D:prop>
         <D:displayname>Lisa's Events</D:displayname>
         <C:calendar-description xml:lang="en"
   >Calendar restricted to events.</C:calendar-description>
         <C:supported-calendar-component-set>
           <C:comp name="VEVENT"/>
         </C:supported-calendar-component-set>
         <C:calendar-timezone><![CDATA[BEGIN:VCALENDAR
   PRODID:-//Example Corp.//CalDAV Client//EN
   VERSION:2.0
   BEGIN:VTIMEZONE
   TZID:US-Eastern
   LAST-MODIFIED:19870101T000000Z
   BEGIN:STANDARD
   DTSTART:19671029T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   TZNAME:Eastern Standard Time (US & Canada)
   END:STANDARD
   BEGIN:DAYLIGHT
   DTSTART:19870405T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   TZNAME:Eastern Daylight Time (US & Canada)
   END:DAYLIGHT
   END:VTIMEZONE
   END:VCALENDAR
   ]]></C:calendar-timezone>
       </D:prop>
     </D:set>
   </C:mkcalendar>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:mkcalendar xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:set>
       <D:prop>
         <D:displayname>Lisa's Events</D:displayname>
         <C:calendar-description xml:lang="en"
   >Calendar restricted to events.</C:calendar-description>
         <C:supported-calendar-component-set>
           <C:comp name="VEVENT"/>
         </C:supported-calendar-component-set>
         <C:calendar-timezone><![CDATA[BEGIN:VCALENDAR
   PRODID:-//Example Corp.//CalDAV Client//EN
   VERSION:2.0
   BEGIN:VTIMEZONE
   TZID:US-Eastern
   LAST-MODIFIED:19870101T000000Z
   BEGIN:STANDARD
   DTSTART:19671029T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   TZNAME:Eastern Standard Time (US & Canada)
   END:STANDARD
   BEGIN:DAYLIGHT
   DTSTART:19870405T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   TZNAME:Eastern Daylight Time (US & Canada)
   END:DAYLIGHT
   END:VTIMEZONE
   END:VCALENDAR
   ]]></C:calendar-timezone>
       </D:prop>
     </D:set>
   </C:mkcalendar>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 201 Created
   Cache-Control: no-cache
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Length: 0
        
   HTTP/1.1 201 Created
   Cache-Control: no-cache
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Length: 0
        
5.3.2. Creating Calendar Object Resources
5.3.2. 创建日历对象资源

Clients populate calendar collections with calendar object resources. The URL for each calendar object resource is entirely arbitrary and does not need to bear a specific relationship to the calendar object resource's iCalendar properties or other metadata. New calendar object resources MUST be created with a PUT request targeted at an unmapped URI. A PUT request targeted at a mapped URI updates an existing calendar object resource.

客户端使用日历对象资源填充日历集合。每个日历对象资源的URL完全是任意的,不需要与日历对象资源的iCalendar属性或其他元数据具有特定关系。必须使用针对未映射URI的PUT请求创建新的日历对象资源。针对映射URI的PUT请求更新现有日历对象资源。

When servers create new resources, it's not hard for the server to choose an unmapped URI. It's slightly tougher for clients, because a client might not want to examine all resources in the collection and might not want to lock the entire collection to ensure that a new resource isn't created with a name collision. However, there is an HTTP feature to mitigate this. If the client intends to create a new non-collection resource, such as a new VEVENT, the client SHOULD use the HTTP request header "If-None-Match: *" on the PUT request. The Request-URI on the PUT request MUST include the target collection, where the resource is to be created, plus the name of the resource in the last path segment. The "If-None-Match: *" request header ensures that the client will not inadvertently overwrite an existing resource if the last path segment turned out to already be used.

当服务器创建新资源时,服务器不难选择未映射的URI。对于客户端来说,这稍微有些困难,因为客户端可能不希望检查集合中的所有资源,也可能不希望锁定整个集合以确保创建新资源时不会发生名称冲突。但是,有一个HTTP特性可以缓解这种情况。如果客户端打算创建新的非收集资源,例如新的VEVENT,则客户端应在PUT请求上使用HTTP请求头“If None Match:*”。PUT请求上的请求URI必须包括要在其中创建资源的目标集合,以及最后一个路径段中的资源名称。“If None Match:*”请求头确保,如果最后一个路径段已被使用,客户端不会无意中覆盖现有资源。

   >> Request <<
        
   >> Request <<
        
   PUT /home/lisa/calendars/events/qwue23489.ics HTTP/1.1
   If-None-Match: *
   Host: cal.example.com
   Content-Type: text/calendar
   Content-Length: xxxx
        
   PUT /home/lisa/calendars/events/qwue23489.ics HTTP/1.1
   If-None-Match: *
   Host: cal.example.com
   Content-Type: text/calendar
   Content-Length: xxxx
        
   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VEVENT
   UID:20010712T182145Z-123401@example.com
   DTSTAMP:20060712T182145Z
   DTSTART:20060714T170000Z
   DTEND:20060715T040000Z
   SUMMARY:Bastille Day Party
   END:VEVENT
   END:VCALENDAR
        
   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VEVENT
   UID:20010712T182145Z-123401@example.com
   DTSTAMP:20060712T182145Z
   DTSTART:20060714T170000Z
   DTEND:20060715T040000Z
   SUMMARY:Bastille Day Party
   END:VEVENT
   END:VCALENDAR
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 201 Created
   Content-Length: 0
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   ETag: "123456789-000-111"
        
   HTTP/1.1 201 Created
   Content-Length: 0
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   ETag: "123456789-000-111"
        

The request to change an existing event is the same, but with a specific ETag in the "If-Match" header, rather than the "If-None-Match" header.

更改现有事件的请求是相同的,但是在“If Match”头中有一个特定的ETag,而不是在“If None Match”头中。

As indicated in Section 3.10 of [RFC2445], the URL of calendar object resources containing (an arbitrary set of) calendaring and scheduling information may be suffixed by ".ics", and the URL of calendar object resources containing free or busy time information may be suffixed by ".ifb".

如[RFC2445]第3.10节所述,包含(任意一组)日历和日程安排信息的日历对象资源的URL可以后缀为“.ics”,包含空闲或繁忙时间信息的日历对象资源的URL可以后缀为“.ifb”。

5.3.2.1. Additional Preconditions for PUT, COPY, and MOVE
5.3.2.1. 放置、复制和移动的附加先决条件

This specification creates additional Preconditions for PUT, COPY, and MOVE methods. These preconditions apply when a PUT operation of a calendar object resource into a calendar collection occurs, or when a COPY or MOVE operation of a calendar object resource into a calendar collection occurs, or when a COPY or MOVE operation occurs on a calendar collection.

本规范为PUT、COPY和MOVE方法创建了附加的先决条件。这些先决条件适用于将日历对象资源放入日历集合的操作,或将日历对象资源复制或移动到日历集合的操作,或对日历集合执行复制或移动操作。

The new preconditions are:

新的先决条件是:

(CALDAV:supported-calendar-data): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST be a supported media type (i.e., iCalendar) for calendar object resources;

(CALDAV:支持的日历数据):在PUT请求中提交的资源,或复制或移动请求的目标资源,必须是日历对象资源支持的媒体类型(即iCalendar);

(CALDAV:valid-calendar-data): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST be valid data for the media type being specified (i.e., MUST contain valid iCalendar data);

(CALDAV:有效日历数据):PUT请求中提交的资源,或复制或移动请求的目标资源,必须是指定媒体类型的有效数据(即,必须包含有效的iCalendar数据);

(CALDAV:valid-calendar-object-resource): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST obey all restrictions specified in Section 4.1 (e.g., calendar object resources MUST NOT contain more than one type of calendar component, calendar object resources MUST NOT specify the iCalendar METHOD property, etc.);

(CALDAV:有效日历对象资源):PUT请求中提交的资源,或复制或移动请求的目标资源,必须遵守第4.1节中规定的所有限制(例如,日历对象资源不得包含一种以上类型的日历组件,日历对象资源不得指定iCalendar方法属性等);

(CALDAV:supported-calendar-component): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST contain a type of calendar component that is supported in the targeted calendar collection;

(CALDAV:支持的日历组件):在PUT请求中提交的资源,或复制或移动请求的目标资源,必须包含目标日历集合中支持的日历组件类型;

(CALDAV:no-uid-conflict): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST NOT specify an iCalendar UID property value already in use in the targeted calendar collection or overwrite an existing calendar object resource with one that has a different UID property value. Servers SHOULD report the URL of the resource that is already making use of the same UID property value in the DAV:href element;

(CALDAV:无uid冲突):在PUT请求中提交的资源,或复制或移动请求的目标资源,不得指定目标日历集合中已在使用的iCalendar uid属性值,或使用具有不同uid属性值的资源覆盖现有日历对象资源。服务器应报告已在DAV:href元素中使用相同UID属性值的资源的URL;

                <!ELEMENT no-uid-conflict (DAV:href)>
        
                <!ELEMENT no-uid-conflict (DAV:href)>
        

(CALDAV:calendar-collection-location-ok): In a COPY or MOVE request, when the Request-URI is a calendar collection, the Destination-URI MUST identify a location where a calendar collection can be created;

(CALDAV:日历集合位置确定):在复制或移动请求中,当请求URI是日历集合时,目标URI必须标识可以创建日历集合的位置;

(CALDAV:max-resource-size): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST have an octet size less than or equal to the value of the CALDAV:max-resource-size property value (Section 5.2.5) on the calendar collection where the resource will be stored;

(CALDAV:max resource size):在PUT请求中提交的资源,或复制或移动请求的目标资源,其八位字节大小必须小于或等于将存储资源的日历集合上CALDAV:max resource size属性值(第5.2.5节)的值;

(CALDAV:min-date-time): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST have all of its iCalendar DATE or DATE-TIME property values (for each recurring

(CALDAV:min date time):在PUT请求中提交的资源,或复制或移动请求所针对的资源,必须具有其所有iCalendar date或date-time属性值(对于每个周期)

instance) greater than or equal to the value of the CALDAV:min-date-time property value (Section 5.2.6) on the calendar collection where the resource will be stored;

实例)大于或等于将存储资源的日历集合上的CALDAV:min日期时间属性值(第5.2.6节);

(CALDAV:max-date-time): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST have all of its iCalendar DATE or DATE-TIME property values (for each recurring instance) less than the value of the CALDAV:max-date-time property value (Section 5.2.7) on the calendar collection where the resource will be stored;

(CALDAV:max date time):在PUT请求中提交的资源,或复制或移动请求所针对的资源,其所有iCalendar日期或日期时间属性值(对于每个重复实例)必须小于将存储资源的日历集合上CALDAV:max date时间属性值(第5.2.7节);

(CALDAV:max-instances): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST generate a number of recurring instances less than or equal to the value of the CALDAV: max-instances property value (Section 5.2.8) on the calendar collection where the resource will be stored;

(CALDAV:max instances):在PUT请求中提交的资源,或复制或移动请求所针对的资源,必须在存储资源的日历集合上生成数量小于或等于CALDAV:max instances属性值(第5.2.8节)的周期性实例;

(CALDAV:max-attendees-per-instance): The resource submitted in the PUT request, or targeted by a COPY or MOVE request, MUST have a number of ATTENDEE properties on any one instance less than or equal to the value of the CALDAV:max-attendees-per-instance property value (Section 5.2.9) on the calendar collection where the resource will be stored;

(CALDAV:max Attendeers per instance):在PUT请求中提交的资源,或复制或移动请求所针对的资源,在任何一个实例上必须具有多个Attendeer属性,其值必须小于或等于存储资源的日历集合上CALDAV:max Attendeers per instance属性值(第5.2.9节);

5.3.3. Non-Standard Components, Properties, and Parameters
5.3.3. 非标准零部件、特性和参数

iCalendar provides a "standard mechanism for doing non-standard things". This extension support allows implementers to make use of non-standard components, properties, and parameters whose names are prefixed with the text "X-".

iCalendar提供了“做非标准事情的标准机制”。这种扩展支持允许实现者使用名称前缀为文本“X-”的非标准组件、属性和参数。

Servers MUST support the use of non-standard components, properties, and parameters in calendar object resources stored via the PUT method.

服务器必须支持在通过PUT方法存储的日历对象资源中使用非标准组件、属性和参数。

Servers may need to enforce rules for their own "private" components, properties, or parameters, so servers MAY reject any attempt by the client to change those or use values for those outside of any restrictions the server may have. Servers SHOULD ensure that any "private" components, properties, or parameters it uses follow the convention of including a vendor id in the "X-" name, as described in Section 4.2 of [RFC2445], e.g., "X-ABC-PRIVATE".

服务器可能需要为其自己的“私有”组件、属性或参数强制执行规则,因此服务器可能会拒绝客户端更改这些组件、属性或参数的任何尝试,或使用服务器可能具有的任何限制之外的值。服务器应确保其使用的任何“专用”组件、属性或参数遵循在“X-”名称中包含供应商id的约定,如[RFC2445]第4.2节所述,例如“X-ABC-private”。

5.3.4. Calendar Object Resource Entity Tag
5.3.4. 日历对象资源实体标记

The DAV:getetag property MUST be defined and set to a strong entity tag on all calendar object resources.

必须在所有日历对象资源上定义DAV:getetag属性并将其设置为强实体标记。

A response to a GET request targeted at a calendar object resource MUST contain an ETag response header field indicating the current value of the strong entity tag of the calendar object resource.

针对日历对象资源的GET请求的响应必须包含ETag响应头字段,该字段指示日历对象资源的强实体标记的当前值。

Servers SHOULD return a strong entity tag (ETag header) in a PUT response when the stored calendar object resource is equivalent by octet equality to the calendar object resource submitted in the body of the PUT request. This allows clients to reliably use the returned strong entity tag for data synchronization purposes. For instance, the client can do a PROPFIND request on the stored calendar object resource and have the DAV:getetag property returned, and compare that value with the strong entity tag it received on the PUT response, and know that if they are equal, then the calendar object resource on the server has not been changed.

当存储的日历对象资源与PUT请求主体中提交的日历对象资源的八位字节相等时,服务器应在PUT响应中返回强实体标记(ETag头)。这允许客户端可靠地使用返回的强实体标记进行数据同步。例如,客户端可以对存储的日历对象资源执行PROPFIND请求,并返回DAV:getetag属性,然后将该值与它在PUT响应上接收到的强实体标记进行比较,并知道如果它们相等,则服务器上的日历对象资源未被更改。

In the case where the data stored by a server as a result of a PUT request is not equivalent by octet equality to the submitted calendar object resource, the behavior of the ETag response header is not specified here, with the exception that a strong entity tag MUST NOT be returned in the response. As a result, clients may need to retrieve the modified calendar object resource (and ETag) as a basis for further changes, rather than use the calendar object resource it had sent with the PUT request.

如果服务器因PUT请求而存储的数据与提交的日历对象资源的八位字节相等性不同,则此处不指定ETag响应头的行为,但响应中不得返回强实体标记除外。因此,客户端可能需要检索修改后的日历对象资源(和ETag)作为进一步更改的基础,而不是使用它随PUT请求发送的日历对象资源。

6. Calendaring Access Control
6. 日历访问控制
6.1. Calendaring Privilege
6.1. 日历特权

CalDAV servers MUST support and adhere to the requirements of WebDAV ACL [RFC3744]. WebDAV ACL provides a framework for an extensible set of privileges that can be applied to WebDAV collections and ordinary resources. CalDAV servers MUST also support the calendaring privilege defined in this section.

CalDAV服务器必须支持并遵守WebDAV ACL[RFC3744]的要求。WebDAV ACL为可扩展权限集提供了一个框架,该权限集可应用于WebDAV集合和普通资源。CalDAV服务器还必须支持本节中定义的日历权限。

6.1.1. CALDAV:read-free-busy Privilege
6.1.1. CALDAV:读取忙/闲特权

Calendar users often wish to allow other users to see their busy time information, without viewing the other details of the calendar components (e.g., location, summary, attendees). This allows a significant amount of privacy while still allowing other users to schedule meetings at times when the user is likely to be free.

日历用户通常希望允许其他用户查看其繁忙时间信息,而不查看日历组件的其他详细信息(例如,位置、摘要、与会者)。这允许大量的隐私,同时还允许其他用户在用户可能空闲的时候安排会议。

The CALDAV:read-free-busy privilege controls which calendar collections, regular collections, and calendar object resources are examined when a CALDAV:free-busy-query REPORT request is processed (see Section 7.10). This privilege can be granted on calendar collections, regular collections, or calendar object resources.

CALDAV:read free-busy权限控制在处理CALDAV:free-busy查询报告请求时检查哪些日历集合、常规集合和日历对象资源(请参见第7.10节)。可以对日历集合、常规集合或日历对象资源授予此权限。

Servers MUST support this privilege on all calendar collections, regular collections, and calendar object resources.

服务器必须在所有日历集合、常规集合和日历对象资源上支持此权限。

           <!ELEMENT read-free-busy EMPTY>
        
           <!ELEMENT read-free-busy EMPTY>
        

The CALDAV:read-free-busy privilege MUST be aggregated in the DAV: read privilege. Servers MUST allow the CALDAV:read-free-busy to be granted without the DAV:read privilege being granted.

必须在DAV:read权限中聚合CALDAV:read闲-忙权限。服务器必须允许在不授予DAV:read权限的情况下授予CALDAV:read free busy。

Clients should note that when only the CALDAV:read-free-busy privilege has been granted on a resource, access to GET, HEAD, OPTIONS, and PROPFIND on the resource is not implied (those operations are governed by the DAV:read privilege).

客户机应该注意,如果仅对资源授予了CALDAV:read-free-busy权限,则不会暗示对资源的GET、HEAD、OPTIONS和PROPFIND的访问(这些操作由DAV:read权限控制)。

6.2. Additional Principal Property
6.2. 附加主要财产

This section defines an additional property for WebDAV principal resources, as defined in [RFC3744].

本节定义了WebDAV主体资源的附加属性,如[RFC3744]中所定义。

6.2.1. CALDAV:calendar-home-set Property
6.2.1. CALDAV:日历主设置属性

Name: calendar-home-set

名称:日历主页集

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Identifies the URL of any WebDAV collections that contain calendar collections owned by the associated principal resource.

目的:标识包含关联主体资源拥有的日历集合的任何WebDAV集合的URL。

Conformance: This property SHOULD be defined on a principal resource. If defined, it MAY be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:应在主体资源上定义此属性。如果已定义,则可以对其进行保护,且不应通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节中的定义)。

Description: The CALDAV:calendar-home-set property is meant to allow users to easily find the calendar collections owned by the principal. Typically, users will group all the calendar collections that they own under a common collection. This property specifies the URL of collections that are either calendar collections or ordinary collections that have child or descendant calendar collections owned by the principal.

描述:CALDAV:calendar home set属性旨在允许用户轻松找到委托人拥有的日历集合。通常,用户会将他们拥有的所有日历集合分组到一个公共集合下。此属性指定集合的URL,这些集合可以是日历集合,也可以是具有主体所拥有的子日历集合或子日历集合的普通集合。

Definition:

定义:

         <!ELEMENT calendar-home-set (DAV:href*)>
        
         <!ELEMENT calendar-home-set (DAV:href*)>
        

Example:

例子:

       <C:calendar-home-set xmlns:D="DAV:"
                            xmlns:C="urn:ietf:params:xml:ns:caldav">
         <D:href>http://cal.example.com/home/bernard/calendars/</D:href>
       </C:calendar-home-set>
        
       <C:calendar-home-set xmlns:D="DAV:"
                            xmlns:C="urn:ietf:params:xml:ns:caldav">
         <D:href>http://cal.example.com/home/bernard/calendars/</D:href>
       </C:calendar-home-set>
        
7. Calendaring Reports
7. 日历报告

This section defines the reports that CalDAV servers MUST support on calendar collections and calendar object resources.

本节定义CalDAV服务器在日历集合和日历对象资源上必须支持的报告。

CalDAV servers MUST advertise support for these reports on all calendar collections and calendar object resources with the DAV: supported-report-set property, defined in Section 3.1.5 of [RFC3253]. CalDAV servers MAY also advertise support for these reports on ordinary collections.

CalDAV服务器必须使用[RFC3253]第3.1.5节中定义的DAV:supported report set属性在所有日历集合和日历对象资源上公布对这些报告的支持。CalDAV服务器还可以在普通集合上公布对这些报告的支持。

Some of these reports allow calendar data (from possibly multiple resources) to be returned.

其中一些报告允许返回日历数据(可能来自多个资源)。

7.1. REPORT Method
7.1. 报告方法

The REPORT method (defined in Section 3.6 of [RFC3253]) provides an extensible mechanism for obtaining information about one or more resources. Unlike the PROPFIND method, which returns the value of one or more named properties, the REPORT method can involve more complex processing. REPORT is valuable in cases where the server has access to all of the information needed to perform the complex request (such as a query), and where it would require multiple requests for the client to retrieve the information needed to perform the same request.

报告方法(定义见[RFC3253]第3.6节)提供了一种可扩展的机制,用于获取有关一个或多个资源的信息。与PROPFIND方法(返回一个或多个命名属性的值)不同,REPORT方法可能涉及更复杂的处理。当服务器可以访问执行复杂请求(如查询)所需的所有信息,并且客户端需要多次请求才能检索执行同一请求所需的信息时,报表非常有用。

CalDAV servers MUST support the DAV:expand-property REPORT defined in Section 3.8 of [RFC3253].

CalDAV服务器必须支持[RFC3253]第3.8节中定义的DAV:expand属性报告。

7.2. Ordinary Collections
7.2. 普通藏品

Servers MAY support the reports defined in this document on ordinary collections (collections that are not calendar collections), in addition to calendar collections or calendar object resources. In computing responses to the reports on ordinary collections, servers MUST only consider calendar object resources contained in calendar collections that are targeted by the REPORT request, based on the value of the Depth request header.

除了日历集合或日历对象资源之外,服务器还可以支持本文档中定义的关于普通集合(不是日历集合的集合)的报告。在计算对普通集合的报告的响应时,服务器必须只考虑基于深度请求头部的值的包含在报表请求目标的日历集合中的日历对象资源。

7.3. Date and Floating Time
7.3. 日期和浮动时间

iCalendar provides a way to specify DATE and DATE-TIME values that are not bound to any time zone in particular, hereafter called "floating date" and "floating time", respectively. These values are used to represent the same day, hour, minute, and second value, regardless of which time zone is being observed. For instance, the DATE value "20051111", represents November 11, 2005 in no specific time zone, while the DATE-TIME value "20051111T111100" represents November 11, 2005, at 11:11 A.M. in no specific time zone.

iCalendar提供了一种指定日期和日期时间值的方法,这些值不受任何时区的限制,以下分别称为“浮动日期”和“浮动时间”。这些值用于表示同一天、小时、分钟和秒值,而不管观察的是哪个时区。具体时区为“2005年11月11日”,具体时区为“2005年11月11日”,数值为“2005年11月11日”,数值为“2005年11月11日”。

CalDAV servers may need to convert "floating date" and "floating time" values in date with UTC time values in the processing of calendaring REPORT requests.

在处理日历报告请求时,CalDAV服务器可能需要将日期中的“浮动日期”和“浮动时间”值转换为UTC时间值。

For the CALDAV:calendar-query REPORT, CalDAV servers MUST rely on the value of the CALDAV:timezone XML element, if specified as part of the request body, to perform the proper conversion of "floating date" and "floating time" values to date with UTC time values. If the CALDAV: timezone XML element is not specified in the request body, CalDAV servers MUST rely on the value of the CALDAV:calendar-timezone property, if defined, or else the CalDAV servers MAY rely on the time zone of their choice.

对于CALDAV:calendar查询报告,CALDAV服务器必须依赖CALDAV:timezone XML元素的值(如果指定为请求正文的一部分),以执行“浮动日期”和“浮动时间”值到UTC时间值的正确转换。如果请求正文中未指定CALDAV:timezone XML元素,则CALDAV服务器必须依赖于CALDAV:calendar timezone属性的值(如果已定义),否则CALDAV服务器可能依赖于其选择的时区。

For the CALDAV:free-busy-query REPORT, CalDAV servers MUST rely on the value of the CALDAV:calendar-timezone property, if defined, to compute the proper FREEBUSY time period value as date with UTC time for calendar components scheduled with "floating date" or "floating time". If the CALDAV:calendar-timezone property is not defined, CalDAV servers MAY rely on the time zone of their choice.

对于CALDAV:free-busy查询报告,CALDAV服务器必须依赖CALDAV:calendar时区属性(如果已定义)的值,为使用“浮动日期”或“浮动时间”计划的日历组件计算适当的FREEBUSY时间段值作为日期和UTC时间。如果未定义CALDAV:calendar时区属性,CALDAV服务器可能依赖于其选择的时区。

7.4. Time Range Filtering
7.4. 时间范围滤波

Some of the reports defined in this section can include a time range filter that is used to restrict the set of calendar object resources returned to just those that overlap the specified time range. The time range filter can be applied to a calendar component as a whole, or to specific calendar component properties with DATE or DATE-TIME value types.

本节中定义的某些报告可以包含时间范围筛选器,用于将返回的日历对象资源集限制为仅与指定时间范围重叠的日历对象资源集。时间范围筛选器可以应用于整个日历组件,也可以应用于具有日期或日期时间值类型的特定日历组件属性。

To determine whether a calendar object resource matches the time range filter element, the start and end times for the targeted component or property are determined and then compared to the requested time range. If there is an overlap with the requested time range, then the calendar object resource matches the filter element. The rules defined in [RFC2445] for determining the actual start and end times of calendar components MUST be used, and these are fully enumerated in Section 9.9 of this document.

要确定日历对象资源是否与时间范围筛选器元素匹配,将确定目标组件或属性的开始和结束时间,然后与请求的时间范围进行比较。如果与请求的时间范围重叠,则日历对象资源与筛选器元素匹配。必须使用[RFC2445]中定义的用于确定日历组件实际开始和结束时间的规则,这些规则在本文件第9.9节中有详细列举。

When such time range filtering is used, special consideration must be given to recurring calendar components, such as VEVENT and VTODO. The server MUST expand recurring components to determine whether any recurrence instances overlap the specified time range. If one or more recurrence instances overlap the time range, then the calendar object resource matches the filter element.

当使用这种时间范围过滤时,必须特别考虑周期性日历组件,如VEVENT和VTODO。服务器必须展开定期组件,以确定是否有任何定期实例与指定的时间范围重叠。如果一个或多个重复实例与时间范围重叠,则日历对象资源与筛选器元素匹配。

7.5. Searching Text: Collations
7.5. 搜索文本:排序规则

Some of the reports defined in this section do text matches of character strings provided by the client and are compared to stored calendar data. Since iCalendar data is, by default, encoded in the UTF-8 charset and may include characters outside the US-ASCII charset range in some property and parameter values, there is a need to ensure that text matching follows well-defined rules.

本节中定义的某些报告对客户端提供的字符串进行文本匹配,并与存储的日历数据进行比较。由于默认情况下,iCalendar数据以UTF-8字符集编码,并且在某些属性和参数值中可能包含US-ASCII字符集范围之外的字符,因此需要确保文本匹配遵循定义良好的规则。

To deal with this, this specification makes use of the IANA Collation Registry defined in [RFC4790] to specify collations that may be used to carry out the text comparison operations with a well-defined rule.

为了解决这个问题,本规范使用[RFC4790]中定义的IANA排序规则注册表来指定排序规则,这些排序规则可用于使用定义良好的规则执行文本比较操作。

The comparisons used in CalDAV are all "substring" matches, as per [RFC4790], Section 4.2. Collations supported by the server MUST support "substring" match operations.

根据[RFC4790]第4.2节,CalDAV中使用的比较均为“子字符串”匹配。服务器支持的排序规则必须支持“子字符串”匹配操作。

CalDAV servers are REQUIRED to support the "i;ascii-casemap" and "i;octet" collations, as described in [RFC4790], and MAY support other collations.

CalDAV服务器需要支持[RFC4790]中所述的“i;ascii casemap”和“i;octet”排序规则,并且可能支持其他排序规则。

Servers MUST advertise the set of collations that they support via the CALDAV:supported-collation-set property defined on any resource that supports reports that use collations.

服务器必须通过在支持使用排序规则的报表的任何资源上定义的CALDAV:supported collation set属性公布它们支持的排序规则集。

Clients MUST only use collations from the list advertised by the server.

客户端只能使用服务器公布的列表中的排序规则。

In the absence of a collation explicitly specified by the client, or if the client specifies the "default" collation identifier (as defined in [RFC4790], Section 3.1), the server MUST default to using "i;ascii-casemap" as the collation.

如果没有客户机明确指定的排序规则,或者如果客户机指定了“默认”排序规则标识符(如[RFC4790]第3.1节中的定义),则服务器必须默认使用“i;ascii casemap”作为排序规则。

Wildcards (as defined in [RFC4790], Section 3.2) MUST NOT be used in the collation identifier.

排序规则标识符中不得使用通配符(如[RFC4790]第3.2节中的定义)。

If the client chooses a collation not supported by the server, the server MUST respond with a CALDAV:supported-collation precondition error response.

如果客户端选择了服务器不支持的排序规则,服务器必须使用CALDAV:supported collation premission错误响应进行响应。

7.5.1. CALDAV:supported-collation-set Property
7.5.1. CALDAV:支持的排序规则集属性

Name: supported-collation-set

名称:支持的排序规则集

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Identifies the set of collations supported by the server for text matching operations.

目的:标识服务器支持的用于文本匹配操作的排序规则集。

Conformance: This property MUST be defined on any resource that supports a report that does text matching. If defined, it MUST be protected and SHOULD NOT be returned by a PROPFIND DAV:allprop request (as defined in Section 12.14.1 of [RFC2518]).

一致性:必须在支持进行文本匹配的报表的任何资源上定义此属性。如果已定义,则必须对其进行保护,且不得通过PROPFIND DAV:allprop请求返回(如[RFC2518]第12.14.1节所定义)。

Description: The CALDAV:supported-collation-set property contains zero or more CALDAV:supported-collation elements, which specify the collection identifiers of the collations supported by the server.

描述:CALDAV:supported排序规则集属性包含零个或多个CALDAV:supported排序规则元素,这些元素指定服务器支持的排序规则的集合标识符。

Definition:

定义:

         <!ELEMENT supported-collation-set (supported-collation*)>
        
         <!ELEMENT supported-collation-set (supported-collation*)>
        
         <!ELEMENT supported-collation (#PCDATA)>
        
         <!ELEMENT supported-collation (#PCDATA)>
        

Example:

例子:

       <C:supported-collation-set
           xmlns:C="urn:ietf:params:xml:ns:caldav">
         <C:supported-collation>i;ascii-casemap</C:supported-collation>
         <C:supported-collation>i;octet</C:supported-collation>
       </C:supported-collation-set>
        
       <C:supported-collation-set
           xmlns:C="urn:ietf:params:xml:ns:caldav">
         <C:supported-collation>i;ascii-casemap</C:supported-collation>
         <C:supported-collation>i;octet</C:supported-collation>
       </C:supported-collation-set>
        
7.6. Partial Retrieval
7.6. 部分检索

Some calendaring reports defined in this document allow partial retrieval of calendar object resources. A CalDAV client can specify what information to return in the body of a calendaring REPORT request.

此文档中定义的某些日历报告允许部分检索日历对象资源。CalDAV客户端可以指定在日历报告请求主体中返回哪些信息。

A CalDAV client can request particular WebDAV property values, all WebDAV property values, or a list of the names of the resource's WebDAV properties. A CalDAV client can also request calendar data to be returned and specify whether all calendar components and properties should be returned, or only particular ones. See CALDAV: calendar-data in Section 9.6.

CalDAV客户端可以请求特定的WebDAV属性值、所有WebDAV属性值或资源的WebDAV属性名称列表。CalDAV客户端还可以请求返回日历数据,并指定是返回所有日历组件和属性,还是仅返回特定的日历组件和属性。参见第9.6节中的CALDAV:日历数据。

By default, the returned calendar data will include the component that defines the recurrence set, referred to as the "master component", as well as the components that define exceptions to the recurrence set, referred to as the "overridden components".

默认情况下,返回的日历数据将包括定义重复集的组件(称为“主组件”),以及定义重复集异常的组件(称为“覆盖组件”)。

A CalDAV client that is only interested in the recurrence instances that overlap a specified time range can request to receive only the "master component", along with the "overridden components" that impact the specified time range, and thus, limit the data returned by the server (see CALDAV:limit-recurrence-set in Section 9.6.6). An overridden component impacts a time range if its current start and end times overlap the time range, or if the original start and end times -- the ones that would have been used if the instance were not overridden -- overlap the time range, or if it affects other instances that overlap the time range.

仅对与指定时间范围重叠的重复实例感兴趣的CalDAV客户端可以请求仅接收“主组件”以及影响指定时间范围的“覆盖组件”,从而限制服务器返回的数据(请参阅第9.6.6节中的CalDAV:限制重复设置)。如果被覆盖的组件的当前开始时间和结束时间与时间范围重叠,或者如果原始开始时间和结束时间(如果实例未被覆盖将使用的时间)与时间范围重叠,或者如果它影响与时间范围重叠的其他实例,则被覆盖的组件会影响时间范围。

A CalDAV client with no support for recurrence properties (i.e., EXDATE, EXRULE, RDATE, and RRULE) and possibly VTIMEZONE components, or a client unwilling to perform recurrence expansion because of limited processing capability, can request to receive only the recurrence instances that overlap a specified time range as separate calendar components that each define exactly one recurrence instance (see CALDAV:expand in Section 9.6.5.)

不支持定期属性(即EXDATE、EXRULE、RDATE和RRULE)和可能的VTIMEONE组件的CalDAV客户端,或由于处理能力有限而不愿意执行定期扩展的客户端,可以请求仅接收与指定时间范围重叠的重复实例,作为单独的日历组件,每个日历组件仅定义一个重复实例(请参阅第9.6.5节中的CALDAV:展开)

Finally, in the case of VFREEBUSY components, a CalDAV client can request to receive only the FREEBUSY property values that overlap a specified time range (see CALDAV:limit-freebusy-set in Section 9.6.7.)

最后,对于VFREEBUSY组件,CalDAV客户端可以请求仅接收与指定时间范围重叠的FREEBUSY属性值(请参阅第9.6.7节中的CalDAV:限制FREEBUSY设置)

7.7. Non-Standard Components, Properties, and Parameters
7.7. 非标准零部件、特性和参数

Servers MUST support the use of non-standard component, property, or parameter names in the CALDAV:calendar-data XML element in calendaring REPORT requests to allow clients to request that non-standard components, properties, and parameters be returned in the calendar data provided in the response.

服务器必须支持在日历报告请求中的CALDAV:calendar data XML元素中使用非标准组件、属性或参数名称,以允许客户端请求在响应中提供的日历数据中返回非标准组件、属性和参数。

Servers MAY support the use of non-standard component, property, or parameter names in the CALDAV:comp-filter, CALDAV:prop-filter, and CALDAV:param-filter XML elements specified in the CALDAV:filter XML element of calendaring REPORT requests.

服务器可能支持在日历报告请求的CALDAV:filter XML元素中指定的CALDAV:comp筛选器、CALDAV:prop筛选器和CALDAV:param筛选器XML元素中使用非标准组件、属性或参数名称。

Servers MUST fail with the CALDAV:supported-filter precondition if a calendaring REPORT request uses a CALDAV:comp-filter, CALDAV:prop-filter, or CALDAV:param-filter XML element that makes reference to a non-standard component, property, or parameter name on which the server does not support queries.

如果日历报告请求使用CALDAV:comp筛选器、CALDAV:prop筛选器或CALDAV:param筛选器XML元素引用服务器不支持查询的非标准组件、属性或参数名称,则服务器必须以CALDAV:supported筛选器前提条件失败。

7.8. CALDAV:calendar-query REPORT
7.8. CALDAV:日历查询报告

The CALDAV:calendar-query REPORT performs a search for all calendar object resources that match a specified filter. The response of this report will contain all the WebDAV properties and calendar object resource data specified in the request. In the case of the CALDAV: calendar-data XML element, one can explicitly specify the calendar components and properties that should be returned in the calendar object resource data that matches the filter.

CALDAV:calendar查询报告将搜索与指定筛选器匹配的所有日历对象资源。此报告的响应将包含请求中指定的所有WebDAV属性和日历对象资源数据。对于CALDAV:calendardataxml元素,可以显式地指定日历组件和属性,这些组件和属性应该在与筛选器匹配的日历对象资源数据中返回。

The format of this report is modeled on the PROPFIND method. The request and response bodies of the CALDAV:calendar-query REPORT use XML elements that are also used by PROPFIND. In particular, the request can include XML elements to request WebDAV properties to be returned. When that occurs, the response should follow the same behavior as PROPFIND with respect to the DAV:multistatus response elements used to return specific property results. For instance, a request to retrieve the value of a property that does not exist is an error and MUST be noted with a response XML element that contains a 404 (Not Found) status value.

此报告的格式以PROPFIND方法为模型。CALDAV:calendar查询报告的请求和响应主体使用PROPFIND也使用的XML元素。特别是,请求可以包含XML元素,以请求返回WebDAV属性。当发生这种情况时,响应应该遵循与PROPFIND相同的行为,即关于用于返回特定属性结果的DAV:multistatus响应元素。例如,检索不存在的属性值的请求是一个错误,必须使用包含404(未找到)状态值的响应XML元素进行说明。

Support for the CALDAV:calendar-query REPORT is REQUIRED.

需要对CALDAV:日历查询报告的支持。

Marshalling:

编组:

The request body MUST be a CALDAV:calendar-query XML element, as defined in Section 9.5.

请求主体必须是CALDAV:calendar查询XML元素,如第9.5节所定义。

The request MAY include a Depth header. If no Depth header is included, Depth:0 is assumed.

该请求可以包括深度报头。如果未包含深度标头,则假定深度为0。

The response body for a successful request MUST be a DAV: multistatus XML element (i.e., the response uses the same format as the response for PROPFIND). In the case where there are no response elements, the returned DAV:multistatus XML element is empty.

find multista元素的响应格式必须与proptus的响应格式相同。在没有响应元素的情况下,返回的DAV:multistatusxml元素为空。

The response body for a successful CALDAV:calendar-query REPORT request MUST contain a DAV:response element for each iCalendar object that matched the search filter. Calendar data is being returned in the CALDAV:calendar-data XML element inside the DAV: propstat XML element.

对于与搜索筛选器匹配的每个iCalendar对象,成功的CALDAV:calendar查询报告请求的响应正文必须包含一个DAV:response元素。日历数据将在DAV:propstat XML元素内的CALDAV:Calendar数据XML元素中返回。

Preconditions:

先决条件:

(CALDAV:supported-calendar-data): The attributes "content-type" and "version" of the CALDAV:calendar-data XML element (see

(CALDAV:支持的日历数据):CALDAV:calendar数据XML元素的属性“内容类型”和“版本”(请参阅

Section 9.6) specify a media type supported by the server for calendar object resources.

第9.6节)为日历对象资源指定服务器支持的媒体类型。

(CALDAV:valid-filter): The CALDAV:filter XML element (see Section 9.7) specified in the REPORT request MUST be valid. For instance, a CALDAV:filter cannot nest a <C:comp name="VEVENT"> element in a <C:comp name="VTODO"> element, and a CALDAV:filter cannot nest a <C:time-range start="..." end="..."> element in a <C:prop name="SUMMARY"> element.

(CALDAV:valid filter):报告请求中指定的CALDAV:filter XML元素(参见第9.7节)必须有效。例如,CALDAV:filter不能在<C:comp name=“VTODO”>元素中嵌套<C:comp name=“VEVENT”>元素,而CALDAV:filter不能在<C:prop name=“SUMMARY”>元素中嵌套<C:time range start=“…”end=“…”>元素。

(CALDAV:supported-filter): The CALDAV:comp-filter (see Section 9.7.1), CALDAV:prop-filter (see Section 9.7.2), and CALDAV:param-filter (see Section 9.7.3) XML elements used in the CALDAV:filter XML element (see Section 9.7) in the REPORT request only make reference to components, properties, and parameters for which queries are supported by the server, i.e., if the CALDAV: filter element attempts to reference an unsupported component, property, or parameter, this precondition is violated. Servers SHOULD report the CALDAV:comp-filter, CALDAV:prop-filter, or CALDAV:param-filter for which it does not provide support.

(CALDAV:支持的筛选器):报告请求中CALDAV:filter XML元素(参见第9.7.1节)中使用的CALDAV:comp筛选器(参见第9.7.1节)、CALDAV:prop筛选器(参见第9.7.2节)和CALDAV:param筛选器(参见第9.7.3节)XML元素仅引用组件、属性、,以及服务器支持查询的参数,即,如果CALDAV:filter元素尝试引用不受支持的组件、属性或参数,则违反此前提条件。服务器应报告其不提供支持的CALDAV:comp筛选器、CALDAV:prop筛选器或CALDAV:param筛选器。

            <!ELEMENT supported-filter (comp-filter*,
                                        prop-filter*,
                                        param-filter*)>
        
            <!ELEMENT supported-filter (comp-filter*,
                                        prop-filter*,
                                        param-filter*)>
        

(CALDAV:valid-calendar-data): The time zone specified in the REPORT request MUST be a valid iCalendar object containing a single valid VTIMEZONE component.

(CALDAV:有效日历数据):报告请求中指定的时区必须是有效的iCalendar对象,其中包含单个有效的VTIMEZONE组件。

(CALDAV:min-date-time): Any XML element specifying a range of time MUST have its start or end DATE or DATE-TIME values greater than or equal to the value of the CALDAV:min-date-time property value (Section 5.2.6) on the calendar collections being targeted by the REPORT request;

(CALDAV:min date-time):任何指定时间范围的XML元素的开始或结束日期或日期时间值必须大于或等于报告请求所针对的日历集合上的CALDAV:min date-time属性值(第5.2.6节);

(CALDAV:max-date-time): Any XML element specifying a range of time MUST have its start or end DATE or DATE-TIME values less than or equal to the value of the CALDAV:max-date-time property value (Section 5.2.7) on the calendar collections being targeted by the REPORT request;

(CALDAV:max date time):任何指定时间范围的XML元素的开始或结束日期或日期时间值必须小于或等于报告请求所针对的日历集合上CALDAV:max date time属性值(第5.2.7节)的值;

(CALDAV:supported-collation): Any XML attribute specifying a collation MUST specify a collation supported by the server as described in Section 7.5.

(CALDAV:支持的排序规则):任何指定排序规则的XML属性都必须指定服务器支持的排序规则,如第7.5节所述。

Postconditions:

后条件:

(DAV:number-of-matches-within-limits): The number of matching calendar object resources must fall within server-specific, predefined limits. For example, this condition might be triggered if a search specification would cause the return of an extremely large number of responses.

(DAV:限制内的匹配数):匹配日历对象资源的数量必须在特定于服务器的预定义限制内。例如,如果搜索规范会导致返回大量响应,则可能会触发此条件。

7.8.1. Example: Partial Retrieval of Events by Time Range
7.8.1. 示例:按时间范围部分检索事件

In this example, the client requests the server to return specific components and properties of the VEVENT components that overlap the time range from January 4, 2006, at 00:00:00 A.M. UTC to January 5, 2006, at 00:00:00 A.M. UTC. In addition, the DAV:getetag property is also requested and returned as part of the response. Note that the first calendar object returned is a recurring event whose first instance lies outside the requested time range, but whose third instance does overlap the time range. Note that due to the CALDAV: calendar-data element restrictions, the DTSTAMP property in VEVENT components has not been returned, and the only property returned in the VCALENDAR object is VERSION.

在本例中,客户端请求服务器返回与2006年1月4日(UTC时间上午00:00:00)到2006年1月5日(UTC时间上午00:00:00)时间范围重叠的VEVENT组件的特定组件和属性。此外,DAV:getetag属性也作为响应的一部分被请求和返回。请注意,返回的第一个日历对象是一个重复事件,其第一个实例位于请求的时间范围之外,但其第三个实例与时间范围重叠。请注意,由于CALDAV:calendar数据元素的限制,VEVENT组件中的DTSTAMP属性尚未返回,VCALENDAR对象中返回的唯一属性是VERSION。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
       <C:calendar-data>
         <C:comp name="VCALENDAR">
           <C:prop name="VERSION"/>
           <C:comp name="VEVENT">
             <C:prop name="SUMMARY"/>
             <C:prop name="UID"/>
             <C:prop name="DTSTART"/>
             <C:prop name="DTEND"/>
             <C:prop name="DURATION"/>
             <C:prop name="RRULE"/>
             <C:prop name="RDATE"/>
             <C:prop name="EXRULE"/>
             <C:prop name="EXDATE"/>
             <C:prop name="RECURRENCE-ID"/>
           </C:comp>
           <C:comp name="VTIMEZONE"/>
         </C:comp>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20060104T000000Z"
                         end="20060105T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
       <C:calendar-data>
         <C:comp name="VCALENDAR">
           <C:prop name="VERSION"/>
           <C:comp name="VEVENT">
             <C:prop name="SUMMARY"/>
             <C:prop name="UID"/>
             <C:prop name="DTSTART"/>
             <C:prop name="DTEND"/>
             <C:prop name="DURATION"/>
             <C:prop name="RRULE"/>
             <C:prop name="RDATE"/>
             <C:prop name="EXRULE"/>
             <C:prop name="EXDATE"/>
             <C:prop name="RECURRENCE-ID"/>
           </C:comp>
           <C:comp name="VTIMEZONE"/>
         </C:comp>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20060104T000000Z"
                         end="20060105T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
              xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060106T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060106T120000
   SUMMARY:Event #2 bis bis
   UID:00959BC664CA650E933C892C@example.com
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
              xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060106T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060106T120000
   SUMMARY:Event #2 bis bis
   UID:00959BC664CA650E933C892C@example.com
        
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.2. Example: Partial Retrieval of Recurring Events
7.8.2. 示例:重复事件的部分检索

In this example, the client requests the server to return VEVENT components that overlap the time range from January 3, 2006, at 00: 00:00 A.M. UTC to January 5, 2006, at 00:00:00 A.M. UTC. Use of the CALDAV:limit-recurrence-set element causes the server to only return overridden recurrence components that overlap the time range specified in that element or that affect other instances that overlap the time range (e.g., in the case of a THISANDFUTURE behavior). In this example, the first overridden component in the matching resource is returned, but the second one is not.

在本例中,客户机请求服务器返回与2006年1月3日UTC上午00:00:00到2006年1月5日UTC上午00:00的时间范围重叠的VEVENT组件。使用CALDAV:limit recurrence set元素会导致服务器仅返回覆盖的重复组件,这些组件与该元素中指定的时间范围重叠,或影响与该时间范围重叠的其他实例(例如,在THISANDFUTURE行为的情况下)。在本例中,将返回匹配资源中的第一个重写组件,但第二个未被重写。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                     xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <C:calendar-data>
         <C:limit-recurrence-set start="20060103T000000Z"
                                 end="20060105T000000Z"/>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20060103T000000Z"
                         end="20060105T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                     xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <C:calendar-data>
         <C:limit-recurrence-set start="20060103T000000Z"
                                 end="20060105T000000Z"/>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20060103T000000Z"
                         end="20060105T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
              xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
              xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
        
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
        
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
        
     </D:response>
   </D:multistatus>
        
     </D:response>
   </D:multistatus>
        
7.8.3. Example: Expanded Retrieval of Recurring Events
7.8.3. 示例:重复事件的扩展检索

In this example, the client requests the server to return VEVENT components that overlap the time range from January 2, 2006, at 00: 00:00 A.M. UTC to January 5, 2006, at 00:00:00 A.M. UTC and to return recurring calendar components expanded into individual recurrence instance calendar components. Use of the CALDAV:expand element causes the server to only return overridden recurrence instances that overlap the time range specified in that element.

在本例中,客户端请求服务器返回与2006年1月2日00:00:00 A.M.UTC到2006年1月5日00:00 A.M.UTC时间范围重叠的VEVENT组件,并返回扩展为单个定期实例日历组件的定期日历组件。使用CALDAV:expand元素会导致服务器仅返回覆盖的重复实例,这些重复实例与该元素中指定的时间范围重叠。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                     xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <C:calendar-data>
         <C:expand start="20060103T000000Z"
                   end="20060105T000000Z"/>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20060103T000000Z"
                         end="20060105T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                     xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <C:calendar-data>
         <C:expand start="20060103T000000Z"
                   end="20060105T000000Z"/>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20060103T000000Z"
                         end="20060105T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
              xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART:20060103T170000
   DURATION:PT1H
   RECURRENCE-ID:20060103T170000
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART:20060104T190000
   DURATION:PT1H
   RECURRENCE-ID:20060104T170000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART:20060104T150000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
              xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART:20060103T170000
   DURATION:PT1H
   RECURRENCE-ID:20060103T170000
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART:20060104T190000
   DURATION:PT1H
   RECURRENCE-ID:20060104T170000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART:20060104T150000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
        
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.4. Example: Partial Retrieval of Stored Free Busy Components
7.8.4. 示例:部分检索存储的忙/闲组件

In this example, the client requests the server to return the VFREEBUSY components that have free busy information that overlap the time range from January 2, 2006, at 00:00:00 A.M. UTC (inclusively) to January 3, 2006, at 00:00:00 A.M. UTC (exclusively). Use of the CALDAV:limit-freebusy-set element causes the server to only return the FREEBUSY property values that overlap the time range specified in that element. Note that this is not an example of discovering when the calendar owner is busy.

在此示例中,客户端请求服务器返回vfreebush组件,这些组件的忙/闲信息与2006年1月2日UTC上午00:00:00(包括)到2006年1月3日UTC上午00:00:00(仅限)的时间范围重叠。使用CALDAV:limit freebusy set元素会导致服务器仅返回与该元素中指定的时间范围重叠的freebusy属性值。请注意,这不是在日历所有者忙时发现的示例。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <C:calendar-data>
         <C:limit-freebusy-set start="20060102T000000Z"
                                 end="20060103T000000Z"/>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VFREEBUSY">
           <C:time-range start="20060102T000000Z"
                           end="20060103T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <C:calendar-data>
         <C:limit-freebusy-set start="20060102T000000Z"
                                 end="20060103T000000Z"/>
       </C:calendar-data>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VFREEBUSY">
           <C:time-range start="20060102T000000Z"
                           end="20060103T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd8.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd8"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VFREEBUSY
   ORGANIZER;CN="Bernard Desruisseaux":mailto:bernard@example.com
   UID:76ef34-54a3d2@example.com
   DTSTAMP:20050530T123421Z
   DTSTART:20060101T100000Z
   DTEND:20060108T100000Z
   FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060102T100000Z/20060102T120000Z
   END:VFREEBUSY
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd8.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd8"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VFREEBUSY
   ORGANIZER;CN="Bernard Desruisseaux":mailto:bernard@example.com
   UID:76ef34-54a3d2@example.com
   DTSTAMP:20050530T123421Z
   DTSTART:20060101T100000Z
   DTEND:20060108T100000Z
   FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060102T100000Z/20060102T120000Z
   END:VFREEBUSY
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.5. Example: Retrieval of To-Dos by Alarm Time Range
7.8.5. 示例:按报警时间范围检索待办事项

In this example, the client requests the server to return the VTODO components that have an alarm trigger scheduled in the specified time range.

在此示例中,客户端请求服务器返回在指定时间范围内计划了报警触发器的VTODO组件。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VTODO">
           <C:comp-filter name="VALARM">
             <C:time-range start="20060106T100000Z"
                             end="20060107T100000Z"/>
           </C:comp-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VTODO">
           <C:comp-filter name="VALARM">
             <C:time-range start="20060106T100000Z"
                             end="20060107T100000Z"/>
           </C:comp-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd4"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235300Z
   DUE;TZID=US/Eastern:20060106T120000
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:NEEDS-ACTION
   SUMMARY:Task #2
   UID:E10BA47467C5C69BB74E8720@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd4"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235300Z
   DUE;TZID=US/Eastern:20060106T120000
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:NEEDS-ACTION
   SUMMARY:Task #2
   UID:E10BA47467C5C69BB74E8720@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.6. Example: Retrieval of Event by UID
7.8.6. 示例:按UID检索事件

In this example, the client requests the server to return the VEVENT component that has the UID property set to "DC6C50A017428C5216A2F1CD@example.com".

在本例中,客户端请求服务器返回UID属性设置为“”的VEVENT组件DC6C50A017428C5216A2F1CD@example.com".

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:prop-filter name="UID">
             <C:text-match collation="i;octet"
             >DC6C50A017428C5216A2F1CD@example.com</C:text-match>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:prop-filter name="UID">
             <C:text-match collation="i;octet"
             >DC6C50A017428C5216A2F1CD@example.com</C:text-match>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
        
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.7. Example: Retrieval of Events by PARTSTAT
7.8.7. 示例:通过PARTSTAT检索事件

In this example, the client requests the server to return the VEVENT components that have the ATTENDEE property with the value "mailto:lisa@example.com" and for which the PARTSTAT parameter is set to NEEDS-ACTION.

在本例中,客户端请求服务器返回具有ATTENDEE属性且值为“mailto:lisa@example.com“并且PARTSTAT参数设置为NEEDS-ACTION。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:prop-filter name="ATTENDEE">
             <C:text-match collation="i;ascii-casemap"
              >mailto:lisa@example.com</C:text-match>
             <C:param-filter name="PARTSTAT">
               <C:text-match collation="i;ascii-casemap"
                >NEEDS-ACTION</C:text-match>
             </C:param-filter>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:prop-filter name="ATTENDEE">
             <C:text-match collation="i;ascii-casemap"
              >mailto:lisa@example.com</C:text-match>
             <C:param-filter name="PARTSTAT">
               <C:text-match collation="i;ascii-casemap"
                >NEEDS-ACTION</C:text-match>
             </C:param-filter>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
        
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.8. Example: Retrieval of Events Only
7.8.8. 示例:仅检索事件

In this example, the client requests the server to return all VEVENT components.

在本例中,客户端请求服务器返回所有VEVENT组件。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT"/>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT"/>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd1"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd1"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
        
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001102Z
   DTSTART;TZID=US/Eastern:20060102T100000
   DURATION:PT1H
   SUMMARY:Event #1
   Description:Go Steelers!
   UID:74855313FA803DA593CD579A@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
        
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001102Z
   DTSTART;TZID=US/Eastern:20060102T100000
   DURATION:PT1H
   SUMMARY:Event #1
   Description:Go Steelers!
   UID:74855313FA803DA593CD579A@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
        
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060106T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060106T120000
   SUMMARY:Event #2 bis bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
        
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060106T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060106T120000
   SUMMARY:Event #2 bis bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
        
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   X-ABC-GUID:E1CX5Dr-0007ym-Hz@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.9. Example: Retrieval of All Pending To-Dos
7.8.9. 示例:检索所有挂起待办事项

In this example, the client requests the server to return all VTODO components that do not include a COMPLETED property and do not have a STATUS property value matching CANCELLED, i.e., VTODOs that still need to be worked on.

在此示例中,客户机请求服务器返回所有未包含已完成属性且没有与已取消匹配的状态属性值的VTODO组件,即仍需要处理的VTODO。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VTODO">
           <C:prop-filter name="COMPLETED">
             <C:is-not-defined/>
           </C:prop-filter>
           <C:prop-filter name="STATUS">
             <C:text-match
                negate-condition="yes">CANCELLED</C:text-match>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VTODO">
           <C:prop-filter name="COMPLETED">
             <C:is-not-defined/>
           </C:prop-filter>
           <C:prop-filter name="STATUS">
             <C:text-match
                negate-condition="yes">CANCELLED</C:text-match>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd4"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd4"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
        
   DTSTAMP:20060205T235335Z
   DUE;VALUE=DATE:20060104
   STATUS:NEEDS-ACTION
   SUMMARY:Task #1
   UID:DDDEEB7915FA61233B861457@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
   DTSTAMP:20060205T235335Z
   DUE;VALUE=DATE:20060104
   STATUS:NEEDS-ACTION
   SUMMARY:Task #1
   UID:DDDEEB7915FA61233B861457@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd5.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd5"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235300Z
   DUE;VALUE=DATE:20060106
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:NEEDS-ACTION
   SUMMARY:Task #2
   UID:E10BA47467C5C69BB74E8720@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd5.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd5"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235300Z
   DUE;VALUE=DATE:20060106
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:NEEDS-ACTION
   SUMMARY:Task #2
   UID:E10BA47467C5C69BB74E8720@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>
        
7.8.10. Example: Attempt to Query Unsupported Property
7.8.10. 示例:尝试查询不支持的属性

In this example, the client requests the server to return all VEVENT components that include an X-ABC-GUID property with a value matching "ABC". However, the server does not support querying that non-standard property, and instead returns an error response.

在本例中,客户端请求服务器返回所有VEVENT组件,这些组件包括一个X-ABC-GUID属性,其值与“ABC”匹配。但是,服务器不支持查询该非标准属性,而是返回错误响应。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:prop-filter name="X-ABC-GUID">
             <C:text-match>ABC</C:text-match>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop xmlns:D="DAV:">
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:prop-filter name="X-ABC-GUID">
             <C:text-match>ABC</C:text-match>
           </C:prop-filter>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 403 Forbidden
   Date: Sat, 11 Nov 2005 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 403 Forbidden
   Date: Sat, 11 Nov 2005 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:error>
     <C:supported-filter>
       <C:prop-filter name="X-ABC-GUID"/>
     </C:supported-filter>
   </D:error>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:error>
     <C:supported-filter>
       <C:prop-filter name="X-ABC-GUID"/>
     </C:supported-filter>
   </D:error>
        
7.9. CALDAV:calendar-multiget REPORT
7.9. CALDAV:日历多获取报告

The CALDAV:calendar-multiget REPORT is used to retrieve specific calendar object resources from within a collection, if the Request-URI is a collection, or to retrieve a specific calendar object resource, if the Request-URI is a calendar object resource. This report is similar to the CALDAV:calendar-query REPORT (see Section 7.8), except that it takes a list of DAV:href elements, instead of a CALDAV:filter element, to determine which calendar object resources to return.

CALDAV:calendar multiget报告用于从集合中检索特定的日历对象资源(如果请求URI是集合),或者检索特定的日历对象资源(如果请求URI是日历对象资源)。此报告类似于CALDAV:calendar查询报告(请参见第7.8节),不同之处在于它使用DAV:href元素列表而不是CALDAV:filter元素来确定要返回的日历对象资源。

Support for the CALDAV:calendar-multiget REPORT is REQUIRED.

需要对CALDAV:calendar multiget报告的支持。

Marshalling:

编组:

The request body MUST be a CALDAV:calendar-multiget XML element (see Section 9.10). If the Request-URI is a collection resource, then the DAV:href elements MUST refer to calendar object resources within that collection, and they MAY refer to calendar object resources at any depth within the collection. As a result, the "Depth" header MUST be ignored by the server and SHOULD NOT be sent by the client. If the Request-URI refers to a non-collection resource, then there MUST be a single DAV:href element that is equivalent to the Request-URI.

请求主体必须是CALDAV:calendar multiget XML元素(请参阅第9.10节)。如果请求URI是集合资源,则DAV:href元素必须引用该集合中的日历对象资源,并且它们可以引用集合中任何深度的日历对象资源。因此,服务器必须忽略“Depth”头,而客户端不应发送该头。如果请求URI引用非集合资源,则必须有一个与请求URI等效的DAV:href元素。

The response body for a successful request MUST be a DAV: multistatus XML element.

成功请求的响应体必须是DAV:multistatusxml元素。

The response body for a successful CALDAV:calendar-multiget REPORT request MUST contain a DAV:response element for each calendar object resource referenced by the provided set of DAV:href elements. Calendar data is being returned in the CALDAV:calendar-data element inside the DAV:prop element.

对于所提供的一组DAV:href元素引用的每个日历对象资源,成功的CALDAV:calendar multiget报告请求的响应正文必须包含一个DAV:response元素。日历数据将在DAV:prop元素内的CALDAV:Calendar数据元素中返回。

In the case of an error accessing any of the provided DAV:href resources, the server MUST return the appropriate error status code in the DAV:status element of the corresponding DAV:response element.

如果访问任何提供的DAV:href资源时出错,服务器必须在相应DAV:response元素的DAV:status元素中返回相应的错误状态代码。

Preconditions:

先决条件:

(CALDAV:supported-calendar-data): The attributes "content-type" and "version" of the CALDAV:calendar-data XML elements (see Section 9.6) specify a media type supported by the server for calendar object resources.

(CALDAV:支持的日历数据):CALDAV:日历数据XML元素的属性“内容类型”和“版本”(请参见第9.6节)指定服务器支持的日历对象资源的媒体类型。

(CALDAV:min-date-time): Any XML element specifying a range of time MUST have its start or end DATE or DATE-TIME values greater than

(CALDAV:min date-time):任何指定时间范围的XML元素的开始或结束日期或日期时间值必须大于

or equal to the value of the CALDAV:min-date-time property value (Section 5.2.6) on the calendar collections being targeted by the REPORT request;

或等于报告请求所针对的日历集合上的CALDAV:min date time属性值(第5.2.6节);

(CALDAV:max-date-time): Any XML element specifying a range of time MUST have its start or end DATE or DATE-TIME values less than or equal to the value of the CALDAV:max-date-time property value (Section 5.2.7) on the calendar collections being targeted by the REPORT request;

(CALDAV:max date time):任何指定时间范围的XML元素的开始或结束日期或日期时间值必须小于或等于报告请求所针对的日历集合上CALDAV:max date time属性值(第5.2.7节)的值;

Postconditions:

后条件:

None.

没有一个

7.9.1. Example: Successful CALDAV:calendar-multiget REPORT
7.9.1. 示例:成功的CALDAV:日历多重获取报告

In this example, the client requests the server to return specific properties of the VEVENT components referenced by specific URIs. In addition, the DAV:getetag property is also requested and returned as part of the response. Note that in this example, the resource at http://cal.example.com/bernard/work/mtg1.ics does not exist, resulting in an error status response.

在本例中,客户端请求服务器返回特定URI引用的VEVENT组件的特定属性。此外,DAV:getetag属性也作为响应的一部分被请求和返回。请注意,在本例中,位于http://cal.example.com/bernard/work/mtg1.ics 不存在,导致错误状态响应。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-multiget xmlns:D="DAV:"
                    xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <D:href>/bernard/work/abcd1.ics</D:href>
     <D:href>/bernard/work/mtg1.ics</D:href>
   </C:calendar-multiget>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-multiget xmlns:D="DAV:"
                    xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <D:href>/bernard/work/abcd1.ics</D:href>
     <D:href>/bernard/work/mtg1.ics</D:href>
   </C:calendar-multiget>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
        
   HTTP/1.1 207 Multi-Status
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
        

Content-Length: xxxx

内容长度:xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd1"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001102Z
   DTSTART;TZID=US/Eastern:20060102T100000
   DURATION:PT1H
   SUMMARY:Event #1
   Description:Go Steelers!
   UID:74855313FA803DA593CD579A@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/mtg1.ics</D:href>
       <D:status>HTTP/1.1 404 Not Found</D:status>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                  xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd1"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001102Z
   DTSTART;TZID=US/Eastern:20060102T100000
   DURATION:PT1H
   SUMMARY:Event #1
   Description:Go Steelers!
   UID:74855313FA803DA593CD579A@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
     <D:response>
       <D:href>http://cal.example.com/bernard/work/mtg1.ics</D:href>
       <D:status>HTTP/1.1 404 Not Found</D:status>
        
     </D:response>
   </D:multistatus>
        
     </D:response>
   </D:multistatus>
        
7.10. CALDAV:free-busy-query REPORT
7.10. CALDAV:忙/闲查询报告

The CALDAV:free-busy-query REPORT generates a VFREEBUSY component containing free busy information for all the calendar object resources targeted by the request and that have the CALDAV:read-free-busy or DAV:read privilege granted to the current user.

CALDAV:free-busy查询报告生成一个VFREEBUSY组件,其中包含请求所针对的所有日历对象资源的忙/闲信息,这些资源具有授予当前用户的CALDAV:read-free-busy或DAV:read权限。

Only VEVENT components without a TRANSP property or with the TRANSP property set to OPAQUE, and VFREEBUSY components SHOULD be considered in generating the free busy time information.

在生成忙/闲时间信息时,仅应考虑没有TRANSP属性或TRANSP属性设置为不透明的VEVENT组件和VFREEBUSY组件。

In the case of VEVENT components, the free or busy time type (FBTYPE) of the FREEBUSY properties in the returned VFREEBUSY component SHOULD be derived from the value of the TRANSP and STATUS properties, as outlined in the table below:

对于VEVENT组件,返回的VFREEBUSY组件中FREEBUSY属性的空闲或忙碌时间类型(FBTYPE)应根据TRANSP和STATUS属性的值派生,如下表所示:

         +---------------------------++------------------+
         |          VEVENT           ||    VFREEBUSY     |
         +-------------+-------------++------------------+
         | TRANSP      | STATUS      || FBTYPE           |
         +=============+=============++==================+
         |             | CONFIRMED   || BUSY             |
         |             | (default)   ||                  |
         | OPAQUE      +-------------++------------------+
         | (default)   | CANCELLED   || FREE             |
         |             +-------------++------------------+
         |             | TENTATIVE   || BUSY-TENTATIVE   |
         |             +-------------++------------------+
         |             | x-name      || BUSY or          |
         |             |             || x-name           |
         +-------------+-------------++------------------+
         |             | CONFIRMED   ||                  |
         | TRANSPARENT | CANCELLED   || FREE             |
         |             | TENTATIVE   ||                  |
         |             | x-name      ||                  |
         +-------------+-------------++------------------+
        
         +---------------------------++------------------+
         |          VEVENT           ||    VFREEBUSY     |
         +-------------+-------------++------------------+
         | TRANSP      | STATUS      || FBTYPE           |
         +=============+=============++==================+
         |             | CONFIRMED   || BUSY             |
         |             | (default)   ||                  |
         | OPAQUE      +-------------++------------------+
         | (default)   | CANCELLED   || FREE             |
         |             +-------------++------------------+
         |             | TENTATIVE   || BUSY-TENTATIVE   |
         |             +-------------++------------------+
         |             | x-name      || BUSY or          |
         |             |             || x-name           |
         +-------------+-------------++------------------+
         |             | CONFIRMED   ||                  |
         | TRANSPARENT | CANCELLED   || FREE             |
         |             | TENTATIVE   ||                  |
         |             | x-name      ||                  |
         +-------------+-------------++------------------+
        

Duplicate busy time periods with the same FBTYPE parameter value SHOULD NOT be specified in the returned VFREEBUSY component. Servers SHOULD coalesce consecutive or overlapping busy time periods of the same type. Busy time periods with different FBTYPE parameter values MAY overlap.

不应在返回的VFREEBUSY组件中指定具有相同FBTYPE参数值的重复繁忙时段。服务器应合并相同类型的连续或重叠繁忙时间段。具有不同FBTYPE参数值的繁忙时段可能重叠。

Support for the CALDAV:free-busy-query REPORT is REQUIRED.

需要支持CALDAV:忙/闲查询报告。

Marshalling:

编组:

The request body MUST be a CALDAV:free-busy-query XML element (see Section 9.11), which MUST contain exactly one CALDAV:time-range XML element, as defined in Section 9.9.

请求主体必须是CALDAV:free-busy查询XML元素(参见第9.11节),该元素必须恰好包含一个CALDAV:time-range XML元素,如第9.9节所定义。

The request MAY include a Depth header. If no Depth header is included, Depth:0 is assumed.

该请求可以包括深度报头。如果未包含深度标头,则假定深度为0。

The response body for a successful request MUST be an iCalendar object that contains exactly one VFREEBUSY component that describes the busy time intervals for the calendar object resources containing VEVENT, or VFREEBUSY components that satisfy the Depth value and for which the current user is at least granted the CALDAV:read-free-busy privilege. If no calendar object resources are found to satisfy these conditions, a VFREEBUSY component with no FREEBUSY property MUST be returned. This report only returns busy time information. Free time information can be inferred from the returned busy time information.

成功请求的响应正文必须是一个iCalendar对象,该对象正好包含一个VFREEBUSY组件,用于描述包含VEVENT的日历对象资源的繁忙时间间隔,或VFREEBUSY组件,这些组件满足深度值,并且当前用户至少被授予CALDAV:read free-busy特权。如果找不到满足这些条件的日历对象资源,则必须返回没有FREEBUSY属性的VFREEBUSY组件。此报告仅返回繁忙时间信息。空闲时间信息可以从返回的繁忙时间信息中推断出来。

If the current user is not granted the CALDAV:read-free-busy or DAV:read privileges on the Request-URI, the CALDAV:free-busy-query REPORT request MUST fail and return a 404 (Not Found) status value. This restriction will prevent users from discovering URLs of resources for which they are only granted the CALDAV:read-free-busy privilege.

如果当前用户未被授予对请求URI的CALDAV:read free-busy或DAV:read权限,则CALDAV:free-busy查询报告请求必须失败并返回404(未找到)状态值。此限制将阻止用户发现仅授予CALDAV:read free busy权限的资源的URL。

The CALDAV:free-busy-query REPORT request can only be run against a collection (either a regular collection or a calendar collection). An attempt to run the report on a calendar object resource MUST fail and return a 403 (Forbidden) status value.

CALDAV:忙/闲查询报告请求只能针对集合(常规集合或日历集合)运行。在日历对象资源上运行报告的尝试必须失败并返回403(禁止)状态值。

Preconditions:

先决条件:

None.

没有一个

Postconditions:

后条件:

(DAV:number-of-matches-within-limits): The number of matching calendar object resources must fall within server-specific, predefined limits. For example, this postcondition might fail if the specified CALDAV:time-range would cause an extremely large number of calendar object resources to be considered in computing the response.

(DAV:限制内的匹配数):匹配日历对象资源的数量必须在特定于服务器的预定义限制内。例如,如果指定的CALDAV:time范围会导致在计算响应时考虑大量日历对象资源,则此后置条件可能会失败。

7.10.1. Example: Successful CALDAV:free-busy-query REPORT
7.10.1. 示例:成功CALDAV:忙/闲查询报告

In this example, the client requests the server to return free busy information on the calendar collection /bernard/work/, between 9:00 A.M. and 5:00 P.M. EST (2:00 P.M. and 10:00 P.M. UTC) on the January 4, 2006. The server responds, indicating two busy time intervals of one hour, one of which is tentative.

在本例中,客户端请求服务器在2006年1月4日美国东部时间上午9:00至下午5:00(UTC下午2:00至10:00)之间返回日历集合/bernard/work/上的忙/闲信息。服务器响应,表示两个繁忙时间间隔为一小时,其中一个是暂定的。

See Appendix B for the calendar data being targeted by this example.

本例所针对的日历数据见附录B。

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:free-busy-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <C:time-range start="20060104T140000Z"
                     end="20060105T220000Z"/>
   </C:free-busy-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:free-busy-query xmlns:C="urn:ietf:params:xml:ns:caldav">
     <C:time-range start="20060104T140000Z"
                     end="20060105T220000Z"/>
   </C:free-busy-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 200 OK
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: text/calendar
   Content-Length: xxxx
        
   HTTP/1.1 200 OK
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: text/calendar
   Content-Length: xxxx
        
   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Server//EN
   BEGIN:VFREEBUSY
   DTSTAMP:20050125T090000Z
   DTSTART:20060104T140000Z
   DTEND:20060105T220000Z
   FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060104T150000Z/PT1H
   FREEBUSY:20060104T190000Z/PT1H
   END:VFREEBUSY
   END:VCALENDAR
        
   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Server//EN
   BEGIN:VFREEBUSY
   DTSTAMP:20050125T090000Z
   DTSTART:20060104T140000Z
   DTEND:20060105T220000Z
   FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060104T150000Z/PT1H
   FREEBUSY:20060104T190000Z/PT1H
   END:VFREEBUSY
   END:VCALENDAR
        
8. Guidelines
8. 指导方针
8.1. Client-to-Client Interoperability
8.1. 客户端到客户端互操作性

There are a number of actions clients can take that will be legal (the server will not return errors), but that can degrade interoperability with other client implementations accessing the same data. For example, a recurrence rule could be replaced with a set of recurrence dates, a single recurring event could be replaced with a set of independent resources to represent each recurrence, or the start/end time values can be translated from the original time zone to another time zone. Although this advice amounts to iCalendar interoperability best practices and is not limited only to CalDAV usage, interoperability problems are likely to be more evident in CalDAV use cases.

客户端可以采取许多合法的操作(服务器不会返回错误),但这会降低与访问相同数据的其他客户端实现的互操作性。例如,可以用一组定期日期替换定期规则,可以用一组独立的资源替换单个定期事件以表示每个定期,或者可以将开始/结束时间值从原始时区转换到另一个时区。尽管此建议相当于iCalendar互操作性最佳实践,并且不仅限于CalDAV的使用,但在CalDAV用例中,互操作性问题可能更加明显。

8.2. Synchronization Operations
8.2. 同步操作

WebDAV already provides functionality required to synchronize a collection or set of collections, to make changes offline, and provides a simple way to resolve conflicts when reconnected. ETags are the key to making this work, but these are not required of all WebDAV servers. Since offline functionality is more important to calendar applications than to some other WebDAV applications, CalDAV servers MUST support ETags, as specified in Section 5.3.4.

WebDAV已经提供了同步一个或多个集合、脱机进行更改所需的功能,并提供了在重新连接时解决冲突的简单方法。etag是实现这一点的关键,但并非所有WebDAV服务器都需要etag。由于脱机功能对日历应用程序比其他一些WebDAV应用程序更重要,因此CalDAV服务器必须支持ETAG,如第5.3.4节所述。

8.2.1. Use of Reports
8.2.1. 报告的使用
8.2.1.1. Restrict the Time Range
8.2.1.1. 限制时间范围

The reports provided in CalDAV can be used by clients to optimize their performance in terms of network bandwidth usage and resource consumption on the local client machine. Both are certainly major considerations for mobile or handheld devices with limited capacity, but they are also relevant to desktop client applications in cases where the calendar collections contain large amounts of data.

CalDAV中提供的报告可供客户端使用,以优化其在本地客户端计算机上的网络带宽使用和资源消耗方面的性能。对于容量有限的移动或手持设备来说,这两个方面当然都是主要考虑因素,但在日历集合包含大量数据的情况下,它们也与桌面客户端应用程序相关。

Typically, clients present calendar data to users in views that span a finite time interval, so whenever possible, clients should only retrieve calendar components from the server using CALDAV:calendar-query REPORT, combined with a CALDAV:time-range element, to limit the set of returned components to just those needed to populate the current view.

通常,客户端在跨越有限时间间隔的视图中向用户呈现日历数据,因此,只要有可能,客户端应仅使用CALDAV:calendar查询报告从服务器检索日历组件,并结合CALDAV:time range元素,以将返回的组件集限制为仅填充当前视图所需的组件。

8.2.1.2. Synchronize by Time Range
8.2.1.2. 按时间范围同步

Typically in a calendar, historical data (events, to-dos, etc. that have completed prior to the current date) do not change, though they may be deleted. As a result, a client can speed up the synchronization process by only considering data for the present time and the future up to a reasonable limit (e.g., one week, one month). If the user then tries to examine a portion of the calendar outside the range that has been synchronized, the client can perform another synchronization operation on the new time interval being examined. This "just-in-time" synchronization can minimize bandwidth for common user interaction behaviors.

通常在日历中,历史数据(在当前日期之前完成的事件、待办事项等)不会更改,尽管它们可能会被删除。因此,客户机可以通过将当前和未来的数据考虑到合理的限制(例如,一周、一个月)来加快同步过程。如果用户随后尝试检查已同步范围之外的日历部分,则客户端可以在正在检查的新时间间隔上执行另一个同步操作。这种“即时”同步可以最小化常见用户交互行为的带宽。

8.2.1.3. Synchronization Process
8.2.1.3. 同步过程

If a client wants to support calendar data synchronization, as opposed to downloading calendar data each time it is needed, the client needs to cache the calendar object resource's URI and ETag, along with the actual calendar data. While the URI remains static for the lifetime of the calendar object resource, the ETag will change with each successive change to the calendar object resource. Thus, to synchronize a local data cache with the server, the client can first fetch the URI/ETag pairs for the time interval being considered, and compare those results with the cached data. Any cached component whose ETag differs from that on the server needs to be refreshed.

如果客户端希望支持日历数据同步,而不是每次需要时下载日历数据,则客户端需要缓存日历对象资源的URI和ETag以及实际的日历数据。虽然URI在日历对象资源的生命周期内保持静态,但ETag将随着日历对象资源的每次连续更改而更改。因此,为了使本地数据缓存与服务器同步,客户机可以首先获取所考虑的时间间隔的URI/ETag对,并将这些结果与缓存的数据进行比较。需要刷新ETag与服务器上ETag不同的任何缓存组件。

In order to properly detect the changes between the server and client data, the client will need to keep a record of which calendar object resources have been created, changed, or deleted since the last synchronization operation so that it can reconcile those changes with the data on the server.

为了正确检测服务器和客户端数据之间的更改,客户端需要保留自上次同步操作以来创建、更改或删除了哪些日历对象资源的记录,以便将这些更改与服务器上的数据进行协调。

Here's an example of how to do that:

下面是一个如何做到这一点的示例:

The client issues a CALDAV:calendar-query REPORT request for a specific time range and asks for only the DAV:getetag property to be returned:

客户端发出特定时间范围的CALDAV:calendar查询报告请求,并仅要求返回DAV:getetag属性:

   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                     xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20040902T000000Z"
                           end="20040903T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                     xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
     </D:prop>
     <C:filter>
       <C:comp-filter name="VCALENDAR">
         <C:comp-filter name="VEVENT">
           <C:time-range start="20040902T000000Z"
                           end="20040903T000000Z"/>
         </C:comp-filter>
       </C:comp-filter>
     </C:filter>
   </C:calendar-query>
        

The client then uses the results to determine which calendar object resources have changed, been created, or deleted on the server, and how those relate to locally cached calendar object resources that may have changed, been created, or deleted. If the client determines that there are calendar object resources on the server that need to be fetched, the client issues a CALDAV:calendar-multiget REPORT request to fetch its calendar data:

然后,客户端使用结果确定服务器上哪些日历对象资源已更改、已创建或删除,以及这些资源与本地缓存的、可能已更改、已创建或删除的日历对象资源的关系。如果客户端确定服务器上存在需要提取的日历对象资源,则客户端将发出CALDAV:calendar multiget REPORT请求以提取其日历数据:

   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-multiget xmlns:D="DAV:"
                        xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <D:href>/bernard/work/abcd1.ics</D:href>
     <D:href>/bernard/work/mtg1.ics</D:href>
   </C:calendar-multiget>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-multiget xmlns:D="DAV:"
                        xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:prop>
       <D:getetag/>
       <C:calendar-data/>
     </D:prop>
     <D:href>/bernard/work/abcd1.ics</D:href>
     <D:href>/bernard/work/mtg1.ics</D:href>
   </C:calendar-multiget>
        
8.2.2. Restrict the Properties Returned
8.2.2. 限制返回的属性

A client may not need all the calendar properties of a calendar object resource when presenting information to the user. Since some calendar property values can be large (e.g., ATTACH or ATTENDEE), a client can choose to restrict the calendar properties to be returned in a calendaring REPORT request to those it knows it will use.

当向用户呈现信息时,客户端可能不需要日历对象资源的所有日历属性。由于某些日历属性值可能很大(例如,ATTACH或ATTENDEE),因此客户端可以选择将日历报告请求中返回的日历属性限制为其知道将使用的日历属性。

However, if a client needs to make a change to a calendar object resource, it can only change the entire calendar object resource via a PUT request. There is currently no way to incrementally make a change to a set of calendar properties of a calendar object resource. As a result, the client will have to get the entire calendar object resource that is being changed.

但是,如果客户端需要更改日历对象资源,它只能通过PUT请求更改整个日历对象资源。当前无法增量更改日历对象资源的一组日历属性。因此,客户端将必须获取正在更改的整个日历对象资源。

8.3. Use of Locking
8.3. 锁定的使用

WebDAV locks can be used to prevent two clients that are modifying the same resource from either overwriting each others' changes (though that problem can also be solved by using ETags) or wasting time making changes that will conflict with another set of changes. In a multi-user calendar system, an interactive calendar client could lock an event while the user is editing the event, and unlock the event when the user finishes or cancels. Locks can also be used to prevent changes while data is being reorganized. For example, a calendar client might lock two calendar collections prior to moving a bunch of calendar resources from one to another.

WebDAV锁可用于防止正在修改同一资源的两个客户端要么覆盖彼此的更改(尽管这个问题也可以通过使用ETag解决),要么浪费时间进行与另一组更改冲突的更改。在多用户日历系统中,交互式日历客户端可以在用户编辑事件时锁定事件,并在用户完成或取消时解锁事件。在重新组织数据时,还可以使用锁来防止更改。例如,在将一组日历资源从一个日历资源移动到另一个日历资源之前,日历客户端可能会锁定两个日历集合。

Clients are responsible for requesting a lock timeout period that is appropriate to the use case. When the user explicitly decides to reserve a resource and prevent other changes, a long timeout might be appropriate, but in cases where the client automatically decides to lock the resource, the timeout should be short (and the client can always refresh the lock should it need to). A short lock timeout means that if the client is unable to remove the lock, the other calendar users aren't prevented from making changes.

客户机负责请求适合于用例的锁定超时时间。当用户明确决定保留资源并阻止其他更改时,长超时可能是合适的,但在客户机自动决定锁定资源的情况下,超时应该很短(如果需要,客户机可以随时刷新锁)。短锁超时意味着,如果客户端无法移除锁,则不会阻止其他日历用户进行更改。

8.4. Finding Calendars
8.4. 查找日历

Much of the time, a calendar client (or agent) will discover a new calendar's location by being provided directly with the URL. For example, a user will type his or her own calendar location into client configuration information or copy and paste a URL from email into the calendar application. The client need only confirm that the URL points to a resource that is a calendar collection. The client may also be able to browse WebDAV collections to find calendar collections.

很多时候,日历客户端(或代理)会通过直接提供URL来发现新日历的位置。例如,用户将在客户端配置信息中键入自己的日历位置,或将电子邮件中的URL复制并粘贴到日历应用程序中。客户端只需确认URL指向的资源是日历集合。客户端还可以浏览WebDAV集合以查找日历集合。

The choice of HTTP URLs means that calendar object resources are backward compatible with existing software, but does have the disadvantage that existing software does not usually know to look at the OPTIONS response to that URL to determine what can be done with it. This is somewhat of a barrier for WebDAV usage as well as with CalDAV usage. This specification does not offer a way through this other than making the information available in the OPTIONS response should this be requested.

HTTP URL的选择意味着日历对象资源与现有软件向后兼容,但其缺点是现有软件通常不知道如何查看对该URL的选项响应来确定可以使用它做什么。这对于WebDAV的使用和CalDAV的使用都是一个障碍。本规范不提供解决此问题的方法,除非在选项响应中提供所需信息。

For calendar sharing and scheduling use cases, one might wish to find the calendar belonging to another user. If the other user has a calendar in the same repository, that calendar can be found by using the principal namespace required by WebDAV ACL support. For other cases, the authors have no universal solution, but implementers can consider whether to use vCard [RFC2426] or LDAP [RFC4511] standards together with calendar attributes [RFC2739].

对于日历共享和调度用例,您可能希望找到属于另一个用户的日历。如果其他用户在同一存储库中有日历,则可以使用WebDAV ACL支持所需的主体名称空间找到该日历。对于其他情况,作者没有通用的解决方案,但是实现者可以考虑是否使用VCAR[RFC2426]或LDAP[RCFC1111]标准以及日历属性[RCF2239 ]。

Because CalDAV requires servers to support WebDAV ACL [RFC3744], including principal namespaces, and with the addition of the CALDAV: calendar-home-set property, there are a couple options for CalDAV clients to find one's own calendar or another user's calendar.

由于CalDAV要求服务器支持WebDAV ACL[RFC3744],包括主体名称空间,并且添加了CalDAV:calendar home set属性,因此CalDAV客户端有两个选项可用于查找自己的日历或其他用户的日历。

In this case, a DAV:principal-match REPORT is used to find a named property (the CALDAV:calendar-home-set) on the Principal-URL of the current user. Using this, a WebDAV client can learn "who am I" and "where are my calendars". The REPORT request body looks like this:

在本例中,DAV:principal匹配报告用于在当前用户的主体URL上查找命名属性(CALDAV:calendar主集合)。使用此功能,WebDAV客户端可以了解“我是谁”和“我的日历在哪里”。报告请求主体如下所示:

   <?xml version="1.0" encoding="utf-8" ?>
   <D:principal-match xmlns:D="DAV:">
     <D:self/>
     <D:prop>
       <C:calendar-home-set
          xmlns:C="urn:ietf:params:xml:ns:caldav"/>
     </D:prop>
   </D:principal-match>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:principal-match xmlns:D="DAV:">
     <D:self/>
     <D:prop>
       <C:calendar-home-set
          xmlns:C="urn:ietf:params:xml:ns:caldav"/>
     </D:prop>
   </D:principal-match>
        

To find other users' calendars, the DAV:principal-property-search REPORT can be used to filter on some properties and return others. To search for a calendar owned by a user named "Laurie", the REPORT request body would look like this:

要查找其他用户的日历,可以使用DAV:principal属性搜索报告筛选某些属性并返回其他属性。要搜索名为“Laurie”的用户拥有的日历,报告请求主体如下所示:

   <?xml version="1.0" encoding="utf-8" ?>
   <D:principal-property-search xmlns:D="DAV:">
     <D:property-search>
       <D:prop>
         <D:displayname/>
       </D:prop>
       <D:match>Laurie</D:match>
     </D:property-search>
     <D:prop>
       <C:calendar-home-set
          xmlns:C="urn:ietf:params:xml:ns:caldav"/>
       <D:displayname/>
     </D:prop>
   </D:principal-property-search>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:principal-property-search xmlns:D="DAV:">
     <D:property-search>
       <D:prop>
         <D:displayname/>
       </D:prop>
       <D:match>Laurie</D:match>
     </D:property-search>
     <D:prop>
       <C:calendar-home-set
          xmlns:C="urn:ietf:params:xml:ns:caldav"/>
       <D:displayname/>
     </D:prop>
   </D:principal-property-search>
        

The server performs a case-sensitive or caseless search for a matching string subset of "Laurie" within the DAV:displayname property. Thus, the server might return "Laurie Dusseault", "Laurier Desruisseaux", or "Wilfrid Laurier" as matching DAV:displayname values, and return the calendars for each of these.

服务器在DAV:displayname属性中对匹配的字符串子集“Laurie”执行区分大小写或无大小写的搜索。因此,服务器可能会返回“lauriedusseault”、“Laurier desruissaux”或“Wilfrid Laurier”作为匹配的DAV:displayname值,并返回其中每个值的日历。

8.5. Storing and Using Attachments
8.5. 存储和使用附件

CalDAV clients MAY create attachments in calendar components either as inline or external. This section contains some guidelines for creating and managing attachments.

CalDAV客户端可以在日历组件中创建内联或外部附件。本节包含一些创建和管理附件的指导原则。

8.5.1. Inline Attachments
8.5.1. 内联附件

CalDAV clients MUST support inline attachments as specified in iCalendar [RFC2445]. CalDAV servers MUST support inline attachments, so clients can rely on being able to create attachments this way. On the other hand, inline attachments have some drawbacks:

CalDAV客户端必须支持iCalendar[RFC2445]中指定的内联附件。CalDAV服务器必须支持内联附件,因此客户端可以依靠这种方式创建附件。另一方面,内联附件有一些缺点:

o Servers MAY impose limitations on the size of calendar object resources (i.e., refusing PUT requests of very large iCalendar objects). Servers that impose such limitations MUST use the CALDAV:max-resource-size property on a calendar collection to inform the client as to what the limitation is (see Section 5.2.5).

o 服务器可能会对日历对象资源的大小施加限制(即拒绝非常大的iCalendar对象的PUT请求)。施加此类限制的服务器必须在日历集合上使用CALDAV:max resource size属性来通知客户端限制是什么(请参阅第5.2.5节)。

o Servers MAY impose storage quota limitations on calendar collections (See [RFC4331]).

o 服务器可能会对日历集合施加存储配额限制(请参阅[RFC4331])。

o Any change to a calendar object resource containing an inline attachment requires the entire inline attachment to be re-uploaded.

o 对包含内联附件的日历对象资源的任何更改都需要重新上载整个内联附件。

o Clients synchronizing a changed calendar object resource have to download the entire calendar object resource, even if the attachment is unchanged.

o 同步更改的日历对象资源的客户端必须下载整个日历对象资源,即使附件没有更改。

8.5.2. External Attachments
8.5.2. 外部附件

CalDAV clients SHOULD support downloading of external attachments referenced by arbitrary URI schemes, by either processing them directly, or by passing the attachment URI to a suitable "helper application" for processing, if such an application exists. CalDAV clients MUST support downloading of external attachments referenced by the "http" or "https" URI schemes. An external attachment could be:

CalDAV客户端应支持下载由任意URI方案引用的外部附件,方法是直接处理这些附件,或者将附件URI传递给适当的“帮助程序应用程序”(如果存在此类应用程序)进行处理。CalDAV客户端必须支持下载“http”或“https”URI方案引用的外部附件。外部附件可以是:

o In a collection in the calendar collection containing the calendar object resource;

o 在包含日历对象资源的日历集合中的集合中;

o Somewhere else in the same repository that hosts the calendar collection; or

o 在托管日历集合的同一存储库中的其他位置;或

o On an HTTP or FTP server elsewhere.

o 在其他位置的HTTP或FTP服务器上。

CalDAV servers MAY provide support for child collections in calendar collections. CalDAV servers MAY allow the MKCOL method to create child collections in calendar collections. Child collections of calendar collections MAY contain any type of resource except calendar collections that they MUST NOT contain. Some CalDAV servers won't allow child collections in calendar collections, and it may be possible on such a server to discover other locations where attachments can be stored.

CalDAV服务器可以为日历集合中的子集合提供支持。CalDAV服务器可能允许MKCOL方法在日历集合中创建子集合。日历集合的子集合可以包含任何类型的资源,但它们不能包含的日历集合除外。某些CalDAV服务器不允许在日历集合中使用子集合,并且在这样的服务器上可能会发现可以存储附件的其他位置。

Clients are entirely responsible for maintaining reference consistency with calendar components that link to external attachments. A client deleting a calendar component with an external attachment might therefore also delete the attachment if that's appropriate; however, appropriateness can be very hard to determine. A new component might easily reference some pre-existing Web resource that is intended to have independent existence from the calendar component (the "attachment" could be a major proposal to be discussed in a meeting, for instance). Best practices will probably emerge and should probably be documented, but for now, clients should be wary of engaging in aggressive "cleanup" of external attachments. A client could involve the user in making decisions about removing unreferenced documents, or a client could be conservative in only deleting attachments it had created.

客户端完全负责与链接到外部附件的日历组件保持引用一致性。因此,如果适当,删除带有外部附件的日历组件的客户端也可能删除该附件;然而,适当性可能很难确定。一个新的组件可以很容易地引用一些预先存在的Web资源,这些资源打算独立于日历组件(例如,“附件”可能是会议上讨论的主要建议)。最佳实践可能会出现,也可能会被记录下来,但就目前而言,客户应该谨慎从事积极的外部附件“清理”。客户机可以让用户参与有关删除未引用文档的决策,也可以保守地只删除其创建的附件。

Also, clients are responsible for consistency of permissions when using external attachments. One reason for servers to support the

此外,客户端还负责在使用外部附件时保持权限的一致性。服务器支持

storage of attachments within child collections of calendar collections is that ACL inheritance might make it easier to grant the same permissions to attachments that are granted on the calendar collection. Otherwise, it can be very difficult to keep permissions synchronized. With attachments stored on separate repositories, it can be impossible to keep permissions consistent -- the two repositories may not support the same permissions or have the same set of principals. Some systems have used tickets or other anonymous access control mechanisms to provide partially satisfactory solutions to these kinds of problems.

在日历集合的子集合中存储附件是因为ACL继承可以更容易地向日历集合上授予的附件授予相同的权限。否则,保持权限同步可能非常困难。对于存储在不同存储库中的附件,可能无法保持权限一致——这两个存储库可能不支持相同的权限或具有相同的主体集。一些系统已经使用票证或其他匿名访问控制机制为这类问题提供了部分令人满意的解决方案。

8.6. Storing and Using Alarms
8.6. 存储和使用警报

Note that all CalDAV calendar collections (including those the user might treat as public or group calendars) can contain alarm information on events and to-dos. Users can synchronize a calendar between multiple devices and decide to have alarms execute on a different device than the device that created the alarm. Not all alarm action types are completely interoperable (e.g., those that name a sound file to play).

请注意,所有CalDAV日历集合(包括用户可能视为公共或组日历的集合)都可以包含有关事件和待办事项的警报信息。用户可以在多个设备之间同步日历,并决定在创建报警的设备以外的其他设备上执行报警。并非所有报警操作类型都是完全可互操作的(例如,命名要播放的声音文件的类型)。

When the action is AUDIO and the client is configured to execute the alarm, the client SHOULD play the suggested sound if it's available or play another sound, but SHOULD NOT rewrite the alarm just to replace the suggested sound with a sound that's locally available.

当操作为音频且客户端配置为执行报警时,客户端应播放建议的声音(如果可用)或播放另一种声音,但不应重写报警,仅将建议的声音替换为本地可用的声音。

When the action is DISPLAY and the client is configured to execute the alarm, the client SHOULD execute a display alarm by displaying according to the suggested description or some reasonable replacement, but SHOULD NOT rewrite the alarm for its own convenience.

当操作显示且客户端配置为执行报警时,客户端应通过根据建议的说明或某些合理的替换进行显示来执行显示报警,但不应为了自身的方便而重写报警。

When the action is EMAIL and the client is incapable of sending email, it SHOULD ignore the alarm, but it MUST continue to synchronize the alarm itself.

当操作是电子邮件且客户端无法发送电子邮件时,它应忽略警报,但必须继续同步警报本身。

This specification makes no recommendations about executing alarms of type PROCEDURE, except to note that clients are advised to take care to avoid creating security holes by executing these.

本规范不建议执行PROCEDURE类型的警报,但要注意的是,建议客户机注意通过执行这些警报来避免创建安全漏洞。

Non-interoperable alarm information (e.g., should somebody define a color to be used in a display alarm) should be put in non-standard properties inside the VALARM component in order to keep the basic alarm usable on all devices.

不可互操作的报警信息(例如,如果有人定义要在显示报警中使用的颜色)应放在VALARM组件内的非标准属性中,以保持基本报警在所有设备上可用。

Clients that allow changes to calendar object resources MUST synchronize the alarm data that already exists in the resources.

允许更改日历对象资源的客户端必须同步资源中已存在的报警数据。

Clients MAY execute alarms that are downloaded in this fashion, possibly based on user preference. If a client is only doing read operations on a calendar and there is no risk of losing alarm information, then the client MAY discard alarm information.

客户端可能会执行以这种方式下载的报警,可能是基于用户偏好。如果客户端仅在日历上执行读取操作,并且没有丢失报警信息的风险,则客户端可能会丢弃报警信息。

This specification makes no attempt to provide multi-user alarms on group calendars or to find out for whom an alarm is intended. Addressing those issues might require extensions to iCalendar; for example, to store alarms per-user, or to indicate for which user a VALARM was intended. In the meantime, clients might maximize interoperability by generally not uploading alarm information to public, group, or resource calendars.

本规范不试图在组日历上提供多用户报警,也不试图找出报警的对象。解决这些问题可能需要扩展iCalendar;例如,存储每个用户的警报,或指示VALARM将用于哪个用户。同时,客户端通常不会将报警信息上载到公共日历、组日历或资源日历,从而最大限度地提高互操作性。

9. XML Element Definitions
9. XML元素定义
9.1. CALDAV:calendar XML Element
9.1. CALDAV:日历XML元素

Name: calendar

名称:日历

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies the resource type of a calendar collection.

目的:指定日历集合的资源类型。

Description: See Section 4.2.

说明:见第4.2节。

Definition:

定义:

         <!ELEMENT calendar EMPTY>
        
         <!ELEMENT calendar EMPTY>
        
9.2. CALDAV:mkcalendar XML Element
9.2. CALDAV:mkcalendar XML元素

Name: mkcalendar

名称:mkcalendar

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a request that includes the WebDAV property values to be set for a calendar collection resource when it is created.

目的:指定一个请求,该请求包含创建日历集合资源时要为其设置的WebDAV属性值。

Description: See Section 5.3.1.

说明:见第5.3.1节。

Definition:

定义:

         <!ELEMENT mkcalendar (DAV:set)>
        
         <!ELEMENT mkcalendar (DAV:set)>
        
9.3. CALDAV:mkcalendar-response XML Element
9.3. CALDAV:mkcalendar响应XML元素

Name: mkcalendar-response

名称:mkcalendar响应

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a response body for a successful MKCALENDAR request.

目的:为成功的MKCALENDAR请求指定响应正文。

Description: See Section 5.3.1.

说明:见第5.3.1节。

Definition:

定义:

         <!ELEMENT mkcalendar-response ANY>
        
         <!ELEMENT mkcalendar-response ANY>
        
9.4. CALDAV:supported-collation XML Element
9.4. CALDAV:支持的排序规则XML元素

Name: supported-collation

名称:支持的排序规则

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Identifies a single collation via its collation identifier, as defined by [RFC4790].

用途:通过[RFC4790]定义的排序规则标识符标识单个排序规则。

Description: The CALDAV:supported-collation contains the text of a collation identifier, as described in Section 7.5.1.

描述:CALDAV:支持的排序规则包含排序规则标识符的文本,如第7.5.1节所述。

Definition:

定义:

         <!ELEMENT supported-collation (#PCDATA)>
         PCDATA value: collation identifier
        
         <!ELEMENT supported-collation (#PCDATA)>
         PCDATA value: collation identifier
        
9.5. CALDAV:calendar-query XML Element
9.5. CALDAV:日历查询XML元素

Name: calendar-query

名称:日历查询

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Defines a report for querying calendar object resources.

目的:定义用于查询日历对象资源的报表。

Description: See Section 7.8.

说明:见第7.8节。

Definition:

定义:

         <!ELEMENT calendar-query ((DAV:allprop |
                                    DAV:propname |
                                    DAV:prop)?, filter, timezone?)>
        
         <!ELEMENT calendar-query ((DAV:allprop |
                                    DAV:propname |
                                    DAV:prop)?, filter, timezone?)>
        
9.6. CALDAV:calendar-data XML Element
9.6. CALDAV:日历数据XML元素

Name: calendar-data

名称:日历数据

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specified one of the following:

目的:指定以下一项:

1. A supported media type for calendar object resources when nested in the CALDAV:supported-calendar-data property;

1. 嵌套在CALDAV:supported calendar data属性中时,日历对象资源支持的媒体类型;

2. The parts of a calendar object resource should be returned by a calendaring report;

2. 日历对象资源的部分应通过日历报告返回;

3. The content of a calendar object resource in a response to a calendaring report.

3. 对日历报告的响应中日历对象资源的内容。

Description: When nested in the CALDAV:supported-calendar-data property, the CALDAV:calendar-data XML element specifies a media type supported by the CalDAV server for calendar object resources.

描述:当嵌套在CALDAV:supported calendar data属性中时,CALDAV:calendar data XML元素指定CALDAV服务器支持的日历对象资源的媒体类型。

When used in a calendaring REPORT request, the CALDAV:calendar-data XML element specifies which parts of calendar object resources need to be returned in the response. If the CALDAV: calendar-data XML element doesn't contain any CALDAV:comp element, calendar object resources will be returned in their entirety.

在日历报告请求中使用时,CALDAV:calendar数据XML元素指定响应中需要返回日历对象资源的哪些部分。如果CALDAV:calendar数据XML元素不包含任何CALDAV:comp元素,则将完整返回日历对象资源。

Finally, when used in a calendaring REPORT response, the CALDAV: calendar-data XML element specifies the content of a calendar object resource. Given that XML parsers normalize the two-character sequence CRLF (US-ASCII decimal 13 and US-ASCII decimal 10) to a single LF character (US-ASCII decimal 10), the CR character (US-ASCII decimal 13) MAY be omitted in calendar object resources specified in the CALDAV:calendar-data XML element. Furthermore, calendar object resources specified in the CALDAV: calendar-data XML element MAY be invalid per their media type specification if the CALDAV:calendar-data XML element part of the calendaring REPORT request did not specify required properties (e.g., UID, DTSTAMP, etc.), or specified a CALDAV:prop XML element with the "novalue" attribute set to "yes".

最后,当在日历报告响应中使用时,CALDAV:calendar数据XML元素指定日历对象资源的内容。假设XML解析器将两个字符序列CRLF(US-ASCII十进制13和US-ASCII十进制10)标准化为单个LF字符(US-ASCII十进制10),则在CALDAV:calendar data XML元素中指定的日历对象资源中可能会忽略CR字符(US-ASCII十进制13)。此外,如果日历报告请求的CALDAV:calendar数据XML元素部分未指定所需的属性(例如UID、DTSTAMP等),或者未使用“novalue”指定CALDAV:prop XML元素,则CALDAV:calendar数据XML元素中指定的日历对象资源根据其媒体类型规范可能无效属性设置为“是”。

Note: The CALDAV:calendar-data XML element is specified in requests and responses inside the DAV:prop XML element as if it were a WebDAV property. However, the CALDAV:calendar-data XML element is not a WebDAV property and, as such, is not returned in PROPFIND responses, nor used in PROPPATCH requests.

注意:CALDAV:calendar数据XML元素在DAV:prop XML元素内的请求和响应中指定,就像它是WebDAV属性一样。但是,CALDAV:calendar数据XML元素不是WebDAV属性,因此不会在PROPFIND响应中返回,也不会在PROPPATCH请求中使用。

Note: The iCalendar data embedded within the CALDAV:calendar-data XML element MUST follow the standard XML character data encoding rules, including use of &lt;, &gt;, &amp; etc. entity encoding or the use of a <![CDATA[ ... ]]> construct. In the later case, the iCalendar data cannot contain the character sequence "]]>", which is the end delimiter for the CDATA section.

注意:CALDAV:calendar数据XML元素中嵌入的iCalendar数据必须遵循标准的XML字符数据编码规则,包括使用&lt&gt&amp;等。实体编码或使用<![CDATA[…]]>构造。在后一种情况下,iCalendar数据不能包含字符序列“]]>”,这是CDATA节的结束分隔符。

Definition:

定义:

         <!ELEMENT calendar-data EMPTY>
        
         <!ELEMENT calendar-data EMPTY>
        

when nested in the CALDAV:supported-calendar-data property to specify a supported media type for calendar object resources;

嵌套在CALDAV:supported calendar data属性中时,为日历对象资源指定支持的媒体类型;

<!ELEMENT calendar-data (comp?, (expand | limit-recurrence-set)?, limit-freebusy-set?)>

<!元素日历数据(comp?,(扩展|限制重复集)?,限制忙闲集?>

when nested in the DAV:prop XML element in a calendaring REPORT request to specify which parts of calendar object resources should be returned in the response;

当嵌套在日历报告请求中的DAV:prop XML元素中时,指定响应中应返回日历对象资源的哪些部分;

         <!ELEMENT calendar-data (#PCDATA)>
         PCDATA value: iCalendar object
        
         <!ELEMENT calendar-data (#PCDATA)>
         PCDATA value: iCalendar object
        

when nested in the DAV:prop XML element in a calendaring REPORT response to specify the content of a returned calendar object resource.

嵌套在日历报告响应中的DAV:prop XML元素中时,用于指定返回的日历对象资源的内容。

         <!ATTLIST calendar-data content-type CDATA "text/calendar"
                                 version CDATA "2.0">
         content-type value: a MIME media type
         version value: a version string
        
         <!ATTLIST calendar-data content-type CDATA "text/calendar"
                                 version CDATA "2.0">
         content-type value: a MIME media type
         version value: a version string
        

attributes can be used on all three variants of the CALDAV:calendar-data XML element.

属性可用于CALDAV:calendar数据XML元素的所有三个变体。

9.6.1. CALDAV:comp XML Element
9.6.1. CALDAV:compxml元素

Name: comp

姓名:comp

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Defines which component types to return.

目的:定义要返回的组件类型。

Description: The name value is a calendar component name (e.g., VEVENT).

描述:名称值是日历组件名称(例如VEVENT)。

Definition:

定义:

         <!ELEMENT comp ((allprop | prop*), (allcomp | comp*))>
        
         <!ELEMENT comp ((allprop | prop*), (allcomp | comp*))>
        
         <!ATTLIST comp name CDATA #REQUIRED>
         name value: a calendar component name
        
         <!ATTLIST comp name CDATA #REQUIRED>
         name value: a calendar component name
        

Note: The CALDAV:prop and CALDAV:allprop elements have the same name as the DAV:prop and DAV:allprop elements defined in [RFC2518]. However, the CALDAV:prop and CALDAV:allprop elements are defined in the "urn:ietf:params:xml:ns:caldav" namespace instead of the "DAV:" namespace.

注意:CALDAV:prop和CALDAV:allprop元素与[RFC2518]中定义的DAV:prop和DAV:allprop元素具有相同的名称。但是,CALDAV:prop和CALDAV:allprop元素是在“urn:ietf:params:xml:ns:CALDAV”命名空间中定义的,而不是在“DAV:”命名空间中定义的。

9.6.2. CALDAV:allcomp XML Element
9.6.2. CALDAV:allcompxml元素

Name: allcomp

姓名:allcomp

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies that all components shall be returned.

目的:规定所有部件均应返回。

Description: The CALDAV:allcomp XML element can be used when the client wants all types of components returned by a calendaring REPORT request.

描述:当客户端希望日历报告请求返回所有类型的组件时,可以使用CALDAV:allcomp XML元素。

Definition:

定义:

         <!ELEMENT allcomp EMPTY>
        
         <!ELEMENT allcomp EMPTY>
        
9.6.3. CALDAV:allprop XML Element
9.6.3. CALDAV:allpropxml元素

Name: allprop

道具:全名

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies that all properties shall be returned.

目的:指定应返回所有属性。

Description: The CALDAV:allprop XML element can be used when the client wants all properties of components returned by a calendaring REPORT request.

描述:当客户端希望日历报告请求返回组件的所有属性时,可以使用CALDAV:allprop XML元素。

Definition:

定义:

         <!ELEMENT allprop EMPTY>
        
         <!ELEMENT allprop EMPTY>
        

Note: The CALDAV:allprop element has the same name as the DAV: allprop element defined in [RFC2518]. However, the CALDAV:allprop element is defined in the "urn:ietf:params:xml:ns:caldav" namespace instead of the "DAV:" namespace.

注意:CALDAV:allprop元素与[RFC2518]中定义的DAV:allprop元素具有相同的名称。但是,CALDAV:allprop元素是在“urn:ietf:params:xml:ns:CALDAV”命名空间中定义的,而不是在“DAV:”命名空间中定义的。

9.6.4. CALDAV:prop XML Element
9.6.4. CALDAV:propxml元素

Name: prop

姓名:道具

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Defines which properties to return in the response.

目的:定义要在响应中返回的属性。

Description: The "name" attribute specifies the name of the calendar property to return (e.g., ATTENDEE). The "novalue" attribute can be used by clients to request that the actual value of the property not be returned (if the "novalue" attribute is set to "yes"). In that case, the server will return just the iCalendar property name and any iCalendar parameters and a trailing ":" without the subsequent value data.

描述:“name”属性指定要返回的日历属性的名称(例如,ATTENDEE)。客户端可以使用“novalue”属性请求不返回属性的实际值(如果“novalue”属性设置为“yes”)。在这种情况下,服务器将只返回iCalendar属性名称和任何iCalendar参数以及尾随“:”而不返回后续值数据。

Definition:

定义:

         <!ELEMENT prop EMPTY>
        
         <!ELEMENT prop EMPTY>
        
         <!ATTLIST prop name CDATA #REQUIRED
                        novalue (yes | no) "no">
         name value: a calendar property name
         novalue value: "yes" or "no"
        
         <!ATTLIST prop name CDATA #REQUIRED
                        novalue (yes | no) "no">
         name value: a calendar property name
         novalue value: "yes" or "no"
        

Note: The CALDAV:prop element has the same name as the DAV:prop element defined in [RFC2518]. However, the CALDAV:prop element is defined in the "urn:ietf:params:xml:ns:caldav" namespace instead of the "DAV:" namespace.

注意:CALDAV:prop元素与[RFC2518]中定义的DAV:prop元素具有相同的名称。但是,CALDAV:prop元素是在“urn:ietf:params:xml:ns:CALDAV”命名空间中定义的,而不是在“DAV:”命名空间中定义的。

9.6.5. CALDAV:expand XML Element
9.6.5. CALDAV:展开XML元素

Name: expand

名称:展开

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Forces the server to expand recurring components into individual recurrence instances.

目的:强制服务器将定期组件扩展为单个定期实例。

Description: The CALDAV:expand XML element specifies that for a given calendaring REPORT request, the server MUST expand the recurrence set into calendar components that define exactly one

描述:CALDAV:expand-XML元素指定,对于给定的日历报告请求,服务器必须将重复集扩展为仅定义一个的日历组件

recurrence instance, and MUST return only those whose scheduled time intersect a specified time range.

重复实例,并且必须仅返回计划时间与指定时间范围相交的实例。

The "start" attribute specifies the inclusive start of the time range, and the "end" attribute specifies the non-inclusive end of the time range. Both attributes are specified as date with UTC time value. The value of the "end" attribute MUST be greater than the value of the "start" attribute.

“开始”属性指定时间范围的包含性开始,“结束”属性指定时间范围的非包含性结束。这两个属性都指定为带有UTC时间值的日期。“结束”属性的值必须大于“开始”属性的值。

The server MUST use the same logic as defined for CALDAV:time-range to determine if a recurrence instance intersects the specified time range.

服务器必须使用为CALDAV:time range定义的相同逻辑来确定重复实例是否与指定的时间范围相交。

Recurring components, other than the initial instance, MUST include a RECURRENCE-ID property indicating which instance they refer to.

重复出现的组件(初始实例除外)必须包含一个RECURRENCE-ID属性,该属性指示它们引用的实例。

The returned calendar components MUST NOT use recurrence properties (i.e., EXDATE, EXRULE, RDATE, and RRULE) and MUST NOT have reference to or include VTIMEZONE components. Date and local time with reference to time zone information MUST be converted into date with UTC time.

返回的日历组件不得使用重复属性(即EXDATE、EXRULE、RDATE和RRULE),并且不得引用或包含VTIMEZONE组件。参考时区信息的日期和本地时间必须转换为UTC时间的日期。

Definition:

定义:

         <!ELEMENT expand EMPTY>
        
         <!ELEMENT expand EMPTY>
        
         <!ATTLIST expand start CDATA #REQUIRED
                          end   CDATA #REQUIRED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
         <!ATTLIST expand start CDATA #REQUIRED
                          end   CDATA #REQUIRED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
9.6.6. CALDAV:limit-recurrence-set XML Element
9.6.6. CALDAV:限制重复集XML元素

Name: limit-recurrence-set

名称:限制重复集

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a time range to limit the set of "overridden components" returned by the server.

目的:指定时间范围以限制服务器返回的“重写组件”集。

Description: The CALDAV:limit-recurrence-set XML element specifies that for a given calendaring REPORT request, the server MUST return, in addition to the "master component", only the "overridden components" that impact a specified time range. An overridden component impacts a time range if its current start and end times overlap the time range, or if the original start and end

描述:CALDAV:limit recurrence set XML元素指定,对于给定的日历报告请求,除了“主组件”之外,服务器必须仅返回影响指定时间范围的“重写组件”。如果被替代零部件的当前开始和结束时间与时间范围重叠,或者如果原始开始和结束时间重叠,则被替代零部件会影响时间范围

times -- the ones that would have been used if the instance were not overridden -- overlap the time range.

时间(如果实例未被覆盖,则会使用的时间)与时间范围重叠。

The "start" attribute specifies the inclusive start of the time range, and the "end" attribute specifies the non-inclusive end of the time range. Both attributes are specified as date with UTC time value. The value of the "end" attribute MUST be greater than the value of the "start" attribute.

“开始”属性指定时间范围的包含性开始,“结束”属性指定时间范围的非包含性结束。这两个属性都指定为带有UTC时间值的日期。“结束”属性的值必须大于“开始”属性的值。

The server MUST use the same logic as defined for CALDAV:time-range to determine if the current or original scheduled time of an "overridden" recurrence instance intersects the specified time range.

服务器必须使用为CALDAV:time range定义的相同逻辑来确定“重写”重复实例的当前或原始计划时间是否与指定的时间范围相交。

Overridden components that have a RANGE parameter on their RECURRENCE-ID property may specify one or more instances in the recurrence set, and some of those instances may fall within the specified time range or may have originally fallen within the specified time range prior to being overridden. If that is the case, the overridden component MUST be included in the results, as it has a direct impact on the interpretation of instances within the specified time range.

在其RECURRENCE-ID属性上具有RANGE参数的被重写组件可以在递归集中指定一个或多个实例,其中一些实例可能位于指定的时间范围内,或者可能在被重写之前最初位于指定的时间范围内。如果是这种情况,则覆盖的组件必须包含在结果中,因为它对指定时间范围内实例的解释有直接影响。

Definition:

定义:

         <!ELEMENT limit-recurrence-set EMPTY>
        
         <!ELEMENT limit-recurrence-set EMPTY>
        
         <!ATTLIST limit-recurrence-set start CDATA #REQUIRED
                                        end   CDATA #REQUIRED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
         <!ATTLIST limit-recurrence-set start CDATA #REQUIRED
                                        end   CDATA #REQUIRED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
9.6.7. CALDAV:limit-freebusy-set XML Element
9.6.7. CALDAV:限制忙/闲集XML元素

Name: limit-freebusy-set

名称:限制忙/闲集

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a time range to limit the set of FREEBUSY values returned by the server.

目的:指定时间范围以限制服务器返回的忙/闲值集。

Description: The CALDAV:limit-freebusy-set XML element specifies that for a given calendaring REPORT request, the server MUST only return the FREEBUSY property values of a VFREEBUSY component that intersects a specified time range.

描述:CALDAV:limit freebusy set XML元素指定,对于给定的日历报告请求,服务器必须仅返回与指定时间范围相交的VFREEBUSY组件的freebusy属性值。

The "start" attribute specifies the inclusive start of the time range, and the "end" attribute specifies the non-inclusive end of

“开始”属性指定时间范围的包含性开始,“结束”属性指定时间范围的非包含性结束

the time range. Both attributes are specified as "date with UTC time" value. The value of the "end" attribute MUST be greater than the value of the "start" attribute.

时间范围。这两个属性都指定为“带UTC时间的日期”值。“结束”属性的值必须大于“开始”属性的值。

The server MUST use the same logic as defined for CALDAV:time-range to determine if a FREEBUSY property value intersects the specified time range.

必须使用与服务器定义的时间范围相同的CALDAV属性值来确定空闲时间范围。

Definition:

定义:

         <!ELEMENT limit-freebusy-set EMPTY>
        
         <!ELEMENT limit-freebusy-set EMPTY>
        
         <!ATTLIST limit-freebusy-set start CDATA #REQUIRED
                                      end   CDATA #REQUIRED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
         <!ATTLIST limit-freebusy-set start CDATA #REQUIRED
                                      end   CDATA #REQUIRED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
9.7. CALDAV:filter XML Element
9.7. CALDAV:过滤XML元素

Name: filter

名称:过滤器

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a filter to limit the set of calendar components returned by the server.

目的:指定筛选器以限制服务器返回的日历组件集。

Description: The CALDAV:filter XML element specifies the search filter used to limit the calendar components returned by a calendaring REPORT request.

描述:CALDAV:filter XML元素指定用于限制日历报告请求返回的日历组件的搜索筛选器。

Definition:

定义:

         <!ELEMENT filter (comp-filter)>
        
         <!ELEMENT filter (comp-filter)>
        
9.7.1. CALDAV:comp-filter XML Element
9.7.1. CALDAV:comp过滤器XML元素

Name: comp-filter

名称:comp过滤器

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies search criteria on calendar components.

目的:指定日历组件的搜索条件。

Description: The CALDAV:comp-filter XML element specifies a query targeted at the calendar object (i.e., VCALENDAR) or at a specific calendar component type (e.g., VEVENT). The scope of the CALDAV:comp-filter XML element is the calendar object when used as a child of the CALDAV:filter XML element. The scope of the CALDAV:comp-filter XML element is the enclosing calendar component

描述:CALDAV:comp filter XML元素指定针对日历对象(即VCALENDAR)或特定日历组件类型(例如VEVENT)的查询。CALDAV:comp filter XML元素的作用域在用作CALDAV:filter XML元素的子元素时是日历对象。CALDAV:comp filter XML元素的作用域是封闭的日历组件

when used as a child of another CALDAV:comp-filter XML element. A CALDAV:comp-filter is said to match if:

当用作另一个CALDAV:comp filter XML元素的子元素时。如果满足以下条件,则称CALDAV:comp过滤器匹配:

* The CALDAV:comp-filter XML element is empty and the calendar object or calendar component type specified by the "name" attribute exists in the current scope;

* CALDAV:comp filter XML元素为空,且当前作用域中存在由“name”属性指定的日历对象或日历组件类型;

or:

或:

* The CALDAV:comp-filter XML element contains a CALDAV:is-not-defined XML element and the calendar object or calendar component type specified by the "name" attribute does not exist in the current scope;

* CALDAV:comp filter XML元素包含一个CALDAV:is not defined XML元素,当前范围中不存在由“name”属性指定的日历对象或日历组件类型;

or:

或:

* The CALDAV:comp-filter XML element contains a CALDAV:time-range XML element and at least one recurrence instance in the targeted calendar component is scheduled to overlap the specified time range, and all specified CALDAV:prop-filter and CALDAV:comp-filter child XML elements also match the targeted calendar component;

* CALDAV:comp-filter XML元素包含一个CALDAV:time-range XML元素,目标日历组件中至少有一个重复实例计划与指定的时间范围重叠,并且所有指定的CALDAV:prop-filter和CALDAV:comp-filter子XML元素也与目标日历组件匹配;

or:

或:

* The CALDAV:comp-filter XML element only contains CALDAV:prop-filter and CALDAV:comp-filter child XML elements that all match the targeted calendar component.

* CALDAV:comp filter XML元素仅包含与目标日历组件匹配的CALDAV:prop filter和CALDAV:comp filter子XML元素。

Definition:

定义:

         <!ELEMENT comp-filter (is-not-defined | (time-range?,
                                prop-filter*, comp-filter*))>
        
         <!ELEMENT comp-filter (is-not-defined | (time-range?,
                                prop-filter*, comp-filter*))>
        
         <!ATTLIST comp-filter name CDATA #REQUIRED>
         name value: a calendar object or calendar component
                     type (e.g., VEVENT)
        
         <!ATTLIST comp-filter name CDATA #REQUIRED>
         name value: a calendar object or calendar component
                     type (e.g., VEVENT)
        
9.7.2. CALDAV:prop-filter XML Element
9.7.2. CALDAV:prop过滤器XML元素

Name: prop-filter

名称:道具过滤器

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies search criteria on calendar properties.

目的:指定日历属性的搜索条件。

Description: The CALDAV:prop-filter XML element specifies a query targeted at a specific calendar property (e.g., CATEGORIES) in the

描述:CALDAV:prop filter XML元素指定一个查询,该查询针对

scope of the enclosing calendar component. A calendar property is said to match a CALDAV:prop-filter if:

封闭日历组件的作用域。如果满足以下条件,则称日历属性与CALDAV:prop过滤器匹配:

* The CALDAV:prop-filter XML element is empty and a property of the type specified by the "name" attribute exists in the enclosing calendar component;

* CALDAV:prop filter XML元素为空,并且封闭的日历组件中存在由“name”属性指定的类型的属性;

or:

或:

* The CALDAV:prop-filter XML element contains a CALDAV:is-not-defined XML element and no property of the type specified by the "name" attribute exists in the enclosing calendar component;

* CALDAV:prop filter XML元素包含一个CALDAV:is not defined XML元素,并且封闭的日历组件中不存在由“name”属性指定的类型的属性;

or:

或:

* The CALDAV:prop-filter XML element contains a CALDAV:time-range XML element and the property value overlaps the specified time range, and all specified CALDAV:param-filter child XML elements also match the targeted property;

* CALDAV:prop filter XML元素包含一个CALDAV:time-range XML元素,属性值与指定的时间范围重叠,所有指定的CALDAV:param filter子XML元素也与目标属性匹配;

or:

或:

* The CALDAV:prop-filter XML element contains a CALDAV:text-match XML element and the property value matches it, and all specified CALDAV:param-filter child XML elements also match the targeted property;

* CALDAV:prop filter XML元素包含一个CALDAV:text match XML元素,属性值与之匹配,所有指定的CALDAV:param filter子XML元素也与目标属性匹配;

Definition:

定义:

         <!ELEMENT prop-filter (is-not-defined |
                                ((time-range | text-match)?,
                                 param-filter*))>
        
         <!ELEMENT prop-filter (is-not-defined |
                                ((time-range | text-match)?,
                                 param-filter*))>
        
         <!ATTLIST prop-filter name CDATA #REQUIRED>
         name value: a calendar property name (e.g., ATTENDEE)
        
         <!ATTLIST prop-filter name CDATA #REQUIRED>
         name value: a calendar property name (e.g., ATTENDEE)
        
9.7.3. CALDAV:param-filter XML Element
9.7.3. CALDAV:param过滤器XML元素

Name: param-filter

名称:参数过滤器

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Limits the search to specific parameter values.

目的:将搜索限制为特定参数值。

Description: The CALDAV:param-filter XML element specifies a query targeted at a specific calendar property parameter (e.g., PARTSTAT) in the scope of the calendar property on which it is

描述:CALDAV:param filter XML元素指定一个查询,该查询的目标是在其所在的日历属性范围内的特定日历属性参数(例如PARTSTAT)

defined. A calendar property parameter is said to match a CALDAV: param-filter if:

定义如果满足以下条件,则称日历属性参数与CALDAV:param筛选器匹配:

* The CALDAV:param-filter XML element is empty and a parameter of the type specified by the "name" attribute exists on the calendar property being examined;

* CALDAV:param filter XML元素为空,并且正在检查的日历属性上存在由“name”属性指定的类型的参数;

or:

或:

* The CALDAV:param-filter XML element contains a CALDAV:is-not-defined XML element and no parameter of the type specified by the "name" attribute exists on the calendar property being examined;

* CALDAV:param filter XML元素包含一个CALDAV:is not defined XML元素,并且正在检查的日历属性上不存在由“name”属性指定的类型的参数;

Definition:

定义:

         <!ELEMENT param-filter (is-not-defined | text-match?)>
        
         <!ELEMENT param-filter (is-not-defined | text-match?)>
        
         <!ATTLIST param-filter name CDATA #REQUIRED>
         name value: a property parameter name (e.g., PARTSTAT)
        
         <!ATTLIST param-filter name CDATA #REQUIRED>
         name value: a property parameter name (e.g., PARTSTAT)
        
9.7.4. CALDAV:is-not-defined XML Element
9.7.4. CALDAV:未定义XML元素

Name: is-not-defined

名称:未定义

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies that a match should occur if the enclosing component, property, or parameter does not exist.

用途:指定如果封闭组件、属性或参数不存在,则应发生匹配。

Description: The CALDAV:is-not-defined XML element specifies that a match occurs if the enclosing component, property, or parameter value specified in a calendaring REPORT request does not exist in the calendar data being tested.

描述:CALDAV:is not defined XML元素指定,如果在日历报告请求中指定的封闭组件、属性或参数值在正在测试的日历数据中不存在,则会发生匹配。

Definition:

定义:

         <!ELEMENT is-not-defined EMPTY>
        
         <!ELEMENT is-not-defined EMPTY>
        
9.7.5. CALDAV:text-match XML Element
9.7.5. CALDAV:文本匹配XML元素

Name: text-match

名称:文本匹配

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a substring match on a property or parameter value.

目的:指定属性或参数值上的子字符串匹配。

Description: The CALDAV:text-match XML element specifies text used for a substring match against the property or parameter value specified in a calendaring REPORT request.

描述:CALDAV:text match XML元素指定用于与日历报告请求中指定的属性或参数值进行子字符串匹配的文本。

The "collation" attribute is used to select the collation that the server MUST use for character string matching. In the absence of this attribute, the server MUST use the "i;ascii-casemap" collation.

“collation”属性用于选择服务器必须用于字符串匹配的排序规则。如果没有此属性,服务器必须使用“i;ascii casemap”排序规则。

The "negate-condition" attribute is used to indicate that this test returns a match if the text matches when the attribute value is set to "no", or return a match if the text does not match, if the attribute value is set to "yes". For example, this can be used to match components with a STATUS property not set to CANCELLED.

“否定条件”属性用于指示当属性值设置为“否”时,如果文本匹配,则此测试返回匹配;如果属性值设置为“是”,则如果文本不匹配,则返回匹配。例如,这可用于匹配状态属性未设置为取消的组件。

Definition:

定义:

         <!ELEMENT text-match (#PCDATA)>
         PCDATA value: string
        
         <!ELEMENT text-match (#PCDATA)>
         PCDATA value: string
        
         <!ATTLIST text-match collation        CDATA "i;ascii-casemap"
                              negate-condition (yes | no) "no">
        
         <!ATTLIST text-match collation        CDATA "i;ascii-casemap"
                              negate-condition (yes | no) "no">
        
9.8. CALDAV:timezone XML Element
9.8. CALDAV:时区XML元素

Name: timezone

名称:时区

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies the time zone component to use when determining the results of a report.

目的:指定确定报告结果时要使用的时区组件。

Description: The CALDAV:timezone XML element specifies that for a given calendaring REPORT request, the server MUST rely on the specified VTIMEZONE component instead of the CALDAV:calendar-timezone property of the calendar collection, in which the calendar object resource is contained to resolve "date" values and "date with local time" values (i.e., floating time) to "date with UTC time" values. The server will require this information to determine if a calendar component scheduled with "date" values or "date with local time" values intersects a CALDAV:time-range specified in a CALDAV:calendar-query REPORT.

描述:CALDAV:timezone XML元素指定,对于给定的日历报告请求,服务器必须依赖指定的VTIMEZONE组件,而不是日历集合的CALDAV:calendar timezone属性,其中包含日历对象资源以解析“日期”值和“带本地时间的日期”值(即浮动时间)到“日期与UTC时间”值。服务器将需要此信息来确定使用“日期”值或“日期与本地时间”值计划的日历组件是否与CALDAV:日历查询报告中指定的CALDAV:时间范围相交。

   Note:  The iCalendar data embedded within the CALDAV:timezone XML
      element MUST follow the standard XML character data encoding
      rules, including use of &lt;, &gt;, &amp; etc. entity encoding or
      the use of a <![CDATA[ ... ]]> construct.  In the later case, the
        
   Note:  The iCalendar data embedded within the CALDAV:timezone XML
      element MUST follow the standard XML character data encoding
      rules, including use of &lt;, &gt;, &amp; etc. entity encoding or
      the use of a <![CDATA[ ... ]]> construct.  In the later case, the
        

iCalendar data cannot contain the character sequence "]]>", which is the end delimiter for the CDATA section.

iCalendar数据不能包含字符序列“]]>”,它是CDATA节的结束分隔符。

Definition:

定义:

         <!ELEMENT timezone (#PCDATA)>
         PCDATA value: an iCalendar object with exactly one VTIMEZONE
        
         <!ELEMENT timezone (#PCDATA)>
         PCDATA value: an iCalendar object with exactly one VTIMEZONE
        
9.9. CALDAV:time-range XML Element
9.9. CALDAV:时间范围XML元素

Name: time-range

名称:时间范围

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: Specifies a time range to limit the set of calendar components returned by the server.

目的:指定时间范围以限制服务器返回的日历组件集。

Description: The CALDAV:time-range XML element specifies that for a given calendaring REPORT request, the server MUST only return the calendar object resources that, depending on the context, have a component or property whose value intersects a specified time range.

描述:CALDAV:time-range XML元素指定,对于给定的日历报告请求,服务器必须仅返回日历对象资源,这些资源的值与指定的时间范围相交,具体取决于上下文。

The "start" attribute specifies the inclusive start of the time range, and the "end" attribute specifies the non-inclusive end of the time range. Both attributes MUST be specified as "date with UTC time" value. Time ranges open at one end can be specified by including only one attribute; however, at least one attribute MUST always be present in the CALDAV:time-range element. If either the "start" or "end" attribute is not specified in the CALDAV:time-range XML element, assume "-infinity" and "+infinity" as their value, respectively. If both "start" and "end" are present, the value of the "end" attribute MUST be greater than the value of the "start" attribute.

“开始”属性指定时间范围的包含性开始,“结束”属性指定时间范围的非包含性结束。这两个属性都必须指定为“带UTC时间的日期”值。在一端打开的时间范围可以通过只包含一个属性来指定;但是,CALDAV:time-range元素中必须始终至少存在一个属性。如果CALDAV:time-range XML元素中未指定“start”或“end”属性,则分别假定“-infinity”和“+infinity”为其值。如果同时存在“开始”和“结束”,则“结束”属性的值必须大于“开始”属性的值。

Time range tests MUST consider every recurrence instance when testing the time range condition; if any one instance matches, then the test returns true. Testing recurrence instances requires the server to infer an effective value for DTSTART, DTEND, DURATION, and DUE properties for an instance based on the recurrence patterns and any overrides.

在测试时间范围条件时,时间范围测试必须考虑每个递归实例;如果任何一个实例匹配,那么测试将返回true。测试重复实例需要服务器根据重复模式和任何覆盖推断实例的DTSTART、DTEND、DURATION和DUE属性的有效值。

A VEVENT component overlaps a given time range if the condition for the corresponding component state specified in the table below is satisfied. Note that, as specified in [RFC2445], the DTSTART property is REQUIRED in the VEVENT component. The conditions depend on the presence of the DTEND and DURATION properties in the VEVENT component. Furthermore, the value of the DTEND property

如果满足下表中规定的相应部件状态条件,则VEVENT部件与给定的时间范围重叠。注意,如[RFC2445]中所述,VEVENT组件中需要DTSTART属性。这些条件取决于VEVENT组件中是否存在DTEND和DURATION属性。此外,DTEND属性的值

MUST be later in time than the value of the DTSTART property. The duration of a VEVENT component with no DTEND and DURATION properties is 1 day (+P1D) when the DTSTART is a DATE value, and 0 seconds when the DTSTART is a DATE-TIME value.

时间必须晚于DTSTART属性的值。当DTSTART为日期值时,不带DTEND和duration属性的VEVENT组件的持续时间为1天(+P1D),当DTSTART为日期时间值时,持续时间为0秒。

      +---------------------------------------------------------------+
      | VEVENT has the DTEND property?                                |
      |   +-----------------------------------------------------------+
      |   | VEVENT has the DURATION property?                         |
      |   |   +-------------------------------------------------------+
      |   |   | DURATION property value is greater than 0 seconds?    |
      |   |   |   +---------------------------------------------------+
      |   |   |   | DTSTART property is a DATE-TIME value?            |
      |   |   |   |   +-----------------------------------------------+
      |   |   |   |   | Condition to evaluate                         |
      +---+---+---+---+-----------------------------------------------+
      | Y | N | N | * | (start <  DTEND AND end > DTSTART)            |
      +---+---+---+---+-----------------------------------------------+
      | N | Y | Y | * | (start <  DTSTART+DURATION AND end > DTSTART) |
      |   |   +---+---+-----------------------------------------------+
      |   |   | N | * | (start <= DTSTART AND end > DTSTART)          |
      +---+---+---+---+-----------------------------------------------+
      | N | N | N | Y | (start <= DTSTART AND end > DTSTART)          |
      +---+---+---+---+-----------------------------------------------+
      | N | N | N | N | (start <  DTSTART+P1D AND end > DTSTART)      |
      +---+---+---+---+-----------------------------------------------+
        
      +---------------------------------------------------------------+
      | VEVENT has the DTEND property?                                |
      |   +-----------------------------------------------------------+
      |   | VEVENT has the DURATION property?                         |
      |   |   +-------------------------------------------------------+
      |   |   | DURATION property value is greater than 0 seconds?    |
      |   |   |   +---------------------------------------------------+
      |   |   |   | DTSTART property is a DATE-TIME value?            |
      |   |   |   |   +-----------------------------------------------+
      |   |   |   |   | Condition to evaluate                         |
      +---+---+---+---+-----------------------------------------------+
      | Y | N | N | * | (start <  DTEND AND end > DTSTART)            |
      +---+---+---+---+-----------------------------------------------+
      | N | Y | Y | * | (start <  DTSTART+DURATION AND end > DTSTART) |
      |   |   +---+---+-----------------------------------------------+
      |   |   | N | * | (start <= DTSTART AND end > DTSTART)          |
      +---+---+---+---+-----------------------------------------------+
      | N | N | N | Y | (start <= DTSTART AND end > DTSTART)          |
      +---+---+---+---+-----------------------------------------------+
      | N | N | N | N | (start <  DTSTART+P1D AND end > DTSTART)      |
      +---+---+---+---+-----------------------------------------------+
        

A VTODO component is said to overlap a given time range if the condition for the corresponding component state specified in the table below is satisfied. The conditions depend on the presence of the DTSTART, DURATION, DUE, COMPLETED, and CREATED properties in the VTODO component. Note that, as specified in [RFC2445], the DUE value MUST be a DATE-TIME value equal to or after the DTSTART value if specified.

如果满足下表中规定的相应部件状态条件,则VTODO部件称为在给定时间范围内重叠。这些条件取决于VTODO组件中是否存在DTSTART、DURATION、DUE、COMPLETED和CREATED属性。请注意,如[RFC2445]中所述,到期日值必须是等于或晚于DTSTART值(如果指定)的日期时间值。

   +-------------------------------------------------------------------+
   | VTODO has the DTSTART property?                                   |
   |   +---------------------------------------------------------------+
   |   |   VTODO has the DURATION property?                            |
   |   |   +-----------------------------------------------------------+
   |   |   | VTODO has the DUE property?                               |
   |   |   |   +-------------------------------------------------------+
   |   |   |   | VTODO has the COMPLETED property?                     |
   |   |   |   |   +---------------------------------------------------+
   |   |   |   |   | VTODO has the CREATED property?                   |
   |   |   |   |   |   +-----------------------------------------------+
   |   |   |   |   |   | Condition to evaluate                         |
   +---+---+---+---+---+-----------------------------------------------+
   | Y | Y | N | * | * | (start  <= DTSTART+DURATION)  AND             |
   |   |   |   |   |   | ((end   >  DTSTART)  OR                       |
   |   |   |   |   |   |  (end   >= DTSTART+DURATION))                 |
   +---+---+---+---+---+-----------------------------------------------+
   | Y | N | Y | * | * | ((start <  DUE)      OR  (start <= DTSTART))  |
   |   |   |   |   |   | AND                                           |
   |   |   |   |   |   | ((end   >  DTSTART)  OR  (end   >= DUE))      |
   +---+---+---+---+---+-----------------------------------------------+
   | Y | N | N | * | * | (start  <= DTSTART)  AND (end >  DTSTART)     |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | Y | * | * | (start  <  DUE)      AND (end >= DUE)         |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | Y | Y | ((start <= CREATED)  OR  (start <= COMPLETED))|
   |   |   |   |   |   | AND                                           |
   |   |   |   |   |   | ((end   >= CREATED)  OR  (end   >= COMPLETED))|
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | Y | N | (start  <= COMPLETED) AND (end  >= COMPLETED) |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | N | Y | (end    >  CREATED)                           |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | N | N | TRUE                                          |
   +---+---+---+---+---+-----------------------------------------------+
        
   +-------------------------------------------------------------------+
   | VTODO has the DTSTART property?                                   |
   |   +---------------------------------------------------------------+
   |   |   VTODO has the DURATION property?                            |
   |   |   +-----------------------------------------------------------+
   |   |   | VTODO has the DUE property?                               |
   |   |   |   +-------------------------------------------------------+
   |   |   |   | VTODO has the COMPLETED property?                     |
   |   |   |   |   +---------------------------------------------------+
   |   |   |   |   | VTODO has the CREATED property?                   |
   |   |   |   |   |   +-----------------------------------------------+
   |   |   |   |   |   | Condition to evaluate                         |
   +---+---+---+---+---+-----------------------------------------------+
   | Y | Y | N | * | * | (start  <= DTSTART+DURATION)  AND             |
   |   |   |   |   |   | ((end   >  DTSTART)  OR                       |
   |   |   |   |   |   |  (end   >= DTSTART+DURATION))                 |
   +---+---+---+---+---+-----------------------------------------------+
   | Y | N | Y | * | * | ((start <  DUE)      OR  (start <= DTSTART))  |
   |   |   |   |   |   | AND                                           |
   |   |   |   |   |   | ((end   >  DTSTART)  OR  (end   >= DUE))      |
   +---+---+---+---+---+-----------------------------------------------+
   | Y | N | N | * | * | (start  <= DTSTART)  AND (end >  DTSTART)     |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | Y | * | * | (start  <  DUE)      AND (end >= DUE)         |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | Y | Y | ((start <= CREATED)  OR  (start <= COMPLETED))|
   |   |   |   |   |   | AND                                           |
   |   |   |   |   |   | ((end   >= CREATED)  OR  (end   >= COMPLETED))|
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | Y | N | (start  <= COMPLETED) AND (end  >= COMPLETED) |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | N | Y | (end    >  CREATED)                           |
   +---+---+---+---+---+-----------------------------------------------+
   | N | N | N | N | N | TRUE                                          |
   +---+---+---+---+---+-----------------------------------------------+
        

A VJOURNAL component overlaps a given time range if the condition for the corresponding component state specified in the table below is satisfied. The conditions depend on the presence of the DTSTART property in the VJOURNAL component and on whether the DTSTART is a DATE-TIME or DATE value. The effective "duration" of a VJOURNAL component is 1 day (+P1D) when the DTSTART is a DATE value, and 0 seconds when the DTSTART is a DATE-TIME value.

如果满足下表中指定的相应组件状态的条件,则VJOURNAL组件与给定的时间范围重叠。这些条件取决于VJOURNAL组件中是否存在DTSTART属性,以及DTSTART是日期时间还是日期值。当DTSTART为日期值时,VJOURNAL组件的有效“持续时间”为1天(+P1D),当DTSTART为日期时间值时,为0秒。

      +----------------------------------------------------+
      | VJOURNAL has the DTSTART property?                 |
      |   +------------------------------------------------+
      |   | DTSTART property is a DATE-TIME value?         |
      |   |   +--------------------------------------------+
      |   |   | Condition to evaluate                      |
      +---+---+--------------------------------------------+
      | Y | Y | (start <= DTSTART)     AND (end > DTSTART) |
      +---+---+--------------------------------------------+
      | Y | N | (start <  DTSTART+P1D) AND (end > DTSTART) |
      +---+---+--------------------------------------------+
      | N | * | FALSE                                      |
      +---+---+--------------------------------------------+
        
      +----------------------------------------------------+
      | VJOURNAL has the DTSTART property?                 |
      |   +------------------------------------------------+
      |   | DTSTART property is a DATE-TIME value?         |
      |   |   +--------------------------------------------+
      |   |   | Condition to evaluate                      |
      +---+---+--------------------------------------------+
      | Y | Y | (start <= DTSTART)     AND (end > DTSTART) |
      +---+---+--------------------------------------------+
      | Y | N | (start <  DTSTART+P1D) AND (end > DTSTART) |
      +---+---+--------------------------------------------+
      | N | * | FALSE                                      |
      +---+---+--------------------------------------------+
        

A VFREEBUSY component overlaps a given time range if the condition for the corresponding component state specified in the table below is satisfied. The conditions depend on the presence in the VFREEBUSY component of the DTSTART and DTEND properties, and any FREEBUSY properties in the absence of DTSTART and DTEND. Any DURATION property is ignored, as it has a special meaning when used in a VFREEBUSY component.

如果满足下表中指定的相应组件状态的条件,VFREEBUSY组件与给定的时间范围重叠。这些条件取决于VFREEBUSY组件中是否存在DTSTART和DTEND属性,以及在没有DTSTART和DTEND的情况下是否存在任何FREEBUSY属性。任何DURATION属性都将被忽略,因为它在VFREEBUSY组件中使用时具有特殊意义。

When only FREEBUSY properties are used, each period in each FREEBUSY property is compared against the time range, irrespective of the type of free busy information (free, busy, busy-tentative, busy-unavailable) represented by the property.

如果仅使用忙/闲属性,则将每个忙/闲属性中的每个时段与时间范围进行比较,而不考虑属性所表示的忙/闲信息类型(忙、忙、忙/不可用)。

      +------------------------------------------------------+
      | VFREEBUSY has both the DTSTART and DTEND properties? |
      |   +--------------------------------------------------+
      |   | VFREEBUSY has the FREEBUSY property?             |
      |   |   +----------------------------------------------+
      |   |   | Condition to evaluate                        |
      +---+---+----------------------------------------------+
      | Y | * | (start <= DTEND) AND (end > DTSTART)         |
      +---+---+----------------------------------------------+
      | N | Y | (start <  freebusy-period-end) AND           |
      |   |   | (end   >  freebusy-period-start)             |
      +---+---+----------------------------------------------+
      | N | N | FALSE                                        |
      +---+---+----------------------------------------------+
        
      +------------------------------------------------------+
      | VFREEBUSY has both the DTSTART and DTEND properties? |
      |   +--------------------------------------------------+
      |   | VFREEBUSY has the FREEBUSY property?             |
      |   |   +----------------------------------------------+
      |   |   | Condition to evaluate                        |
      +---+---+----------------------------------------------+
      | Y | * | (start <= DTEND) AND (end > DTSTART)         |
      +---+---+----------------------------------------------+
      | N | Y | (start <  freebusy-period-end) AND           |
      |   |   | (end   >  freebusy-period-start)             |
      +---+---+----------------------------------------------+
      | N | N | FALSE                                        |
      +---+---+----------------------------------------------+
        

A VALARM component is said to overlap a given time range if the following condition holds:

如果以下条件成立,则称VALARM组件与给定时间范围重叠:

         (start <= trigger-time) AND (end > trigger-time)
        
         (start <= trigger-time) AND (end > trigger-time)
        

A VALARM component can be defined such that it triggers repeatedly. Such a VALARM component is said to overlap a given time range if at least one of its triggers overlaps the time range.

可以定义VALARM组件,使其重复触发。如果VALARM组件的至少一个触发器与给定的时间范围重叠,则称该组件与给定的时间范围重叠。

The calendar properties COMPLETED, CREATED, DTEND, DTSTAMP, DTSTART, DUE, and LAST-MODIFIED overlap a given time range if the following condition holds:

如果满足以下条件,则已完成、已创建、DTEND、DTSTAMP、DTSTART、DUE和上次修改的日历属性将在给定的时间范围内重叠:

          (start <= date-time) AND (end > date-time)
        
          (start <= date-time) AND (end > date-time)
        

Note that if DTEND is not present in a VEVENT, but DURATION is, then the test should instead operate on the 'effective' DTEND, i.e., DTSTART+DURATION. Similarly, if DUE is not present in a VTODO, but DTSTART and DURATION are, then the test should instead operate on the 'effective' DUE, i.e., DTSTART+DURATION.

请注意,如果VEVENT中不存在DTEND,但持续时间为,则测试应在“有效”DTEND上运行,即DTSTART+持续时间。同样,如果VTODO中不存在到期,但DTSTART和DURATION存在,则测试应改为在“有效”到期,即DTSTART+DURATION上运行。

The semantic of CALDAV:time-range is not defined for any other calendar components and properties.

CALDAV:time range的语义未为任何其他日历组件和属性定义。

Definition:

定义:

         <!ELEMENT time-range EMPTY>
        
         <!ELEMENT time-range EMPTY>
        
         <!ATTLIST time-range start CDATA #IMPLIED
                              end   CDATA #IMPLIED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
         <!ATTLIST time-range start CDATA #IMPLIED
                              end   CDATA #IMPLIED>
         start value: an iCalendar "date with UTC time"
         end value: an iCalendar "date with UTC time"
        
9.10. CALDAV:calendar-multiget XML Element
9.10. CALDAV:日历多获取XML元素

Name: calendar-multiget

名称:calendar multiget

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: CalDAV report used to retrieve specific calendar object resources.

用途:用于检索特定日历对象资源的CalDAV报告。

Description: See Section 7.9.

说明:见第7.9节。

Definition:

定义:

         <!ELEMENT calendar-multiget ((DAV:allprop |
                                      DAV:propname |
                                      DAV:prop)?, DAV:href+)>
        
         <!ELEMENT calendar-multiget ((DAV:allprop |
                                      DAV:propname |
                                      DAV:prop)?, DAV:href+)>
        
9.11. CALDAV:free-busy-query XML Element
9.11. CALDAV:忙/闲查询XML元素

Name: free-busy-query

名称:忙/闲查询

   Namespace:  urn:ietf:params:xml:ns:caldav
        
   Namespace:  urn:ietf:params:xml:ns:caldav
        

Purpose: CalDAV report used to generate a VFREEBUSY to determine busy time over a specific time range.

用途:CalDAV报告用于生成VFREEBUSY,以确定特定时间范围内的忙时间。

Description: See Section 7.10.

说明:见第7.10节。

Definition:

定义:

         <!ELEMENT free-busy-query (time-range)>
        
         <!ELEMENT free-busy-query (time-range)>
        
10. Internationalization Considerations
10. 国际化考虑

CalDAV allows internationalized strings to be stored and retrieved for the description of calendar collections (see Section 5.2.1).

CalDAV允许存储和检索国际化字符串以描述日历集合(请参见第5.2.1节)。

The CALDAV:calendar-query REPORT (Section 7.8) includes a text searching option controlled by the CALDAV:text-match element, and details of character handling are covered in the description of that element (see Section 9.7.5).

CALDAV:calendar查询报告(第7.8节)包括一个由CALDAV:text match元素控制的文本搜索选项,该元素的描述中介绍了字符处理的详细信息(请参见第9.7.5节)。

11. Security Considerations
11. 安全考虑

HTTP protocol transactions are sent in the clear over the network unless protection from snooping is negotiated. This can be accomplished by use of TLS, as defined in [RFC2818]. In particular, HTTP Basic authentication MUST NOT be used unless TLS is in effect.

HTTP协议事务通过网络以明文形式发送,除非协商防止窥探。这可以通过使用TLS实现,如[RFC2818]中所定义。特别是,除非TLS有效,否则不得使用HTTP基本身份验证。

Servers MUST take adequate precautions to ensure that malicious clients cannot consume excessive server resources (CPU, memory, disk, etc.) through carefully crafted reports. For example, a client could upload an event with a recurrence rule that specifies a recurring event occurring every second for the next 100 years, which would result in approximately 3 x 10^9 instances! A report that asks for recurrences to be expanded over that range would likely constitute a denial-of-service attack on the server.

服务器必须采取充分的预防措施,以确保恶意客户端不会通过精心编制的报告消耗过多的服务器资源(CPU、内存、磁盘等)。例如,客户机可以上载一个事件,该事件具有一个重复规则,该规则指定在未来100年内每秒发生一次重复事件,这将导致大约3 x 10^9个实例!如果报告要求将重复事件扩展到该范围,则可能会在服务器上构成拒绝服务攻击。

When creating new resources (including calendar collections), clients MUST ensure that the resource name (the last path segment of the resource URI) assigned to the new resource does not expose any data from within the iCalendar resource itself or information about the nature of a calendar collection. This is required to ensure that the presence of a specific iCalendar component or nature of components in a collection cannot be inferred based on the name of a resource.

创建新资源(包括日历集合)时,客户端必须确保分配给新资源的资源名称(资源URI的最后一个路径段)不会公开iCalendar资源本身中的任何数据或有关日历集合性质的信息。这是必需的,以确保不能根据资源的名称推断集合中特定iCalendar组件的存在或组件的性质。

When rolling up free-busy information, more information about a user's events is exposed if busy periods overlap or are adjacent (this tells the client requesting the free-busy information that the calendar owner has at least two events, rather than knowing only that the calendar owner has one or more events during the busy period). Thus, a conservative approach to calendar data privacy would have servers always coalesce such busy periods when they are the same type.

在汇总忙/闲信息时,如果忙时段重叠或相邻,则会显示有关用户事件的更多信息(这会告诉请求忙/闲信息的客户端,日历所有者至少有两个事件,而不是只知道日历所有者在忙时段有一个或多个事件)。因此,一种保守的日历数据隐私方法是,当服务器是同一类型时,服务器总是合并这些繁忙时段。

Procedure alarms are a known security risk for either clients or servers to handle, particularly when the alarm was created by another agent. Clients and servers are not required to execute such procedure alarms.

过程警报是客户端或服务器要处理的已知安全风险,特别是当警报由另一个代理创建时。客户端和服务器不需要执行此类程序警报。

Security considerations described in iCalendar [RFC2445] and iTIP [RFC2446] are also applicable to CalDAV.

iCalendar[RFC2445]和iTIP[RFC2446]中描述的安全注意事项也适用于CalDAV。

Beyond these, CalDAV does not raise any security considerations that are not present in HTTP [RFC2616] and WebDAV [RFC2518], [RFC3253], [RFC3744].

除此之外,CalDAV不会提出HTTP[RFC2616]和WebDAV[RFC2518]、[RFC3253]、[RFC3744]中不存在的任何安全注意事项。

12. IANA Considerations
12. IANA考虑

This document uses one new URN to identify a new XML namespace. The URN conforms to a registry mechanism described in [RFC3688].

本文档使用一个新URN来标识新的XML命名空间。URN符合[RFC3688]中描述的注册表机制。

12.1. Namespace Registration
12.1. 命名空间注册

Registration request for the CalDAV namespace:

CalDAV命名空间的注册请求:

   URI: urn:ietf:params:xml:ns:caldav
        
   URI: urn:ietf:params:xml:ns:caldav
        

Registrant Contact: See the "Authors' Addresses" section of this document.

注册人联系人:请参阅本文件的“作者地址”部分。

XML: None. Namespace URIs do not represent an XML specification.

XML:没有。命名空间URI不表示XML规范。

13. Acknowledgements
13. 致谢

The authors would like to thank the following individuals for contributing their ideas and support for writing this specification: Michael Arick, Mario Bonin, Chris Bryant, Scott Carr, Andre Courtemanche, Mike Douglass, Ted Hardie, Marten den Haring, Jeffrey Harris, Sam Hartman, Helge Hess, Jeff McCullough, Alexey Melnikov, Dan Mosedale, Brian Moseley, Francois Perrault, Kervin L. Pierre, Julian F. Reschke, Wilfredo Sanchez Vega, Mike Shaver, Jari Urpalainen, Simon Vaillancourt, and Jim Whitehead.

作者要感谢以下个人为编写本规范贡献了他们的想法和支持:迈克尔·阿里克、马里奥·博宁、克里斯·布莱恩特、斯科特·卡尔、安德烈·柯特曼奇、迈克·道格拉斯、特德·哈迪、马丁·登·哈林、杰弗里·哈里斯、萨姆·哈特曼、赫尔格·赫斯、杰夫·麦卡洛、亚历克赛·梅尔尼科夫、丹·莫塞代尔,布莱恩·莫斯利、弗朗索瓦·佩罗特、凯文·皮埃尔、朱利安·雷什克、威尔弗雷多·桑切斯·维加、迈克·肖弗、贾里·厄帕莱宁、西蒙·维兰科特和吉姆·怀特黑德。

The authors would also like to thank the Calendaring and Scheduling Consortium for advice with this specification, and for organizing interoperability testing events to help refine it.

作者还想感谢日历和日程安排协会对本规范的建议,以及组织互操作性测试活动以帮助完善本规范。

14. References
14. 工具书类
14.1. Normative References
14.1. 规范性引用文件

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,1997年3月。

[RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC 2246, January 1999.

[RFC2246]Dierks,T.和C.Allen,“TLS协议版本1.0”,RFC2246,1999年1月。

[RFC2445] Dawson, F. and Stenerson, D., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", RFC 2445, November 1998.

[RFC2445]Dawson,F.和Stenerson,D.,“互联网日历和调度核心对象规范(iCalendar)”,RFC 24451998年11月。

[RFC2446] Silverberg, S., Mansour, S., Dawson, F., and R. Hopson, "iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events, BusyTime, To-dos and Journal Entries", RFC 2446, November 1998.

[RFC2446]Silverberg,S.,Mansour,S.,Dawson,F.,和R.Hopson,“iCalendar传输独立互操作性协议(iTIP)调度事件,繁忙时间,待办事项和日志条目”,RFC 24461998年11月。

[RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring -- WEBDAV", RFC 2518, February 1999.

[RFC2518]Goland,Y.,Whitehead,E.,Faizi,A.,Carter,S.,和D.Jensen,“分布式创作的HTTP扩展——WEBDAV”,RFC25181999年2月。

[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.

[RFC2616]菲尔丁,R.,盖蒂斯,J.,莫卧儿,J.,弗莱斯蒂克,H.,马斯特,L.,利奇,P.,和T.伯纳斯李,“超文本传输协议——HTTP/1.1”,RFC 2616,1999年6月。

[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.

[RFC2818]Rescorla,E.,“TLS上的HTTP”,RFC2818,2000年5月。

[RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J. Whitehead, "Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)", RFC 3253, March 2002.

[RFC3253]Clemm,G.,Amsden,J.,Ellison,T.,Kaler,C.,和J.Whitehead,“WebDAV的版本控制扩展(Web分布式创作和版本控制)”,RFC 3253,2002年3月。

[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, January 2004.

[RFC3688]Mealling,M.“IETF XML注册表”,BCP 81,RFC 3688,2004年1月。

[RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol", RFC 3744, May 2004.

[RFC3744]Clemm,G.,Reschke,J.,Sedlar,E.,和J.Whitehead,“Web分布式创作和版本控制(WebDAV)访问控制协议”,RFC 3744,2004年5月。

[RFC4346] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.1", RFC 4346, April 2006.

[RFC4346]Dierks,T.和E.Rescorla,“传输层安全(TLS)协议版本1.1”,RFC 4346,2006年4月。

[RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet Application Protocol Collation Registry", RFC 4790, March 2007.

[RFC4790]Newman,C.,Duerst,M.,和A.Gulbrandsen,“互联网应用协议整理注册表”,RFC 47902007年3月。

[W3C.REC-xml-20060816] Paoli, J., Maler, E., Yergeau, F., Sperberg-McQueen, C., and T. Bray, "Extensible Markup Language (XML) 1.0 (Fourth Edition)", World Wide Web Consortium Recommendation REC-xml-20060816, August 2006, <http://www.w3.org/TR/2006/REC-xml-20060816>.

[W3C.REC-xml-20060816]Paoli,J.,Maler,E.,Yergeau,F.,Sperberg-McQueen,C.,和T.Bray,“可扩展标记语言(xml)1.0(第四版)”,万维网联盟建议REC-xml-20060816,2006年8月<http://www.w3.org/TR/2006/REC-xml-20060816>.

14.2. Informative References
14.2. 资料性引用

[RFC2426] Dawson, F. and T. Howes, "vCard MIME Directory Profile", RFC 2426, September 1998.

[RFC2426]Dawson,F.和T.Howes,“vCard MIME目录配置文件”,RFC 2426,1998年9月。

[RFC2739] Small, T., Hennessy, D., and F. Dawson, "Calendar Attributes for vCard and LDAP", RFC 2739, January 2000.

[RFC2739]斯莫尔,T.,轩尼诗,D.,和F.道森,“vCard和LDAP的日历属性”,RFC 2739,2000年1月。

[RFC4331] Korver, B. and L. Dusseault, "Quota and Size Properties for Distributed Authoring and Versioning (DAV) Collections", RFC 4331, February 2006.

[RFC4331]Korver,B.和L.Dusseault,“分布式创作和版本控制(DAV)集合的配额和大小属性”,RFC 43312006年2月。

[RFC4511] Sermersheim, J., "Lightweight Directory Access Protocol (LDAP): The Protocol", RFC 4511, June 2006.

[RFC4511]Sermersheim,J.,“轻量级目录访问协议(LDAP):协议”,RFC4511,2006年6月。

[rfc2518bis] Dusseault, L., "HTTP Extensions for Distributed Authoring - WebDAV", Work in Progress, December 2006.

[rfc2518bis]Dusseault,L.,“分布式创作的HTTP扩展-WebDAV”,正在进行的工作,2006年12月。

Appendix A. CalDAV Method Privilege Table (Normative)

附录A.CalDAV方法权限表(规范性)

The following table extends the WebDAV Method Privilege Table specified in Appendix B of [RFC3744].

下表扩展了[RFC3744]附录B中指定的WebDAV方法权限表。

   +------------+------------------------------------------------------+
   | METHOD     | PRIVILEGES                                           |
   +------------+------------------------------------------------------+
   | MKCALENDAR | DAV:bind                                             |
   | REPORT     | DAV:read or CALDAV:read-free-busy (on all referenced |
   |            | resources)                                           |
   +------------+------------------------------------------------------+
        
   +------------+------------------------------------------------------+
   | METHOD     | PRIVILEGES                                           |
   +------------+------------------------------------------------------+
   | MKCALENDAR | DAV:bind                                             |
   | REPORT     | DAV:read or CALDAV:read-free-busy (on all referenced |
   |            | resources)                                           |
   +------------+------------------------------------------------------+
        
Appendix B. Calendar Collections Used in the Examples
附录B.示例中使用的日历集合

This appendix shows the calendar object resources contained in the calendar collection queried in the examples throughout this document.

本附录显示了本文档示例中查询的日历集合中包含的日历对象资源。

The content of the calendar collection is being shown as if it were returned by a CALDAV:calendar-query REPORT request designed to return all the calendar data in the collection:

日历集合的内容显示为CALDAV:calendar查询报告请求返回,该请求旨在返回集合中的所有日历数据:

   >> Request <<
        
   >> Request <<
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   REPORT /bernard/work/ HTTP/1.1
   Host: cal.example.com
   Depth: 1
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                    xmlns:C="urn:ietf:params:xml:ns:caldav">
    <D:prop>
      <D:getetag/>
      <C:calendar-data/>
    </D:prop>
    <C:filter>
      <C:comp-filter name="VCALENDAR"/>
    </C:filter>
   </C:calendar-query>
        
   <?xml version="1.0" encoding="utf-8" ?>
   <C:calendar-query xmlns:D="DAV:"
                    xmlns:C="urn:ietf:params:xml:ns:caldav">
    <D:prop>
      <D:getetag/>
      <C:calendar-data/>
    </D:prop>
    <C:filter>
      <C:comp-filter name="VCALENDAR"/>
    </C:filter>
   </C:calendar-query>
        
   >> Response <<
        
   >> Response <<
        
   HTTP/1.1 207 Multi-Status
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   HTTP/1.1 207 Multi-Status
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
        
   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd1"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001102Z
   DTSTART;TZID=US/Eastern:20060102T100000
   DURATION:PT1H
   SUMMARY:Event #1
   Description:Go Steelers!
   UID:74855313FA803DA593CD579A@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd1.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd1"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001102Z
   DTSTART;TZID=US/Eastern:20060102T100000
   DURATION:PT1H
   SUMMARY:Event #1
   Description:Go Steelers!
   UID:74855313FA803DA593CD579A@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd2.ics</D:href>
       <D:propstat>
        
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
         <D:prop>
           <D:getetag>"fffff-abcd2"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd3.ics</D:href>
        
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd3"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:cyrus@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com
   DTSTAMP:20060206T001220Z
   DTSTART;TZID=US/Eastern:20060104T100000
   DURATION:PT1H
   LAST-MODIFIED:20060206T001330Z
   ORGANIZER:mailto:cyrus@example.com
   SEQUENCE:1
   STATUS:TENTATIVE
   SUMMARY:Event #3
   UID:DC6C50A017428C5216A2F1CD@example.com
   END:VEVENT
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
       <D:propstat>
         <D:prop>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd4.ics</D:href>
       <D:propstat>
         <D:prop>
        
           <D:getetag>"fffff-abcd4"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235335Z
   DUE;VALUE=DATE:20060104
   STATUS:NEEDS-ACTION
   SUMMARY:Task #1
   UID:DDDEEB7915FA61233B861457@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
           <D:getetag>"fffff-abcd4"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235335Z
   DUE;VALUE=DATE:20060104
   STATUS:NEEDS-ACTION
   SUMMARY:Task #1
   UID:DDDEEB7915FA61233B861457@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd5.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd5"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235300Z
   DUE;VALUE=DATE:20060106
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:NEEDS-ACTION
   SUMMARY:Task #2
   UID:E10BA47467C5C69BB74E8720@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd5.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd5"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235300Z
   DUE;VALUE=DATE:20060106
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:NEEDS-ACTION
   SUMMARY:Task #2
   UID:E10BA47467C5C69BB74E8720@example.com
   BEGIN:VALARM
   ACTION:AUDIO
   TRIGGER;RELATED=START:-PT10M
   END:VALARM
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
        
     </D:response>
        
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd6.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd6"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   COMPLETED:20051223T122322Z
   DTSTAMP:20060205T235400Z
   DUE;VALUE=DATE:20051225
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:COMPLETED
   SUMMARY:Task #3
   UID:E10BA47467C5C69BB74E8722@example.com
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd6.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd6"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   COMPLETED:20051223T122322Z
   DTSTAMP:20060205T235400Z
   DUE;VALUE=DATE:20051225
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:COMPLETED
   SUMMARY:Task #3
   UID:E10BA47467C5C69BB74E8722@example.com
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd7.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd7"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235600Z
   DUE;VALUE=DATE:20060101
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:CANCELLED
   SUMMARY:Task #4
   UID:E10BA47467C5C69BB74E8725@example.com
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd7.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd7"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTODO
   DTSTAMP:20060205T235600Z
   DUE;VALUE=DATE:20060101
   LAST-MODIFIED:20060205T235308Z
   SEQUENCE:1
   STATUS:CANCELLED
   SUMMARY:Task #4
   UID:E10BA47467C5C69BB74E8725@example.com
   END:VTODO
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
        
       </D:propstat>
     </D:response>
        
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd8.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd8"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VFREEBUSY
   ORGANIZER;CN="Bernard Desruisseaux":mailto:bernard@example.com
   UID:76ef34-54a3d2@example.com
   DTSTAMP:20050530T123421Z
   DTSTART:20060101T000000Z
   DTEND:20060108T000000Z
   FREEBUSY:20050531T230000Z/20050601T010000Z
   FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060102T100000Z/20060102T120000Z
   FREEBUSY:20060103T100000Z/20060103T120000Z
   FREEBUSY:20060104T100000Z/20060104T120000Z
   FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20060105T100000Z/20060105T120000Z
   FREEBUSY:20060106T100000Z/20060106T120000Z
   END:VFREEBUSY
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
     <D:response>
       <D:href>http://cal.example.com/bernard/work/abcd8.ics</D:href>
       <D:propstat>
         <D:prop>
           <D:getetag>"fffff-abcd8"</D:getetag>
           <C:calendar-data>BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VFREEBUSY
   ORGANIZER;CN="Bernard Desruisseaux":mailto:bernard@example.com
   UID:76ef34-54a3d2@example.com
   DTSTAMP:20050530T123421Z
   DTSTART:20060101T000000Z
   DTEND:20060108T000000Z
   FREEBUSY:20050531T230000Z/20050601T010000Z
   FREEBUSY;FBTYPE=BUSY-TENTATIVE:20060102T100000Z/20060102T120000Z
   FREEBUSY:20060103T100000Z/20060103T120000Z
   FREEBUSY:20060104T100000Z/20060104T120000Z
   FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20060105T100000Z/20060105T120000Z
   FREEBUSY:20060106T100000Z/20060106T120000Z
   END:VFREEBUSY
   END:VCALENDAR
   </C:calendar-data>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
        
   </D:multistatus>
        
   </D:multistatus>
        

Authors' Addresses

作者地址

Cyrus Daboo Apple Inc. 1 Infinite Loop Cupertino, CA 95014 USA

Cyrus Daboo苹果公司,美国加利福尼亚州库珀蒂诺市无限环路1号,邮编95014

   EMail: cyrus@daboo.name
   URI:   http://www.apple.com/
        
   EMail: cyrus@daboo.name
   URI:   http://www.apple.com/
        

Bernard Desruisseaux Oracle Corporation 600 Blvd. de Maisonneuve West Suite 1900 Montreal, QC H3A 3J2 CANADA

伯纳德·德斯鲁索甲骨文公司600大道。de Maisonneuve West套房1900加拿大蒙特利尔QC H3A 3J2

   EMail: bernard.desruisseaux@oracle.com
   URI:   http://www.oracle.com/
        
   EMail: bernard.desruisseaux@oracle.com
   URI:   http://www.oracle.com/
        

Lisa Dusseault CommerceNet 169 University Ave. Palo Alto, CA 94301 USA

美国加利福尼亚州帕洛阿尔托大学大道169号Lisa Dusseault商业网94301

   EMail: ldusseault@commerce.net
   URI:   http://commerce.net/
        
   EMail: ldusseault@commerce.net
   URI:   http://commerce.net/
        

Full Copyright Statement

完整版权声明

Copyright (C) The IETF Trust (2007).

版权所有(C)IETF信托基金(2007年)。

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

本文件受BCP 78中包含的权利、许可和限制的约束,除其中规定外,作者保留其所有权利。

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

本文件及其包含的信息以“原样”为基础提供,贡献者、他/她所代表或赞助的组织(如有)、互联网协会、IETF信托基金和互联网工程任务组不承担任何明示或暗示的担保,包括但不限于任何保证,即使用本文中的信息不会侵犯任何权利,或对适销性或特定用途适用性的任何默示保证。

Intellectual Property

知识产权

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.

IETF对可能声称与本文件所述技术的实施或使用有关的任何知识产权或其他权利的有效性或范围,或此类权利下的任何许可可能或可能不可用的程度,不采取任何立场;它也不表示它已作出任何独立努力来确定任何此类权利。有关RFC文件中权利的程序信息,请参见BCP 78和BCP 79。

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

向IETF秘书处披露的知识产权副本和任何许可证保证,或本规范实施者或用户试图获得使用此类专有权利的一般许可证或许可的结果,可从IETF在线知识产权存储库获取,网址为http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

IETF邀请任何相关方提请其注意任何版权、专利或专利申请,或其他可能涵盖实施本标准所需技术的专有权利。请将信息发送至IETF的IETF-ipr@ietf.org.

Acknowledgement

确认

Funding for the RFC Editor function is currently provided by the Internet Society.

RFC编辑功能的资金目前由互联网协会提供。