微数据(Microdata)是超文本标记语言的一项特性,用于在网页文档中嵌入机器可读的信息。它将标注内容组织为项目(item),每个项目包含若干命名属性,其属性值可以是字符串或嵌套的其他项目。借助这些标注,软件能够在网页原有内容的基础上提取出结构化信息。微数据已纳入 HTML 现行标准(HTML Living Standard)规范中。(html.spec.whatwg.org)
语法与数据模型
微数据主要使用五个核心属性:
| 属性 | 功能 |
|---|---|
itemscope |
创建一个项目;这是一个布尔属性。 |
itemtype |
使用绝对 URL 指定项目的类型。 |
itemprop |
为元素赋予一个或多个属性名。 |
itemid |
为项目提供全局标识符。 |
itemref |
通过 HTML 的 id 属性引用其他元素,以提取其包含的属性。 |
itemid 与 itemref 之间的区别十分重要:前者用于标识实体本身,而后者则用于在文档内建立标记之间的关联。(w3.org)
根据现行标准,同一个项目上的多个类型必须属于同一词汇表。使用 itemid 时必须同时具备 itemscope 和 itemtype,且对应词汇表须支持全局标识符。如果一个元素同时包含 itemprop 和 itemscope,该元素所构成的项目就会成为外层包围项目的一个属性值。(html.spec.whatwg.org)
词汇表与示例
微数据仅提供标注语法,而不提供通用的词汇表。Schema.org 提供了用于描述人物、组织、产品、活动及创意作品等实体的类型与属性。这种设计将数据的表达机制与赋予数据语义的术语体系分离开来。(schema.org)
以下示例代码描述了一个虚构的人物及其所属组织:
<div itemscope itemtype="https://schema.org/Person">
<span itemprop="name">Alex Morgan</span>
<a itemprop="url" href="https://example.org/alex">
个人主页
</a>
<div itemprop="worksFor"
itemscope
itemtype="https://schema.org/Organization">
<span itemprop="name">示例天文台</span>
</div>
</div>
在该示例中,Person 和 Organization 是词汇表定义的类型;name、url 和 worksFor 是属性。该组织是一个嵌套项目,而不仅仅是容器内的文本内容。这种模式允许通过普通的 HTML 元素来表达实体之间的关系。(schema.org)
属性值提取规则
属性值的提取方式取决于其所在的元素类型。常见情况包括:
- 带有
itemscope的元素:其属性值为该嵌套项目。 meta:其content属性值。a、area或link:解析后的绝对href地址。img及部分其他媒体元素:解析后的绝对src地址。data或meter:其value属性值。time:若存在,则为datetime属性值。- 其他元素:其包含的文本内容。
因此,链接在页面中显示的锚文本并不是微数据提取出的 URL 属性值。(html.spec.whatwg.org)
应用与相关格式
微数据的一大主要应用是向搜索引擎传递网页信息。结构化描述有助于数据使用者识别菜谱配料或商品报价详情等信息,而无需仅将网页视为非结构化文本。Google 搜索在支持特定功能的前提下,支持使用微数据、JSON-LD 和 RDFa 实现结构化数据功能。Google 官方文档通常推荐使用 JSON-LD 以便实施和维护,但也同样接受实现规范的微数据。这仅属于消费端的使用偏好,并不影响微数据在 HTML 规范中的地位。(developers.google.com)
微数据和 RDFa 直接将标注附加到文档的 DOM 元素上;JSON-LD 则通常将结构化描述集中放置在独立的脚本块中。三者均可用于表达 Schema.org 描述,因此词汇表的选择本身并不限定具体的序列化格式。(schema.org)
局限性与验证
与基于资源描述框架的格式相比,微数据用于表达数据类型和语言信息的内置机制较为有限。因此,属性值的语义解析在很大程度上依赖于所使用的词汇表和数据消费端应用程序。(w3.org)
有效性包含多个不同层面:标记语法能被程序识别,并不代表其陈述内容准确无误、词汇术语使用恰当,也不意味着某项特定服务必然支持这些标记。Google 的结构化数据政策要求相关描述真实反映页面内容并符合相应功能指南。标记正确并不能保证一定会在搜索结果中获得富媒体呈现。Google 的“富媒体搜索结果测试”仅评估页面是否符合其支持功能的资格要求,并不能核实底层信息的真实性。(developers.google.com)
标准化历史
微数据诞生于 HTML5 标准化进程之中。万维网联盟(W3C)于 2013 年 10 月 29 日发布了独立的微数据备忘(Note),随后于 2017 年 5 月 4 日以首份公开工作草案重启该项工作,并于 2018 年 4 月 26 日发布了另一份工作草案。2021 年 1 月 28 日,W3C 废止了独立的微数据规范发布流程。此次废止仅针对该发布渠道;微数据目前依然包含在 WHATWG 的 HTML 现行标准规范中。(w3.org)
参考来源
- HTML Standardhtml.spec.whatwg.org
- HTML Microdataw3.org
- Getting Started - schema.orgschema.org
- Intro to How Structured Data Markup Worksdevelopers.google.com
- General Structured Data Guidelinesdevelopers.google.com
- HTML Microdata publication historyw3.org