跳至內容

ICalendar

出自Taiwan Tongues 台語維基
於 2025年8月19日 (二) 21:59 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

iCalendar是「曆日數據交換」的標準(RFC 五千五百四十五)。 現此標準有時指的是「iCal」,即蘋果公司的出品的一款仝名日曆軟體(見 iCal), 這个軟體嘛是此標準的一種實現方式。iCalendar 允准使用者通過電子批件的方式發送「會議請求」抑是「任務」。 收批人使用支援 iCalendar 郵件客戶捀,便會用足方便咧回應發件人,接受請求抑是另外提議一个新的會議時間。

iCalendar 已經得著足濟產品的支援。通常情況下,iCalendar 數據是用電子批評交換,但是伊嘛會使獨立使用,毋局限定某一種傳輸協定。比如講,會當通過 WebDav 侍服器抑是 SyncML 來做共享佮修改。簡單的網頁侍服器(干焦使用 HTTP 協定)捷捷予人用來分發公共事件的 iCalendar 數據,抑是發佈個人的時間謀劃安排。發佈者會使用 hCalendar 共 iCalendar 數據1875入去網頁中。(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 物件範例,伊是描述法國的國慶日,即從一九九七年七月十四十七 :空到一九九七年七月十五日三 : 五十九 : 五十九的 bá-suh 底日。

` ` ` 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 xyzReview Meeting Minutes \ n Agenda \ n 一 . Review of project version 一垺零 requirements . \ n 二 . Definition of project processes . \ n 三 . Review of project schedule . \ n Participants : John Smith , JaneDoe , Jim Dandy \ n-It was decided that the requirements need to be signed off by product marketing . \ n-Project processes were accepted . \ n -Project schedule needs to account for scheduledholidays and 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 / / NONSGML HandCal / / 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 四配 ZURL : 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