5. Calendar Access Feature
5.1. Calendar Access Support
이 문서에 설명된 기능을 지원하는 서버는 캘린더 속성, 보고서, 메서드 또는 권한을 지원하는 리소스에 대한 OPTIONS 요청의 DAV 응답 헤더에 "calendar-access"를 필드로 포함해야 합니다. DAV 응답 헤더의 "calendar- access" 값은 서버가 이 문서에 명시된 모든 MUST 수준 요구 사항을 지원함을 나타내야 합니다.
5.1.1. Example: Using OPTIONS for the Discovery of Calendar Access
>> Request <<
OPTIONS /home/bernard/calendars/ HTTP/1.1
Host: cal.example.com
>> 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
이 예에서 OPTIONS 메서드는 DAV 응답 헤더에 "calendar- access" 값을 반환하여 "/home/bernard/calendars/" 컬렉션이 이 사양에 정의된 속성, 보고서, 메서드 또는 권한을 지원한다는 것을 나타냅니다.
5.2. Calendar Collection Properties
이 섹션에서는 캘린더 컬렉션의 속성을 정의합니다.
5.2.1. CALDAV:calendar-description Property
Name: calendar-description
Namespace: urn:ietf:params:xml:ns:caldav
목적: 캘린더 컬렉션에 대해 사람이 읽을 수 있는 설명을 제공합니다.
적합성: 이 속성은 모든 캘린더 컬렉션에 정의될 수 있습니다. 정의된 경우, 이 속성은 보호될 수 있으며 PROPFIND DAV:allprop 요청에 의해 반환되어서는 안 됩니다([RFC2518]의 12.14.1절에 정의됨). 설명의 인간 언어를 나타내는 xml:lang 속성은 클라이언트 또는 서버 프로비저닝을 통해 이 속성에 대해 설정되어야 합니다. 서버는 속성에 대해 설정된 경우 xml:lang 속성을 반환해야 합니다.
설명: 있는 경우 이 속성에는 사용자에게 표시하기에 적합한 캘린더 컬렉션에 대한 설명이 포함됩니다. 없는 경우 클라이언트는 캘린더 컬렉션에 대한 설명이 없다고 가정해야 합니다.
정의:
<!ELEMENT calendar-description (#PCDATA)>
PCDATA value: string
예시:
<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
Name: calendar-timezone
Namespace: urn:ietf:params:xml:ns:caldav
Purpose: 캘린더 컬렉션의 표준 시간대를 지정합니다.
Conformance:
이 속성은 모든 캘린더 컬렉션에 정의되어야 합니다. 정의된 경우 PROPFIND DAV:allprop 요청([RFC2518] 12.14.1절에 정의됨)에 의해 반환되지 않아야 합니다.
Description:
CALDAV:calendar-timezone 속성은 서버가 '날짜' 값과 '현지 시간 포함 날짜' 값(즉, 부동 시간)을 'UTC 시간 포함 날짜' 값으로 변환할 때 사용해야 하는 시간대를 지정하는 데 사용됩니다. 서버는 "날짜" 값 또는 "현지 시간 포함 날짜" 값으로 예약된 캘린더 구성 요소가 CALDAV:캘린더 쿼리 REPORT에 지정된 CALDAV: 시간 범위와 겹치는지 확인하기 위해 이 정보를 필요로 합니다. 또한 서버는 "날짜" 값 또는 "현지 시간 포함 날짜" 값으로 예약된 캘린더 구성 요소를 고려하는 CALDAV:free-busy-query REPORT 요청에 대한 응답으로 반환되는 VFREEBUSY 구성 요소에서 "UTC 시간 포함 날짜"로 적절한 FREEBUSY 기간을 계산하기 위해 이 정보를 필요로 합니다. 이 속성이 없는 경우 서버는 선택한 표준 시간대를 사용할 수 있습니다.
Note:
CALDAV:calendar- 시간대 XML 요소에 포함된 iCalendar 데이터는 <![CDATA[ ... ]]> 엔티티 인코딩 사용 또는 <![CDATA[ ... ]]> 구문 사용 등 표준 XML 문자 데이터 인코딩 규칙을 따라야 합니다. 후자의 경우 iCalendar 데이터에는 CDATA 섹션의 끝 구분 기호인 문자 시퀀스 "]]>"를 포함할 수 없습니다.
Definition:
<!ELEMENT calendar-timezone (#PCDATA)>
PCDATA value: an iCalendar object with exactly one VTIMEZONE
component.
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 & 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>
5.2.3. CALDAV:supported-calendar-component-set Property
Name: supported-calendar-component-set
Namespace: urn:ietf:params:xml:ns:caldav
Purpose:
캘린더 객체 리소스가 캘린더 컬렉션에 포함할 수 있는 캘린더 구성요소 유형(예: VEVENT, VTODO 등)을 지정합니다.
적합성: 이 속성은 모든 캘린더 컬렉션에 정의할 수 있습니다. 정의된 경우 반드시 보호되어야 하며 PROPFIND DAV:allprop 요청에 의해 반환되어서는 안 됩니다([RFC2518]의 12.14.1절에 정의됨).
Description:
CALDAV:supported-calendar-component-set 속성은 캘린더 개체 리소스가 캘린더 컬렉션에 포함할 수 있는 캘린더 구성 요소 유형에 대한 제한을 지정하는 데 사용됩니다. 클라이언트가 이 속성에 나열되지 않은 구성 요소 유형이 있는 캘린더 객체 리소스를 저장하려고 시도하면 반드시 오류가 발생하며, CALDAV:supported-calendar-component 전제 조건(섹션 5.3.2.1)을 위반한 것이 됩니다. 이 속성은 보호되어 있으므로 클라이언트가 PROPPATCH 요청을 사용하여 변경할 수 없습니다. 그러나 클라이언트는 MKCALENDAR를 사용하여 새 캘린더 컬렉션을 만들 때 이 속성의 값을 초기화할 수 있습니다. 빈 요소 태그 <C:comp name="VTIMEZONE"/>는 VTIMEZONE 구성 요소만 포함된 캘린더 객체 리소스에 대한 지원이 제공되거나 원하는 경우에만 지정해야 합니다. VEVENT 또는 VTODO 구성 요소가 포함된 캘린더 객체 리소스에서 VTIMEZONE 구성 요소에 대한 지원은 항상 가정됩니다. 이 속성이 없는 경우 서버는 모든 구성 요소 유형을 수락해야 하며 클라이언트는 모든 구성 요소 유형이 수락된다고 가정할 수 있습니다.
Definition:
<!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>
5.2.4. CALDAV:supported-calendar-data Property
Name: supported-calendar-data
Namespace: urn:ietf:params:xml:ns:caldav
Purpose: 캘린더 컬렉션의 캘린더 객체 리소스에 허용되는 미디어 유형을 지정합니다.
Conformance: 이 속성은 모든 캘린더 컬렉션에 정의될 수 있습니다. 정의된 경우 반드시 보호되어야 하며 PROPFIND DAV:allprop 요청([RFC2518] 12.14.1절에 정의됨)에 의해 반환되어서는 안 됩니다.
Description: CALDAV:supported-calendar-data 속성은 지정된 캘린더 컬렉션에 포함된 캘린더 객체 리소스에 대해 지원되는 미디어 유형을 지정하는 데 사용됩니다(예: iCalendar 버전 2.0). 클라이언트가 이 속성에 나열되지 않은 미디어 유형으로 캘린더 객체 리소스를 저장하려고 시도하면 반드시 오류가 발생하며, CALDAV:supported-calendar-data 전제 조건(섹션 5.3.2.1)을 위반한 것입니다. 이 속성이 없는 경우 서버는 미디어 유형이 "text/calendar" 및 iCalendar 버전 2.0인 데이터만 허용해야 하며, 클라이언트는 서버가 이 데이터만 허용한다고 가정할 수 있습니다.
Definition:
<!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>
5.2.5. CALDAV:max-resource-size Property
Name: max-resource-size
Namespace: urn:ietf:params:xml:ns:caldav
Conformance:
이 속성은 모든 캘린더 컬렉션에 정의될 수 있습니다. 정의된 경우 반드시 보호되어야 하며 PROPFIND DAV:allprop 요청([RFC2518] 12.14.1절에 정의됨)에 의해 반환되어서는 안 됩니다.
Description:
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)
Example:
<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.7. CALDAV:max-date-time Property
5.2.8. CALDAV:max-instances Property
5.2.9. CALDAV:max-attendees-per-instance Property
Name: max-attendees-per-instance
Namespace: urn:ietf:params:xml:ns:caldav
Purpose: 캘린더 컬렉션에 저장된 캘린더 객체 리소스의 모든 인스턴스에서 최대 참석자 속성 수를 나타내는 숫자 값을 제공합니다.
Conformance: 이 프로퍼티는 모든 캘린더 컬렉션에 정의될 수 있습니다. 정의된 경우 반드시 보호되어야 하며 PROPFIND DAV:allprop 요청에 의해 반환되어서는 안 됩니다([RFC2518]의 12.14.1절에 정의됨).
Description:
CALDAV:max-attendees-per-instance는 캘린더 컬렉션에 저장된 캘린더 객체 리소스의 한 인스턴스에 있는 iCalendar 참석자 속성의 최대 개수를 나타내는 숫자 값을 지정하는 데 사용됩니다. 이 값보다 인스턴스당 참석자 속성이 많은 캘린더 객체 리소스를 저장하려고 하면 반드시 오류가 발생하며, CALDAV: max-attendees-per-instance 전제조건(섹션 5.3.2.1)을 위반한 것입니다. 이 속성이 없는 경우 클라이언트는 서버가 캘린더 구성 요소의 참석자 속성을 원하는 수만큼 처리할 수 있다고 가정할 수 있습니다.
Definition:
<!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>
5.2.10. Additional Precondition for PROPPATCH
이 사양에는 PROPPATCH 메서드에 대한 추가 전제 조건이 필요합니다. 전제 조건은 다음과 같습니다:
(CALDAV:valid-calendar-data): CALDAV:calendar-timezone 속성에 지정된 표준 시간대는 유효한 단일 VTIMEZONE 구성 요소를 포함하는 유효한 iCalendar 객체여야 합니다.
5.2. Creating Resources
캘린더 컬렉션과 캘린더 객체 리소스는 CalDAV 클라이언트 또는 CalDAV 서버에 의해 생성될 수 있습니다. 이 사양은 클라이언트와 서버가 이러한 캘린더 데이터를 조작할 때 반드시 준수해야 하는 제한 사항과 데이터 모델을 정의합니다.
5.3.1. MKCALENDAR Method
MKCALENDAR 메서드를 사용하는 HTTP 요청은 새 캘린더 컬렉션 리소스를 생성합니다. 서버는 캘린더 컬렉션 생성을 특정 컬렉션으로 제한할 수 있습니다.
일부 캘린더 저장소는 사용자(또는 본인) 당 하나의 캘린더만 지원하며 일반적으로 각 계정에 대해 미리 생성되기 때문에 서버에서 MKCALENDAR를 지원하는 것은 권장 사항일 뿐 필수는 아닙니다. 그러나 서버와 클라이언트는 사용자가 여러 개의 캘린더 컬렉션을 만들어 데이터를 더 잘 정리할 수 있도록 가능하면 MKCALENDAR를 지원할 것을 적극 권장합니다.
클라이언트는 사람이 읽을 수 있는 캘린더 이름에 DAV:displayname 속성을 사용해야 합니다. 클라이언트는 MKCALENDAR 요청의 요청 본문에서 DAV:displayname 속성의 값을 지정하거나, 또는 MKCALENDAR 요청을 발행한 후 즉시 PROPPATCH 요청을 발행하여 DAV:displayname 속성을 적절한 값으로 변경할 수 있습니다. 클라이언트는 동일한 URI "level"에 있는 다른 캘린더 컬렉션과 동일하게 DAV: displayname 속성을 설정해서는 안 됩니다. 캘린더 컬렉션을 사용자에게 표시할 때 클라이언트는 DAV:displayname 속성을 확인하고 해당 값을 캘린더의 이름으로 사용해야 합니다. DAV: displayname 속성이 비어 있는 경우 클라이언트는 캘린더 컬렉션 URI의 마지막 부분을 이름으로 사용할 수 있지만, 해당 경로 세그먼트는 "opaque"하여 사람이 읽을 수 있는 의미 있는 텍스트를 나타내지 않을 수 있습니다.
MKCALENDAR 요청이 실패하면 요청 이전의 서버 상태가 반드시 복원되어야 합니다.
Marshalling:
요청 본문이 포함된 경우, 반드시 CALDAV:mkcalendar XML 요소여야 합니다. 명령 처리는 명령이 수신된 순서대로(즉, 위에서 아래로) 수행되어야 합니다. 인스트럭션은 모두 실행되거나 실행되지 않아야 합니다. 따라서 처리 중에 오류가 발생하면 실행된 모든 인스트럭션을 취소하고 적절한 오류 결과를 반환해야 합니다. 명령어 처리에 대한 자세한 내용은 [RFC2518] 섹션 12.13.2의 DAV:set 명령어 정의에서 확인할 수 있습니다.
<!ELEMENT mkcalendar (DAV:set)>
성공적인 요청에 대한 응답 본문이 포함된 경우, 반드시 CALDAV:mkcalendar-response XML 요소여야 합니다.
<!ELEMENT mkcalendar-response ANY>
응답에는 Cache-Control:no-cache 헤더가 포함되어야 합니다.
Postconditions:
(CALDAV:initialize-calendar-collection): 새 캘린더 컬렉션이 Reqeust-URI에 존재합니다. 캘린더 컬렉션의 DAV:resourcetype 에는 DAV:collection CALDAV:calendar XML 요소가 모두 포함되어야 합니다.
5.3.1.1. Status Codes
다음은 MKCALENDAR 요청에 대한 응답으로 받을 수 있는 응답 코드의 예시입니다. 이 목록은 결코 완전한 목록이 아닙니다.
201(Created) - 캘린더 컬렉션 리소스가 완전히 생성되었습니다;
207(Multi-Status) - 요청 본문에 지정된 하나 이상의 DAV:set 명령어를 성공적으로 처리할 수 없기 때문에 캘린더 컬렉션 리소스를 만들지 못했습니다. 다음은 이 상황에서 207(다중 상태) 응답에 사용될 것으로 예상되는 응답 코드의 예입니다:
403(Forbidden) - 서버가 지정하지 않은 이유로 클라이언트가 속성 중 하나를 변경할 수 없습니다;
409(Conflict) - 클라이언트가 해당 프로퍼티에 적합하지 않은 의미를 가진 값을 제공했습니다. 여기에는 읽기 전용 속성을 설정하려는 시도가 포함됩니다;
424(Failed Dependency) - 요청 본문에 지정된 다른 DAV:set 명령의 실패가 아니었다면 지정된 리소스에 대한 DAV:set 명령이 성공했을 것입니다;
423(Locked) - 지정한 리소스가 잠겨 있고 클라이언트가 잠금 소유자가 아니거나 잠금 유형에 잠금 토큰을 제출해야 하는데 클라이언트가 제출하지 않았습니다.
507 (Insufficient Storage) - 서버에 속성을 기록할 공간이 충분하지 않습니다;
403(Forbidden) - 다음 두 가지 조건 중 하나 이상을 나타냅니다: 1) 서버가 네임스페이스의 지정된 위치에 캘린더 컬렉션을 만드는 것을 허용하지 않거나 2) Request-URI의 상위 컬렉션이 존재하지만 구성원을 받아들일 수 없습니다;
409(Conflict) - 하나 이상의 중간 컬렉션이 만들어질 때까지 Request-URI에서 컬렉션을 만들 수 없습니다;
415(Unsupported Media Type) - 서버가 본문의 요청 유형을 지원하지 않습니다.
507(Insufficient Storage) - 이 메서드 실행 후 리소스의 상태를 기록할 공간이 충분하지 않습니다.
5.3.1.2. Example: Successful MKCALENDAT Request
이 예에서는 서버 cal.example.com에 /home/lisa/calendars/events/라는 캘린더 컬렉션을 생성하고, DAV:displayname, CALDAV:calendar-description, CALDAV:supported-calendar-component-set 및 CALDAV:calendar-timezone 속성에 대한 특정 값을 지정합니다.
>> Request <<
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>
>> Response <<
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
클라이언트는 캘린더 개체 리소스로 캘린더 컬렉션을 채웁니다. 각 캘린더 객체 리소스의 URL은 전적으로 임의적이며 캘린더 객체 리소스의 iCalendar 속성 또는 기타 메타데이터와 특정 관계를 가질 필요가 없습니다. 새 캘린더 객체 리소스는 매핑되지 않은 URI를 대상으로 하는 PUT 요청으로 만들어야 합니다. 매핑된 URI를 대상으로 하는 PUT 요청은 기존 캘린더 객체 리소스를 업데이트합니다.
서버가 새 리소스를 만들 때 서버가 매핑되지 않은 URI를 선택하는 것은 어렵지 않습니다. 클라이언트는 컬렉션의 모든 리소스를 검사하고 싶지 않을 수도 있고 새 리소스가 이름 충돌로 생성되지 않도록 전체 컬렉션을 잠그고 싶지 않을 수도 있기 때문에 약간 더 까다롭습니다. 하지만 이를 완화하는 HTTP 기능이 있습니다. 클라이언트가 새 이벤트와 같이 컬렉션이 아닌 리소스를 새로 만들려는 경우, 클라이언트는 PUT 요청에 HTTP 요청 헤더 "If-None-Match: *"를 PUT 요청에 사용해야 합니다. PUT 요청의 Request-URI는 리소스가 생성될 대상 컬렉션과 마지막 경로 세그먼트에 있는 리소스 이름을 포함해야 합니다. "If-None-Match: *" 요청 헤더는 마지막 경로 세그먼트가 이미 사용된 것으로 판명된 경우 클라이언트가 실수로 기존 리소스를 덮어쓰지 않도록 보장합니다.
>> 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
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 <<
HTTP/1.1 201 Created
Content-Length: 0
Date: Sat, 11 Nov 2006 09:32:12 GMT
ETag: "123456789-000-111"
기존 이벤트를 변경하는 요청은 동일하지만 "If-None- Match" 헤더가 아닌 "If-Match" 헤더에 특정 ETag를 사용합니다.
RFC2445] 섹션 3.10에 명시된 대로 캘린더 및 스케줄링 정보를 포함하는 (임의의) 캘린더 객체 리소스의 URL에는 ".ics"가 붙을 수 있으며, 여유 시간 또는 바쁜 시간 정보를 포함하는 캘린더 객체 리소스의 URL에는 ".ifb"가 붙을 수 있습니다.
5.3.2.1. Additional Preconditions for PUT, COPY, and MOVE
이 사양은 PUT, COPY 및 MOVE 메서드에 대한 추가 전제 조건을 생성합니다. 이러한 전제 조건은 캘린더 객체 리소스를 캘린더 컬렉션으로 PUT 작업할 때, 캘린더 객체 리소스를 캘린더 컬렉션으로 COPY 또는 MOVE 작업할 때 또는 캘린더 컬렉션에서 COPY 또는 MOVE 작업이 발생할 때 적용됩니다.
새로운 전제 조건은 다음과 같습니다:
(CALDAV:supported-calendar-data): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 캘린더 객체 리소스에 대해 지원되는 미디어 유형(즉, iCalendar)이어야 합니다;
(CALDAV:valid-calendar-data): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 지정된 미디어 유형에 유효한 데이터여야 합니다(즉, 유효한 iCalendar 데이터를 포함해야 합니다);
(CALDAV:valid-calendar-object-resource): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 섹션 4.1에 명시된 모든 제한 사항을 준수해야 합니다(예: 캘린더 객체 리소스는 두 가지 이상의 캘린더 구성 요소 유형을 포함해서는 안 되며, 캘린더 객체 리소스는 iCalendar METHOD 속성을 지정해서는 안 됨 등);
(CALDAV:supported-calendar-component): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스에는 대상 캘린더 컬렉션에서 지원되는 캘린더 컴포넌트 유형이 포함되어야 합니다;
(CALDAV:no-uid-conflict): PUT 요청에 제출되거나 COPY 또는 MOVE 요청에 의해 대상이 되는 리소스는 대상 캘린더 컬렉션에서 이미 사용 중인 iCalendar UID 속성 값을 지정하거나 기존 캘린더 개체 리소스를 다른 UID 속성 값을 가진 것으로 덮어쓰지 않아야 합니다. 서버는 DAV:href 요소에 이미 동일한 UID 속성 값을 사용하고 있는 리소스의 URL을 보고해야 합니다;
<!ELEMENT no-uid-conflict (DAV:href)>
(CALDAV:calendar-collection-location-ok): 복사 또는 이동 요청에서 Request-URI가 캘린더 컬렉션인 경우, Descrination-URI는 캘린더 컬렉션을 만들 수 있는 위치를 식별해야 합니다;
(CALDAV:max-resource-size): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 리소스가 저장될 캘린더 컬렉션의 CALDAV:max-resource- size 속성 값(섹션 5.2.5)의 값보다 작거나 같은 옥텟 크기를 가져야 합니다;
(CALDAV:min-date-time): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 리소스가 저장될 캘린더 컬렉션의 모든 iCalendar DATE 또는 DATE-TIME 속성 값(각 반복 인스턴스에 대해)이 CALDAV:min-date-time 속성 값(섹션 5.2.6)보다 크거나 같아야 합니다;
(CALDAV:max-date-time): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 리소스가 저장될 캘린더 컬렉션의 모든 iCalendar DATE 또는 DATE-TIME 속성 값(각 반복 인스턴스에 대해)이 CALDAV:max-date-time 속성 값(섹션 5.2.7)보다 작아야 합니다;
(CALDAV:max-instances): PUT 요청에 제출되거나 COPY 또는 MOVE 요청의 대상이 되는 리소스는 리소스가 저장될 캘린더 컬렉션에서 CALDAV: max-instances 속성 값(섹션 5.2.8)의 값보다 작거나 같은 수의 반복 인스턴스를 생성해야 합니다;
(CALDAV:max-attendees-per-instance): PUT 요청에 제출된 리소스 또는 복사 또는 이동 요청의 대상이 되는 리소스는 리소스가 저장될 캘린더 컬렉션의 CALDAV:max-attendees-per-instance 속성 값(섹션 5.2.9) 값보다 작거나 같은 수의 참석자 속성을 하나의 인스턴스에서 가져야 합니다;
5.3.3. Non-Standard Components, Properties, and Parameters
iCalendar는 "standdatd mechanism for doing non-standard things"을 제공합니다. 이 확장 지원을 통해 구현자는 이름 앞에 "X-"라는 텍스트가 붙은 비표준 컴포넌트, 속성 및 매개변수를 사용할 수 있습니다.
서버는 PUT 메서드를 통해 저장된 캘린더 객체 리소스에서 비표준 컴포넌트, 속성 및 파라미터의 사용을 지원해야 합니다.
서버는 자체 "private" 컴포넌트, 속성 또는 매개변수에 대한 규칙을 적용해야 할 수 있으므로 서버는 클라이언트가 해당 컴포넌트를 변경하거나 서버가 가진 제한을 벗어난 값을 사용하려는 시도를 거부할 수 있습니다. 서버는 사용하는 모든 "private" 컴포넌트, 속성 또는 매개변수가 [RFC2445] 섹션 4.2에 설명된 대로 "X-" 이름에 공급업체 ID를 포함하는 규칙을 따르도록 해야 합니다(예: "X-ABC-PRIVATE").
5.3.4. Calendar Object Resource Entity Tag
모든 캘린더 객체 리소스에서 DAV:getetag 속성을 정의하고 강력한 엔티티 태그로 설정해야 합니다.
캘린더 객체 리소스를 대상으로 하는 GET 요청에 대한 응답에는 캘린더 객체 리소스의 강력한 엔티티 태그의 현재 값을 나타내는 ETag 응답 헤더 필드가 포함되어야 합니다.
서버는 저장된 캘린더 객체 리소스가 PUT 요청 본문에 제출된 캘린더 객체 리소스와 옥텟 단위로 동등한 경우 PUT 응답에 강력한 엔티티 태그(ETag 헤더)를 반환해야 합니다. 이를 통해 클라이언트는 반환된 강력한 엔티티 태그를 데이터 동기화 목적으로 안정적으로 사용할 수 있습니다. 예를 들어, 클라이언트는 저장된 캘린더 객체 리소스에 대해 PROPFIND 요청을 수행하여 DAV:getetag 속성을 반환받고, 이 값을 PUT 응답에서 받은 강력한 엔티티 태그와 비교하여 두 값이 같으면 서버의 캘린더 객체 리소스가 변경되지 않았음을 알 수 있습니다.
PUT 요청의 결과로 서버에 저장된 데이터가 제출된 캘린더 객체 리소스와 옥텟 단위로 동일하지 않은 경우, 강력한 엔티티 태그가 응답에 반환되지 않아야 한다는 점을 제외하고는 ETag 응답 헤더의 동작이 여기에 지정되어 있지 않습니다. 따라서 클라이언트는 PUT 요청과 함께 보낸 캘린더 객체 리소스를 사용하는 대신 추가 변경을 위해 수정된 캘린더 객체 리소스(및 ETag)를 검색해야 할 수 있습니다.
'calendar' 카테고리의 다른 글
CalDAV - Introduction, Requirements Overview, Calendaring Data Model, Calendar Resources (0) | 2023.04.19 |
---|---|
iTIP - Interoperability Models (1) | 2023.04.19 |
iTIP - Introduction (0) | 2023.04.19 |