您现在的位置是:网站首页> 编程资料编程资料

hCalendar微格式 关于事件和基于时间或地点的活_CSS教程_CSS_网页制作_

2023-10-31 252人已围观

简介 今天让我们一起来探讨一下hCalendar微格式,通过该微格式我可以为那些关于事件和基于时间或地点的活动提供语义和结构化信息。

我们又来了,兴奋的冲进微格式的世界~~根据我的计划,这篇文章应该到达此系列的半程了。到这里,我已经讨论了三种微格式的实现:

在第一部分中,使用rel来定义基于链接的关系
在第二部分中,使用XFN微格式为链接增加人际关系的描述
在第三部分中,使用hCard微格式来描述人、公司和地点
还不错。但是距离全面介绍微格式还有一定差距呢。

所以,今天让我们一起来探讨一下hCalendar微格式,通过该微格式我可以为那些关于事件和基于时间或地点的活动提供语义和结构化信息。

来源:iCalendar

iCalendar(或者iCal)是分享日历数据的标准。通常的,他被广泛用在Email交换中,虽然并不仅仅局限于此。同hCard类似,网站开发人员可以通过hCalendar将iCalendar数据嵌入到网页数据中。hCalendar同iCalendar之间同样是1:11:11:1的对应关系,从而允许解析器从网页中提取信息提供给日历应用使用。1:11:11:1的对应关系,从而允许解析器从网页中提取信息提供给日历应用使用。

历史回顾:iCalendar建立在vCalendar(虚拟日历Virtual Calendar)基础之上,vCalendar是一个开源的日历应用,用来在线发布和维护事件和时刻表。vCalendar同vCard电子商务名片格式一起开发的。

基于日期/时间的活动

hCalendar微格式描述在日历中使用的事件(或者任何基于日期/时间的活动)信息,包括(但不限于):

  • 概述
  • 日期和时间
  • 地点
  • 详细描述
  • 重复发生

基础知识

跟hCard一样,hCalendar遵循一些基本规则:

  • 属性和子属性通过class来描述。
  • 因为跟iCalendar之间1:1的对应关系,特定的hCalendar属性是建立在iCalendar属性名称基础上的(例如,vevent
  • 属性和子属性名字大小写敏感
  • “根”属性不能同其他属性组合。因此

    是无效的。

还有一条虽然不是规则,但是需要铭记在心:使用什么样的标记元素并不重要class的值(属性/子属性)才决定hCalendar微格式。但之前也说过,我非常鼓励使用具有语义特性的标记元素。

Profile

同所有微格式一样,非常鼓励您在网页的部分中包含微格式的声明,使用hCalendar的Profile

profile=”http://purl.org/uF/hCalendar/1.0/”>

W3C允许定义多个Profile值,使用空格隔开,所以可以自己选择使用多个Profile:

URL,该URL涵盖了所有非提案微格式:

最近一篇BarCamp Albuquerque 3的文章,在那里我使用了hCalendar微格式:

  1. class=”vevent”>
  2. Yes, it's short notice, but mark your calendars: class=”url summary”>class=”category”>BarCamp Albuquerque 3 is this weekend.

  3. When:
  4. class=”dtstart” title=”2008-09-13T09:00:00″>September 13class=”dtend” title=”2008-09-14T18:00:00″>14, from 9am–6pm both days
  5. Where:
  6. class=”location vcard”>CJW Cafe on 4801 Alameda BlvdNE, Albuquerque, NM87113
  7. What:
  8. class=”description”>A class=”duration” title=”P2D”>two-day event all about the web — design (visual, experience, information architecture), technology (infrastructure, programming), social and new media, and other stuff that is just plain cool.

说说各部分

我们将上面的例子分开讨论一下。

“根”:vevent

您可能注意到在我例子中的根属性是vevent,而不是vcalendar。这是因为hCalendar有一个可选的根元素,只有在您需要在页面中描述超过一个日历事件时才需要出现。对于尽有一个日历事件的网页,vcalendar属性被假设已经出现在页面中。既然我的例子只是一个事件,我把所有的事件信息都包含在

中,意味着所有的内容描述的都是同一个事件。

包含他的元素可以是任何元素(

    等等)。

    就满足我例子的要求了。

    必要属性:summarydtstart

    hCalendar必须的属性为(除了根元素veventsummarydtstart.

    summary

    summary属性描述了事件的概要信息。此属性包含的内容通常是在日历应用中显示的基本信息,比如事件的名称。所以,在我的例子中,“BarCamp Albuquerque 3”被包含在summary之中,也就是在我个人日历中用来显示的名称:

    Yes, it's short notice, but mark your calendars: dtstart

    dtstart属性描述了事件的开始时间/日期。在上面的例子中,“September 13”:

    class=”dtstart” title=”2008-09-13T09:00:00″>September 1314, from 9am–6pm both days

    日期/时间设计模式

    注意到包含dtstart的容器是,被包含的信息为“September 13”而title的属性值是“2008-09-13T09:00:00”:

    <abbr class=”dtstart” title=”2008-09-13T09:00:00“>September 1314, from 9am–6pm both days

    这是目前在微格式中定义日期/时间格式的推荐做法──被称作“日期时间设计模式”(是abbr设计模式的扩展)。此模式开发的目的是为了支持微格式的原则之一:先为人类阅读设计,机器次之,最终是让人类和机器都能够阅读识别。因此,逻辑上是,机器──例如这些web应用──会使用title部分,而浏览器会为人类阅读只显示中的内容。

    同时,作为使用日期时间模式规范的一部分,日期/时间信息应当被遵循ISO 8601的定义:

    • YYYY-MM-DDThh:mm:ss — “Y”表示年的数字,”M”表示月份,”D”表示天,”h”表示小时,”m”表示分钟,”s”表示秒
    • YYYY-MM-DDThh:mm:ssZ — “Z”用来表示GMT(格林威治)时间
    • YYYY-MM-DDThh:mm:ss+hh (或者 -hh) — “+hh” 和 “-hh” 表示参照格林威治时间的偏移量

    为了简单说明,举个例子,2008-09-30T13:00:00 = 2008年9月30日下午1:00(当地时间)。上面例子中的字母”T”将日期信息和时间信息分开。如果您仅仅有一个日期,忽略“T”和后面的时间信息就可以了。类似的,如果您只有时间信息,忽略掉“T”和前面的日期信息即可。这个模式目前不幸的还有一些无障碍访问问题,我会在文章后面继续讨论。现在,让我们继续上面的例子。

    剩下的日期/时间属性

    上面例子中还有可选的日期时间属性,包括:dtendduration

    dtend

    dtend属性描述了事件结束的日期/时间。在我的例子中,为“September 14”:

    September 13class=”dtend”title=”2008-09-14T18:00:00″>14, from 9am–6pm both days

    duration

    duration属性用来描述事件的持续时间。在上面的例子中,是两天:

    A class=”duration”title=”P2D”>two-day event all about the web — design (visual, experience, information architecture), technology (infrastructure, programming), social and new media, and other stuff that is just plain cool.

    同日期/时间一样,持续时间信息也使用日期时间设计模式来描述,机器可读的信息包含在title中,而人类可读的信息包含在。同样,title持续时间的值也要遵循ISO 8601的定义,只是需要在前面加“P”用以描述持续的阶段时间。持续的阶段时间可以使用下面这些单位描述:年 (Y), 月 (M), 周 (W), 天 (D), 小时 (H), 分钟 (M) 和秒 (S)。可以参考下面例子:

    • P2Y = 持续2年
    • P10D = 持续10天
    • P3H = 持续3个小时
    • P2W = 持续2周
    • P12DT8H30M = 持续12天8小时30分钟
    说说“无障碍访问”

    在前面第三部分中曾经简单讨论过使用日期时间设计模式会有一些无障碍访问问题。无障碍访问的根本问题在于屏幕发声程序如何对待title值:他们读取这个属性。所以,当使用时间日期模式把机器可读的ISO 8601日期时间信息放到title中时,屏幕发声会按照字面来读出这些数值。想象一下您的屏幕发声程序读取:“Two thousand eight dash zero nine dash thirty。”如果时间和日期的值更长的话会更糟糕。这对用户是相当不友好的。

    目前,这些问题还没有被解决。不过已经有一些提交上来的候选意见,但是微格式社区还在继续讨论更好解决这些问题的途径。针对我自己的博客而言,分析数据表明我没有任何屏幕发声程序的访问者。我很急切想知道如何解决这些问题,从而实现