1. 5 微数据
    1. 5.1 简介
      1. 5.1.1 概述
      2. 5.1.2 基本语法
      3. 5.1.3 类型化项目
      4. 5.1.4 项目的全局标识符
      5. 5.1.5 定义词汇表时选择名称
    2. 5.2 编码微数据
      1. 5.2.1 微数据模型
      2. 5.2.2 项目
      3. 5.2.3 名称:itemprop 属性
      4. 5.2.4
      5. 5.2.5 微数据和其他命名空间
    3. 5.3 微数据词汇表示例
      1. 5.3.1 vCard
        1. 5.3.1.1 转换为 vCard
        2. 5.3.1.2 示例
      2. 5.3.2 vEvent
        1. 5.3.2.1 转换为 iCalendar
        2. 5.3.2.2 示例
      3. 5.3.3 许可作品
        1. 5.3.3.1 示例

5 微数据

5.1 简介

5.1.1 概述

有时,用特定的机器可读标签对内容进行注释是可取的,例如,允许通用脚本提供针对页面的自定义服务,或使来自各种合作作者的内容能够以一致的方式由单个脚本处理。

为此,作者可以使用本节中描述的微数据功能。微数据允许将嵌套的名称-值对组添加到文档中,与现有内容并行。

5.1.2 基本语法

从高层次上讲,微数据由一组名称-值对组成。这些组称为 项目,每个名称-值对都是一个属性。项目和属性由常规元素表示。

要创建一个项目,使用 itemscope 属性。

要向项目添加属性,使用 itemprop 属性在 项目 的一个后代上。

这里有两个项目,每个项目都有“name”属性

<div itemscope>
 <p>My name is <span itemprop="name">Elizabeth</span>.</p>
</div>

<div itemscope>
 <p>My name is <span itemprop="name">Daniel</span>.</p>
</div>

没有与微数据相关的属性的标记对微数据模型没有任何影响。

这两个例子在微数据层面完全等效,与前面的两个例子分别相同

<div itemscope>
 <p>My <em>name</em> is <span itemprop="name">E<strong>liz</strong>abeth</span>.</p>
</div>

<section>
 <div itemscope>
  <aside>
   <p>My name is <span itemprop="name"><a href="/?user=daniel">Daniel</a></span>.</p>
  </aside>
 </div>
</section>

属性通常具有字符串值。

这里,项目有三个属性

<div itemscope>
 <p>My name is <span itemprop="name">Neil</span>.</p>
 <p>My band is called <span itemprop="band">Four Parts Water</span>.</p>
 <p>I am <span itemprop="nationality">British</span>.</p>
</div>

当字符串值是一个 URL 时,它使用 a 元素及其 href 属性、img 元素及其 src 属性,或其他链接或嵌入外部资源的元素来表示。

在这个例子中,项目有一个属性“image”,其值为一个 URL

<div itemscope>
 <img itemprop="image" src="google-logo.png" alt="Google">
</div>

当字符串值采用某种不适合人类阅读的机器可读格式时,它使用 value 属性在 data 元素中,用元素内容提供人类可读的版本。

这里,有一个项目,其属性的值为一个产品 ID。ID 不适合人类阅读,因此产品名称用作人类可见文本,而不是 ID。

<h1 itemscope>
 <data itemprop="product-id" value="9678AOU879">The Instigator 2000</data>
</h1>

对于数值数据,可以使用 meter 元素及其 value 属性。

这里,使用 meter 元素给出评分。

<div itemscope itemtype="http://schema.org/Product">
 <span itemprop="name">Panasonic White 60L Refrigerator</span>
 <img src="panasonic-fridge-60l-white.jpg" alt="">
  <div itemprop="aggregateRating"
       itemscope itemtype="http://schema.org/AggregateRating">
   <meter itemprop="ratingValue" min=0 value=3.5 max=5>Rated 3.5/5</meter>
   (based on <span itemprop="reviewCount">11</span> customer reviews)
  </div>
</div>

类似地,对于与日期和时间相关的数据,可以使用 time 元素及其 datetime 属性。

在这个例子中,项目有一个属性“birthday”,其值为一个日期

<div itemscope>
 I was born on <time itemprop="birthday" datetime="2009-05-10">May 10th 2009</time>.
</div>

通过在声明属性的元素上放置 itemscope 属性,属性本身也可以成为名称-值对组。

不属于其他项目的项目称为 顶级微数据项目

在这个例子中,外部项目代表一个人,内部项目代表一个乐队

<div itemscope>
 <p>Name: <span itemprop="name">Amanda</span></p>
 <p>Band: <span itemprop="band" itemscope> <span itemprop="name">Jazz Band</span> (<span itemprop="size">12</span> players)</span></p>
</div>

这里的外部项目有两个属性,“name”和“band”。“name”是“Amanda”,而“band”本身就是一个项目,有两个属性,“name”和“size”。乐队的“name”是“Jazz Band”,而“size”是“12”。

此示例中的外部项目是顶级微数据项目。

不属于具有 itemscope 属性元素的后代的属性可以使用 itemref 属性与 项目 相关联。此属性接受一个元素 ID 列表,除了遍历具有 itemscope 属性元素的子节点外,还会遍历这些 ID 所指的元素。

此示例与前一个示例相同,但所有属性都与其 项目 分开

<div itemscope id="amanda" itemref="a b"></div>
<p id="a">Name: <span itemprop="name">Amanda</span></p>
<div id="b" itemprop="band" itemscope itemref="c"></div>
<div id="c">
 <p>Band: <span itemprop="name">Jazz Band</span></p>
 <p>Size: <span itemprop="size">12</span> players</p>
</div>

这与前一个示例的效果相同。第一个项目有两个属性,“name”,设置为“Amanda”,以及“band”,设置为另一个项目。第二个项目还有两个属性,“name”,设置为“Jazz Band”,以及“size”,设置为“12”。

一个 项目 可以有多个具有相同名称但不同值的属性。

此示例描述了冰淇淋,它有两种口味

<div itemscope>
 <p>Flavors in my favorite ice cream:</p>
 <ul>
  <li itemprop="flavor">Lemon sorbet</li>
  <li itemprop="flavor">Apricot sorbet</li>
 </ul>
</div>

因此,这将导致一个项目有两个属性,都是“flavor”,具有“Lemon sorbet”和“Apricot sorbet”的值。

引入属性的元素也可以一次引入多个属性,以避免在某些属性具有相同值时重复。

这里,我们看到一个项目有两个属性,“favorite-color”和“favorite-fruit”,两者都设置为值“orange”

<div itemscope>
 <span itemprop="favorite-color favorite-fruit">orange</span>
</div>

需要注意的是,微数据与标记微数据的文档内容之间没有关系。

例如,以下两个示例在语义上没有区别

<figure>
 <img src="castle.jpeg">
 <figcaption><span itemscope><span itemprop="name">The Castle</span></span> (1986)</figcaption>
</figure>
<span itemscope><meta itemprop="name" content="The Castle"></span>
<figure>
 <img src="castle.jpeg">
 <figcaption>The Castle (1986)</figcaption>
</figure>

两者都有一个带有标题的图形,两者都与图形无关,都包含一个项目,该项目有一个名称-值对,名称为“name”,值为“The Castle”。唯一的区别是,如果用户将标题从文档中拖出,在前面的情况下,该项目将包含在拖放数据中。在这两种情况下,图像都与项目无关。

5.1.3 类型化项目

上一节中的示例展示了如何在不期望其微数据被重复使用的页面上进行信息标记。但是,微数据在其他作者和读者能够合作以使标记有新用途的上下文中最为有用。

为此,有必要为每个 项目 指定一个类型,例如“https://example.com/person”或“https://example.org/cat”或“https://band.example.net/”。类型被标识为 URL

一个 项目 的类型作为与 itemscope 属性相同的元素上的 itemtype 属性的值给出。

这里,项目的类型是“https://example.org/animals#cat”

<section itemscope itemtype="https://example.org/animals#cat">
 <h1 itemprop="name">Hedral</h1>
 <p itemprop="desc">Hedral is a male american domestic
 shorthair, with a fluffy black fur with white paws and belly.</p>
 <img itemprop="img" src="hedral.jpeg" alt="" title="Hedral, age 18 months">
</section>

在这个例子中,“https://example.org/animals#cat”项目有三个属性,“name”(“Hedral”)、“desc”(“Hedral is...”)和“img”(“hedral.jpeg”)。

类型提供了属性的上下文,从而选择一个词汇表:对于具有类型“https://census.example/person”的项目给出的名为“class”的属性可能指的是个人的经济阶级,而对于具有类型“https://example.com/school/teacher”的项目给出的名为“class”的属性可能指的是分配给教师的教室。多个类型可以共享一个词汇表。例如,类型“https://example.org/people/teacher”和“https://example.org/people/engineer”可以定义为使用相同的词汇表(尽管在两种情况下,某些属性可能没有特别有用,例如,“https://example.org/people/engineer”类型通常可能不会与“classroom”属性一起使用)。通过将 URL 作为属性值的空格分隔列表列出,可以为单个项目指定多个定义为使用相同词汇表的类型。但是,如果两个类型不使用相同的词汇表,则不能为单个项目指定两个类型。

5.1.4 项目的全局标识符

有时,一个 项目 提供有关具有全局标识符的主题的信息。例如,书籍可以使用其 ISBN 号进行标识。

词汇表(由 itemtype 属性标识)可以设计为,通过将全局标识符表示为 itemid 属性中给出的 URL,使 项目 以明确的方式与其全局标识符相关联。

itemid 属性中给出的 URL 的确切含义取决于所使用的词汇表。

这里,一个项目在谈论一本特定的书

<dl itemscope
    itemtype="https://vocab.example.net/book"
    itemid="urn:isbn:0-330-34032-8">
 <dt>Title
 <dd itemprop="title">The Reality Dysfunction
 <dt>Author
 <dd itemprop="author">Peter F. Hamilton
 <dt>Publication date
 <dd><time itemprop="pubdate" datetime="1996-01-26">26 January 1996</time>
</dl>

此示例中的“https://vocab.example.net/book”词汇表将定义 itemid 属性接受一个 urn: URL,该 URL 指向该书的 ISBN。

5.1.5 定义词汇表时选择名称

使用微数据意味着使用词汇表。对于某些目的,临时词汇表就足够了。对于其他目的,需要设计词汇表。在可能的情况下,鼓励作者重复使用现有词汇表,因为这使得内容重复使用更容易。

在设计新的词汇表时,标识符可以使用 URL 创建,也可以为属性创建为纯文本(不含点或冒号)。对于 URL,可以通过仅使用对应于作者控制的页面的标识符来避免与其他词汇表发生冲突。

例如,如果 Jon 和 Adam 都在 example.com 上撰写内容,分别位于 https://example.com/~jon/...https://example.com/~adam/...,那么他们可以选择分别使用“https://example.com/~jon/name”和“https://example.com/~adam/name”形式的标识符。

名称只是纯文本的属性只能在其所针对的类型的上下文中使用;使用 URL 命名的属性可以在任何类型的项目中重复使用。如果项目没有类型,并且不属于其他项目,那么如果其属性的名称是纯文本,则它们不打算在全局范围内唯一,而是仅用于有限的用途。一般来说,鼓励作者使用具有全局唯一名称(URL)的属性,或者确保其项目是类型化的。

这里,一个项目是 "https://example.org/animals#cat",大多数属性的名称是在该类型上下文中定义的词语。还有一些额外的属性,它们的名称来自其他词汇表。

<section itemscope itemtype="https://example.org/animals#cat">
 <h1 itemprop="name https://example.com/fn">Hedral</h1>
 <p itemprop="desc">Hedral is a male American domestic
 shorthair, with a fluffy <span
 itemprop="https://example.com/color">black</span> fur with <span
 itemprop="https://example.com/color">white</span> paws and belly.</p>
 <img itemprop="img" src="hedral.jpeg" alt="" title="Hedral, age 18 months">
</section>

这个示例有一个类型为 "https://example.org/animals#cat" 的项目,以及以下属性

属性
nameHedral
https://example.com/fnHedral
descHedral 是一只雄性美国短毛猫,拥有蓬松的黑色毛发,白色爪子和小肚子。
https://example.com/colorblack
https://example.com/colorwhite
img.../hedral.jpeg

5.2 编码微数据

5.2.1 微数据模型

微数据模型由称为 项目 的名称-值对组组成。

每个组被称为一个 项目。每个 项目 可以具有 项目类型、一个 全局标识符(如果由 项目类型 指定的词汇表 支持项目全局标识符)以及名称-值对列表。名称-值对中的每个名称被称为一个 属性,每个 属性 都有一个或多个 。每个 要么是一个字符串,要么本身是一个名称-值对组(一个 项目)。名称彼此之间无序,但如果特定名称具有多个值,则它们具有相对顺序。

5.2.2 项目

Global_attributes/itemscope

所有当前引擎都支持。

FirefoxSafariChrome
Opera?Edge
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

每个 HTML 元素 都可以指定一个 itemscope 属性。itemscope 属性是一个 布尔属性

指定了 itemscope 属性的元素会创建一个新的 项目,这是一个名称-值对组。


Global_attributes/itemtype

所有当前引擎都支持。

FirefoxSafariChrome
Opera?Edge
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

具有 itemscope 属性的元素可以指定一个 itemtype 属性,以给出 项目类型项目

如果指定了 itemtype 属性,则它必须具有一个值,该值是一个 无序的唯一空格分隔的标记集,其中没有一个标记与另一个标记 相同,并且每个标记都是一个 有效的 URL 字符串,它是一个 绝对 URL,并且所有标记都被定义为使用相同的词汇表。属性的值必须至少有一个标记。

一个 项目项目类型 是通过 在元素的 itemtype 属性的值上拆分 ASCII 空格 获得的标记。如果 itemtype 属性缺失或以这种方式解析它没有找到任何标记,则该 项目 被认为没有 项目类型

所有 项目类型 都必须是在 适用规范 中定义的类型,并且必须都定义为使用相同的词汇表。

itemtype 属性不得在没有指定 itemscope 属性的元素上指定。


当一个 项目 具有 项目类型,或者它是 类型化项目 的一个 属性 时,它被称为一个 类型化项目。一个 类型化项目相关类型 是该 项目项目类型(如果有的话),否则是它作为 属性 所属的 项目相关类型


Global_attributes/itemid

所有当前引擎都支持。

FirefoxSafariChrome
Opera?Edge
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

具有 itemscope 属性和 itemtype 属性(引用一个被定义为 支持项目全局标识符 的词汇表)的元素也可以指定一个 itemid 属性,以给出 项目 的全局标识符,以便它可以与网页上其他地方的其他 项目 相关联。

如果指定了 itemid 属性,则它必须具有一个值,该值是一个 有效的 URL,可能被空格包围

一个 项目全局标识符 是它元素的 itemid 属性的值(如果它具有一个),相对于指定该属性的元素的 节点文档 解析。如果 itemid 属性缺失或解析它返回失败,则它被认为没有 全局标识符

itemid 属性不得在没有指定 itemscope 属性和 itemtype 属性的元素上指定,并且不得在具有 itemscope 属性的元素上指定,该元素的 itemtype 属性指定了一个没有 支持项目全局标识符 的词汇表,如该词汇表规范中定义的。

一个 全局标识符 的确切含义由词汇表规范决定。由这些规范决定是否允许存在多个具有相同全局标识符的项目(无论是在同一页面还是在不同页面),以及该词汇表相对于处理具有相同 ID 的多个项目的这种情况的处理规则。


Global_attributes/itemref

所有当前引擎都支持。

FirefoxSafariChrome
Opera?Edge
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

具有 itemscope 属性的元素可以指定一个 itemref 属性,以给出用于查找 项目 的名称-值对的额外元素列表。

如果指定了 itemref 属性,则它必须具有一个值,该值是一个 无序的唯一空格分隔的标记集,其中没有一个标记与另一个标记 相同,并且由相同 中的元素的 ID 组成。

itemref 属性不得在没有指定 itemscope 属性的元素上指定。

itemref 属性不是微数据数据模型的一部分。它只是一个语法结构,帮助作者在要添加注释的数据不遵循方便的树结构的页面中添加注释。例如,它允许作者在表格中标记数据,以便每一列定义一个单独的 项目,同时保留单元格中的属性。

这个示例显示了一个简单的词汇表,用于描述模型铁路制造商的产品。该词汇表只有五个属性名称

product-code
在制造商目录中为产品命名的整数。
name
对产品的简要描述。
scale
"HO"、"1" 或 "Z" 之一(可能带有前导或尾随空格),表示产品的比例。
digital
如果存在,则为 "Digital"、"Delta" 或 "Systems" 之一(可能带有前导或尾随空格),表示产品具有给定类型的数字解码器。
track-type
对于特定于轨道的产品,"K"、"M"、"C" 之一(可能带有前导或尾随空格),表示产品适用的轨道类型。

该词汇表有四个定义的 项目类型

https://md.example.com/loco
带发动机的机车。
https://md.example.com/passengers
客运机车。
https://md.example.com/track
轨道部件。
https://md.example.com/lighting
带照明的设备。

每个使用此词汇表的 项目 可以根据产品的具体情况分配一个或多个这些类型。

因此,机车可以标记为

<dl itemscope itemtype="https://md.example.com/loco
                        https://md.example.com/lighting">
 <dt>Name:
 <dd itemprop="name">Tank Locomotive (DB 80)
 <dt>Product code:
 <dd itemprop="product-code">33041
 <dt>Scale:
 <dd itemprop="scale">HO
 <dt>Digital:
 <dd itemprop="digital">Delta
</dl>

道岔灯改装套件可以标记为

<dl itemscope itemtype="https://md.example.com/track
                        https://md.example.com/lighting">
 <dt>Name:
 <dd itemprop="name">Turnout Lantern Kit
 <dt>Product code:
 <dd itemprop="product-code">74470
 <dt>Purpose:
 <dd>For retrofitting 2 <span itemprop="track-type">C</span> Track
 turnouts. <meta itemprop="scale" content="HO">
</dl>

没有照明的客运车厢可以标记为

<dl itemscope itemtype="https://md.example.com/passengers">
 <dt>Name:
 <dd itemprop="name">Express Train Passenger Car (DB Am 203)
 <dt>Product code:
 <dd itemprop="product-code">8710
 <dt>Scale:
 <dd itemprop="scale">Z
</dl>

在创建新的词汇表时,必须格外小心。通常,可以使用类型分层方法,从而创建一个词汇表,其中每个项目只包含一个类型,这通常更容易管理。

5.2.3 名称:itemprop 属性

Global_attributes/itemprop

所有当前引擎都支持。

FirefoxSafariChrome
Opera?Edge
Edge (Legacy)12+Internet Explorer
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

每个 HTML 元素 都可以指定一个 itemprop 属性,如果这样做 向一个或多个 项目 添加一个或多个属性(如下定义)。

如果指定了 itemprop 属性,则其值必须为 一组不重复的以空格分隔的唯一标记,其中任何标记均不与 其他标记相同,表示它添加的名称-值对的名称。属性的值必须至少包含一个标记。

每个标记必须是以下之一:

引入 定义的属性名称 的规范必须确保所有此类属性名称不包含 U+002E FULL STOP 字符(.)、U+003A COLON 字符(:)和 ASCII 空格

上面的规则禁止在非 URL 值中使用 U+003A COLON 字符(:),因为否则无法将其与 URL 区分。包含 U+002E FULL STOP 字符(.)的值保留用于将来的扩展。 ASCII 空格 被禁止,因为否则这些值将被解析为多个标记。

当具有 itemprop 属性的元素 向多个 添加属性 时,上述关于标记的规则适用于每个

元素的 属性名称 是元素的 itemprop 属性的值在 按 ASCII 空格拆分 时发现的标记,顺序保持不变,但重复的标记被删除(只保留每个名称的第一次出现)。

中,属性之间没有顺序,除非属性具有相同的名称,在这种情况下,属性的顺序由定义 项属性 的算法给出。

在以下示例中,"a" 属性的值为 "1" 和 "2",顺序如此,但 "a" 属性是否在 "b" 属性之前并不重要。

<div itemscope>
 <p itemprop="a">1</p>
 <p itemprop="a">2</p>
 <p itemprop="b">test</p>
</div>

因此,以下代码是等效的。

<div itemscope>
 <p itemprop="b">test</p>
 <p itemprop="a">1</p>
 <p itemprop="a">2</p>
</div>

以下代码也是等效的。

<div itemscope>
 <p itemprop="a">1</p>
 <p itemprop="b">test</p>
 <p itemprop="a">2</p>
</div>

以下代码也是等效的。

<div id="x">
 <p itemprop="a">1</p>
</div>
<div itemscope itemref="x">
 <p itemprop="b">test</p>
 <p itemprop="a">2</p>
</div>

5.2.4

由具有 itemprop 属性的元素添加的名称-值对的 属性值 是以下列表中第一个匹配项的给定值。

如果元素还具有 itemscope 属性

该值是元素创建的

如果元素是 meta 元素

该值是元素的 content 属性的值(如果有),如果没有此属性,则为空字符串。

如果元素是 audioembediframeimgsourcetrackvideo 元素

该值是 对 URL 进行编码解析和序列化 的结果,该 URL 是根据元素的 src 属性的值,相对于元素的 节点文档,在设置属性时,或者如果没有此属性或结果为失败,则为空字符串。

如果元素是 aarealink 元素

该值是 对 URL 进行编码解析和序列化 的结果,该 URL 是根据元素的 href 属性的值,相对于元素的 节点文档,在设置属性时,或者如果没有此属性或结果为失败,则为空字符串。

如果元素是 object 元素

该值是 对 URL 进行编码解析和序列化 的结果,该 URL 是根据元素的 data 属性的值,相对于元素的 节点文档,在设置属性时,或者如果没有此属性或结果为失败,则为空字符串。

如果元素是 data 元素

该值是元素的 value 属性的值(如果有),否则为空字符串。

如果元素是 meter 元素

该值是元素的 value 属性的值(如果有),否则为空字符串。

如果元素是 time 元素

该值是元素的 日期时间值

否则

该值是元素的 后代文本内容

URL 属性元素aareaaudioembediframeimglinkobjectsourcetrackvideo 元素。

如果属性的 (由属性的定义定义)是 绝对 URL,则属性必须使用 URL 属性元素 指定。

这些要求并不仅仅因为属性值恰好与 URL 的语法匹配而适用。它们仅在明确定义属性接受此类值时才适用。

例如,一本关于首次登月的书可以名为 "mission:moon"。一个词汇中定义的标题为字符串的 "title" 属性不会期望标题在 a 元素中给出,即使它看起来像一个 URL。另一方面,如果有一个(范围相当狭窄的!)词汇用于 "标题看起来像 URL 的书籍",并且其中有一个 "title" 属性被定义为接受一个 URL,那么根据上面的要求,该属性期望标题在 a 元素(或其他 URL 属性元素)中给出。

5.2.5 微数据和其他命名空间

目前,itemscopeitemprop 和其他微数据属性仅为 HTML 元素 定义。这意味着,具有字面名称 "itemscope"、"itemprop" 等的属性不会在其他命名空间(如 SVG)的元素上触发微数据处理。

因此,在以下示例中只有一个项,而不是两个。

<p itemscope></p> <!-- this is an item (with no properties and no type) -->
<svg itemscope></svg> <!-- this is not, it's just an SVG svg element with an invalid unknown attribute -->

5.3 微数据词汇示例

本节中的词汇主要用于演示词汇的指定方式,但它们本身也是可用的。

5.3.1 vCard

具有 项类型 http://microformats.org/profile/hcard 的项代表一个人或组织的联系信息。

该词汇不 支持项的全局标识符

以下是该类型的 定义的属性名称。它们基于 vCard 格式规范 (vCard) 及其扩展中定义的词汇,可在其中找到有关如何解释值的更多信息。 [RFC6350]

kind

描述项代表的联系类型。

必须是与 kind 字符串 中的其中一个 相同 的文本。

每个具有类型 http://microformats.org/profile/hcard 中最多只能包含一个名为 kind 的属性。

fn

给出对应于个人或组织名称的格式化文本。

必须是文本。

每个具有类型 http://microformats.org/profile/hcard 中必须包含且仅包含一个名为 fn 的属性。

n

给出个人或组织的结构化名称。

必须是一个 项目,其中包含零个或多个以下每个属性:family-namegiven-nameadditional-namehonorific-prefixhonorific-suffix

每个类型为 http://microformats.org/profile/hcard项目 中必须存在一个名为 n 的属性。

family-name (在 n 中)

给出人的姓氏,或组织的完整名称。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目n 属性的 项目 中,可以存在任意数量的名为 family-name 的属性。

given-name (在 n 中)

给出人的名。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目n 属性的 项目 中,可以存在任意数量的名为 given-name 的属性。

additional-name (在 n 中)

给出人的任何其他名字。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目n 属性的 项目 中,可以存在任意数量的名为 additional-name 的属性。

honorific-prefix (在 n 中)

给出人的尊称前缀。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目n 属性的 项目 中,可以存在任意数量的名为 honorific-prefix 的属性。

honorific-suffix (在 n 中)

给出人的尊称后缀。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目n 属性的 项目 中,可以存在任意数量的名为 honorific-suffix 的属性。

昵称

给出人和组织的昵称。

昵称是指代替或除了人、地、物所属名称以外的描述性名称。它还可以用来指定由 fnn 属性指定的正式名称的常用形式。

必须是文本。

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在任意数量的名为 nickname 的属性。

照片

给出人和组织的照片。

必须是 绝对 URL

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在任意数量的名为 photo 的属性。

生日

给出人和组织的出生日期。

必须是 有效的日期字符串

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在一个名为 bday 的属性。

周年纪念日

给出人和组织的出生日期。

必须是 有效的日期字符串

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在一个名为 anniversary 的属性。

性别

给出人的生物性别。

必须是以下之一:F,表示“女性”;M,表示“男性”;N,表示“无或不适用”;O,表示“其他”;U,表示“未知”。

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在一个名为 sex 的属性。

性别认同

给出人的性别认同。

必须是文本。

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在一个名为 gender-identity 的属性。

地址

给出人和组织的送货地址。

必须是一个 项目,其中包含零个或多个以下属性:typepost-office-boxextended-addressstreet-address,以及可选的 locality 属性、可选的 region 属性、可选的 postal-code 属性以及可选的 country-name 属性。

如果在形成类型为 http://microformats.org/profile/hcard项目adr 属性的 项目 中不存在任何 type 属性,则隐含 地址类型字符串 work

在每个类型为 http://microformats.org/profile/hcard项目 中,可以存在任意数量的名为 adr 的属性。

type (在 adr 中)

给出送货地址的类型。

必须是与 地址类型字符串 之一 完全相同 的文本。

在形成类型为 http://microformats.org/profile/hcard项目adr 属性的 项目 中,可以存在任意数量的名为 type 的属性,但在每个这样的 adr 属性 项目 中,每个不同值只能有一个 type 属性。

post-office-box (在 adr 中)

给出人和组织的送货地址的邮政信箱部分。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目adr 属性的 项目 中,可以存在任意数量的名为 post-office-box 的属性。

vCard 敦促作者不要使用此字段。

extended-address (在 adr 中)

给出人和组织的送货地址的附加部分。

必须是文本。

在形成类型为 http://microformats.org/profile/hcard项目adr 属性的 项目 中,可以存在任意数量的名为 extended-address 的属性。

vCard 敦促作者不要使用此字段。

street-address (在 adr 中)

给出人和组织的送货地址的街道地址部分。

必须是文本。

在形成 itemvalueadr 属性的 item (类型为 http://microformats.org/profile/hcard) 中,可以存在任意数量的名称为 street-address 的属性。

locality (在 adr 中)

提供个人或组织的送货地址的地区组件(例如城市)。

value 必须为文本。

在形成 itemvalueadr 属性的 item (类型为 http://microformats.org/profile/hcard) 中,可以存在一个名称为 locality 的属性。

region (在 adr 中)

提供个人或组织的送货地址的地区组件(例如州或省)。

value 必须为文本。

在形成 itemvalueadr 属性的 item (类型为 http://microformats.org/profile/hcard) 中,可以存在一个名称为 region 的属性。

postal-code (在 adr 中)

提供个人或组织的送货地址的邮政编码组件。

value 必须为文本。

在形成 itemvalueadr 属性的 item (类型为 http://microformats.org/profile/hcard) 中,可以存在一个名称为 postal-code 的属性。

country-name (在 adr 中)

提供个人或组织的送货地址的国家名称组件。

value 必须为文本。

在形成 itemvalueadr 属性的 item (类型为 http://microformats.org/profile/hcard) 中,可以存在一个名称为 country-name 的属性。

tel

提供个人或组织的电话号码。

value 必须为可以解释为电话号码的文本(如 CCITT 规范 E.163 和 X.121 中定义),或者为具有零个或多个 type 属性和恰好一个 value 属性的 item[E163] [X121]

如果在形成 itemvaluetel 属性的 item (类型为 http://microformats.org/profile/hcard) 中不存在 type 属性,或者如果此类 tel 属性的 value 为文本,则隐含 电话类型字符串 voice

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 tel 的属性。

type (在 tel 中)

提供电话号码的类型。

value 必须为与某个 电话类型字符串 完全相同 的文本。

在形成 itemvaluetel 属性的 item (类型为 http://microformats.org/profile/hcard) 中,可以存在任意数量的名称为 type 的属性,但每个此类 tel 属性的 item 中,对于每个不同的值,只能存在一个 type 属性。

value (在 tel 中)

提供个人或组织的实际电话号码。

value 必须为可以解释为电话号码的文本,如 CCITT 规范 E.163 和 X.121 中定义。 [E163] [X121]

在形成 itemvaluetel 属性的 item (类型为 http://microformats.org/profile/hcard) 中,必须存在一个名称为 value 的属性。

email

提供个人或组织的电子邮件地址。

value 必须为文本。

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 email 的属性。

impp

提供与个人或组织进行即时通讯和状态协议通信的 URL

value 必须为 绝对 URL

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 impp 的属性。

lang

提供个人或组织理解的语言。

value 必须为有效的 BCP 47 语言标签。 [BCP47]

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 lang 的属性。

tz

提供个人或组织的时区。

value 必须为文本,并且必须匹配以下语法

  1. U+002B PLUS SIGN 字符 (+) 或 U+002D HYPHEN-MINUS 字符 (-)。
  2. 一个 有效的非负整数 ,正好是两位,表示 00 到 23 之间的数字。
  3. U+003A COLON 字符 (:)。
  4. 一个 有效的非负整数 ,正好是两位,表示 00 到 59 之间的数字。

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 tz 的属性。

geo

提供个人或组织的地理位置。

value 必须为文本,并且必须匹配以下语法

  1. 可选的:U+002B PLUS SIGN 字符 (+) 或 U+002D HYPHEN-MINUS 字符 (-)。
  2. 一个或多个 ASCII 数字
  3. 可选的 *:U+002E FULL STOP 字符 (.),后跟一个或多个 ASCII 数字
  4. U+003B SEMICOLON 字符 (;)。
  5. 可选的:U+002B PLUS SIGN 字符 (+) 或 U+002D HYPHEN-MINUS 字符 (-)。
  6. 一个或多个 ASCII 数字
  7. 可选的 *:U+002E FULL STOP 字符 (.),后跟一个或多个 ASCII 数字

带星号 (*) 的可选组件应包含在内,并且每个组件应具有六位数字。

该值以十进制度表示经度和纬度,顺序为“经度 纬度”(即“LAT LON”排序)。经度表示相对于本初子午线东侧和西侧的位置,分别为正实数或负实数。纬度表示相对于赤道的北侧和南侧的位置,分别为正实数或负实数。

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 geo 的属性。

title

提供个人或组织的职位、职能或职责。

value 必须为文本。

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 title 的属性。

role

提供个人或组织的角色、职业或业务类别。

value 必须为文本。

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 role 的属性。

提供个人或组织的徽标。

value 必须为 绝对 URL

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 的属性。

agent

提供将代表个人或组织行事的其他人的联系信息。

value 必须为类型为 http://microformats.org/profile/hcarditem ,或者为 绝对 URL ,或者为文本。

每个类型为 http://microformats.org/profile/hcarditem 中,可以存在任意数量的名称为 agent 的属性。

org

提供组织的名称和单位。

必须是文本或一个带有单个组织名称属性和零个或多个组织单位属性的项目

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为org的属性。

组织名称(在org内)

提供组织的名称。

必须是文本。

在形成类型为http://microformats.org/profile/hcard项目org属性的项目中,必须存在且仅存在一个名称为组织名称的属性。

组织单位(在org内)

提供组织单位的名称。

必须是文本。

在形成类型为http://microformats.org/profile/hcard项目org属性的项目中,可以存在任意数量的名称为组织单位的属性。

member

提供一个表示该组成员的URL

必须是一个绝对 URL

如果项目也具有一个名称为kind的属性,其值为"group",那么在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为member的属性。

related

提供与另一个实体的关联关系。

必须是一个带有单个url属性和单个rel属性的项目

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为related的属性。

url(在related内)

提供关联实体的URL

必须是一个绝对 URL

在形成类型为http://microformats.org/profile/hcard项目related属性的项目中,必须存在且仅存在一个名称为url的属性。

rel(在related内)

提供实体与关联实体之间的关联关系。

必须是与关联关系字符串中的一个完全一致的文本。

在形成类型为http://microformats.org/profile/hcard项目related属性的项目中,必须存在且仅存在一个名称为rel的属性。

categories

提供可以将个人或组织归类的类别或标签的名称。

必须是文本。

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为categories的属性。

note

提供关于个人或组织的补充信息或评论。

必须是文本。

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为note的属性。

rev

提供联系信息的修订日期和时间。

必须是有效的全局日期和时间字符串的文本。

该值将当前修订的信息与信息的其它版本区分开来。

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为rev的属性。

sound

提供与个人或组织相关的音频文件。

必须是一个绝对 URL

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为sound的属性。

uid

提供与个人或组织相对应的全局唯一标识符。

必须是文本。

在每个类型为http://microformats.org/profile/hcard项目中,可以存在一个名称为uid的属性。

url

提供与个人或组织相关的URL

必须是一个绝对 URL

在每个类型为http://microformats.org/profile/hcard项目中,可以存在任意数量的名称为url的属性。

以下为kind 字符串

individual

表示单个实体(例如,个人)。

group

表示多个实体(例如,邮件列表)。

org

表示不是个人的单个实体(例如,公司)。

location

表示地理位置(例如,办公大楼)。

以下为地址类型字符串

home

表示住宅的送货地址。

work

表示工作场所的送货地址。

以下为电话类型字符串

home

表示住宅电话号码。

work

表示工作场所的电话号码。

text

表示电话号码支持短信(SMS)。

voice

表示语音电话号码。

fax

表示传真电话号码。

cell

表示手机号码。

video

表示视频会议电话号码。

pager

表示寻呼机电话号码。

textphone

表示为有听力或言语障碍的人设计的电信设备。

以下为关联关系字符串

emergency

紧急联系人。

agent

代表该实体行事的另一个实体。

contact
acquaintance
friend
met
worker
colleague
resident
neighbor
child
parent
sibling
spouse
kin
muse
crush
date
sweetheart
me

具有 XFN 中定义的含义。 [XFN]

5.3.1.1 转换为 vCard

Document 中给定一个节点列表 nodes,用户代理必须运行以下算法以提取这些节点所表示的任何 vCard 数据(仅返回第一个 vCard)。

  1. 如果 nodes 中的任何节点都不是类型为http://microformats.org/profile/hcard项目,则没有 vCard。中止算法,不返回任何内容。

  2. nodenodes 中第一个类型为http://microformats.org/profile/hcard项目

  3. output 为一个空字符串。

  4. output 添加一个 vCard 行,其类型为"BEGIN",值为"VCARD"。

  5. output 添加一个 vCard 行,其类型为"PROFILE",值为"VCARD"。

  6. output 添加一个 vCard 行,其类型为"VERSION",值为"4.0"。

  7. output 添加一个 vCard 行,其类型为"SOURCE",值为对作为文档URL的 vCard 文本字符串进行转义的结果。

  8. 如果title 元素不为空,则向 output 添加一个 vCard 行,其类型为"NAME",值为从title 元素后代文本内容获得的转义 vCard 文本字符串的结果。

  9. sex 为空字符串。

  10. gender-identity 为空字符串。

  11. 对于每个元素 element,它是 项目的一个属性 node:对于 element 的每个名称 name属性名称 中,运行以下子步骤

    1. parameters 为一个空的名称-值对集。

    2. 从以下列表中运行适当的子步骤集。这些步骤将设置一个变量 value,该变量在下一步中使用。

      如果属性的 是一个 项目 subitem 并且 namen
      1. value 为空字符串。

      2. 收集在 subitem 中名为 family-name 的第一个 vCard 子属性 的结果追加到 value 中。

      3. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      4. 收集在 subitem 中名为 given-name 的第一个 vCard 子属性 的结果追加到 value 中。

      5. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      6. 收集在 subitem 中名为 additional-name 的第一个 vCard 子属性 的结果追加到 value 中。

      7. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      8. 收集在 subitem 中名为 honorific-prefix 的第一个 vCard 子属性 的结果追加到 value 中。

      9. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      10. 收集在 subitem 中名为 honorific-suffix 的第一个 vCard 子属性 的结果追加到 value 中。

      如果属性的 是一个 项目 subitem 并且 nameadr
      1. value 为空字符串。

      2. 收集在 subitem 中名为 post-office-box 的 vCard 子属性 的结果追加到 value 中。

      3. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      4. 收集在 subitem 中名为 extended-address 的 vCard 子属性 的结果追加到 value 中。

      5. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      6. 收集在 subitem 中名为 street-address 的 vCard 子属性 的结果追加到 value 中。

      7. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      8. 收集在 subitem 中名为 locality 的第一个 vCard 子属性 的结果追加到 value 中。

      9. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      10. 收集在 subitem 中名为 region 的第一个 vCard 子属性 的结果追加到 value 中。

      11. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      12. 收集在 subitem 中名为 postal-code 的第一个 vCard 子属性 的结果追加到 value 中。

      13. 将一个 U+003B 分号字符 (;) 追加到 value 中。
      14. 收集在 subitem 中名为 country-name 的第一个 vCard 子属性 的结果追加到 value 中。

      15. 如果在 subitem 中有一个名为 type 的属性,并且第一个这样的属性的 不是一个 项目,并且其值只包含 ASCII 字母数字,则向 parameters 添加一个名为 "TYPE" 的参数,其值为该属性的

      如果属性的 是一个 项目 subitem 并且 nameorg
      1. value 为空字符串。

      2. 收集在 subitem 中名为 organization-name 的第一个 vCard 子属性 的结果追加到 value 中。

      3. 对于在 subitem 中名为 organization-unit 的每个属性,运行以下步骤

        1. 如果属性的 是一个 项目,则跳过此属性。

        2. 将一个 U+003B 分号字符 (;) 追加到 value 中。

        3. 将由属性的 给出的 转义 vCard 文本字符串 的结果追加到 value 中。

      如果属性的 是一个 项目 subitem,其 项目类型http://microformats.org/profile/hcard 并且 namerelated
      1. value 为空字符串。

      2. 如果在 subitem 中有一个名为 url 的属性,并且其元素是 URL 属性元素,则将由第一个这样的属性的 给出的 转义 vCard 文本字符串 的结果追加到 value 中,并向 parameters 添加一个名为 "VALUE"、值为 "URI" 的参数。

      3. 如果在 subitem 中有一个名为 rel 的属性,并且第一个这样的属性的 不是一个 项目,并且其值只包含 ASCII 字母数字,则向 parameters 添加一个名为 "RELATION" 的参数,其值为该属性的

      如果属性的 是一个 项目 并且 name 不是以上任何一个
      1. value收集在 subitem 中名为 value 的第一个 vCard 子属性 的结果。

      2. 如果在 subitem 中有一个名为 type 的属性,并且第一个这样的属性的 不是一个 项目,并且其值只包含 ASCII 字母数字,则向 parameters 添加一个名为 "TYPE" 的参数,其值为该属性的

      如果属性的 不是一个 项目 并且其 namesex

      如果这是第一个被找到的这样的属性,则将 sex 设置为属性的

      如果属性的 不是一个 项目 并且其 namegender-identity

      如果这是第一个被找到的这样的属性,则将 gender-identity 设置为属性的

      否则(属性的 不是一个 项目
      1. value 为属性的

      2. 如果 elementURL 属性元素 之一,则向 parameters 添加一个名为 "VALUE"、值为 "URI" 的参数。

      3. 否则,如果 namebdayanniversary 并且 value 是一个 有效的日期字符串,则向 parameters 添加一个名为 "VALUE"、值为 "DATE" 的参数。

      4. 否则,如果 namerev 并且 value 是一个 有效的全局日期和时间字符串,则向 parameters 添加一个名为 "VALUE"、值为 "DATE-TIME" 的参数。

      5. value 中的每个 U+005C 反斜杠字符 (\) 前面添加另一个 U+005C 反斜杠字符 (\)。

      6. value 中的每个 U+002C 逗号字符 (,) 前面添加一个 U+005C 反斜杠字符 (\)。

      7. 除非 namegeo,否则在 value 中的每个 U+003B 分号字符 (;) 前面添加一个 U+005C 反斜杠字符 (\)。

      8. value 中的每个 U+000D 回车符 U+000A 换行符字符对 (CRLF) 替换为一个 U+005C 反斜杠字符 (\),后跟一个 U+006E 拉丁小写字母 n 字符 (n)。

      9. value 中剩余的每个 U+000D 回车符 (CR) 或 U+000A 换行符 (LF) 字符替换为一个 U+005C 反斜杠字符 (\),后跟一个 U+006E 拉丁小写字母 n 字符 (n)。

    3. 添加一个 类型为 name、参数为 parameters 且值为 value 的 vCard 行到 output 中。

  12. 如果 sexgender-identity 具有非空字符串的值,则 添加一个 类型为 "GENDER"、值为 sex、一个 U+003B 分号字符 (;) 和 gender-identity 的串联的 vCard 行到 output 中。

  13. 添加一个 类型为 "END"、值为 "VCARD" 的 vCard 行到 output 中。

当上述算法说用户代理需要 添加一个 由类型 type、可选的一些参数和一个值 value 组成 vCard 行到字符串 output 中时,它必须运行以下步骤

  1. line 为一个空字符串。

  2. type 追加到 line转换为 ASCII 大写

  3. 如果有任何参数,则对每个参数按其添加顺序运行以下子步骤

    1. 将 U+003B 分号字符 (;) 追加到 line

    2. 将参数名称追加到 line

    3. 将 U+003D 等号字符 (=) 追加到 line

    4. 将参数值追加到 line

  4. 将 U+003A 冒号字符 (:) 追加到 line

  5. value 追加到 line

  6. maximum length 为 75。

  7. line代码点长度 大于 maximum length

    1. line 的前 maximum length 个代码点追加到 output

    2. line 中删除前 maximum length 个代码点。

    3. 将 U+000D 回车符 (CR) 追加到 output

    4. 将 U+000A 换行符 (LF) 追加到 output

    5. 将 U+0020 空格字符追加到 output

    6. maximum length 为 74。

  8. line (剩余部分)追加到 output

  9. 将 U+000D 回车符 (CR) 追加到 output

  10. 将 U+000A 换行符 (LF) 追加到 output

当上述步骤要求用户代理获取在 subitem 中名为 subname收集 vCard 子属性 的结果时,用户代理必须运行以下步骤

  1. value 为空字符串。

  2. 对于 subitem 中名为 subname 的每个属性,运行以下子步骤

    1. 如果属性的 本身是一个 项目,则跳过此属性。

    2. 如果这不是 subitem 中名为 subname 的第一个属性(忽略由上一步跳过的任何属性),则将 U+002C 逗号字符 (,) 追加到 value

    3. 将通过属性的 给出的 转义 vCard 文本字符串 的结果追加到 value

  3. 返回 value

当上述步骤要求用户代理获取在 subitem 中名为 subname收集第一个 vCard 子属性 的结果时,用户代理必须运行以下步骤

  1. 如果没有名为 subname 的属性在 subitem 中,则返回空字符串。

  2. 如果 subitem 中名为 subname 的第一个属性的 是一个 项目,则返回空字符串。

  3. 返回通过 subitem 中名为 subname 的第一个属性的 给出的 转义 vCard 文本字符串 的结果。

当以上算法说用户代理要 转义 vCard 文本字符串 value 时,用户代理必须使用以下步骤

  1. value 中的每个 U+005C 反斜杠字符 (\) 前面添加另一个 U+005C 反斜杠字符 (\)。

  2. value 中的每个 U+002C 逗号字符 (,) 前面添加一个 U+005C 反斜杠字符 (\)。

  3. value 中的每个 U+003B 分号字符 (;) 前面添加一个 U+005C 反斜杠字符 (\)。

  4. value 中的每个 U+000D 回车符 U+000A 换行符字符对 (CRLF) 替换为一个 U+005C 反斜杠字符 (\),后跟一个 U+006E 拉丁小写字母 n 字符 (n)。

  5. value 中剩余的每个 U+000D 回车符 (CR) 或 U+000A 换行符 (LF) 字符替换为一个 U+005C 反斜杠字符 (\),后跟一个 U+006E 拉丁小写字母 n 字符 (n)。

  6. 返回已修改的 value

如果输入不符合为 http://microformats.org/profile/hcard 项目类型定义的属性名称 描述的规则,则此算法可能会生成无效的 vCard 输出。

5.3.1.2 示例

以下是一个名为“杰克·鲍尔”的虚构角色的长示例 vCard。

<section id="jack" itemscope itemtype="http://microformats.org/profile/hcard">
 <h1 itemprop="fn">
  <span itemprop="n" itemscope>
   <span itemprop="given-name">Jack</span>
   <span itemprop="family-name">Bauer</span>
  </span>
 </h1>
 <img itemprop="photo" alt="" src="jack-bauer.jpg">
 <p itemprop="org" itemscope>
  <span itemprop="organization-name">Counter-Terrorist Unit</span>
  (<span itemprop="organization-unit">Los Angeles Division</span>)
 </p>
 <p>
  <span itemprop="adr" itemscope>
   <span itemprop="street-address">10201 W. Pico Blvd.</span><br>
   <span itemprop="locality">Los Angeles</span>,
   <span itemprop="region">CA</span>
   <span itemprop="postal-code">90064</span><br>
   <span itemprop="country-name">United States</span><br>
  </span>
  <span itemprop="geo">34.052339;-118.410623</span>
 </p>
 <h2>Assorted Contact Methods</h2>
 <ul>
  <li itemprop="tel" itemscope>
   <span itemprop="value">+1 (310) 597 3781</span> <span itemprop="type">work</span>
   <meta itemprop="type" content="voice">
  </li>
  <li><a itemprop="url" href="https://en.wikipedia.org/wiki/Jack_Bauer">I'm on Wikipedia</a>
  so you can leave a message on my user talk page.</li>
  <li><a itemprop="url" href="http://www.jackbauerfacts.com/">Jack Bauer Facts</a></li>
  <li itemprop="email"><a href="mailto:[email protected]">[email protected]</a></li>
  <li itemprop="tel" itemscope>
   <span itemprop="value">+1 (310) 555 3781</span> <span>
   <meta itemprop="type" content="cell">mobile phone</span>
  </li>
 </ul>
 <ins datetime="2008-07-20 21:00:00+01:00">
  <meta itemprop="rev" content="2008-07-20 21:00:00+01:00">
  <p itemprop="tel" itemscope><strong>Update!</strong>
  My new <span itemprop="type">home</span> phone number is
  <span itemprop="value">01632 960 123</span>.</p>
 </ins>
</section>

奇数行换行是必要的,因为换行符在微数据中是有意义的:例如,在转换为 vCard 格式时,换行符将被保留。

此示例显示一个网站的联系信息(使用 address 元素)包含一个地址,其中包含两个街道组件

<address itemscope itemtype="http://microformats.org/profile/hcard">
 <strong itemprop="fn"><span itemprop="n" itemscope><span itemprop="given-name">Alfred</span>
 <span itemprop="family-name">Person</span></span></strong> <br>
 <span itemprop="adr" itemscope>
  <span itemprop="street-address">1600 Amphitheatre Parkway</span> <br>
  <span itemprop="street-address">Building 43, Second Floor</span> <br>
  <span itemprop="locality">Mountain View</span>,
   <span itemprop="region">CA</span> <span itemprop="postal-code">94043</span>
 </span>
</address>

vCard 词汇表可用于标记人们的姓名

<span itemscope itemtype="http://microformats.org/profile/hcard"
><span itemprop=fn><span itemprop="n" itemscope><span itemprop="given-name"
>George</span> <span itemprop="family-name">Washington</span></span
></span></span>

这会创建一个带有两个名称-值对的单个项目,一个名称为“fn”,值为“乔治·华盛顿”,另一个名称为“n”,值为第二个项目,第二个项目具有两个名称-值对“given-name”和“family-name”,其值分别为“乔治”和“华盛顿”。这被定义为映射到以下 vCard

BEGIN:VCARD
PROFILE:VCARD
VERSION:4.0
SOURCE:document's address
FN:George Washington
N:Washington;George;;;
END:VCARD

5.3.2 vEvent

具有 项目类型 http://microformats.org/profile/hcalendar#vevent 的项目表示一个事件。

此词汇表不 支持项目的全局标识符

以下是该类型的 定义的属性名称。它们基于 Internet Calendaring and Scheduling Core Object Specification (iCalendar) 中定义的词汇表,其中可以找到有关如何解释值的更多信息。 [RFC5545]

这里只使用与事件相关的 iCalendar 词汇表部分;此词汇表无法表达完整的 iCalendar 实例。

attach

给出与事件关联的文档的地址。

必须是 绝对 URL

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在任意数量的名称为 attach 的属性。

categories

给出可以将事件分类的类别或标签的名称。

必须是文本。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在任意数量的名称为 categories 的属性。

class

给出与事件有关的信息的访问分类。

必须是文本,并且必须具有以下值之一

这仅仅是建议,不能被视为保密措施。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在单个名称为 class 的属性。

comment

给出有关事件的评论。

必须是文本。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在任意数量的名称为 comment 的属性。

description

给出事件的详细说明。

必须是文本。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在单个名称为 description 的属性。

geo

给出事件的地理位置。

必须是文本,并且必须与以下语法匹配

  1. 可选的:U+002B PLUS SIGN 字符 (+) 或 U+002D HYPHEN-MINUS 字符 (-)。
  2. 一个或多个 ASCII 数字
  3. 可选地*,一个 U+002E 句点字符 (.),后面跟着一个或多个 ASCII 数字
  4. U+003B SEMICOLON 字符 (;)。
  5. 可选的:U+002B PLUS SIGN 字符 (+) 或 U+002D HYPHEN-MINUS 字符 (-)。
  6. 一个或多个 ASCII 数字
  7. 可选地*,一个 U+002E 句点字符 (.),后面跟着一个或多个 ASCII 数字

带星号 (*) 的可选组件应包含在内,并且每个组件应具有六位数字。

该值以十进制度表示经度和纬度,顺序为“经度 纬度”(即“LAT LON”排序)。经度表示相对于本初子午线东侧和西侧的位置,分别为正实数或负实数。纬度表示相对于赤道的北侧和南侧的位置,分别为正实数或负实数。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在单个名称为 geo 的属性。

location

给出事件的位置。

必须是文本。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在单个名称为 location 的属性。

resources

给出事件所需资源。

必须是文本。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在任意数量的名称为 resources 的属性。

status

给出事件的确认状态。

必须是文本,并且必须具有以下值之一

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在单个名称为 status 的属性。

summary

给出事件的简短摘要。

必须是文本。

用户代理在使用该值时,应将 中的 U+000A 换行符 (LF) 字符替换为 U+0020 空格字符。

在每个具有类型 http://microformats.org/profile/hcalendar#vevent项目 中,可以存在单个名称为 summary 的属性。

dtend

给出事件结束的日期和时间。

如果具有类型 http://microformats.org/profile/hcalendar#vevent项目 中存在名称为 dtend 的属性,并且该项目具有名称为 dtstart 的属性,其值为 有效的日期字符串,则名称为 dtend 的属性的 必须是文本,该文本也是一个 有效的日期字符串。否则,该属性的 必须是文本,该文本是 有效的全局日期和时间字符串

在任一情况下,该 必须比同一 项目dtstart 属性的值时间更晚。

dtend 属性给出的时间不包括在内。因此,对于全天事件,dtend 属性的 将是事件结束后的那一天。

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 dtend 的属性,只要该 http://microformats.org/profile/hcalendar#vevent 没有名为 duration 的属性。

dtstart

给出事件开始的日期和时间。

必须是文本,该文本要么是 有效的日期字符串,要么是 有效的全局日期和时间字符串

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中必须包含一个名为 dtstart 的属性。

duration

给出事件的持续时间。

必须是文本,该文本是 有效的 vEvent 持续时间字符串

表示的持续时间是值中所有表示为整数的持续时间的总和。

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 duration 的属性,只要该 http://microformats.org/profile/hcalendar#vevent 没有名为 dtend 的属性。

transp

给出事件是否被视为在日历上消耗时间,以用于空闲时间搜索。

必须是文本,其值为以下值之一

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 transp 的属性。

contact

给出事件的联系信息。

必须是文本。

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中可以包含任意数量的名为 contact 的属性。

url

给出事件的 URL

必须是 绝对 URL

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 url 的属性。

uid

给出与事件相对应的全局唯一标识符。

必须是文本。

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 uid 的属性。

exdate

给出尽管有重复规则,但事件不会发生的日期和时间。

必须是文本,该文本要么是 有效的日期字符串,要么是 有效的全局日期和时间字符串

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中可以包含任意数量的名为 exdate 的属性。

rdate

给出事件重复发生的日期和时间。

必须是文本,其值为以下值之一

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中可以包含任意数量的名为 rdate 的属性。

rrule

给出查找事件发生的日期和时间的规则。

必须是文本,该文本与 iCalendar 中定义的 RECUR 值类型匹配。 [RFC5545]

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 rrule 的属性。

created

给出事件信息首次在日历系统中创建的日期和时间。

必须是文本,该文本是 有效的全局日期和时间字符串

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 created 的属性。

last-modified

给出事件信息最后一次在日历系统中修改的日期和时间。

必须是文本,该文本是 有效的全局日期和时间字符串

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 last-modified 的属性。

sequence

给出事件信息的修订版本号。

必须是文本,该文本是 有效的非负整数

每个类型为 http://microformats.org/profile/hcalendar#vevent项目 中最多可以包含一个名为 sequence 的属性。

如果字符串匹配以下模式,则它是 有效的 vEvent 持续时间字符串

  1. 一个 U+0050 拉丁大写字母 P 字符 (P)。

  2. 以下之一

5.3.2.1 转换为 iCalendar

给定 Document 中的一系列节点 nodes,用户代理必须运行以下算法来 提取这些节点所表示的任何 vEvent 数据

  1. 如果 nodes 中的节点都不是类型为 http://microformats.org/profile/hcalendar#vevent项目,则不存在 vEvent 数据。中止算法,不返回任何内容。

  2. output 为一个空字符串。

  3. 添加一个 iCalendar 行,其类型为 "BEGIN",值是 "VCALENDAR",添加到 output 中。

  4. 添加一个 iCalendar 行,其类型为 "PRODID",值是等于表示用户代理的特定于用户代理的字符串,添加到 output 中。

  5. 添加一个 iCalendar 行,其类型为 "VERSION",值是 "2.0",添加到 output 中。

  6. 对于 nodes 中的每个节点 node,如果它是一个类型为 http://microformats.org/profile/hcalendar#vevent项目,则运行以下步骤

    1. 添加一个 iCalendar 行,其类型为 "BEGIN",值是 "VEVENT",添加到 output 中。

    2. 添加一个 iCalendar 行,其类型为 "DTSTAMP",值是包含一个 iCalendar DATE-TIME 字符串,该字符串表示当前日期和时间,并带有一个注释 "VALUE=DATE-TIME",添加到 output 中。 [RFC5545]

    3. 对于每个 作为项目的属性 node 的元素 element:对于 element属性名称 中的每个名称 name,从以下列表中运行适当的一组子步骤

      如果属性的 是一个 项目

      跳过此属性。

      如果属性是 dtend
      如果属性是 dtstart
      如果属性是 exdate
      如果属性是 rdate
      如果属性是 created
      如果属性是 last-modified

      value 为从属性的 中删除所有 U+002D HYPHEN-MINUS (-) 和 U+003A COLON (:) 字符后的结果。

      如果属性的 是一个 有效的日期字符串,则将类型为 name,值为 value 的 iCalendar 行添加到 output 中,并添加注释 "VALUE=DATE"。

      否则,如果属性的 是一个 有效的全局日期和时间字符串,则将类型为 name,值为 value 的 iCalendar 行添加到 output 中,并添加注释 "VALUE=DATE-TIME"。

      否则,跳过该属性。

      否则

      将类型为 name,值为属性的 的 iCalendar 行添加到 output 中。

    4. 将类型为 "END",值为 "VEVENT" 的 iCalendar 行添加到 output 中。

  7. 将类型为 "END",值为 "VCALENDAR" 的 iCalendar 行添加到 output 中。

当上述算法指示用户代理添加一个由类型 type、值 value 以及可选注释组成的 iCalendar 行到字符串 output 中时,它必须执行以下步骤。

  1. line 为一个空字符串。

  2. type 添加到 line 中,并 转换为 ASCII 大写

  3. 如果有注释

    1. 将 U+003B 分号字符 (;) 追加到 line

    2. 将注释添加到 line 中。

  4. 将 U+003A 冒号字符 (:) 追加到 line

  5. value 中的每个 U+005C 反斜杠字符 (\) 前面添加另一个 U+005C 反斜杠字符 (\)。

  6. value 中的每个 U+002C 逗号字符 (,) 前面添加一个 U+005C 反斜杠字符 (\)。

  7. value 中的每个 U+003B 分号字符 (;) 前面添加一个 U+005C 反斜杠字符 (\)。

  8. value 中的每个 U+000D 回车符 U+000A 换行符字符对 (CRLF) 替换为一个 U+005C 反斜杠字符 (\),后跟一个 U+006E 拉丁小写字母 n 字符 (n)。

  9. value 中剩余的每个 U+000D 回车符 (CR) 或 U+000A 换行符 (LF) 字符替换为一个 U+005C 反斜杠字符 (\),后跟一个 U+006E 拉丁小写字母 n 字符 (n)。

  10. value 追加到 line

  11. maximum length 为 75。

  12. line代码点长度 大于 maximum length

    1. line 的前 maximum length 个代码点追加到 output

    2. line 中删除前 maximum length 个代码点。

    3. 将 U+000D 回车符 (CR) 追加到 output

    4. 将 U+000A 换行符 (LF) 追加到 output

    5. 将 U+0020 空格字符追加到 output

    6. maximum length 为 74。

  13. line (剩余部分)追加到 output

  14. 将 U+000D 回车符 (CR) 追加到 output

  15. 将 U+000A 换行符 (LF) 追加到 output

如果输入不符合 http://microformats.org/profile/hcalendar#vevent 项目类型已定义的属性名称 的规则,则该算法可能会生成无效的 iCalendar 输出。

5.3.2.2 示例

这是一个使用 vEvent 词汇标记事件的页面示例。

<body itemscope itemtype="http://microformats.org/profile/hcalendar#vevent">
 ...
 <h1 itemprop="summary">Bluesday Tuesday: Money Road</h1>
 ...
 <time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th @ 7pm</time>
 (until <time itemprop="dtend" datetime="2009-05-05T21:00:00Z">9pm</time>)
 ...
 <a href="http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
    rel="bookmark" itemprop="url">Link to this page</a>
 ...
 <p>Location: <span itemprop="location">The RoadHouse</span></p>
 ...
 <p><input type=button value="Add to Calendar"
           onclick="location = getCalendar(this)"></p>
 ...
 <meta itemprop="description" content="via livebrum.co.uk">
</body>

getCalendar() 函数留给读者作为练习。

同一个页面可以提供一些标记,例如以下内容,用于复制和粘贴到博客中。

<div itemscope itemtype="http://microformats.org/profile/hcalendar#vevent">
 <p>I'm going to
 <strong itemprop="summary">Bluesday Tuesday: Money Road</strong>,
 <time itemprop="dtstart" datetime="2009-05-05T19:00:00Z">May 5th at 7pm</time>
 to <time itemprop="dtend" datetime="2009-05-05T21:00:00Z">9pm</time>,
 at <span itemprop="location">The RoadHouse</span>!</p>
 <p><a href="http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
       itemprop="url">See this event on livebrum.co.uk</a>.</p>
 <meta itemprop="description" content="via livebrum.co.uk">
</div>

5.3.3 许可作品

具有 项目类型 http://n.whatwg.org/work 的项目代表一个作品(例如文章、图片、视频、歌曲等)。此类型主要用于允许作者为作品添加许可信息。

以下是该类型 已定义的属性名称

work

标识要描述的作品。

必须是一个 绝对 URL

每个类型为 http://n.whatwg.org/work项目 中必须存在一个名为 work 的属性。

title

给出作品的名称。

每个类型为 http://n.whatwg.org/work项目 中可以存在一个名为 title 的属性。

作者

给出作品的作者或创作者之一的姓名或联系信息。

必须是一个类型为 http://microformats.org/profile/hcard项目 或者文本。

每个类型为 http://n.whatwg.org/work项目 中可以存在任意数量的名称为 author 的属性。

许可证

标识作品可用的许可证之一。

必须是一个 绝对 URL

每个类型为 http://n.whatwg.org/work项目 中可以存在任意数量的名称为 license 的属性。

5.3.3.1 示例

此示例显示了一个名为 My Pond 的嵌入图像,它同时根据知识共享署名-相同方式共享 4.0 国际许可证和 MIT 许可证授权。

<figure itemscope itemtype="http://n.whatwg.org/work">
 <img itemprop="work" src="mypond.jpeg">
 <figcaption>
  <p><cite itemprop="title">My Pond</cite></p>
  <p><small>Licensed under the <a itemprop="license"
  href="https://creativecommons.org/licenses/by-sa/4.0/">Creative
  Commons Attribution-Share Alike 4.0 International License</a>
  and the <a itemprop="license"
  href="http://www.opensource.org/licenses/mit-license.php">MIT
  license</a>.</small>
 </figcaption>
</figure>