一文读懂HTML微数据
本文为HTML标准解读系列文章,其他文章详见这里。
关于微数据,我们可以先从一个简单的HTML片段入手:
<h1>对象</h1>
不同的人看到“对象”有可能会理解成不同的意思:普通人会理解为自己的恋人,程序员为理解为一个编程概念,象棋爱好者会想到棋谱中的两颗棋子。不过,只要有上下文,我们就能消除歧义:
<h1>对象</h1>
<p>姓名:如花</p>
<p>身高:155cm</p>
<p>体重:130kg</p>
然而,即便配合上下文,对于机器(如搜索引擎)来说,依旧没有足够的智能推断出这里的对象究竟指的是哪一种意思。这时,就是「微数据」派上用场的地方:
<div itemscope itemtype="https://schema.org/Person"><h1>对象</h1><p>姓名:<span itemprop="name">如花</span></p><p>身高:<span itemprop="height">155 cm</span></p><p>体重:<span itemprop="weight">130 kg</span></p>
</div>
在这里:itemscope
表示这是一个微数据的项,itemtype
表示这个项的类型,itemprop
表示这个项的属性。对于这个HTML片段,搜索引擎可以提取出以下的数据:
{"@type": "Person","name": "如花","height": "155 cm","weight": "130 kg",
}
这种被提取出来的数据也称为「结构化数据 structured data」。 有了这些数据,搜索引擎就能准确理解页面的内容,并给页面建立更加精细的分类。以后,别人搜“恐龙”或者“坦克”的时候,你的对象如花就可能就会出现在搜索结果里头了。
当然,这只是一个玩笑。不过,利用结构化数据除了能提高搜索结果的准确率,还能让搜索的结果以更加有意义的方式呈现。比如,当我在谷歌搜“可乐鸡翅”时,会有这样的结果:
这里每一份食谱的封面、标题、数据都是谷歌通过提取页面内的结构化数据再作呈现的。对于使用者来说,我不仅能够提前看到每一份食谱的评分、视频时长等数据,我甚至还能基于这些维度对食谱进行过滤。
除了食谱以外,基于结构化数据的其他类型的特殊呈现,你可以在这个谷歌开发文档中看到。
微数据的使用
在微数据模型中,一个页面的结构化数据是由多个「项」组成的;每一个项含有的信息可能包括:项类型、全局标识符以及多个属性。 (微数据中的“属性”与HTML的“属性”是两个不同的概念,为了在本文进行区分,HTML的“属性”都会使用「HTML属性」命名,微数据的“属性”会继续使用「属性」)
与微数据相关的所有HTML属性如下所示,它们属于全局HTML属性,是所有元素都共享的:
itemscope
:创建一个新的项。itemtype
:定义项类型。itemprop
:添加一个属性到项中。itemid
:声明项的全局标识符。itemref
:关联不在项元素子代的属性。
一个属性的值即可以是一个字符串,也可以是一个新的项。如以下这个例子,“净资产”一栏就是嵌套的项。
<div itemscope itemtype="https://schema.org/Person"><h1>对象</h1><p>姓名:<span itemprop="name">如花</span></p><p>身高:<span itemprop="height">155 cm</span></p><p>体重:<span itemprop="weight">130 kg</span></p><p>净资产:<span itemprop="netWorth" itemscope itemtype="https://schema.org/MonetaryAmount"><span itemprop="value">30,000,000</span> <span itemprop="currency">USD</span></p>
</div>
itemtype与词汇表
在开篇的例子中我们可以看出,结构化数据是给机器而不是人类阅读的。因此,我们必须使用机器能够理解的“词汇”。一些社区会制定各种各样的「词汇表(vocabularies)」,规范在结构化数据中描述不同事物的不同方面的用词,这些词汇表就是开发者与搜索引擎对于描述事物用词的协议。 一张词汇表通常会带有以下信息:
- 词汇表所描述内容的范围。比如有的词汇表是用来描述人的,有的词汇表用来描述一个事件的。
- 词汇表的权威URL,这个URL会用在
itemtype
上,表明一个项所使用的词汇表。 - 词汇表的属性列表,包括每一个属性的命名、预期类型、具体含义,这些属性会用在
itemprop
上; - 词汇表的全局标识符,只有特定的词汇表才支持全局标识符,对应
itemid
,具体会在后面讲到。
以一张上面例子中用到的词汇表Person为例,下面截取了这张词汇表中我们使用到的部分:
Person:
描述:一个人(活的、死的、不死的、虚构的)。
权威URL:https://schema.org/Person。
属性(Property) 预期类型(Expected Type) 描述(Description)(简化版本) name 文本 表示该项的名字。 weight 可量化的值 表示该项的重量。 height 距离/可量化的值 表示该项的高度。 netWorth 金钱数量/价格的值 一个人的资产减去负债。 … … …
在预期类型中,可量化的值、距离、金钱数量、价格的值,都是进一步细分的词汇表。出于简洁的原因,我在上面例子中的身高、体重属性并没有使用嵌套的项。
比较有名的词汇表集合是Schema.org,它是由各大知名的搜索引擎共同开发并实际应用的。我在上面的例子中,就是使用了两张里面的词汇表:Person以及金钱数量。
当你使用Schema.org的词汇表,你可以通过它提供语法检查工具,查看你页面中的微数据语法是否合法,以及提取出来的结构化数据。
itemprop与属性值的提取规则
一般来说,微数据属性会提取元素后代的文本内容作为它的值,比如下面这个name属性,值为“如花”。
<p>姓名:<span itemprop="name">如花</span></p>
但是对于一些特殊的元素,值的提取会使用其他的规则,比如下面例子的image属性,会提取HTML属性src
作为它的值;而url属性,会提取HTML属性href
作为它的值。
<p><img itemprop="image" src="https://XXX.com/profile" alt="正面照">
<p><a itemprop="url" href="https://XXX.com/page">个人主页</a>
所有的特殊情况如下所示:
- 如果元素有HTML属性
itemscope
,会创建一个新的项。 - 对于
meta
元素,会使用HTML属性content
作为值。 - 对于
audio
、embed
、iframe
、img
、source
、track
、video
元素,会使用HTML属性src
作为值。 - 对于
a
、area
、link
元素,会使用HTML属性href
作为值。。 - 对于
object
元素,会使用HTML属性data
作为值。 - 对于
data
、meta
元素,会使用HTML属性value
作为值。 - 对于
time
元素,会使用它的datatime
作为值。
更多的细节可以查看标准关于微数据值的处理模型。
itemid与全局标识符
在这个世界上,有一些事物是有自己独一无二的标识的。比如每一本正规出版的书籍,都会有自己对应的isbn号码,无论在任何场景下,使用这个isbn号码就能毫无偏差地指代这一本书。所以,可以说isbn号码就是一本书的“全局标识符”
如果一张词汇表描述的事物也具有类似这样“全局标识符”的特点,那这张词汇表也许就支持全局标识符(具体取决于词汇表的定义)。在微数据中,全局标识符使用HTML属性itemid
表示。比如以下的例子中,使用itemid
表明这个项在谈论一本特定的书:
<dl itemscopeitemtype="https://vocab.example.net/book"itemid="urn:isbn:9789574706396"><dt>标题<dd itemprop="title">會撒嬌的女人最好命<dt>作者<dd itemprop="author">羅夫曼
</dl>
需要注意的,带有HTML属性itemid
的元素必须同时带有HTML属性itemtype
与itemscope
,且不应该在不支持全局标识符的词汇表中使用itemid
。
itemref
itemref
用于关联那些不在项元素子代的属性,itemref
会爬取页面内对应id
的元素,把这些元素内的微数据属性添加到项中。如以下例子,a属性会被添加到项中。
<div id="x"><p itemprop="a">1</p>
</div>
<div itemscope itemref="x"><p itemprop="b">2</p>
</div>
itemref
常用在不方便把属性放在项元素子代的情况。
结构化数据的其他格式
微数据只是搜索引擎可用于提取页面中结构化数据的其中一种格式,其他常用的格式还包括:
JSON-LD:使用一个json直接表示页面中的结构化数据,在一个
type="application/ld+json"
的script标签中声明。如:<script type="application/ld+json">{"@context": "https://schema.org","@type": "Person","identifier": "对象","height": "155 cm","weight": "130 kg" }</script>
RDFa:使用XML相关属性表示页面中的结构化数据。如:
<div vocab="https://schema.org/" typeof="Person"><h1 property="identifier">对象</h1><p>身高:<span property="height">155 cm</span></p><p>体重:<span property="weight">130 kg</span></p> </div>
Microformat:使用HTML属性
class
表示页面中的结构化数据。
根据谷歌的开发文档,谷歌搜索支持JSON-LD、微数据 以及 RDFa 这3种格式,但推荐开发者使用JSON-LD,大概是因为JSON-LD是最简洁的。幸运的是,这三种格式所使用的词汇表大多都是共享的,比如每一张Schema.org的词汇表都可以同时编码成这三种格式,且每张词汇表的下面都给我们列举了同一结构化数据下这3种格式的例子。
一文读懂HTML微数据相关推荐
- 一文读懂:本地数据湖丨数据仓库丨云数据湖的利与弊
数据湖指的是一个中心位置,大量数据以原始的.非结构化的格式存储,其中包含有关数据和惟一标识符的信息.它们存储的数据可以稍后进行处理,以提取有价值的业务见解并推动业务向前发展. 这种类型的灵活组织允许存 ...
- 一文读懂数据仓库、数据湖、湖仓一体
目录 1.数据仓库 数据仓库的特征 2.数据湖 数据湖的特征 数据仓库和数据湖的对比 3.湖仓一体 湖仓一体的特征 湖仓一体的优势 智能湖仓 数据仓库.数据湖.湖仓一体对比 1.数据仓库 数据仓库,英 ...
- 一文读懂机器学习、数据科学、人工智能、深度学习和统计学之间的区别!
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者:Vincent Granville 来源:机器之心公众号 链接:http://www.d ...
- 从1维到6维,一文读懂多维数据可视化策略
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 选自towardsdatascience 作者:Dipanjan Sarkar 参与:Jane W.乾树.黄小天 数 ...
- 一文读懂十大数据存储加密技术
数据作为新的生产要素,其蕴含的价值日益凸显,而安全问题却愈发突出.密码技术,是实现数据安全最经济.最有效.最可靠的手段,对数据进行加密,并结合有效的密钥保护手段,可在开放环境中实现对数据的强访问控制, ...
- 一文读懂云原生数据湖体系
凌云时刻 · 极鲜速递 导读:如何基于阿里云 OSS .JindoFS 和数据湖构建(Data Lake Formation,DLF)等基础服务,同时结合阿里云上丰富的计算引擎,打造一个全新云原生数据 ...
- 什么是前端宏任务,什么又是前端微任务呢?一文读懂前端微任务宏任务。
在前端中,宏任务和微任务是异步任务的两种不同类型. 前端有很多中异步任务类型. 可以分为三类: 宏任务 定时器任务 用户交互事件任务(鼠标事件.键盘事件) 网络请求任务 I/O操作任务(读写文件) 微 ...
- 的数据湖_一文读懂云原生数据湖体系
导读:如何基于阿里云 OSS .JindoFS 和数据湖构建(Data Lake Formation,DLF)等基础服务,同时结合阿里云上丰富的计算引擎,打造一个全新云原生数据湖体系? 作者 | 吴威 ...
- 一文读懂机器学习、数据科学、人工智能、深度学习和统计学之间的区别
在这篇文章中,数据科学家与分析师 Vincent Granville 明晰了数据科学家所具有的不同角色,以及数据科学与机器学习.深度学习.人工智能.统计学.物联网.运筹学和应用数学等相关领域的比较和重 ...
最新文章
- activiti实现跳转节点的方法
- c语言超长编程程序,全国青少年软件编程等级考试C语言经典程序题10道五
- linux编译c gedit,[2018年最新整理]LINUX-Gedit文本编辑器.ppt
- SSH软件包:Sftp,scp和ssh-agent
- cnn 验证集 参与训练吗_一个简单的零基础的机器学习教程之二,字母数字验证码识别...
- JDBC连接sql server数据库
- magento模板中XML与phtml关系
- Python获取指定文件夹下的文件名
- 3月11日Linux课程笔记
- Android抓包方法(一) 之Fiddler代理
- 【渝粤教育】电大中专学前儿童健康教育 (7)作业 题库
- poj 匈牙利二分匹配 1274 The Perfect Stall
- python基础运用_python基础----python的使用(三)
- Java解析富文本rtf中文乱码
- 乘法和绝对值的C语言,关于C语言的函数调用与绝对值用法!
- 学术研讨会---Micheal Stonebraker的主题演讲【读后感】
- 微信JSSDK invalid signature签名错误的解决方法
- 复旦大学计算机考研资料汇总
- oracle让电脑变卡以及解决方法
- 高中python教程_杭师大顶级初高中Python课程师训,酷哥优秀教师授课获赞!
热门文章
- Android开发中用到的第三方框架汇总
- 消费者权益新挑战,“大数据杀熟”的商业逻辑是“用户画像”?
- SAP中源清单自动无法生成的原因
- 计算机二级ppt常考知识,计算机二级考试Office Excel与PPT常考考点
- 坑人的小米净水器: 漏水, 废水堵塞, 费用陷阱
- ug电脑配置推荐ug电脑需要什么配置ug电脑配置清单
- 灰色预测GM(1,n)模型_python
- 实现一个家庭安防与环境监测系统(一)
- python基础模型_零基础python代码策略模型实战
- Suggestion: use a compatible library with a minSdk of at most 15, or increase this project's minSdk