结合使用 Drupal、HTML5 和微数据

简介

2011 年 5 月,Google、Yahoo 和 Bing 三大引擎巨头联合推出了 schema.org,现在所有人都在谈论结构化数据。Schema.org 是搜索引擎理解网页的一种新途径。如果 Web 内容作者在他们的页面上添加了一点微数据,比如一些词汇表术语,他们的搜索结果会在以上三种搜索引擎中得到更好的显示。

额外的标记并没有改变已经实现 schema.org 的许多站点上显示搜索结果的方式。但 Web 内容作者仍然希望为他们的页面打上标记,并已准备好让三大搜索引擎巨头使用其内容。

对于没有试验过向 HTML 添加结构化数据的不同语法的 Web 作者,Schema.org 是一个挑战。这些语法包括:

  • 微格式
  • RDFa
  • 微数据

更具挑战性的是,Google (对众多 Web 作者最有影响力的搜索引擎)表明它将只处理微数据。作为上述三种语法中最新的一种语法,微数据尚未获得很多工具的支持。

本文将介绍如何使用 Drupal 向页面添加微数据。准备好您的内容,以便可以在应用程序(比如 Google 的 Rich Snippets)中使用它们。

下载 本文使用的源代码。

什么是微数据?

常用缩写词

  • FOAF:朋友的朋友
  • RDF:资源描述框架
  • RDFa:属性方面的 RDF

微数据是向页面添加结构化数据的一种简便方式。它定义了一些属性,比如 itemtype 和 itemprop,可将这些属性放在 HTML 标签上,以只是页面是关于哪方面内容的。微数据的概念由 HTML 5 规范的编辑 Ian Hickson 于 2009 年提出。但这个概念的来源要比这个时间早得多。

微数据是以 RDFa 为基础的,它是采用 HTML 形式放置 RDF 的一种方式。2004 年,Mark Birbeck 在一份 W3C 笔记中提到 RDFa。后来,这个概念被写入 XHTML 的下一版本中。RDFa 引入了几个新的 HTML 属性,比如 property 和 about,并重用了一些属性,比如 rel。

RDFa 功能很强大,但由于有时颇为复杂的属性交互,作者很难知道他们的 RDFa 是否正确。RDFa 还继承了 XML 的一些功能,比如很容易混淆的命名空间前缀。

微格式是 XHTML 中另一版本的结构化数据,它由一群草根开发人员在一年多后推出。与 RDFa 相比,微格式重用了 Web 内容作者已经习惯的现有 XHTML 属性,比如链接上的 rel 属性。微格式还在这些属性中添加了一点语义。人们只注重标记可见内容,很容易滥用不可见的内容,或者让不可见内容与可见内容失去同步。

微格式存在一个问题,即没有一种解析它们的通用方式。相反,必须为每种微格式添加支持。例如,如果想同时处理日历数据和地址数据,就必须保证解析器同时支持这两种格式,或者使用两种不同的解析器。通过社区进程发布新的微格式也很困难。

微数据结合了微格式与 RDFa 的优点。微数据具有以下特点:

  • 通过减少属性数量与属性排列选项,可以降低 RDFa 的复杂性。
  • 消除命名空间前缀。
  • 维持 RDFa 的通用解析,让工具处理已发布的数据时变得更容易。
  • 保留不同用户群创建自己的属性值集合(也称为词汇表)的能力,并将它用于微数据。

将 schema.org 词汇表与微数据相结合

Schema.org 是一个适用于微数据的词汇表。因为词汇表不需要经过任何组织的批准,搜索引擎所有者能够根据自身需要设计自己的词汇表。大多数词汇表处理的事情类似于 Google 在其 Rich Snippets 中侧重的重点:人物、地点、事件、娱乐和商业。

有几个很好的例子演示了如何在站点上放置 schema.org 术语。例如,清单 1 显示了使用 schema.org 术语增强过的一部电影的简单标记。

清单 1. 使用 schema.org 术语增强过的一部电影的简单标记

 


<div itemscope itemtype ="http://schema.org/Movie">
  <h1 itemprop="name">Avatar</h1>
  <span>Director: <span itemprop="director">James Cameron</span>
(born August 16, 1954)</span>
  <span itemprop="genre">Science fiction</span>
  <a href="../movies/avatar-theatrical-trailer.html"
itemprop="trailer">Trailer</a>
</div>

附加标记的作用可能无法立即看出来。为了获得直观印象,我们将使用这个代码段的页面发布到 Web 上。接下来,您可以在 Google 的 Rich Snippets 测试工具中输入该页面的 URL,如 图 1 中所示。如果无法方便地访问 Web 服务器,您还可以复制这个代码段,并将其粘贴到 Opera 开发人员 Philip Jägenstedt 提供的现场微数据测试工具中。

图 1. 从清单 1 中示例提取的 Schema.org 微数据

 

该工具提取出两方面的信息:电影及其导演。

微数据中的两个主要概念是内容项 和这些内容项的属性。可以将属性设置为字符串或另一个内容项。例如,电影是一个内容项。它有一个名称,这个名称就是一个具有字符串值的属性。它还有一名导演,这个属性有一个内容项值,即 Person。

为了让解析器了解您要开始谈论一个内容项,请使用 itemscope 属性。您还可以使用 itemtype 属性,让解析器知道您正在谈论的内容的类型。

使用 itemtype 确定在 itemprop 属性中可以使用哪些属性。例如,在 Movie itemtype 的页面上,您会看到可在电影上使用的属性的一个列表。如果您使用属性的完整 URL,还可以使用未在此列表中列出的其他属性。例如,FOAF 词汇表还可以指定一个 name 属性。通过使用 itemprop="http://xmlns.com/foaf/0.1/name",您可以用 FOAF name 属性代替 schema.org name 属性。

位于 Movie 的 <div> 中的所有属性均被理解为电影的属性,直到到达 div 的结尾或 Movie 中 div 上的一个 itemscope。itemscope 属性表示您现在谈论的是另一件事情(这个例子中是一个 Person),因此 birthplace 属性被理解为 Person,而非 Movie 的一个属性。

因为您给内容添加了一点结构,任意一种工具都能轻松提取出相关信息。通过在 HTML 中添加属性,可以让页面中的数据变得易于处理,几乎就像是在 Excel 电子数据表或数据库中处理数据一样。

尽管微数据非常简单,但手动放置和维护内容仍然很困难。一些工具支持生成微数据,这些工具包括 Drupal 的 Microdata 模块。

使用 Drupal 向页面添加微数据

Drupal 是一个内容管理系统,其 Web 占有率估计约为 2%。通过 Drupal 的用户界面,站点管理员可以创建表单,从用户那里收集内容。接着 Drupal 会在数据库中为表单数据自动创建正确的表与字段,并以一种可配置的方式来处理数据显示。

Drupal 特别适用于输出结构化数据,因为它处理内容的方式很特别,它将内容作为拥有字段值形式的属性的独立内容(称为实体)。在 Drupal 7 中,使用 RDFa 向 HTML 添加结构化数据的功能被整合到了 Drupal 核心中。

由于 schema.org 是在 2011 年 6 月 2 日宣布成立的,它向微数据输出也添加了同样的支持。微数据模块仍然在开发中,尚不能用在正在运行的站点上。要在测试站点上进行试验,您可以使用微数据模块为字段生成微数据,并基于这些微数据测试 Rich Snippet 显示。

让我们从使用 Drupal 重新创建上面的示例开始。下载并启用以下模块的最新版本:

本文示例代码或素材下载