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

Posted

技术标签:

【中文标题】Open Graph 命名空间声明:带有 XMLNS 或 head 前缀的 HTML?【英文标题】:Open Graph namespace declaration: HTML with XMLNS or head prefix? 【发布时间】:2012-01-04 08:40:12 【问题描述】:

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

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

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

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

<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 Open Graph 文档 #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">

推荐的方法是什么,或者根本不重要?

【问题讨论】:

我正在 FB 内部跟进,以便为您找到正确的答案。 @SimonCross,多年后(2017 年 11 月)我们仍在等待答案... ;) 我在 *** 上发布了一个问题。请帮助我***.com/questions/68966701/… ***.com/questions/68966701/… 【参考方案1】:

这也没关系。 RDFa 核心初始上下文 recognizes og 作为广泛使用的词汇前缀:

RDFa 用户可以使用这些前缀无需在 HTML 代码中定义前缀。相同的前缀列表也为 JSON-LD 定义为 URI http://www.w3.org/2013/json-ld-context/rdfa11 处的 JSON-LD Context; JSON-LD 用户可以使用带有该 URI 的 @context 键作为简写来使用相同的前缀。

为清楚起见添加了重点。

因此,您无需向 HTML 文档添加名称空间。更多信息here。

【讨论】:

【参考方案2】:

它们都是等效的,并且都可以工作。

使用前缀,因为它是新的推荐方式并且字符较少。

我会将我们所有的文档更新为前缀。

【讨论】:

你能解释一下为什么要使用任何东西吗?我不写这个声明怎么样?如果我这样做会不会有什么坏处? 现在什么都不会出错,但是当您可以明确时,依赖默认值很少是一个好主意。如果 2 年后我们更改默认设置,您的网站将会崩溃。此外,如果您直接声明命名空间,它将帮助其他解析器,而不仅仅是 Facebook。 Paul,我注意到文档自 11 月以来一直没有更新。如果在可预见的未来所有现有浏览器都支持这两种方式,为什么使用新方式最好?如果支持不是全部(在用户代理、解析器等中),则采用新的东西似乎是一种不必要的风险,除非两者之间存在一些实际差异。我找不到任何这样说的资源。 @PaulTarjan Here!那个有一个使用xmlns 的例子。另外,prefix 是否应该用在htmlhead 标签上?无论哪种方式都可以吗?推荐哪个? 哦,那些文档太旧了。上面那个黄色的东西是这么说的。我们不想碰它们,因为它们被引用了很多。将prefix 放在head 上。它适用于两者,但更接近标签更好。【参考方案3】:

我尝试遵循@Paul Tarjan 的在头部使用前缀的回答。但是I got some Internet Explorer 8 issue。所以最后我还是用 xmlns 的方式作为 fb 命名空间:

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

【讨论】:

【参考方案4】:
<html xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns# fb:
http://www.facebook.com/2008/fbml"> <head>

有最好的验证方法。

【讨论】:

【参考方案5】:

prefix/xmlns 属性对于定义速记很有用。 rdf 来自 xml lineage,因此 xmlns 表示法应该独立于 doctype 详细信息而工作。 rdfa 扩展了 html 的属性,包括 http://www.w3.org/TR/rdfa-in-html/#extensions-to-the-html5-syntax 给出的前缀 但是,这需要遵守http://dev.w3.org/html5/rdfa/rdfa-module.html 此外,其中提到的对 rel="profile" 的工具支持仍在等待中。到那时,选择是使用较旧的文档类型,还是手动放置 rdf: 用于验证目的或等待验证器和此类工具赶上。进行声明的正确位置是任何元素开始标记,它是使用简写符号的任何地方的祖先。特别是对于 og 前缀的情况,它由 RDFa Core http://www.w3.org/2011/rdfa-context/rdfa-1.1.html 的初始上下文预定义,因此对于较新的文档类型完全跳过它是可以的。特别是对于 html5,RDFa 初始上下文 http://www.w3.org/2011/rdfa-context/html-rdfa-1.1 仅在前面提到的 RDFa 初始上下文之后加载。

【讨论】:

以上是关于Open Graph 命名空间声明:带有 XMLNS 或 head 前缀的 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

将 POSIX::open 函数关联到命名空间

Facebook Open Graph 发布带有对象的操作

使用带有地图附件的 Facebook Open Graph Story (GeoPoint)

命名空间的使用

命名空间内的局部函数声明

xmlstarlet 默认命名空间