开放图谱协议
在开放图谱协议允许任何网页成为社交图的丰富的对象。例如,它在 Facebook 上用于允许任何网页具有与 Facebook 上任何其他对象相同的功能
本页目录7 节

在开放图谱协议允许任何网页成为社交图的丰富的对象。例如,它在 Facebook 上用于允许任何网页具有与 Facebook 上任何其他对象相同的功能。
- 原文来源:详情

尽管存在许多不同的技术和模式并且可以将它们组合在一起,但是没有一种技术可以提供足够的信息来丰富地表示社交图中的任何网页。Open Graph 协议建立在这些现有技术的基础上,为开发人员提供了一件事。开发人员的简便性是 Open Graph 协议的主要目标,该协议已为许多技术设计决策提供了依据。
基本元数据
要将网页变成图形对象,您需要向页面添加基本元数据。我们已将协议的初始版本基于 RDFa,这意味着您将<meta>在<head>网页的中放置其他标签。每个页面的四个必需属性是:
og:title- 对象的标题,因为它应该出现在图形中,例如“ The Rock”。og:type- 对象的类型,例如“ video.movie”。根据您指定的类型,可能还需要其他属性。og:image- 图片网址,应代表图表中的对象。og:url- 将在图形中用作其永久 ID 的对象的规范 URL,例如“ http://www.imdb.com/title/tt0117500/”。
例如,以下是 The Rock on IMDB 的 Open Graph 协议标记:
<html prefix="og: http://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="http://www.imdb.com/title/tt0117500/" /><meta property="og:image" content="http://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="http://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="http://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,则使用备用网址。og:image:type- 此图像的 MIME 类型。og:image:width- 宽像素数。og:image:height- 高像素数。og:image:alt- 图片中内容的说明(非标题)。如果页面指定 og:image,则应指定og:image:alt。
完整图片示例:
<meta property="og:image" content="http://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="http://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="http://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="http://example.com/rock.jpg" /><meta property="og:image" content="http://example.com/rock2.jpg" />在声明其根标记后放置结构化属性。每当解析另一个根元素时,就认为该结构化属性已完成并启动了另一个。
例如:
<meta property="og:image" content="http://example.com/rock.jpg" /><meta property="og:image:width" content="300" /><meta property="og:image:height" content="300" /><meta property="og:image" content="http://example.com/rock2.jpg" /><meta property="og:image" content="http://example.com/rock3.jpg" /><meta property="og:image:height" content="1000" />表示此页面上有 3 张图片,第一张图片为300x300,中间一张图片的尺寸未指定,最后一张为 1000px 高。
对象类型
为了在图形中表示对象,您需要指定其类型。使用og:type属性完成此操作:
<meta property="og:type" content="website" />当社区同意某种类型的模式时,会将其添加到全局类型列表中。类型系统中的所有其他对象均为 以下形式的 CURIE:
<head prefix="my_namespace: http://example.com/ns#"><meta property="og:type" content="my_namespace:my_type" />全局类型分组为垂直。每个行业都有自己的名称空间。og:type命名空间的值始终以该命名空间为前缀,然后带有句点。这是为了减少与用户定义的命名空间类型(总是包含冒号)之间的混淆。
音乐
- 命名空间 URI:
http://ogp.me/ns/music#
og:type 值:
music:duration- 整数 > = 1- 歌曲的长度(以秒为单位)。music:album- music.album 阵列 - 专辑这首歌曲是从。music:album:disc- 整数 > = 1- 这首歌在专辑的哪张光盘上。music:album:track- 整数 > = 1- 这首歌是哪首歌。music:musician- 个人资料 数组 - 制作这首歌的音乐家。
music:song- music.song - 在这张专辑中的歌曲。music:song:disc- 整数 > = 1- 与之相同,music:album:disc但取反。music:song:track- 整数 > = 1- 与之相同,music:album:track但取反。music:musician- 个人资料 - 制作这首歌的音乐家。music:release_date- 日期时间 - 日期专辑发行。
music:song- 与 music.album 上的相同music:song:discmusic:song:trackmusic:creator- 个人资料 - 此播放列表的创建者。
music:creator- 个人资料 - 该电台的创建者。
视频
- 命名空间 URI:
http://ogp.me/ns/video#
og:type 值:
video:actor- 个人资料 数组 - 电影中的演员。video:actor:role- 字符串 - 他们扮演的角色。video:director- 个人资料 数组 - 电影导演。video:writer- 配置文件 数组 - 电影的作家。video:duration- 整数 > = 1- 电影的长度,以秒为单位。video:release_date- 日期时间 - 日期电影被释放。video:tag- 字符串 数组 - 与此电影关联的标记词。
video:actor- 与 video.movie 相同video:actor:rolevideo:directorvideo:writervideo:durationvideo:release_datevideo:tagvideo:series- video.tv_show - 哪些系列这一事件属于。
多集电视节目。元数据与 video.movie 相同。
不属于任何其他类别的视频。元数据与 video.movie 相同。
没有垂直
这些是全局定义的对象,它们不适合垂直使用,但却得到了广泛使用和认可。
og:type 值:
article - 命名空间 URI: http://ogp.me/ns/article#
article:published_time- 日期时间 - 当文章首次发表。article:modified_time- 日期时间 - 当文章最后改变。article:expiration_time- 日期时间 - 当文章后过时。article:author- 个人资料 数组 - 文章作者。article:section- 字符串 - 高级部分名称。例如技术article:tag- 字符串 数组 - 与本文相关的标记词。
book - 命名空间 URI: http://ogp.me/ns/book#
book:author- 个人资料 数组 - 谁撰写了这本书。book:isbn- 字符串 - 的 ISBNbook:release_date- 日期时间 - 日期书被释放。book:tag- 字符串 数组 - 与这本书相关的标记词。
profile - 命名空间 URI: http://ogp.me/ns/profile#
profile:first_name- 字符串 - 通常由父母或自己选择的名称。profile:last_name- 字符串 - 从家庭或婚姻继承而来的个人惯用的名字。profile:username- 字符串 - 标识它们的短而唯一的字符串。profile:gender- 枚举(男,女)- 他们的性别。
website - 命名空间 URI: http://ogp.me/ns/website#
除了基本属性外,没有其他属性。任何未标记的网页均应视为og:type网站。
种类
在“开放图谱”协议中定义属性时,使用以下类型。
| 类型 | 描述 | 文字 |
|---|---|---|
| 布尔型 | 布尔值表示正确或错误的值 | 正确,错误,1、0 |
| 约会时间 | DateTime 表示由日期(年,月,日)和可选的时间部分(小时,分钟)组成的时间值 | ISO 8601 |
| 枚举 | 由常量字符串值(枚举成员)的有界集合组成的类型。 | 作为枚举成员的字符串值 |
| 浮动 | 一个 64 位带符号浮点数 | 符合以下格式的所有文字: 1.234 -1.234 1.2e3 -1.2e3 7E-10 |
| 整数 | 一个 32 位有符号整数。在许多语言中,超过 32 位的整数会变成浮点数,因此我们限制了 Open Graph 协议,以便于使用多种语言。 | 符合以下格式的所有文字: 1234 -123 |
| 串 | Unicode 字符序列 | 所有文字由 Unicode 字符组成,没有转义字符 |
| 网址 | 标识 Internet 资源的 Unicode 字符序列。 | 所有使用 http:// 或 https:// 协议的有效 URL |
讨论与支持
您可以在 Facebook 组或 开发人员邮件列表中讨论开放图谱协议 。目前,它正在被 Facebook(请参阅其文档),Google(请参阅其文档)和 mixi 使用。它正在由 IMDb,Microsoft,NHL,Posterous,烂番茄,TIME,Yelp 等许多公司出版。
实作
开源社区已经开发了许多解析器和发布工具。让 Facebook 小组知道您是否也建立了一些很棒的东西!
- Facebook 对象调试器 -Facebook 的官方解析器和调试器
- Google Rich Snippets 测试工具 - 在特定行业和搜索引擎中支持开放图谱协议。
- PHP 验证器和标记生成器 -PHP5 对象中的 OGP 2011 输入验证器和标记生成器
- PHP Consumer- 一个小型库,用于访问 PHP 中的开放图谱协议数据
- PHP 中的 OpenGraphNode-PHP 的简单解析器
- PyOpenGraph- 用 Python 编写的库,用于从网站解析 Open Graph 协议信息
- OpenGraph Ruby- 解析网页并提取 Open Graph 协议标记的 Ruby Gem
- OpenGraph for Java- 用于表示 Open Graph 协议的小型 Java 类
- RDF :: RDFa :: Parser- 了解 Open Graph 协议的 Perl RDFa 解析器
- WordPress 插件 -Facebook 的官方 WordPress 插件,它将 Open Graph 元数据添加到 WordPress 支持的站点。
- 备用 WordPress OGP 插件 - 一个简单的轻量级 WordPress 插件,可向 WordPress 支持的站点添加 Open Graph 元数据。
Open Graph 协议最初是在 Facebook 上创建的,并受 Dublin Core,链接相关规范,Microformats 和 RDFa 的启发。本页描述的规范可在 Open Web Foundation Agreement 版本 0.9 下获得。这个网站是开源的。