久しぶりにプログラミングをしていきなりMozillaと格闘するのはしんどすぎたので、 リハビリとしてiCalendar形式に対応したカレンダーでも作ろうかなと。 で、調べたことを忘れないように覚書をしておく。 というか逐次翻訳したことを再度翻訳してしまわないようにまとめておくのが目的だったりする。 タイトルがいきなり4章から始まるのはRFCの該当部分を翻訳してるからだよ。 1章から3章は紹介とかRFC自体の文法とか登録情報とかだったりするので積極的に略。
参考URL
4.1 コンテンツ行
- 一行75オクテットを超えるべきではない
- 長い行は複数の行に分けなさい
- CRLFのすぐ次にHTAB(#9)かSPACE(#32)を入れればその一文字を無視して残りを行の続きとして扱う
この行が
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.
以下の文法はiCalendarオブジェクトのコンテンツ行を定義する。
contentline = name *(";" param ) ":" value CRLF
; このABNFは最初にコンテント行をプロパティ名とパラメータリストと
; 値にパースする一般的な定義である
; This ABNF is just a general definition for an initial parsing
; of the content line into its property name, parameter list,
; and value string
; コンテント行をパースするときには、折りたたまれた行は
; まず最初に上記の方法で展開されなければならない。
; コンテント行を生成するときは、75オクテットを超える行は
; 上記の方法で折りたたまれるのが望ましい。
; When parsing a content line, folded lines MUST first
; be unfolded according to the unfolding procedure
; described above. When generating a content line, lines
; longer than 75 octets SHOULD be folded according to
; the folding procedure described above.
name = x-name / iana-token
iana-token = 1*(ALPHA / DIGIT / "-")
; IANAに登録されたiCalendarの識別子
; iCalendar identifier registered with IANA
x-name = "X-" [vendorid "-"] 1*(ALPHA / DIGIT / "-")
; 実験的な利用のために予約されている。
; 製品で使用するものではない。
; Reservered for experimental use. Not intended for use in
; released products.
vendorid = 3*(ALPHA / DIGIT) ;メーカー識別子
param = param-name "=" param-value
*("," param-value)
; 各プロパティはプロパティに許されるパラメータを記述した
; ABNFを定義する。目的のパラメータのABNFを記述した
; プロパティの使用を参照のこと。
; Each property defines the specific ABNF for the parameters
; allowed on the property. Refer to specific properties for
; precise parameter ABNF.
param-name = iana-token / x-token
param-value = paramtext / quoted-string
paramtext = *SAFE-CHAR
value = *VALUE-CHAR
quoted-string = DQUOTE *QSAFE-CHAR DQUOTE
NON-US-ASCII = %x80-F8
; 外部MIMEオブジェクトのcharsetパラメータによって
; 制限的に使用する(UTF-8が望ましい)
; Use restricted by charset parameter
; on outer MIME object (UTF-8 preferred)
QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII
; 制御文字と二重引用符を除いた文字
; Any character except CTLs and DQUOTE
SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E
/ NON-US-ASCII
; 制御文字と二重引用符とセミコロンとコロンとコンマを除いた文字
; Any character except CTLs, DQUOTE, ";", ":", ","
VALUE-CHAR = WSP / %x21-7E / NON-US-ASCII
; 印字可能な文字
; Any textual character
CR = %x0D
; 復帰
; carriage return
LF = %x0A
; 改行
; line feed
CRLF = CR LF
; インターネット標準改行
; Internet standard newline
CTL = %x00-08 / %x0A-1F / %x7F
; 制御文字
; Controls
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39
; 0-9
DQUOTE = %x22
; 二重引用符
; Quotation Mark
WSP = SPACE / HTAB
SPACE = %x20
HTAB = %x09
4.1.1 リストとフィールドの区切り
- プロパティやパラメータは値のリストを持てる
- 値のリストはコンマ(#44)で区切られる
- プロパティの値は複数の部分に分かれているものもある
- 構造化されたプロパティの値はコロン(#38)で区切られる*1
- プロパティはパラメータのリストを持つこともある
- プロパティパラメータはセミコロン(#39)で区切られる
ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT:MAILTO:
jsmith@host.com
RDATE;VALUE=DATE:19970304,19970504,19970704,19970904
4.1.2 複数の値
- 複数の値の符号化方法は基本的には1コンテンツ行ごとに行われる
- 値ごとに符号化方法を変える事ができるプロパティもあることは覚えておくべき
4.1.3 バイナリ内容
- バイナリ情報を入れたい場合は基本的にはURIにすべき
- どうしても入れたい場合はBASE64方式で符号化する
- ENCODINGプロパティパラメータが必須
ATTACH:http://xyz.com/public/quarterly-report.doc
ATTACH;FMTTYPE=image/basic;ENCODING=BASE64;VALUE=BINARY:
MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1U
EBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIE
<...remainder of "BASE64" encoded binary data...>
4.1.4 文字セット(文字コード)
- 文字コードを決めるプロパティパラメータはない
- 標準の文字コードはUTF8である
- Content-Typeのcharsetパラメータを使えば、IANAに登録された文字コードを使える
4章2節がずいぶんと長そうだがくじけないようにしたい。
注記
1:原文にはセミコロン(#39)と書いてあるが、 サンプルコードを見てもプロパティの値を区切っているのはコロンにしか見えないのでコロンとしておく
コメントする