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)