So-net無料ブログ作成

プロパティパラメータの詳細 [iCalendar]

前回の続きで、各プロパティパラメータの詳細を見ていきたいと思いますが、20項目あります。どうしましょうかねぇ・・。

一覧表にまとめてみましょう。

ALTREPAlternate Text Representation
altrepparam = "ALTREP" "=" DQUOTE uri DQUOTE
iCalenderオブジェクト内に記載されている内容の代わりとなるものをURIで指定するためのもの。 と言う感じでしょうか?おそらく、詳細情報や画像(?)へのリンクの様な役割になる様に思えます。
定義を見ると分かりますが、URIはDQUOTE(0x22)で括らなければなりません。(MUST)
CNCommon Name
cnparam = "CN" "=" param-value
プロパティの値に対する表示名を指定すると言う感じですかね。 例として、下記のものが挙げられています。 この場合、メールアドレスの代わりに名前を表示することができると言う感じですかね。
 例:ORGANIZER;CN="John Smith":mailto:jsmith@example.com
CUTYPECalendar User Type
cutypeparam = "CUTYPE" "=" ("INDIVIDUAL" / ....)
プロパティ値が人などを表している場合にその属性を指定するためのものの様です。 デフォルト値(パラメータが無い場合の値?)は「INDIVIDUAL」。 x-nameやiana-tokenは分からなければ、「UNKNOWN」として扱うこと。(MUST) 例として、下記の様なのが挙げられています。出席者がグループの場合の例ですね。
 例:ATTENDEE;CUTYPE=GROUP:mailto:ietf-calsch@example.org
INDIVIDUALAn individual
GROUPA group of individuals
RESOURCEA physical resource
ROOMA room resource
UNKNOWNOtherwise not known
x-nameExperimental type
iana-tokenOther IANA-registered
DELEGATED-FROMDelegators
delfromparam = "DELEGATED-FROM" "=" DQUOTE cal-address DQUOTE *("," DQUOTE cal-address DQUOTE)
代理人が出席する場合の元の出席者の表示に使用されるのでしょうか。パラメータ値はDQUOTE(0x22)で括らなければならないとのこと。(MUST)
DELEGATED-TODelegatees
deltoparam = "DELEGATED-TO" "=" DQUOTE cal-address DQUOTE *("," DQUOTE cal-address DQUOTE)
予定の出席者に対する代理人の表示に使用する様です。パラメータ値はDQUOTE(0x22)で括らなければならないとのこと。(MUST)
DIRDirectory Entry Reference
dirparam = "DIR" "=" DQUOTE uri DQUOTE
予定に対する住所(?詳細情報? directory entry)をURIで指定するとのこと。URIはDQUOTEで括らなければならないとのこと。(MUST)
ENCODINGInline Encoding
encodingparam = "ENCODING" "=" ( "8BIT" / "BASE64" )
プロパティ値のエンコーディング方法を指定。デフォルト値は「8BIT」。「VALUE」パラメータが「BINARY」に設定されている場合、このパラメータを「ENCODING」に設定しなければならない(MUST)。
8BIT"8bit" text encoding is defined in [RFC2045]
BASE64"BASE64" binary encoding format is defined in [RFC4648]
FMTTYPEFormat Type
fmttypeparam = "FMTTYPE" "=" type-name "/" subtype-name
参照先のオブジェクトのコンテントタイプ(RFC4288)を指定する。設定する値は、「IANA-registered media type」と「non-standard media type」のいずれか。(MUST)
FBTYPEFree/Busy Time Type
fbtypeparam = "FBTYPE" "=" ("FREE" / ...)
空いている時間帯と塞がっている時間帯を指定するとのこと。デフォルトは「BUSY」。「x-name」や「iana-token」が知らない値ならば、「BUSY」として扱うこと。(MUST)
FREE空いている時間帯
BUSY塞がっている時間帯
BUSY-UNAVAILABLE塞がっていて、何も他の用事が入れられない時間帯
BUSY-TENTATIVE仮押さえされている時間帯
x-nameSome experimental iCalendar free/busy type.
iana-tokenSome other IANA-registered iCalendar free/busy type.
LANGUAGELanguage
languageparam = "LANGUAGE" "=" Language-Tag
「Language-Tag」はRFC5646に定義されているとの事。 プロパティ値のテキストに用いられている言語を指定する。
MEMBERGroup or List Membership
memberparam = "MEMBER" "=" DQUOTE cal-address DQUOTE *("," DQUOTE cal-address DQUOTE)
プロパティ値で示されているcalendar userのグループなどの所属を示すもの。パラメータ値はDQUOTE(0x22)で括り(MUST)、1つもしくは複数存在する。複数の場合はCOMMA(0x2c)で区切る。
PARTSTATParticipation Status
partstatparam = "PARTSTAT" "=" (partstat-event / partstat-todo / partstat-jour)
参加者の状態を示す。プロパティはCAL-ADDRESS型。スケジュールの内容(「VEVENT」「VTODO」「VJOUNAL」)によってパラメータ値は異なる。このパラメータが設定されていない場合のデフォルト値は「NEEDS-ACTION」。「x-name」「iana-token」については分からない場合は「NEEDS-ACTION」と見なす。(MUST)
partstat-event
「VEVENT」に関する状態。デフォルトは「NEEDS-ACTION」
NEEDS-ACTIONEvent needs action
ACCEPTEDEvent accepted
DECLINEDEvent declined
TENTATIVEEvent tentatively accepted. 仮受付。
DELEGATEDEvent delegated
x-nameExperimental status
iana-tokenOther IANA-registered status
partstat-todo
「VTODO」に関する状態。デフォルトは「NEEDS-ACTION」。
NEEDS-ACTIONTo-do needs action
ACCEPTEDTo-do accepted
DECLINEDTo-do declined
TENTATIVETo-do tentatively accepted
DELEGATEDTo-do delegated
COMPLETEDTo-do completed. COMPLETED property has DATE-TIME completed
IN-PROCESSTo-do in process of being completed
x-nameExperimental status
iana-tokenOther IANA-registered status
partstat-jour
「VJOURNAL」に関する状態。デフォルトは「NEEDS-ACTION」。
NEEDS-ACTIONJournal needs action
ACCEPTEDJournal accepted
DECLINEDJournal declined
x-nameExperimental status
iana-tokenOther IANA-registered status
RANGERecurrence Identifier Range
rangeparam = "RANGE" "=" "THISANDFUTURE"
繰り返しの範囲を指定する。・・様ですが、利用法がよくわかりません・・。例は以下の通り。
RECURRENCE-ID;RANGE=THISANDFUTURE:19980401T133000Z
RELATEDAlarm Trigger Relationship
trigrelparam = "RELATED" "=" ("START" / "END")
通知のトリガを指定する。「DURATION」型の値と共に使用。デフォルト値は「START」。表記例は下記の通り。
TRIGGER;RELATED=END:PT5M
STARTTrigger off of start
ENDTrigger off of end
RELTYPERelationship Type
reltypeparam = "RELTYPE" "=" ("PARENT" / ..)
参照先のカレンダーコンポーネントとの関係を示す様です。デフォルトは「PARENT」。「x-name」と「iana-token」は分からなければ「PARENT」として扱うこと(MUST)。使用例は下記の通り。
RELATED-TO;RELTYPE=SIBLING:19960401-080045-4000F192713@example.com
PARENTParent relationship
CHILDChild relationship
SIBLINGSibling relationship
iana-tokenSome other IANA-registered iCalendar relationship type
x-nameA non-standard, experimental relationship type
ROLEParticipation Role
roleparam = "ROLE" "=" ("CHAIR" / ...)
参加の際の役割を記述するものの様です。「CAL-ADDRESS」型の値に使用する様子。デフォルトは「REQ-PARTICIPANT」。「x-name」と「iana-token」は分からなければ、「REQ-PARTICIPANT」として扱うこと(MUST)。使用例は下記の通り。
ATTENDEE;ROLE=CHAIR:mailto:mrbig@example.com
CHAIRIndicates chair of the calendar entity
REQ-PARTICIPANTIndicates a participant whose participation is required
OPT-PARTICIPANTIndicates a participant whose participation is optional
NON-PARTICIPANTIndicates a participant who is copied for information purposes only
x-nameExperimental role
iana-tokenOther IANA role
RSVPRSVP Expectation
rsvpparam = "RSVP" "=" ("TRUE" / "FALSE")
プロパティで設定されている人からの返事を期待してるかどうかを示すとの事。「CAL-ADDRESS」型の値に使用する。 まとめ役の人が出席者に対して使われる(事を想定?)。デフォルトは「FALSE」。使用例は下記の通り。
ATTENDEE;RSVP=TRUE:mailto:jsmith@example.com
TRUETrue
FALSEFalse
SENT-BYSent By
sentbyparam = "SENT-BY" "=" DQUOTE cal-address DQUOTE
プロパティで設定されている人の代わりの人を指定する。このパラメータの値は RFC2368で規定されている mailto URI で表記する事(MUST)。 また、DQUOTE(0x22)で括ること(MUST)。使用例は以下の通り。
ORGANIZER;SENT-BY="mailto:sray@example.com":mailto: jsmith@example.com
TZIDTime Zone Identifier
tzidparam = "TZID" "=" "/" paramtext
プロパティの値に対するタイムゾーンを示します。 プロパティ「DTSTART」「DTEND」「DUE」「EXDATE」「RDATE」で、 「DATE-TIME」型の値や「TIME」型の値に対して使用する(MUST)。UTCや "floating" time には使用しない。 値は「TZID」プロパティで設定するものと同じ。個々の「VTIMEZONE」カレンダーコンポーネントは、 それぞれ固有の「TZID」が指定される事(MUST)。等々・・。使用例は下記の通り。
DTSTART;TZID=America/New_York:19980119T020000
VALUEValue Data Types
valuetypeparam = "VALUE" "=" ("BINARY" / ...)
プロパティ値の型を指定する。プロパティ値の方は一つである事(MUST)。 プロパティ値がプロパティに対するデフォルトの型の場合はこのパラメータは不要。 でも、何か他の型を指定する際はこのパラメータを設定すること(MUST)。 「x-name」や「iana-token」が理解できない場合は、値を変換等せずにそのまま保持する事(MUST)。
BINARY
BOOLEAN
CAL-ADDRESS
DATE
DATE-TIME
DURATION
FLOAT
INTEGER
PERIOD
RECUR
TEXT
TIME
URI
UTC-OFFSET
x-nameSome experimental iCalendar value type.
iana-tokenSome other IANA-registered iCalendar value type.


以上、プロパティパラメータについて、見ていきましたが、案の定時間がかかってしまいました。見ていて、そういやプロパティについて読んだ記憶がないなと思ったら、3.5節に書かれている様です。遠いですね・・。と言うか、取り上げる順が間違ってる気もしますが・・・。また、最後の型に付いては次節となります。

なお、「TZID」については、やけに詳しく書かれていたので、また、別途時刻に関する項目として取り上げたいと思います。おそらく、プロパティのところも詳しく書かれているのでは?と思われるので・・。時間って、結構ややこしいですからね。Zaurusの本体機能は、時刻は日本時刻とUTCとがごちゃごちゃになって処理されていた様な記憶があります。その分、この仕様書でも気を使われているのでしょう。

つづく。




Property Parameters [iCalendar]

さて今回は、前回からさらに細かい点に移りまして、RFC55453.2節、プロパティパラメータについてです。

各プロパティはそれに関連する属性を持つことができ、その属性をプロパティパラメータと呼ぶようです。前回見た定義によるとプロパティパラメータはプロパティ名とコロンの間にセミコロンで区切られて存在してますね。

プロパティパラメータ値に関するルールは下記の様に書かれています。

  • COLON(0x3a)、SEMICOLON(0x3b)、COMMA(0x2c)を含むものはDQUOTE(0x22)で括る(quoted-string)こと(MUST)
  • DQUOTE(0x22)文字は含まないこと(MUST NOT)
  • DQUOTE(0x22)で括られていない値は大文字・小文字を区別しない(case-insensitive)


・・・「DQUOTE」って、「"」かと思ってたんですが、によると10進で22(16進で0x16)だとの事。う〜んと思って調べてみたら、Errataがありました。「"」で問題なかったです。

例として下記の様なのが挙げられています。

DESCRIPTION;ALTREP="cid:part1.0001@example.org":The Fall'98 Wild
  Wizards Conference - - Las Vegas\, NV\, USA


RF5545で定義されているパラメータは下記の通りです。これに加えて、IANAに登録されているパラメータと標準化されていないパラメータ(X-パラメータ)が存在する様ですが、それらについては、理解できなかったら、無視しろとのこと(MUST)。

ここで定義されているパラメータは下記の通りです。

altrepparamAlternate text representation
cnparamCommon name
cutypeparamCalendar user type
delfromparam Delegator
deltoparamDelegatee
dirparamDirectory entry
encodingparamInline encoding
fmttypeparamFormat type
fbtypeparamFree/busy time type
languageparamLanguage for text
memberparamGroup or list membership
partstatparamParticipation status
rangeparamRecurrence identifier range
trigrelparamAlarm trigger relationship
reltypeparamRelationship type
roleparamParticipation role
rsvpparamRSVP expectation
sentbyparamSent by
tzidparamReference to time zone object
valuetypeparamProperty value data type


う~ん、見て何となくわかるものと何とも想像のつかないものと、色々ありますねぇ・・。ま、次から各項目の詳細が書かれている様なので、一応、見ていくことにします。最初飛ばそうかと思ってましたが、なんか興味がわいてきました・・。


つづく。





content lineの詳細 [iCalendar]

前回の続きですが、3.1の残りの内容を見ていきます。

content line の記述は下記の通りに定義されています。

 contentline = name *(";" param ) ":" value CRLF


nameがプロパティ名、paramがプロパティのパラメータ、valueが値を示している様ですね。各パーツの細かい定義はRFCを直接ご覧ください。

上記の定義でもわかる様に、パラメータは複数取ることができる様です。また、値についても同様の様です。このパラメータや値のリストに関するルールは下記の通り。

  1. 値のセパレータはCOMMA(0x2c)(MUST)
  2. 値の順序に意味は無い
  3. 複数の部分に分かれる(multiple parts)値は各部をSEMICOLON(0x3b)で区切る(MUST)
  4. パラメータのセパレータはSEMICOLON(0x3b)(MUST)
  5. COLON(0x3a)、SEMICOLON(0x3b)、COMMA(0x2c)を含むパラメータ値は""で括る(quoted text)(MUST)


例として、下記の様なのが提示されています。

 ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT:mailto:jsmith@example.com
 RDATE;VALUE=DATE:19970304,19970504,19970704,19970904


プロパティ「ATTENDEE」と「RDATE」の定義ですが、前者は値が「mailto:jsmith@example.com」、後者は複数の日付をコンマで区切ってますね。valueは文字列として扱われる様なので、中にコロンが入ってても問題無さげです。ただ、後者のコンマの区切りの後に空白文字が含まれていないのが気になります。空白文字を入れるとそれも値になってしまうみたいですね。この辺、気をつける必要がありそうです。

複数の値を取るプロパティは、複数の値を定義する際には値毎にcontent lineを作成するのが一般的なルールだとのこと。ただし、COMMA(0x2c)で値を区切る方法もあるとのことです。その上で、下記のルールが書かれています。

  • 同じ値を複数の言語で表現して複数の値としないこと(MUST NOT)
  • カレンダーアプリは全ての値を表示するべき(SHOULD)


iCalendarオブジェクト内のバイナリコンテンツの扱いについては、下記の内容が示されています。

  • 外部にMIME形式で保存しているものをURIを使って参照すべき(SHOULD)
  • 上記が不可の場合、BASE64(RFC4648)でエンコードしてインラインで含めてもよい
  • バイナリコンテンツをインラインで含めるのはiCalendarオブジェクトを一つにしなければならない時のみにすべき(SHOULD)
  • インラインバイナリコンテンツを含むプロパティは「ENCODING」プロパティパラメータを示す事(MUST)
  • 外部のバイナリコンテンツはURLで参照される事(MUST)


iCalnedarで用いられるデフォルトの文字コードはUTF-8(RFC3629)だとの事。Content-Typeパラメータの「charset」はMIMEで伝送される場合は必ず指定する事(MUST)

以上、やや駆け足気味でしたが、Content Lineの定義を見ていきました。次は3.2節「Property Parameters」です。だんだん、細かいところになっていきますね・・。どこまで必要か不明ですが、取りあえず、つづく。







content lineの規則とfolding [iCalendar]

さて、前回の続きになりますが、RFC5545について、2章から流し読みして行きます。

2.1に記載されている内容としては、とりあえず、全てのカレンダーコンポーネントは「V」と言う文字で始まる(「VEVENT」、「VTODO」、「VJOUNAL」等)。くらいですかね。後、TABなどのコントロールコードの定義も書かれています。US-ASCIIのコードとなる様です。

2章には今すぐ必要そうな情報は上記くらいでしょうかね。では、3章に進みます。各節の簡単なイントロダクションがされてました。

3.1content line fomatの定義
3.2property parameter formatの定義
3.3プロパティ値に対するdata typeの定義
3.4iCalendarオブジェクトのフォーマットの定義
3.5iCalendar property formatの定義
3.6calnedar component formatの定義
3.7calnedar property の定義
3.8<calendar component propertyの定義


目次でわかることでしたね・・。

まずは、「3.1 Content Lines」です。iCalendarのオブジェクトは独立したcontent lineで構成されていて、その規則は下記の通り。

  1. content line の区切りは「CR(0x0D)LF(0x0A)」
  2. 一行は区切りを除いて、75オクテット以下であるべき(SHOULD)
    →超える場合は「folding」と言う手法で分割
    →「CRLF」に続けて、空白文字(SPACE(0x20)、HTAB(0x09))を挿入する手法
  3. content informationは「CRLF」で分割されたcontent linesで構成される(RFC2425の定義と同様)
  4. content lineを解析する前に必ず unfold を行うこと(MUST)
  5. property、property parameters、enumerated property values、property parameter valuesは大文字・小文字の区別なし
  6. その他のproperty valuesは特に言及が無い限り、大文字・小文字の区別あり


3.1の冒頭に書かれていたのは大体上記の様なんですが、「folding」について、下記の例があげられていました。

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


この一行を folding すると、

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


となるとのこと。ちなみに、folding後の[CRLF]は私が追加しました。原文では folding のルールとして、「That is, a long line can be split between any two characters by inserting a CRLF immediately followed by a single linear white-space character (i.e., SPACE or HTAB).」と書かれていて、「a single linear」の意味が取りにくかったんですが、例を見る限りは改行後に「1つ」の空白文字の様ですね。

また、注意点を見る限り、マルチバイト文字も特に考慮せずに fold して問題無さげです。そのため、文字の途中で fold される可能性があるので、リストア(unfold)は上記に忠実に行うこととのことです。


今回は、ここまでにしときます。つづく。




シマンテックストア

ブログを作る(無料) powered by So-netブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。