Open Graph命名空间声明:HTML与XMLNS或head前缀?

135

关于如何最好地实现Open Graph命名空间,我看到了一些互相冲突的信息。具体来说,Open Graph网站使用了几种不同的方法,而Facebook Open Graph示例则使用了其他方法。

Open Graph网站示例(使用HTML前缀属性):

<html prefix="og: http://ogp.me/ns#">

使用 HTML XMLNS 属性的 Open Graph 网站源代码:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#">

Facebook Open Graph 文档(使用 HEAD 前缀属性):

<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">

Facebook开放图谱文档#2(使用HTML XMLNS属性):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" 
      xmlns:fb="https://www.facebook.com/2008/fbml">

有什么推荐的方法吗,或者这甚至不重要吗?


9
我在 Facebook 内部跟进,为了给你一个准确的答案。 - Simon Cross
9
@SimonCross,数年之后(2017年11月),我们仍在等待答案... ;) - Helmut Granda
我曾在stackoverflow发表过一个问题,请帮帮我https://stackoverflow.com/questions/68966701/i-was-too-confusing-about-opengraph-dc-dcterms-namespace-and-its-correct-usag - HEMANTH ABHIRAM SOMARAJU
https://stackoverflow.com/questions/68966701/i-was-too-confusing-about-opengraph-dc-dcterms-namespace-and-its-correct-usag - HEMANTH ABHIRAM SOMARAJU
5个回答

76

它们都是等效的,并且都可以使用。

使用前缀,因为这是新的推荐方式,而且字符更少。

我将更新所有文档以使用前缀。


4
你能解释一下为什么要使用这个吗?如果我不写这个声明会有什么问题吗? - andrewrk
3
现在不会有任何问题,但当你可以明确表达时,依靠默认设置通常不是一个好主意。如果两年后我们更改了默认设置,你的网站将会崩溃。而且,如果你直接声明命名空间,这将有助于其他解析器,而不仅仅是Facebook。 - Paul Tarjan
3
这里是一个使用 xmlns 的示例,链接为:http://developers.facebook.com/docs/opengraphprotocol/!另外,`prefix` 应该用在 html 标签还是 head 标签上?两种方式都可以,哪种更好呢? - its_me
9
哦,那些文件很旧。顶部的黄色东西说了这个。我们不想碰它们,因为它们被引用得很多。把“prefix”放在“head”上。它在两个地方都有效,但靠近标签更好。 - Paul Tarjan
1
为什么我们需要在每一行的 meta 元素中加上 og: 前缀,而使我们的 html 和 head 元素带有前缀呢?将前缀属性添加到 html 或 head 标签中实际上是做什么用的? - LearningFast
显示剩余3条评论

5
它并不重要。RDFa核心初始上下文将“og”识别为广泛使用的词汇前缀:认可

RDFa用户可以使用这些前缀,而无需在HTML代码中定义前缀。同样的前缀列表也已经被定义为JSON-LD的JSON-LD Context,位于URI http://www.w3.org/2013/json-ld-context/rdfa11;JSON-LD用户可以使用该URI作为缩写的@context键来使用相同的前缀。

为了更清晰地表达,强调已添加。
因此,您不需要向HTML文档添加命名空间。更多信息请参阅此处

5

我尝试按照 @Paul Tarjan 的建议在 head 标签中使用前缀,但是遇到了 Internet Explorer 8 的问题(详情请见 此处)。因此,最终我还是采用了 fb 命名空间的 xmlns 方式:

<!DOCTYPE HTML>
<html xmlns:fb="http://ogp.me/ns/fb#">
  <head prefix="og: http://ogp.me/ns# object: http://ogp.me/ns/object#">

2
<html xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns# fb:
http://www.facebook.com/2008/fbml"> <head>

有一种最好的验证方式。


1

prefix/xmlns属性有助于定义简写。rdf来自xml血统,因此应该预期xmlns符号将独立于doctype细节工作。rdfa通过包括http://www.w3.org/TR/rdfa-in-html/#extensions-to-the-html5-syntax中给定的前缀扩展了html语言。但是,这需要遵守http://dev.w3.org/html5/rdfa/rdfa-module.html。此外,如上所述,关于rel="profile"的工具支持仍在等待中。在那之前,选择是使用旧的doctype,或手动放置rdf以进行验证,或等待验证器和类似工具赶上。声明的正确位置是任何元素开放标签,它是简写符号将被使用的祖先。特别是对于og前缀的情况,它由RDFa Core http://www.w3.org/2011/rdfa-context/rdfa-1.1.html的初始上下文预定义,因此完全跳过它对于较新的doctype来说是可以的。特别是对于html5,RDFa初始上下文http://www.w3.org/2011/rdfa-context/html-rdfa-1.1仅在先前提到的RDFa初始上下文之后加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接