RFC 5545 定义了那些属性,详细解释
RFC 5545 (iCalendar) 定义的属性多达50余个,它们共同构成了日历数据的标准格式。这些属性可分为通用属性、组件特有属性等几类,每一类都服务于不同的日程管理需求。
📄 RFC 5545 (iCalendar) 概述
- 核心定义:RFC 5545 全称为“Internet Calendaring and Scheduling Core Object Specification (iCalendar)”,它定义了
.ics文件的语法结构、组件模型(如VEVENT,VTODO等)以及属性体系,是日历数据互操作的基础。 - 基本结构:一个 iCalendar 对象通常包含一个
VCALENDAR根组件,内部可包含一个或多个子组件(如VEVENT),每个组件由多个属性(Property)构成。属性是键值对,格式为NAME:VALUE,并支持参数。
🏷️ RFC 5545 属性体系详解
以下是RFC 5545中定义的所有属性的完整列表。
📝 通用描述与标识属性
这些属性用于描述日程、任务或日志的基本信息,如标题、详情等,使内容清晰明确。
| 属性名称 (Property) | 描述 (Description) |
|---|---|
SUMMARY | 组件(如事件、任务)的简短描述或标题。 |
DESCRIPTION | 组件的详细文本描述。 |
COMMENT | 关于日历组件的注释或说明。 |
LOCATION | 事件或任务发生的地点。 |
CATEGORIES | 用于对组件进行分类的标签列表。 |
PRIORITY | 任务的优先级,取值范围为0到9。 |
CLASS | 组件的访问权限或可见性,如 PUBLIC, PRIVATE, CONFIDENTIAL。 |
STATUS | 组件的状态,如 CONFIRMED (已确认), CANCELLED (已取消), COMPLETED (已完成)。 |
RESOURCES | 事件或任务所需的资源,如投影仪、白板等。 |
URL | 指向与该组件相关的网页或其他网络资源的链接。 |
ATTACH | 指向与该组件关联的附件的 URI(统一资源标识符)。 |
CONTACT | 用于联系人的信息,通常用于指定事件的联系人。 |
GEO | 地理位置信息,格式为 纬度;经度。 |
IMAGE | 与组件关联的图像资源的 URI。 |
COLOR | 指定日历组件在用户界面中显示的推荐颜色。 |
CONFERENCE | 提供关于如何加入在线会议或虚拟活动的信息,例如包含视频会议链接。 |
SOURCE | 指定此日历组件来源的 URI,例如原始日历文件的位置。 |
REFRESH-INTERVAL | 建议日历用户代理 (CUA) 刷新此日历数据的时间间隔。 |
⏰ 时间与调度核心属性
这些是定义事件何时发生、持续多久、如何重复以及如何响应的核心属性。
| 属性名称 (Property) | 描述 (Description) |
|---|---|
DTSTART | 组件的开始日期或时间。 |
DTEND | 事件的结束日期或时间(非包含)。 |
DUE | 任务的截止日期或时间。 |
DURATION | 组件的持续时间,如 PT1H(1小时)。 |
TRANSP | 事件的透明度(OPAQUE / TRANSPARENT),定义其在忙/闲搜索中是否可见。 |
RRULE | 定义组件的重复规则,如 FREQ=WEEKLY;COUNT=10。 |
EXDATE | 指定从重复集中排除的异常日期或日期-时间。 |
RDATE | 指定重复集中的额外日期或日期-时间列表。 |
RECURRENCE-ID | 用于引用一个重复组件的特定实例。 |
REQUEST-STATUS | 描述由调度操作返回的状态码,通常用于 iTIP 消息。 |
RELATED-TO | 建立当前组件与另一个组件之间的关联关系。 |
👥 参与者与组织属性
这些属性用于定义谁创建了日历、谁是组织者、参与者是谁,以及他们的角色和状态。
| 属性名称 (Property) | 描述 (Description) |
|---|---|
ORGANIZER | 事件或任务的组织者。 |
ATTENDEE | 事件或任务的参与者。 |
ATTENDEE 常用参数 | PARTSTAT (参与状态: NEEDS-ACTION, ACCEPTED, DECLINED, TENTATIVE), ROLE (角色: REQ-PARTICIPANT, CHAIR), RSVP (是否请求回复), CUTYPE (用户类型: INDIVIDUAL, GROUP, RESOURCE)。 |
CONTACT | 用于联系人的信息,通常用于指定事件的联系人。 |
🔗 元数据与审计属性
这些属性用于追踪日历组件的生命周期、版本和来源,是系统间同步和冲突解决的关键。
| 属性名称 (Property) | 描述 (Description) |
|---|---|
UID | 日历组件的全局唯一标识符,在全世界范围内唯一标识该组件。 |
DTSTAMP | 指示此日历组件实例的创建日期和时间。对于不含 METHOD 的日历对象,它等效于 LAST-MODIFIED。 |
CREATED | 日历信息在日历存储中被创建的日期和时间。 |
LAST-MODIFIED | 组件信息在日历存储中被最后修订的日期和时间,类似于文件修改时间。 |
SEQUENCE | 一个递增的修订号,用于管理日历组件在调度流程中的版本,在冲突解决中至关重要。 |
PRODID | 创建 iCalendar 对象的产品的标识符,如 ”-//Example Corp//Calendar App//EN”。 |
VERSION | iCalendar 规范的版本号,对于本规范是 “2.0”。 |
CALSCALE | 定义日历系统中使用的日历刻度(如 GREGORIAN)。 |
METHOD | 与 iCalendar 对象关联的 iTIP 调度方法,如 REQUEST, REPLY, CANCEL。 |
NAME | 为整个日历(VCALENDAR 组件)提供名称。 |
REFRESH-INTERVAL | 建议日历用户代理 (CUA) 刷新此日历数据的时间间隔。 |
SOURCE | 指定此日历组件来源的 URI,例如原始日历文件的位置。 |
⏲️ 时区定义专用属性
这些属性仅在 VTIMEZONE 组件中使用,用于精确地定义时区信息,特别是夏令时规则。
| 属性名称 (Property) | 描述 (Description) |
|---|---|
TZID | 时区的唯一标识符,如 “America/New_York”。 |
TZNAME | 时区的显示名称,如 “Eastern Standard Time”。 |
TZOFFSETFROM | 时区在生效时刻的 UTC 偏移量,用于定义时区变化前的偏移。 |
TZOFFSETTO | 时区在生效时刻的 UTC 偏移量,用于定义时区变化后的偏移。 |
TZURL | 指向一个 VTIMEZONE 组件定义的 URL 资源,允许动态加载时区规则。 |
⏲️ 警报(VALARM)专用属性
这些属性仅在 VALARM 组件中使用,用于定义提醒的具体行为。
| 属性名称 (Property) | 描述 (Description) |
|---|---|
ACTION | 警报触发时要执行的动作,如 AUDIO, DISPLAY, EMAIL。 |
TRIGGER | 定义警报相对于组件开始或结束的时间点,如 -PT15M(提前15分钟)。 |
REPEAT | 定义警报应重复的次数。 |
DURATION | 警报重复的总持续时间。 |
ATTACH | 对于 ACTION:AUDIO 警报,指定要播放的音频文件的 URI。 |
SUMMARY | 对于 ACTION:DISPLAY 警报,指定要显示的消息文本。 |
DESCRIPTION | 对于 ACTION:EMAIL 警报,指定电子邮件正文。 |
🧩 其他属性
| 属性名称 (Property) | 描述 (Description) |
|---|---|
COMPLETED | 任务的完成日期和时间。 |
PERCENT-COMPLETE | 任务的完成百分比,范围为 0 到 100。 |
FREEBUSY | 在一个 VFREEBUSY 组件中,定义一个或多个空闲/忙碌的时间段。 |
💡 补充说明
-
扩展与限制:除了标准属性,你可以使用以 “X-” 开头的属性名创建非标准(实验性)属性。同时,IANA 注册的属性也是允许的。此外,属性还可以附带参数,如
ALTREP(备选文本)、LANGUAGE(语言)、ENCODING(编码)等,以提供更丰富的附加信息。 -
递归规则的详细定义:
RRULE是 RFC 5545 中一个非常强大但也十分复杂的属性。它通过一系列参数来定义重复规则。一个常见的RRULE可能是这样的:FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR;UNTIL=20251231T000000Z,这表示”从指定日期开始,每隔一周的周一、周三和周五重复,直到2025年12月31日”。其中FREQ是唯一必需的参数,用于指定重复的基本单位(DAILY,WEEKLY,MONTHLY,YEARLY等),其他如COUNT(重复次数)、UNTIL(结束日期)、INTERVAL(间隔)等均为可选。 -
在
VEVENT组件中的常见应用:在VEVENT组件中,DTSTART和DTEND属性定义了事件的开始和结束时间。RRULE定义了重复规则。TRANSP属性控制事件在忙/闲时间查询中是否可见。
💎 总结
RFC 5545 定义了一个全面而强大的属性体系,使得不同日历应用能够准确、丰富地交换日程信息。这些属性按功能分类,涵盖了从基本描述(如 SUMMARY, DESCRIPTION)到核心调度(如 DTSTART, RRULE),再到参与者管理(如 ORGANIZER, ATTENDEE)的方方面面。理解这些属性及其参数,是处理日历数据和实现日历互操作的基础。