介绍
开放图谱协议使任何网页都可以成为社交图谱中的丰富对象。例如,这在 Facebook 上使用,允许任何网页具有与 Facebook 上任何其他对象相同的功能。
虽然存在许多不同的技术和模式并且可以组合在一起,但没有一种技术可以提供足够的信息来丰富地表示社交图谱中的任何网页。开放图谱协议建立在这些现有技术的基础上,为开发人员提供了一件事来实现。开发人员的简单性是开放图谱协议的一个关键目标,它为许多技术设计决策提供了信息。
基本元数据
要将网页转换为图形对象,您需要向页面添加基本元数据。我们基于RDFa构建了该协议的初始版本, 这意味着您将在网页中放置额外的<meta>
标签。<head>
每个页面的四个必需属性是:
og:title
– 对象的标题应出现在图表中,例如“The Rock”。og:type
-对象的类型,例如“video.movie”。根据您指定的类型,可能还需要其他属性。og:image
– 图像 URL,应代表图表中的对象。og:url
– 对象的规范 URL,将用作图表中的永久 ID,例如“https://www.imdb.com/title/tt0117500/”。
作为示例,以下是IMDB 上 The Rock的 Open Graph 协议标记:
<html prefix="og: https://ogp.me/ns#"> <head> <title>The Rock (1996)</title> <meta property="og:title" content="The Rock" /> <meta property="og:type" content="video.movie" /> <meta property="og:url" content="https://www.imdb.com/title/tt0117500/" /> <meta property="og:image" content="https://ia.media-imdb.com/images/rock.jpg" /> ... </head> ... </html>
可选元数据
以下属性对于任何对象都是可选的,并且通常是推荐的:
og:audio
– 伴随该对象的音频文件的 URL。og:description
– 对你的物体的一到两句话的描述。og:determiner
– 句子中出现在该对象标题之前的单词。(a, an, the, “”, auto) 的枚举。如果auto
选择,数据的使用者应在“a”或“an”之间进行选择。默认值为“”(空白)。og:locale
– 这些标签标记的区域设置。格式为language_TERRITORY
。默认为en_US
.og:locale:alternate
-此页面可用于一系列其他区域设置。og:site_name
– 如果您的对象是较大网站的一部分,则应为整个网站显示名称。例如,“IMDb”。og:video
– 补充该对象的视频文件的 URL。
例如(换行符仅用于显示目的):
<meta property="og:audio" content="https://example.com/bond/theme.mp3" /> <meta property="og:description" content="Sean Connery found fame and fortune as the suave, sophisticated British agent, James Bond." /> <meta property="og:determiner" content="the" /> <meta property="og:locale" content="en_GB" /> <meta property="og:locale:alternate" content="fr_FR" /> <meta property="og:locale:alternate" content="es_ES" /> <meta property="og:site_name" content="IMDb" /> <meta property="og:video" content="https://example.com/bond/trailer.swf" />
RDF 模式(在Turtle中)可以在ogp.me/ns中找到。
结构化属性
某些属性可以附加额外的元数据。这些元数据的指定方式与使用property
和 的 其他元数据相同content
,但property
会有额外的:
。
该og:image
属性有一些可选的结构化属性:
og:image:url
– 相同og:image
。og:image:secure_url
– 如果网页需要 HTTPS,则使用备用 URL。og:image:type
-该图像的MIME 类型。og:image:width
– 宽度的像素数。og:image:height
– 像素数高。og:image:alt
– 对图像内容的描述(不是标题)。如果页面指定 og:image 它应该指定og:image:alt
。
完整图像示例:
<meta property="og:image" content="https://example.com/ogp.jpg" /> <meta property="og:image:secure_url" content="https://secure.example.com/ogp.jpg" /> <meta property="og:image:type" content="image/jpeg" /> <meta property="og:image:width" content="400" /> <meta property="og:image:height" content="300" /> <meta property="og:image:alt" content="A shiny red apple with a bite taken out" />
该og:video
标签具有与 相同的标签og:image
。这是一个例子:
<meta property="og:video" content="https://example.com/movie.swf" /> <meta property="og:video:secure_url" content="https://secure.example.com/movie.swf" /> <meta property="og:video:type" content="application/x-shockwave-flash" /> <meta property="og:video:width" content="400" /> <meta property="og:video:height" content="300" />
该og:audio
标签仅具有前 3 个可用属性(因为大小对声音没有意义):
<meta property="og:audio" content="https://example.com/sound.mp3" /> <meta property="og:audio:secure_url" content="https://secure.example.com/sound.mp3" /> <meta property="og:audio:type" content="audio/mpeg" />
数组
<meta>
如果一个标签可以有多个值,只需在页面上放置同一标签的多个版本即可 。在冲突期间优先考虑第一个标签(从上到下)。
<meta property="og:image" content="https://example.com/rock.jpg" /> <meta property="og:image" content="https://example.com/rock2.jpg" />
在声明其根标记后放置结构化属性。每当解析另一个根元素时,该结构化属性就被视为已完成,并开始另一个根元素。
例如:
<meta property="og:image" content="https://example.com/rock.jpg" /> <meta property="og:image:width" content="300" /> <meta property="og:image:height" content="300" /> <meta property="og:image" content="https://example.com/rock2.jpg" /> <meta property="og:image" content="https://example.com/rock3.jpg" /> <meta property="og:image:height" content="1000" />
表示该页面有 3 张图片,第一张图片为300x300
,中间一张尺寸未指定,最后一张图片1000
高度为 px。
对象类型
为了在图表中表示您的对象,您需要指定其类型。这是使用以下og:type
属性完成的:
<meta property="og:type" content="website" />
当社区就某种类型的架构达成一致时,它就会被添加到全局类型列表中。类型系统中的所有其他对象都是 以下形式的CURIE
<head prefix="my_namespace: https://example.com/ns#"> <meta property="og:type" content="my_namespace:my_type" />
全局类型按垂直方向分组。每个垂直领域都有自己的命名空间。命名空间的值og:type
始终以命名空间为前缀,然后是句点。这是为了减少与用户定义的命名空间类型的混淆,这些类型中始终包含冒号。
音乐
- 命名空间 URI:
https://ogp.me/ns/music#
og:type
价值观:
music.song
music:duration
–整数>=1 – 歌曲的长度(以秒为单位)。music:album
– music.album array – 这首歌来自的专辑。music:album:disc
–整数>=1 – 这首歌位于专辑的哪一张光盘上。music:album:track
–整数>=1 – 这首歌是哪首歌曲。music:musician
–个人资料 数组– 制作这首歌的音乐家。
music.album
music:song
– music.song – 这张专辑中的歌曲。music:song:disc
–整数>=1 – 与此相同music:album:disc
但相反。music:song:track
–整数>=1 – 与此相同music:album:track
但相反。music:musician
–个人资料– 创作这首歌的音乐家。music:release_date
–日期时间– 专辑发行的日期。
music.playlist
music:song
– 与music.album上的相同music:song:disc
music:song:track
music:creator
–个人资料– 此播放列表的创建者。
music.radio_station
music:creator
–个人资料– 该站的创建者。
视频
- 命名空间 URI:
https://ogp.me/ns/video#
og:type
价值观:
video.movie
video:actor
–个人资料 数组– 电影中的演员。video:actor:role
–字符串– 他们扮演的角色。video:director
–个人资料 数组– 电影导演。video:writer
–个人资料 数组– 电影的编剧。video:duration
–整数>=1 – 电影的长度(以秒为单位)。video:release_date
–日期时间– 电影发行的日期。video:tag
–字符串 数组– 与该电影相关的标签词。
video.episode
video:actor
– 与视频.电影相同video:actor:role
video:director
video:writer
video:duration
video:release_date
video:tag
video:series
– video.tv_show – 此集属于哪个系列。
video.tv_show
多集电视节目。元数据与video.movie相同。
video.other
不属于任何其他类别的视频。元数据与video.movie相同。
无垂直
这些是全局定义的对象,只是不适合垂直方向,但已被广泛使用和商定。
og:type
价值观:
article
– 命名空间 URI:https://ogp.me/ns/article#
article:published_time
–日期时间– 文章首次发布的时间。article:modified_time
–日期时间– 文章最后一次更改的时间。article:expiration_time
–日期时间– 当文章过期之后。article:author
–个人资料 数组– 文章的作者。article:section
–字符串– 高级部分名称。例如技术article:tag
–字符串 数组– 与本文相关的标签词。
book
– 命名空间 URI:https://ogp.me/ns/book#
book:author
–个人资料 数组– 谁写了这本书。book:isbn
–字符串– ISBNbook:release_date
–日期时间– 书籍发行的日期。book:tag
–字符串 数组– 与本书相关的标签词。
profile
– 命名空间 URI:https://ogp.me/ns/profile#
profile:first_name
–字符串– 通常由父母给个人起的名字或自己选择的名字。profile:last_name
–字符串– 从家庭或婚姻继承的名字,个人众所周知。profile:username
–字符串– 用于标识它们的简短的唯一字符串。profile:gender
–枚举(男性,女性) – 他们的性别。
website
– 命名空间 URI:https://ogp.me/ns/website#
除了基本属性外,没有其他属性。任何未标记的网页均应被视为og:type
网站。
类型
在 Open Graph 协议中定义属性时使用以下类型。
布尔值 | 布尔值表示 true 或 false 值 | 真、假、1、0 |
约会时间 | DateTime 表示由日期(年、月、日)和可选时间部分(小时、分钟)组成的时间值 | ISO 8601 |
枚举 | 由一组有界常量字符串值(枚举成员)组成的类型。 | 作为枚举成员的字符串值 |
漂浮 | 64 位有符号浮点数 | 所有符合以下格式的文字:
1.234 |
整数 | 32 位有符号整数。在许多语言中,超过 32 位的整数会变成浮点数,因此我们限制 Open Graph 协议以方便多语言使用。 | 所有符合以下格式的文字:
1234 |
细绳 | Unicode 字符序列 | 所有由 Unicode 字符组成且不含转义字符的文字 |
网址 | 标识 Internet 资源的 Unicode 字符序列。 | 使用 https:// 或 https:// 协议的所有有效 URL |
讨论与支持
您可以在Facebook 群组或 开发人员邮件列表中讨论开放图谱协议 。它目前被 Facebook(请参阅他们的文档)、Google(请参阅他们的文档)和 mixi使用。它由 IMDb、Microsoft、NHL、Posterous、Rotten Tomatoes、TIME、Yelp 以及许多其他网站出版。
实施
开源社区开发了许多解析器和发布工具。如果您也构建了一些很棒的东西,请让 Facebook 群组知道!
- Facebook Object Debugger – Facebook 的官方解析器和调试器
- Google Rich Snippets 测试工具– 特定垂直行业和搜索引擎中的开放图协议支持。
- PHP 验证器和标记生成器– PHP5 对象中的 OGP 2011 输入验证器和标记生成器
- PHP Consumer – 用于在 PHP 中访问开放图谱协议数据的小型库
- PHP 中的 OpenGraphNode – PHP 的简单解析器
- PyOpenGraph – 用 Python 编写的库,用于解析来自网站的 Open Graph 协议信息
- OpenGraph Ruby – Ruby Gem,可解析网页并提取 Open Graph 协议标记
- OpenGraph for Java – 用于表示 Open Graph 协议的小型 Java 类
- RDF::RDFa::Parser – Perl RDFa 解析器,它理解 Open Graph 协议
- WordPress 插件– Facebook 的官方 WordPress 插件,它将 Open Graph 元数据添加到 WordPress 支持的网站。
- 备用 WordPress OGP 插件– 一个简单的轻量级 WordPress 插件,可将 Open Graph 元数据添加到 WordPress 支持的网站。