3.1. 컨텐츠 라인 (Content Lines)

iCalendar 개체는 컨텐츠 라인이라고 불리우는 개별 텍스트 라인으로 구성됩니다. 컨텐츠 행은 CRLF 시퀀스(CR 문자 다음에 LF 문자)로 구성된 줄바꿈으로 구분됩니다.

각각의 텍스트 행은 줄바꿈을 제외하고 75옥텟보다 길지 않아야 합니다(SHOULD NOT). 긴 컨텐츠 라인은 “접기”(folding) 기술을 사용하여 여러 줄 표현으로 분할되어야 합니다(SHOULD). 여기서 말하는 “접기”(folding) 기술이란, 긴 줄을 단일 공백 문자(SPACE 또는 HTAB)가 뒤에 오는 CRLF를 구분자로 하여 분할하는 것을 가리킵니다. 컨텐츠 유형을 처리할 때, 단일 공백 문자가 바로 뒤에 오는 CRLF 문자 시퀀스는 무시됩니다.

예를 들어서, 다음 라인은

DESCRIPTION:This is a long description that exists on a long line.

다음처럼 표현할 수 있습니다.

DESCRIPTION:This is a lo
 ng description
  that exists on a long line.

이 접힌 여러 줄 표현을 한줄 표현으로 변환하는 프로세스를 “펼침”(unfolding)이라고 부릅니다. “펼침”(unfolding)은 CRLF와 바로 뒤에 오는 단일 공백 문자를 제거해서 수행됩니다.

메모

매우 간단한 구현에서, UTF-8 다중 옥텟 시퀀스의 중간에 부적절하게 접힌 라인(improperly folded lines)을 생성하는 것이 가능합니다. 그러므로 실제 구현에서는 펼침시 원래 시퀀스를 적절하게 복원할 필요가 있습니다.

iCalendar 개체와 관련된 컨텐츠 정보는 [RFC2425]에 정의된 것과 유사한 구분을 사용하여 지정됩니다. 즉, 컨텐츠 정보는 CRLF로 구분된 컨텐츠 라인으로 구성됩니다.

다음 표기법은 iCalendar 개체의 컨텐츠의 라인을 정의합니다.

contentline      = name *(";" param) ":" value CRLF
; 이 ABNF는 컨텐츠 라인을 속성 이름(name), param 목록 및 값(value) 문자열로
; 초기 구문 분석하기 위한 일반적인 정의입니다.
;
; 컨텐츠 라인을 파싱할 때, 접힌 라인은 위에서 설명한 펼침
; 절차에 따라 펼쳐져야 합니다.
; 컨텐츠 라인을 생성할 때 75 옥텟보다 긴 라인은 위에서 설명한
; 접기(folding) 절차에 따라 접혀야 합니다.

name             = iana-token / x-name

iana-token       = 1*(ALPHA / DIGIT / "-")
; IANA에 등록된 iCalendar 식별자

x-name           = "X-" [venderid "-"] 1*[ALPHA / DIGIT / "-")
; 추후 실험용으로 예약되었습니다

venderid         = 3*(ALPHA / DIGIT)
; 공급자 식별자

param            = param-name "=" param-value *("," param-value)
; 각 속성은 속성에 허용되는 매개변수에 대한 특정 ABNF를 정의합니다.
; 정확한 매개변수(precise parameter) ABNF에 대한 특정 속성을 참고하십시오

param-name       = iana-token / x-name

param-value      = paramtext / quoted-string

paramtext        = *SAFE-CHAR

value            = *VALUE-CHAR

quoted-string    = DQUOTE *QSAFE-CHAR DQUOTE

QSAFE-CHAR       = WSP / %x21 / %x23-7E / NON-US-ASCII
; CONTROL과 DQUOTE 를 제외한 모든 문자

SAFE-CHAR        = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7e / NON-US-ASCII
; CONTROL, DQUOTE, ";", ":", "," 를 제외한 모든 문자

VALUE-CHAR       = WSP / %x21-7E / NON-US-ASCII
; 모든 텍스트 문자

NON-US-ASCII     = UTF2-8 / UTF8-3/ UTF8-4
; UTF8-2, UTF8-3, UTF8-4는 [RFC3629]에 정의됨

CONTROL          = %x00-08 / %x0A-1F / %x7F
; HTAB을 제외한 모든 제어문자

컨텐츠 라인의 속성 값 구성 요소에는 속성 고유의 형식이 있습니다. 이러한 형식의 정의는 각 속성을 설명하는 섹션을 참고하십시오.

모든 속성의 이름, 속성 매개변수, 열거된 속성 값 및 속성 매개변수는 대소문자를 구분하지 않습니다. 하지만 달리 명시되지 않는 한, 다른 모든 속성 값은 대소문자를 구분합니다.

(Ref: 3.1. Content Lines)