活文档 — 最后更新于 2024年9月12日
本节内容非规范性。
有时,希望使用特定的机器可读标签来注释内容,例如,允许通用脚本提供针对页面的自定义服务,或使来自各种协作作者的内容能够以一致的方式由单个脚本处理。
为此,作者可以使用本节中描述的微数据功能。微数据允许将嵌套的名称-值对组添加到文档中,与现有内容并行。
本节内容非规范性。
在较高层面上,微数据由一组名称-值对组成。这些组称为项目,每个名称-值对都是一个属性。项目和属性由常规元素表示。
要创建项目,使用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 >
当字符串值采用某种不适合人类阅读的机器可读格式时,它使用data
元素的value
属性来表达,其中人类可读的版本在元素的内容中给出。
这里,有一个项目,其属性的值为产品 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”的名称-值对项目。唯一的区别是,如果用户将标题拖出文档,在前面的情况下,该项目将包含在拖放数据中。在这两种情况下,图像都与项目没有任何关联。
本节内容非规范性。
上一节中的示例展示了如何在不期望其微数据被重复使用的页面上标记信息。但是,当微数据用于其他作者和读者能够协作以创建标记的新用途的上下文中时,微数据最有益。
为此,需要为每个项目赋予一个类型,例如“https://example.com/person”或“https://example.org/cat”或“https://band.example.net/”。类型被识别为URL。
项目的类型作为itemtype
属性的值给出,该属性与itemscope
属性位于同一元素上。
这里,项目的类型是“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 列为以空格分隔的列表,可以为单个项目提供多个定义为使用相同词汇表的类型。但是,如果两个类型不使用相同的词汇表,则不能为一个项目提供这两个类型。
本节内容非规范性。
有时,项目提供有关具有全局标识符的主题的信息。例如,书籍可以通过其 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。
本节内容非规范性。
使用微数据意味着使用词汇表。对于某些目的,临时词汇表就足够了。对于其他目的,需要设计词汇表。在可能的情况下,鼓励作者重复使用现有词汇表,因为这使得内容更容易重复使用。
在设计新的词汇表时,标识符可以通过使用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" 的项目,以及以下属性
属性 | 值 |
name | Hedral |
https://example.com/fn | Hedral |
desc | Hedral 是一只雄性美国短毛猫,拥有蓬松的黑色毛发,白色爪子和腹部。 |
https://example.com/color | black |
https://example.com/color | white |
img | .../hedral.jpeg |
微数据模型由称为项目的名称-值对组组成。
每个组称为一个项目。每个项目可以具有项目类型、全局标识符(如果由项目类型支持项目的全局标识符指定)和名称-值对列表。名称-值对中的每个名称称为属性,每个属性具有一或多个值。每个值要么是字符串,要么本身是一组名称-值对(一个项目)。名称彼此之间是无序的,但如果特定名称具有多个值,则它们确实具有相对顺序。
所有当前引擎都支持。
每个HTML 元素都可以指定itemscope
属性。itemscope
属性是一个布尔属性。
指定了itemscope
属性的元素会创建一个新的项目,即一组名称-值对。
所有当前引擎都支持。
具有itemscope
属性的元素可以指定itemtype
属性,以给出项目的项目类型。
如果指定了itemtype
属性,则其值必须是一组唯一的以空格分隔的标记,其中没有一个与另一个标记相同,并且每个标记都是一个有效的 URL 字符串,它是一个绝对 URL,并且所有这些都定义为使用相同的词汇表。属性的值必须至少包含一个标记。
一个项目的项目类型是通过根据 ASCII 空格拆分元素的 itemtype
属性的值获得的标记。如果itemtype
属性缺失或以这种方式解析它找不到任何标记,则该项目被称为没有项目类型。
所有项目类型都必须是在适用规范中定义的类型,并且都必须定义为使用相同的词汇表。
除非该规范另有规定,否则作为项目类型给出的URL不应自动解除引用。
例如,规范可以定义其项目类型可以被解除引用以向用户提供帮助信息。事实上,鼓励词汇表作者在给定的URL上提供有用的信息。
项目类型是不透明的标识符,用户代理不得解除引用未知的项目类型,或以其他方式对其进行分解,以确定如何处理使用它们的项目。
itemtype
属性不得在未指定itemscope
属性的元素上指定。
当一个项目具有项目类型,或者它是类型化项目的属性的值时,则称该项目为类型化项目。类型化项目的相关类型是该项目的项目类型(如果有),否则是它作为属性的值所属项目的相关类型。
所有当前引擎都支持。
具有itemscope
属性和itemtype
属性(引用一个定义为支持项目的全局标识符的词汇表)的元素也可以指定itemid
属性,以给出项目的全局标识符,以便它可以与网络上其他页面上的其他项目相关联。
如果指定了itemid
属性,则其值必须是可能被空格包围的有效 URL。
一个项目的全局标识符是其元素的itemid
属性的值(如果存在),相对于指定了该属性的元素的节点文档进行解析。如果itemid
属性缺失或解析它返回失败,则称它没有全局标识符。
itemid
属性不得在既没有itemscope
属性也没有itemtype
属性的元素上指定,也不得在具有itemscope
属性且其itemtype
属性指定了不支持项目的全局标识符的词汇表的元素上指定,如该词汇表的规范所定义。
全局标识符的确切含义由词汇表的规范确定。由这些规范来定义是否允许存在具有相同全局标识符的多个项目(无论是在同一页面上还是在不同页面上),以及该词汇表关于处理具有相同 ID 的多个项目的案例的处理规则。
所有当前引擎都支持。
具有itemscope
属性的元素可以指定itemref
属性,以给出其他元素的列表,以爬取这些元素以查找项目的名称-值对。
如果指定了itemref
属性,则其值必须是一组唯一的以空格分隔的标记,其中没有一个与另一个标记相同,并且由同一树中元素的ID组成。
itemref
属性不得在未指定itemscope
属性的元素上指定。
itemref
属性并非微数据数据模型的一部分。它只是一个语法结构,用于帮助作者在需要注释的数据不遵循方便的树形结构的页面上添加注释。例如,它允许作者标记表格中的数据,以便每一列定义一个单独的项目,同时保留单元格中的属性。
此示例展示了一个用于描述模型铁路制造商产品的简单词汇表。该词汇表只有五个属性名称
此词汇表定义了四个项目类型
每个使用此词汇表的项目都可以根据产品类型赋予一个或多个类型。
因此,机车可以标记为
< 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 >
创建新的词汇表时需要格外小心。通常,可以采用分层的方法来处理类型,从而创建一个词汇表,其中每个项目只有一种类型,这通常更容易管理。
itemprop
属性所有当前引擎都支持。
每个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 >
由具有itemprop
属性的元素添加的名称-值对的属性值如下面的列表中第一个匹配的用例所示
itemscope
属性该值是由元素创建的项目。
meta
元素该值为元素的content
属性的值(如果存在),或者如果不存在此属性则为空字符串。
audio
、embed
、iframe
、img
、source
、track
或video
元素该值为根据元素的 src
属性的值(相对于元素的节点文档,在设置属性时)对 URL 进行编码、解析和序列化的结果,或者如果不存在此属性或结果失败则为空字符串。
a
、area
或link
元素该值为根据元素的 href
属性的值(相对于元素的节点文档,在设置属性时)对 URL 进行编码、解析和序列化的结果,或者如果不存在此属性或结果失败则为空字符串。
object
元素该值为根据元素的 data
属性的值(相对于元素的节点文档,在设置属性时)对 URL 进行编码、解析和序列化的结果,或者如果不存在此属性或结果失败则为空字符串。
data
元素该值为元素的value
属性的值(如果存在),否则为空字符串。
meter
元素该值为元素的value
属性的值(如果存在),否则为空字符串。
time
元素该值为元素的日期时间值。
该值为元素的后代文本内容。
URL 属性元素是a
、area
、audio
、embed
、iframe
、img
、link
、object
、source
、track
和video
元素。
如果属性的值(如属性定义中所定义)是绝对 URL,则必须使用URL 属性元素指定该属性。
这些要求并非仅仅因为属性值恰好与 URL 的语法匹配而适用。只有在明确定义属性采用此类值时,它们才适用。
例如,一本关于首次登月的书籍可以命名为“mission:moon”。来自词汇表的“title”属性将标题定义为字符串,它不会期望标题以`a
`元素给出,即使它看起来像一个URL。另一方面,如果存在一个(范围相当狭窄的!)词汇表用于“标题看起来像URL的书籍”,其中“title”属性被定义为采用URL,那么该属性将期望标题以`a
`元素(或其他URL 属性元素之一)给出,因为上述要求。
要查找由元素root定义的项目的属性,用户代理必须运行以下步骤。这些步骤也用于标记微数据错误。
令results、memory和pending为空元素列表。
将元素root添加到memory中。
将root的子元素(如果有)添加到pending中。
如果root具有itemref
属性,则在ASCII空格处分割该itemref
属性的值。对于每个生成的标记ID,如果root的树中存在具有IDID的元素,则将第一个这样的元素添加到pending中。
当pending不为空时
以树状顺序对results进行排序。
返回results。
文档不得包含任何项目,对于这些项目,查找项目属性的算法会发现任何微数据错误。
文档
中的所有itemref
属性必须使得在由将文档
中的每个项目表示为图中的节点,以及将项目的每个属性(其值为另一个项目)表示为连接这两个项目的图中的边而形成的图中没有循环。
文档不得包含任何具有itemprop
属性的元素,如果要确定所有项目的属性,则不会发现该属性是任何项目的属性。
在此示例中,单个许可证声明应用于两个作品,使用来自表示这些作品的项目的itemref
。
<!DOCTYPE HTML>
< html lang = "en" >
< head >
< title > Photo gallery</ title >
</ head >
< body >
< h1 > My photos</ h1 >
< figure itemscope itemtype = "http://n.whatwg.org/work" itemref = "licenses" >
< img itemprop = "work" src = "images/house.jpeg" alt = "A white house, boarded up, sits in a forest." >
< figcaption itemprop = "title" > The house I found.</ figcaption >
</ figure >
< figure itemscope itemtype = "http://n.whatwg.org/work" itemref = "licenses" >
< img itemprop = "work" src = "images/mailbox.jpeg" alt = "Outside the house is a mailbox. It has a leaflet inside." >
< figcaption itemprop = "title" > The mailbox.</ figcaption >
</ figure >
< footer >
< p id = "licenses" > All images licensed under the < a itemprop = "license"
href = "http://www.opensource.org/licenses/mit-license.php" > MIT
license</ a > .</ p >
</ footer >
</ body >
</ html >
以上结果是两个类型为“http://n.whatwg.org/work
”的项目,一个具有
images/house.jpeg
http://www.opensource.org/licenses/mit-license.php
…以及一个具有
images/mailbox.jpeg
http://www.opensource.org/licenses/mit-license.php
目前,itemscope
、itemprop
和其他微数据属性仅针对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 -->
本节中的词汇表主要旨在演示如何指定词汇表,尽管它们本身也可以使用。
具有项目类型http://microformats.org/profile/hcard
的项目表示个人或组织的联系信息。
此词汇表不支持项目的全局标识符。
以下是类型的已定义的属性名称。它们基于vCard 格式规范(vCard)及其扩展中定义的词汇表,可以在其中找到有关如何解释值的更多信息。[RFC6350]
kind
描述项目代表哪种类型的联系信息。
在每个类型为http://microformats.org/profile/hcard
的项目中,可能存在一个名为kind
的属性。
fn
提供与个人或组织名称相对应的格式化文本。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcard
的项目中,必须存在一个名为fn
的属性。
n
提供个人或组织的结构化名称。
该值必须是一个具有零个或多个每个family-name
、given-name
、additional-name
、honorific-prefix
和honorific-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
的属性。
nickname
提供个人或组织的昵称。
昵称是代替或除了属于人、地点或事物的一个名称之外给出的描述性名称。它还可以用于指定由fn
或n
属性指定的正式名称的常用形式。
该值必须是文本。
每个类型为http://microformats.org/profile/hcard
的项目中,可以包含任意数量的名称为nickname
的属性。
photo
提供个人或组织的照片。
每个类型为http://microformats.org/profile/hcard
的项目中,可以包含任意数量的名称为photo
的属性。
bday
提供个人或组织的出生日期。
每个类型为http://microformats.org/profile/hcard
的项目中,可以包含一个名称为bday
的属性。
anniversary
提供个人或组织的出生日期。
每个类型为http://microformats.org/profile/hcard
的项目中,可以包含一个名称为anniversary
的属性。
sex
提供个人的生物性别。
该值必须是以下之一:F
(表示“女性”)、M
(表示“男性”)、N
(表示“无或不适用”)、O
(表示“其他”)或U
(表示“未知”)。
每个类型为http://microformats.org/profile/hcard
的项目中,可以包含一个名称为sex
的属性。
gender-identity
提供个人的性别认同。
该值必须是文本。
每个类型为http://microformats.org/profile/hcard
的项目中,可以包含一个名称为gender-identity
的属性。
adr
提供个人或组织的送货地址。
该值必须是一个项目,其中包含零个或多个type
、post-office-box
、extended-address
和street-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
内)提供个人或组织的送货地址的街道地址部分。
该值必须是文本。
在构成类型为http://microformats.org/profile/hcard
的adr
属性的项目的值的项目中,可以包含任意数量的名称为street-address
的属性。
locality
(在adr
内)提供个人或组织的送货地址的地区部分(例如城市)。
该值必须是文本。
在构成类型为http://microformats.org/profile/hcard
的adr
属性的项目的值的项目中,可以包含一个名称为locality
的属性。
region
(在adr
内)提供个人或组织的送货地址的地区部分(例如州或省)。
该值必须是文本。
在构成类型为http://microformats.org/profile/hcard
的adr
属性的项目的值的项目中,可以包含一个名称为region
的属性。
postal-code
(在adr
内)提供个人或组织的送货地址的邮政编码部分。
该值必须是文本。
在构成类型为http://microformats.org/profile/hcard
的adr
属性的项目的值的项目中,可以包含一个名称为postal-code
的属性。
country-name
(在adr
内)提供个人或组织的送货地址的国家/地区名称部分。
该值必须是文本。
在构成类型为http://microformats.org/profile/hcard
的adr
属性的项目的值的项目中,可以包含一个名称为country-name
的属性。
tel
提供个人或组织的电话号码。
该值必须是可解释为电话号码(如 CCITT 规范 E.163 和 X.121 中定义)的文本,或一个包含零个或多个type
属性和恰好一个value
属性的项目。[E163] [X121]
如果在构成类型为http://microformats.org/profile/hcard
的tel
属性的项目的值的项目中不存在type
属性,或者如果此类tel
属性的值是文本,则隐含电话类型字符串voice
。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 tel
的属性。
type
(在 tel
内部)指定电话号码的类型。
其 value 必须是文本,并且与 telephone type strings 中的一个 完全相同。
在构成类型为 http://microformats.org/profile/hcard
的 item 的 tel
属性的 value 的 item 中,可以包含任意数量的名称为 type
的属性,但在每个这样的 tel
属性 item 中,对于每个不同的值,只能有一个 type
属性。
value
(在 tel
内部)指定人员或组织的实际电话号码。
其 value 必须是文本,并且可以解释为 CCITT 规范 E.163 和 X.121 中定义的电话号码。 [E163] [X121]
在构成类型为 http://microformats.org/profile/hcard
的 item 的 tel
属性的 value 的 item 中,必须且只能包含一个名称为 value
的属性。
email
指定人员或组织的电子邮件地址。
其 value 必须是文本。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 email
的属性。
impp
指定与人员或组织进行即时消息和状态协议通信的 URL。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 impp
的属性。
lang
指定人员或组织理解的语言。
其 value 必须是有效的 BCP 47 语言标签。 [BCP47]
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 lang
的属性。
tz
指定人员或组织的时区。
其 value 必须是文本,并且必须匹配以下语法
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 tz
的属性。
geo
指定人员或组织的地理位置。
其 value 必须是文本,并且必须匹配以下语法
带星号 (*) 标记的可选组件应包含,每个组件应包含六位数字。
该值按顺序指定纬度和经度(即“LAT LON”顺序),以十进制度表示。经度分别表示东经和西经,用正数或负数表示。纬度分别表示北纬和南纬,用正数或负数表示。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 geo
的属性。
title
指定人员或组织的职位、职务或职能。
其 value 必须是文本。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 title
的属性。
role
指定人员或组织的角色、职业或业务类别。
其 value 必须是文本。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 role
的属性。
logo
指定人员或组织的徽标。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 logo
的属性。
agent
指定代表人员或组织行事的另一人的联系信息。
其 value 必须是类型为 http://microformats.org/profile/hcard
的 item,或 绝对 URL,或文本。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 agent
的属性。
org
指定组织的名称和部门。
其 value 必须是文本,或一个包含一个 organization-name
属性和零个或多个 organization-unit
属性的 item。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 org
的属性。
organization-name
(在 org
内部)指定组织的名称。
其 value 必须是文本。
在构成类型为 http://microformats.org/profile/hcard
的 item 的 org
属性的 value 的 item 中,必须且只能包含一个名称为 organization-name
的属性。
organization-unit
(在 org
内部)指定组织部门的名称。
其 value 必须是文本。
在构成类型为 http://microformats.org/profile/hcard
的 item 的 org
属性的 value 的 item 中,可以包含任意数量的名称为 organization-unit
的属性。
member
指定表示组成员的 URL。
如果 item 还包含一个名称为 kind
且值为 "group
" 的属性,则每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 member
的属性。
related
指定与另一个实体的关系。
其 value 必须是包含一个 url
属性和一个 rel
属性的 item。
每个类型为 http://microformats.org/profile/hcard
的 item 中,可以包含任意数量的名称为 related
的属性。
url
(在 related
内部)指定相关实体的 URL。
在构成类型为 http://microformats.org/profile/hcard
的 item 的 related
属性的 value 的 item 中,必须且只能包含一个名称为 url
的属性。
rel
(在 related
内部)指定实体与相关实体之间的关系。
在构成related属性(属于类型为http://microformats.org/profile/hcard的项)的值的项中,必须且只能存在一个名为rel的属性。
categories
给出个人或组织可能被归类的类别或标签的名称。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcard的项中,可以存在任意数量的名为categories的属性。
note
提供有关个人或组织的补充信息或注释。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcard的项中,可以存在任意数量的名为note的属性。
rev
给出联系信息的修订日期和时间。
该值必须是有效的全局日期和时间字符串。
该值用于区分信息的当前修订版本和其他版本。
在每个类型为http://microformats.org/profile/hcard的项中,可以存在任意数量的名为rev的属性。
sound
提供与个人或组织相关的音频文件。
在每个类型为http://microformats.org/profile/hcard的项中,可以存在任意数量的名为sound的属性。
uid
提供与个人或组织相对应的全局唯一标识符。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcard的项中,可以存在一个名为uid的属性。
url
提供与个人或组织相关的URL。
在每个类型为http://microformats.org/profile/hcard的项中,可以存在任意数量的名为url的属性。
以下为类型字符串:
individual
表示单个实体(例如,个人)。
group
表示多个实体(例如,邮件列表)。
org
表示单个非个人实体(例如,公司)。
location
表示地理位置(例如,办公楼)。
以下为地址类型字符串:
home
表示住宅的送货地址。
work
表示工作地点的送货地址。
以下为电话类型字符串:
home
表示住宅电话号码。
work
表示工作地点的电话号码。
text
表示电话号码支持短信(SMS)。
voice
表示语音电话号码。
fax
表示传真电话号码。
cell
表示手机号码。
video
表示视频会议电话号码。
pager
表示寻呼机电话号码。
textphone
表示供听力或言语障碍人士使用的通信设备。
以下为关系字符串:
emergency
紧急联系人。
agent
代表此实体的另一个实体。
具有XFN中定义的含义。 [XFN]
给定文档
中的一系列节点nodes,用户代理必须运行以下算法以提取这些节点表示的任何vCard数据(仅返回第一个vCard)。
如果nodes中的任何节点都不是类型为http://microformats.org/profile/hcard的项,则不存在vCard。终止算法,不返回任何内容。
令node为nodes中第一个类型为http://microformats.org/profile/hcard的项。
令output为空字符串。
将类型为“BEGIN
”、值为“VCARD
”的vCard行添加到output。
将类型为“PROFILE
”、值为“VCARD
”的vCard行添加到output。
将类型为“VERSION
”、值为“4.0
”的vCard行添加到output。
将类型为“SOURCE
”、值为文档的URL(经vCard文本字符串转义后)的vCard行添加到output。
如果title
元素不为空,则将类型为“NAME
”、值为从title
元素的后代文本内容获得的vCard文本字符串转义结果的vCard行添加到output。
令sex为空字符串。
令gender-identity为空字符串。
对于每个作为项node的属性的元素element:对于element的每个属性名称name,运行以下子步骤
令parameters为空的名称-值对集合。
从以下列表中运行相应的子步骤集。这些步骤将设置一个变量value,该变量在下一步中使用。
令value为空字符串。
将subitem中名为family-name的第一个vCard子属性的结果附加到value。
将subitem中名为given-name的第一个vCard子属性的结果附加到value。
将subitem中名为additional-name的第一个vCard子属性的结果附加到value。
将subitem中名为honorific-prefix的第一个vCard子属性的结果附加到value。
将subitem中名为honorific-suffix的第一个vCard子属性的结果附加到value。
令value为空字符串。
将subitem中名为post-office-box的vCard子属性的结果附加到value。
将subitem中名为extended-address的vCard子属性的结果附加到value。
将subitem中名为street-address的vCard子属性的结果附加到value。
将subitem中名为postal-code的第一个vCard子属性的结果附加到value。
将subitem中名为country-name的第一个vCard子属性的结果附加到value。
如果 subitem 中存在名为 type
的属性,并且第一个此类属性的 值 不是 项目,且其值仅包含 ASCII 字母数字字符,则向 parameters 添加一个名为“TYPE
”的参数,其值为该属性的 值。
org
令value为空字符串。
将 收集 subitem 中名为 organization-name
的第一个 vCard 子属性 的结果追加到 value。
对于 subitem 中每个名为 organization-unit
的属性,执行以下步骤
将U+003B分号字符(;)附加到value。
将属性的 值 所给出的 转义后的 vCard 文本字符串 追加到 value。
http://microformats.org/profile/hcard
且 name 为 related
令value为空字符串。
如果 subitem 中存在名为 url
的属性,并且其元素是 URL 属性元素,则将第一个此类属性的 值 所给出的 转义后的 vCard 文本字符串 追加到 value,并向 parameters 添加一个名为“VALUE
”、值为“URI
”的参数。
如果 subitem 中存在名为 rel
的属性,并且第一个此类属性的 值 不是 项目,且其值仅包含 ASCII 字母数字字符,则向 parameters 添加一个名为“RELATION
”的参数,其值为该属性的 值。
令 value 为 收集 subitem 中名为 value
的第一个 vCard 子属性 的结果。
如果 subitem 中存在名为 type
的属性,并且第一个此类属性的 值 不是 项目,且其值仅包含 ASCII 字母数字字符,则向 parameters 添加一个名为“TYPE
”的参数,其值为该属性的 值。
sex
如果这是找到的第一个此类属性,则将 sex 设置为属性的 值。
gender-identity
如果这是找到的第一个此类属性,则将 gender-identity 设置为属性的 值。
令 value 为属性的 值。
如果 element 是 URL 属性元素 之一,则向 parameters 添加一个名为“VALUE
”、值为“URI
”的参数。
否则,如果 name 为 bday
或 anniversary
且 value 是 有效的日期字符串,则向 parameters 添加一个名为“VALUE
”、值为“DATE
”的参数。
否则,如果 name 为 rev
且 value 是 有效的全局日期和时间字符串,则向 parameters 添加一个名为“VALUE
”、值为“DATE-TIME
”的参数。
在 value 中,每个 U+005C 反斜杠字符 (\) 前面都加上另一个 U+005C 反斜杠字符 (\)。
在 value 中,每个 U+002C 逗号字符 (,) 前面都加上一个 U+005C 反斜杠字符 (\)。
除非 name 为 geo
,否则在 value 中,每个 U+003B 分号字符 (;) 前面都加上一个 U+005C 反斜杠字符 (\)。
在 value 中,将每个 U+000D 回车 U+000A 换行字符对 (CRLF) 替换为一个 U+005C 反斜杠字符 (\) 后跟一个 U+006E 拉丁小写字母 N 字符 (n)。
在 value 中,将所有剩余的 U+000D 回车 (CR) 或 U+000A 换行 (LF) 字符替换为一个 U+005C 反斜杠字符 (\) 后跟一个 U+006E 拉丁小写字母 N 字符 (n)。
添加一个 vCard 行,其类型为 name,参数为 parameters,值为 value,并将其添加到 output。
如果 sex 或 gender-identity 的值不是空字符串,则 添加一个 vCard 行,其类型为“GENDER
”,值为 sex、一个 U+003B 分号字符 (;) 和 gender-identity 的串联,并将其添加到 output。
添加一个 vCard 行,其类型为“END
”,值为“VCARD
”,并将其添加到 output。
当上述算法说明用户代理需要 添加一个 vCard 行(包含类型 type、可选的一些参数和值 value)到字符串 output 中时,它必须执行以下步骤
令 line 为一个空字符串。
将 type(转换为 ASCII 大写)追加到 line。
如果有任何参数,则对于每个参数,按照添加顺序执行以下子步骤
将一个 U+003B 分号字符 (;) 追加到 line。
将参数的名称追加到 line。
将一个 U+003D 等号字符 (=) 追加到 line。
将参数的值追加到 line。
将一个 U+003A 冒号字符 (:) 追加到 line。
将 value 追加到 line。
令 最大长度 为 75。
当 line 的 代码点长度 大于 最大长度 时
将 line 的前 最大长度 个代码点追加到 output。
从 line 中移除前 最大长度 个代码点。
将一个 U+000D 回车字符 (CR) 追加到 output。
将一个 U+000A 换行字符 (LF) 追加到 output。
将一个 U+0020 空格字符追加到 output。
令 最大长度 为 74。
将(剩余的)line 追加到 output。
将一个 U+000D 回车字符 (CR) 追加到 output。
将一个 U+000A 换行字符 (LF) 追加到 output。
当上述步骤要求用户代理获取 subitem 中名为 subname 的 收集 vCard 子属性 的结果时,用户代理必须执行以下步骤
令value为空字符串。
对于项目 subitem 中每个名为 subname 的属性,执行以下子步骤
如果这不是 subitem 中第一个名为 subname 的属性(忽略先前步骤跳过的任何属性),则将一个 U+002C 逗号字符 (,) 追加到 value。
将属性的 值 所给出的 转义后的 vCard 文本字符串 追加到 value。
返回 value。
当上述步骤要求用户代理获取 subitem 中名为 subname 的 收集第一个 vCard 子属性 的结果时,用户代理必须执行以下步骤
如果 subitem 中不存在名为 subname 的属性,则返回空字符串。
返回 subitem 中第一个名为 subname 的属性的 值 所给出的 转义后的 vCard 文本字符串。
当上述算法说明用户代理需要 转义 vCard 文本字符串 value 时,用户代理必须使用以下步骤
在 value 中,每个 U+005C 反斜杠字符 (\) 前面都加上另一个 U+005C 反斜杠字符 (\)。
在 value 中,每个 U+002C 逗号字符 (,) 前面都加上一个 U+005C 反斜杠字符 (\)。
在 value 中,每个 U+003B 分号字符 (;) 前面都加上一个 U+005C 反斜杠字符 (\)。
在 value 中,将每个 U+000D 回车 U+000A 换行字符对 (CRLF) 替换为一个 U+005C 反斜杠字符 (\) 后跟一个 U+006E 拉丁小写字母 N 字符 (n)。
在 value 中,将所有剩余的 U+000D 回车 (CR) 或 U+000A 换行 (LF) 字符替换为一个 U+005C 反斜杠字符 (\) 后跟一个 U+006E 拉丁小写字母 N 字符 (n)。
返回已修改的 value。
如果输入不符合 http://microformats.org/profile/hcard
项目类型 和 定义的属性名称 的描述规则,则此算法可能会生成无效的 vCard 输出。
本节内容非规范性。
这是一个名为“Jack Bauer”的虚构人物的长示例 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”、值为“George Washington”,另一个名为“n”、值为第二个项目,第二个项目有两个名称-值对“given-name”和“family-name”,其值分别为“George”和“Washington”。这被定义为映射到以下 vCard
BEGIN:VCARD PROFILE:VCARD VERSION:4.0 SOURCE:document's address FN:George Washington N:Washington;George;;; END:VCARD
具有 项目类型 http://microformats.org/profile/hcalendar#vevent
的项目表示一个事件。
此词汇表 不支持项目的全局标识符。
以下是该类型定义的属性名称。它们基于互联网日历和日程安排核心对象规范 (iCalendar)中定义的词汇表,您可以在其中找到有关如何解释这些值的更多信息。[RFC5545]
这里只使用了与事件相关的 iCalendar 词汇表的部分内容;此词汇表无法表达完整的 iCalendar 实例。
attach
提供事件关联文档的地址。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在任意数量的名称为attach
的属性。
categories
提供事件可能分类的类别或标签的名称。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在任意数量的名称为categories
的属性。
class
提供有关事件的信息的访问分类。
该值必须是具有以下值之一的文本
public
private
confidential
这仅仅是建议性的,不能被视为保密措施。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在一个名称为class
的属性。
comment
提供有关事件的注释。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在任意数量的名称为comment
的属性。
description
提供事件的详细描述。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在一个名称为description
的属性。
geo
提供事件的地理位置。
该值必须是文本,并且必须匹配以下语法
带星号 (*) 标记的可选组件应包含,每个组件应包含六位数字。
该值按顺序指定纬度和经度(即“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
提供事件的确认状态。
该值必须是具有以下值之一的文本
tentative
confirmed
canceled
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在一个名称为status
的属性。
summary
提供事件的简短摘要。
该值必须是文本。
在使用该值时,用户代理应将值中的 U+000A LINE FEED (LF) 字符替换为 U+0020 SPACE 字符。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在一个名称为summary
的属性。
dtend
提供事件结束的日期和时间。
如果名称为dtend
的属性存在于类型为http://microformats.org/profile/hcalendar#vevent
的项目中,并且该项目具有名称为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
提供事件是否应被视为在日历上占用时间,以用于空闲/忙碌时间搜索。
该值必须是具有以下值之一的文本
opaque
transparent
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在一个名称为transp
的属性。
contact
提供事件的联系信息。
该值必须是文本。
在每个类型为http://microformats.org/profile/hcalendar#vevent
的项目中,可以存在任意数量的名称为contact
的属性。
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持续时间字符串
一个U+0050拉丁大写字母P字符(P)。
以下之一
一个有效的非负整数后跟一个U+0057拉丁大写字母W字符(W)。该整数表示该周数的持续时间。
至少一个,并且可能按此顺序同时出现以下内容
给定文档
中节点nodes的列表,用户代理必须运行以下算法以提取这些节点表示的任何vEvent数据
如果nodes中的任何节点都不是类型为http://microformats.org/profile/hcalendar#vevent
的项目,则不存在vEvent数据。中止算法,不返回任何内容。
令output为空字符串。
向output中添加一条iCalendar行,其类型为“BEGIN
”,值为“VCALENDAR
”。
向output中添加一条iCalendar行,其类型为“PRODID
”,值为表示用户代理的用户代理特定字符串。
向output中添加一条iCalendar行,其类型为“VERSION
”,值为“2.0
”。
对于nodes中每个类型为http://microformats.org/profile/hcalendar#vevent
的项目节点node,运行以下步骤
向output中添加一条iCalendar行,其类型为“BEGIN
”,值为“VEVENT
”。
向output中添加一条iCalendar行,其类型为“DTSTAMP
”,值为表示当前日期和时间的iCalendar DATE-TIME字符串,并带有注释“VALUE=DATE-TIME
”。 [RFC5545]
对于每个项目node的元素element:对于element的属性名称中的每个名称name,从以下列表中运行相应的子步骤集
跳过该属性。
dtend
dtstart
exdate
rdate
created
last-modified
令value为从属性的值中去除所有U+002D连字符(-)和U+003A冒号(:)字符的结果。
如果属性的值为有效的日期字符串,则向output中添加一条iCalendar行,其类型为name,值为value,并带有注释“VALUE=DATE
”。
否则,如果属性的值为有效的全局日期和时间字符串,则向output中添加一条iCalendar行,其类型为name,值为value,并带有注释“VALUE=DATE-TIME
”。
否则,跳过该属性。
向output中添加一条iCalendar行,其类型为name,值为属性的值。
向output中添加一条iCalendar行,其类型为“END
”,值为“VEVENT
”。
向output中添加一条iCalendar行,其类型为“END
”,值为“VCALENDAR
”。
当上述算法指出用户代理需要向字符串output中添加一条iCalendar行(包括类型type、值value以及可选的注释)时,它必须运行以下步骤
令 line 为一个空字符串。
将type(转换为ASCII大写)追加到line中。
如果有注释
将一个 U+003B 分号字符 (;) 追加到 line。
将注释追加到line中。
将一个 U+003A 冒号字符 (:) 追加到 line。
在 value 中,每个 U+005C 反斜杠字符 (\) 前面都加上另一个 U+005C 反斜杠字符 (\)。
在 value 中,每个 U+002C 逗号字符 (,) 前面都加上一个 U+005C 反斜杠字符 (\)。
在 value 中,每个 U+003B 分号字符 (;) 前面都加上一个 U+005C 反斜杠字符 (\)。
在 value 中,将每个 U+000D 回车 U+000A 换行字符对 (CRLF) 替换为一个 U+005C 反斜杠字符 (\) 后跟一个 U+006E 拉丁小写字母 N 字符 (n)。
在 value 中,将所有剩余的 U+000D 回车 (CR) 或 U+000A 换行 (LF) 字符替换为一个 U+005C 反斜杠字符 (\) 后跟一个 U+006E 拉丁小写字母 N 字符 (n)。
将 value 追加到 line。
令 最大长度 为 75。
当line的代码点长度大于最大长度时
将 line 的前 最大长度 个代码点追加到 output。
从 line 中移除前 最大长度 个代码点。
将一个 U+000D 回车字符 (CR) 追加到 output。
将一个 U+000A 换行字符 (LF) 追加到 output。
将一个 U+0020 空格字符追加到 output。
令 最大长度 为 74。
将(剩余的)line 追加到 output。
将一个 U+000D 回车字符 (CR) 追加到 output。
将一个 U+000A 换行字符 (LF) 追加到 output。
如果输入不符合http://microformats.org/profile/hcalendar#vevent
项目类型和已定义属性名称所描述的规则,则此算法可能会生成无效的iCalendar输出。
本节内容非规范性。
这是一个使用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 >
具有项目类型http://n.whatwg.org/work
的项目表示一个作品(例如,文章、图像、视频、歌曲等)。此类型主要用于允许作者包含作品的许可信息。
以下是该类型的已定义属性名称。
work
标识正在描述的作品。
每个类型为http://n.whatwg.org/work
的项目中,必须正好包含一个名为work
的属性。
title
给出作品的名称。
每个类型为http://n.whatwg.org/work
的项目中,最多只能包含一个名为title
的属性。
author
给出作品的作者或创建者之一的姓名或联系信息。
该值必须是类型为http://microformats.org/profile/hcard
的项目或文本。
每个类型为http://n.whatwg.org/work
的项目中,可以包含任意数量的名称为author
的属性。
license
标识作品可使用的许可证之一。
每个类型为http://n.whatwg.org/work
的项目中,可以包含任意数量的名称为license
的属性。
本节内容非规范性。
此示例显示了一个名为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 >
给定一个文档 Document
中的节点列表 nodes,用户代理必须运行以下算法,将这些节点的微数据提取成 JSON 格式。
令 result 为一个空对象。
令 items 为一个空数组。
对于 nodes 中的每个 node,检查该元素是否为顶级微数据项,如果是,则获取该元素的对象并将其添加到 items 中。
在 result 中添加一个名为 "items
" 的条目,其值为数组 items。
返回将 result 序列化为 JSON 的结果,以最短的方式(意味着标记之间没有空格,数字中没有不必要的零,并且仅在字符串中对没有专用转义序列的字符使用 Unicode 转义),并在适当情况下使用小写 "e
" 来表示任何数字。[JSON]
此算法返回一个具有单个属性(该属性为数组)的对象,而不是只返回一个数组,以便将来如有必要可以扩展该算法。
当用户代理需要获取某个项 item 的对象时,可以选择传入一个元素列表 memory,它必须运行以下子步骤。
令 result 为一个空对象。
如果未将 memory 传递给算法,则令 memory 为一个空列表。
将 item 添加到 memory 中。
如果 item 具有任何项类型,则在 result 中添加一个名为 "type
" 的条目,其值为一个数组,列出 item 的项类型,按照它们在 itemtype
属性上指定的顺序。
令 properties 为一个空对象。
对于每个具有一个或多个属性名称且为 item 的属性之一的元素 element,按照返回项的属性的算法给出的元素顺序,运行以下子步骤。
在 result 中添加一个名为 "properties
" 的条目,其值为对象 properties。
返回 result。
例如,假设有以下标记。
<!DOCTYPE HTML>
< html lang = "en" >
< title > My Blog</ title >
< article itemscope itemtype = "http://schema.org/BlogPosting" >
< header >
< h1 itemprop = "headline" > Progress report</ h1 >
< p >< time itemprop = "datePublished" datetime = "2013-08-29" > today</ time ></ p >
< link itemprop = "url" href = "?comments=0" >
</ header >
< p > All in all, he's doing well with his swim lessons. The biggest thing was he had trouble
putting his head in, but we got it down.</ p >
< section >
< h1 > Comments</ h1 >
< article itemprop = "comment" itemscope itemtype = "http://schema.org/UserComments" id = "c1" >
< link itemprop = "url" href = "#c1" >
< footer >
< p > Posted by: < span itemprop = "creator" itemscope itemtype = "http://schema.org/Person" >
< span itemprop = "name" > Greg</ span >
</ span ></ p >
< p >< time itemprop = "commentTime" datetime = "2013-08-29" > 15 minutes ago</ time ></ p >
</ footer >
< p > Ha!</ p >
</ article >
< article itemprop = "comment" itemscope itemtype = "http://schema.org/UserComments" id = "c2" >
< link itemprop = "url" href = "#c2" >
< footer >
< p > Posted by: < span itemprop = "creator" itemscope itemtype = "http://schema.org/Person" >
< span itemprop = "name" > Charlotte</ span >
</ span ></ p >
< p >< time itemprop = "commentTime" datetime = "2013-08-29" > 5 minutes ago</ time ></ p >
</ footer >
< p > When you say "we got it down"...</ p >
</ article >
</ section >
</ article >
根据上述算法,它将被转换为以下 JSON(假设页面的 URL 为 https://blog.example.com/progress-report
)。
{
"items" : [
{
"type" : [ "http://schema.org/BlogPosting" ],
"properties" : {
"headline" : [ "Progress report" ],
"datePublished" : [ "2013-08-29" ],
"url" : [ "https://blog.example.com/progress-report?comments=0" ],
"comment" : [
{
"type" : [ "http://schema.org/UserComments" ],
"properties" : {
"url" : [ "https://blog.example.com/progress-report#c1" ],
"creator" : [
{
"type" : [ "http://schema.org/Person" ],
"properties" : {
"name" : [ "Greg" ]
}
}
],
"commentTime" : [ "2013-08-29" ]
}
},
{
"type" : [ "http://schema.org/UserComments" ],
"properties" : {
"url" : [ "https://blog.example.com/progress-report#c2" ],
"creator" : [
{
"type" : [ "http://schema.org/Person" ],
"properties" : {
"name" : [ "Charlotte" ]
}
}
],
"commentTime" : [ "2013-08-29" ]
}
}
]
}
}
]
}