跳至內容

ICalendar

出自Taiwan Tongues 客語維基
這是此頁批准,以及是最近的修訂。

iCalendar好「日曆个數據交換」个標準(RFC 五千五百四十五)。 這個標準有時指个係「iCal」,就係蘋果公司个產品一種共名日曆軟體(見 iCal), 這個軟體乜係這項標準个一種實現方式。

iCalendar 做得分使用者通過電子郵件个方式來發送「會議請求」抑係「任務」。 收信仔人使用支援 iCalendar 郵件客戶端,就做得當利便回應發件人,接受請求或者另外提議一個新个會議時間。

iCalendar 已經得著當多產品个支援。一般情況下,iCalendar 數據係使用電子郵件交換,毋過佢乜做得自家來用,無局限於某種傳輸協定。比將講,可以通過 WebDav 伺服器或者係 SyncML 來進行共享摎修改。簡單个網頁伺服器(淨使用 HTTP 協定)也蓋輒分人用來分發公共事件个 iCalendar 數據,抑係發佈個人个時間來謀劃安排。發布个人做得用 hCalendar 摎 iCalendar 數據嵌入到網頁裡背。(hCalendar 係一種通過(X)HTML 來表現 iCalendar 个微格式嗬)

歷史摎設計

iCalendar 係由網際網路工程任務組个日曆摎計畫工作組設計(OpenText 公司个 Anik Ganguly 主導), 並由蓮花公司个 Frank Dawson 摎微軟个 Derik Stenerson 發表。iCalendar 本身係受著網路郵件協會(IMC)个 vCalendar 開發設計來个。佢一般係以檔名後上色為 . ics 抑係. ifb 个文字檔案儲存个。這下有標準係在二零零九年九月發布个 RFC 五千五百四十五,上一個標準係 RFC 兩千四百四十五。

以 . ics 為後色名个檔案(在 Apple Mac 系統肚項使用 " iCal " 類型代碼), 表示這個檔案包含吔日曆摎計劃資訊。啊 . ifb 為後色名个檔案(在 Apple Mac 系統中使用 " iFBf " 類型代碼), 表示這個檔案包含了空間摎閒無閒時間資訊。

一般 iCalendar 使用 UTF 八字元个編碼;毋過乜做得用 MIME 中个 charset 參數來指其他个字元編碼(係講佢傳送協定支援 MIME 个話)。

在 iCalendar 檔案當中,每一行定著愛以 CR + LF(十六進制代碼係零 D 零 A)為結尾。每一行就做毋得超過七十五個元組 / 八位元組。係講一行數據長在這限制,就愛換行;後背一行使用空格符合(十六進制代碼係二十)或者制表符合(十六進制代碼係九)作開始,來表示本行內容係頂高一行內容个繼續。內容數據當中个換行符,做得反斜槓符合'/'還過摎數目字(UTF-八中為五 C 六 E 抑係五 C 四 E)來表示。

iCalendar 个 MIME 類型被定義為 _ text / calendar _。

局限同發展

iCalendar 格式只係分人設計用來傳送日曆摎計畫表个數據,像係事件;挑事無定義操作這兜數據个行為。因為,在編寫程式个時節需要參詳仰般操作佢兜。

iCalendar 本意係提供一種公共格式來定義開放个網際網路做得交換个日曆摎計畫表个數據。係講這兜特性分人廣泛支援應用過後,當多效能問題定定仔顯現出來吔。比論講,大部分都應用都毋會來支援旅行(VJOURNAL)。 " 在標準當中,循環重復个會議有兜仔含糊不清,這導致在現有無共樣个應用之間仍然無法度真正个互動。"

iCalendar 中个日曆無法度相容非格里高利曆,比論以色列个希伯來曆摎沙烏地阿拉伯个伊斯曆都係陰曆。

「 日曆存取協定」備忘錄(RFC 四千三百二十四)第一擺試等建立一隻統一个建立實際時間日曆系統。可能係因為忒複雜,這個協定呢最終就分人放棄了。

無論仰仔,像 GroupDav 摎 CalDAV 這兜基於 iCalendar 个協定啊已經越來越廣泛个應用在客戶端摎伺服器端軟體包中吔。

網際網路工程任務組个日曆摎計畫工作組已經提交吔有關 iCalendar 標準个附加修改提案。毋過這個工作組在二十一年一月份分人解散忒。佢兜大部分工作重心轉移到咧前一隻標準个條款解釋。後續个創新工作由日曆摎計畫協會(簡單安到 Calconnect)來完成。

技術標準

核心物件

iCalendar 中个頂級元素係日曆摎計畫核心物件,一組日曆摎計劃資訊。一般情況下,這兜資訊應該淨包含單一个 iCalendar 物件。毋過做得聲明一隻組包含幾下隻 iCalendar 物件。

第一行定著係 " BEGIN : VCALENDER ",最後一行一定係 " END : VCALENDER ";兩行之間數據安到 " icalbody "。

icalbody 由一系列日曆屬性摎一個以上个日曆組件組成。日曆屬性被應用在歸隻日曆。日曆組件係由假使干日曆屬性描述成个一隻日曆語義。比論講,日曆組件做得指定一個事件、一個待辦事項列表、一個旅行事項、時區資訊、當無閒 / 閒閒時間資訊,或者係一個警報。在盡多協定實現(比論講 Google Calendar)當中做毋得出現空行。

下背呢係一個簡單个 iCalendar 物件範例,佢描寫吔法國國慶日,即從一九九七年七月十四號十七 : 零到一九九七年七月十五日三 : 五十九 : 五十九个巴士底日。

` ` ` BEGIN : VCALENDAR VERSION : 二側零 PRODID : - / / hacksw / handcal / / NONSGML v 一千擔 / / EN BEGIN : VEVENT UID : uid 一 @ example . com DTSTAMP : 一千九百九十七十二零七百一十四 T 十七面看 Z ORGANIZER ; CN=John Doe : MAILTO : john . doe @ example . com DTSTART : 一千九百九十七十二零七百一十四 T 一百七十零 Z DTEND : 一千九百九十七十二零七百一十五 T 三面九百五十九 Z SUMMARY : Bastille Day Party END : VEVENT END : VCALENDAR ` ` `

事件( VEVENT)

VEVENT 描寫一個事件,在日曆上一系列計畫好个時間點。一般,做使用者接受一個日曆事件,這將導致在該隻時間肚項,使用者分人試著係無閒个。VEVENT 做得包哦含一隻 VALARM 物件來允准一個警報。事件應該有一隻 DTSTART 來描寫事件个開始時間,摎一個 DTEND 來描寫事件个結束時間。係講事件係循環个,斯係 DTSTART 應該設定第一個事件个開始時間。

VEVENT 共樣做得應用在無特定時間个日曆事件頂高,比論講周年紀念日、逐日提醒。

係講你需要發送取消事件个要求。該在請求中事件組件當中,UID 算係性應該摎原事件共樣還過,底下這兜屬性應該設定做 cancel。

` ` ` METHOD : CANCEL STATUS : CANCELLED ` ` `

為著發送事件个更新請求,除了設定 UID 摎其他更新屬性值外。還需要設定新个序列值

` ` ` SEQUENCE : < 新个序列值 > ` ` `

比論講,第一隻更新版本

` ` ` SEQUENCE : 一 ` ` `

在 Microsoft Outlook 中,SUMMARY 性別應當摎 " Appointment " 中个 " Subject " 項一致,DESCRIPTION 算係性跈等 SUBJECT 算係性。另外,Outlook 二千空三要求个指定 UID 摎 DTSTAMP 算係性。

等辦事項(VTODO)

VTODO 描寫一條待辦事項。

下背个例仔描寫了一個應該在一千九百九十八年四月十五號待辦事項。到時一個響鈴將會響起。在待辦事項完成以前,將會一點鐘提醒一擺,總共提醒四擺。SEQUENCE 屬性顯示這條提醒在建立過後,還分人改吔兩擺。

` ` ` BEGIN : VCALENDAR VERSION : 二側零 PRODID : - / / ABC Corporation / / NONSGML My Product / / EN BEGIN : VTODO DTSTAMP : 一千九百九十八十二間 T 十三歲个教育部 Z SEQUENCE : 二 UID : uid 四 @ host 一 . com ACTION : AUDIO TRIGGER : 一千九百九十八齣个消息四百空三 T 十二髻ATTACH ; FMTTYPE=audio / basic : http : / / example . com / pub / audio- files / ssbanner . aud REPEAT : 四 DURATION : PT 一 H END : VTODO END : VCALENDAR ` ` `

旅行事項(VJOURNAL)

VJOURNAL 係一個旅行个事項。厥兜將一段描寫文字關聯一個詳細个日曆日期上,這做得分使用者記錄活動摎成長日誌,或者係描寫待辦事項个進展。VJOURNAL 日曆組件毋會影響日曆頂高个時間狀況,故所毋會對閒摎繁忙狀態有任何影響。在實踐上, 有當少个程式支援 VJOURNAL 項,毋過也有存在一息仔實現。比論講:Plum Canary's Chirp 軟體將 VJOURNAL 摎 VTODO 共下來用啊。KDE 中个 KOrganizer 也支援 VJOURNAL。

下背就係旅行事項个例仔

` ` ` BEGIN : VCALENDAR VERSION : 二側零 PRODID : - / / ABC Corporation / / NONSGML My Product / / EN BEGIN : VJOURNAL DTSTAMP : 一千九百九十七十二零三百二十四 T 十二髻 Z UID : uid 五 @ host 一 . com ORGANIZER : MAILTO : jsmith @ example . com STATUS : DRAFT CLASS : PUBLIC CATEGORIES : Project Report , XYZ, Weekly Meeting DESCRIPTION : Project xyz Review Meeting Minutes \ n Agenda \ n 一 . Review ofproject version 一千擔 requirements . \ n 二 . Definition of project processes . \ n 三 . Reviewof project schedule . \ n Participants : John Smith , Jane Doe , Jim Dandy \ n-It wasdecided that the requirements need to be signed off by product marketing . \ n-Projectprocesses were accepted . \ n -Project schedule needs to account for scheduled holidaysand employee vacation time . Check with HR for specific dates . \ n-New schedule will be distributed by Friday . \ n- Next weeks meeting is cancelled . No meeting until 三 /二十三 . END : VJOURNAL END : VCALENDAR ` ` `

注意哦: 這個例仔裡背來自於 RFC 兩千四百四十五。在這位同原文中个 CATEGORY 修正為 CATEGORIES,這係原文中个一個錯誤。

閒亍亍 / 無閒時間(VFREEBUSY)

VFREEBUSY 被骨用在閒閒 / 繁忙時間設定要求,這種請求个回應,還有無閒時間个發布中。 下背就係一個系統時間發布个例仔。

` ` ` BEGIN : VCALENDAR VERSION : 二側零 PRODID : - / / RDU Software / / NONSGMLHandCal / / EN BEGIN : VFREEBUSY ORGANIZER : MAILTO : jsmith @ example . com DTSTART : 一千九百九十八十二零三百一十三 T 十四線十二十一號 Z DTEND : 一千九百九十八齣个相關消息 T 十四線十二十一號 Z FREEBUSY : 一千九百九十八齣个相關消息三百一十四 T 二十三齣齣 Z / 一千九百九十八十二零三百一十五 T 三千 Z FREEBUSY : 一千九百九十八十二零三百一十六 T 十五十二三千九 Z/ 一千九百九十八十二零三百一十六 T 十六線三千九百二十 Z FREEBUSY : 一千九百九十八歲呢 T 三面書頁 Z / 一千九百九十八歲呢 T 四輔導 Z URL : http : / / www . example . com / calendar / busytime / jsmith . ifb END : VFREEBUSY END : VCALENDAR ` ` `

其他組件類型

其他組件類型還有VTIMEZONE(時區)摎VALARM(警報)。 還有一兜組件允准包含其他組件(VALARM 一般分人包含到其他組件)。

發布更新

當計畫事件越來越改,UID欄位會發布更新。首先事件建立个時節會產生一個全域唯一識別碼作為 UID。過後做有一个事件跈等這个 UID 發布,就認為這係早先事件个修改版本,代換忒佢。

===日誌擴大===iCalendar 支援私有擴充,斯係性名前冠以 " X- " 字首。

比論講:

  • X-RECURRENCE-ID
  • X-EPOCAGENDAENTRYTYPE
  • X-FUNAMBOL-AALARMOPTIONS
  • X-FUNAMBOL-ALLDAY
  • X-MICROSOFT-CDO-ALLDAYEVENT
  • X-MICROSOFT-CDO-BUSYSTATUS
  • X-WR-CALNAME
  • X-WR-CALDESC
  • X-WR-RELCALID
  • X-WR-TIMEZONE
  • X-PUBLISHED-TTL