HTML5和RDFa支持

9

我即将向一个现有的HTML5 Web应用程序介绍Open Graph协议,并且我希望在不引入任何不必要的冗余数据的情况下包含必要的RDFa数据。

我查看了HTML+RDFa 1.1草案并与Facebook的Open Graph协议文档进行比较,我只需要在html元素上设置lang属性,就可以准备好HTML5:

<html lang="en">
<head xmlns:og="http://opengraphprotocol.org/schema/">
    <title>The Rock (1996)</title>
    <meta property="og:title" content="The Rock"/>
    <meta property="og:type" content="movie"/>
    ...

一开始,我对HTML5中RDFa支持感到困惑,因为有许多来源声称它不能以有效的方式完成,直到我最终找到了这个草案。我不是这方面的专家,所以我希望有人能够查看并评论该草案在今天浏览器中的支持情况。


RDFa是与HTML5完全分开的一个规范,因此在HTML5中不会存在支持。但并不是说你不能让它工作,因为它是XML格式,而HTML5可以处理作为RDF发送的XML。 - Rob
这就是让我感到困惑的网络。我将从HTML+RDFa 1.1草案中提取字幕:“支持在HTML4和HTML5中使用RDFa。”请看一下! - Filip Dupanović
@Rob:kRON链接的HTML+RDFa规范不是来自HTML5和RDFa的独立规范吗?描述如何在HTML5中使用RDFa?根据我对HTML+RDFa规范的阅读,它旨在定义如何在HTML中使用RDFa,即使您不将HTML作为XML提供,尽管他们不确定它是否有效,因为它取决于HTML5规范对命名空间属性的决定。 - Paul D. Waite
1
@Paul - 据我所知,text/html序列化中的xmlns:*属性用于定义CURIEs,而不是XML命名空间,因此并不依赖于text/html解析器中的XML命名空间支持。 - Alohci
1
@kRON。在浏览器中,它们将像任何其他未识别的属性一样被处理。对于浏览器来说,这些数据没有任何作用。对于试图从RDFa中提取语义数据的处理器来说,我猜现在支持可能是基本的,但我在这个领域没有具体的知识。 - Alohci
显示剩余4条评论
5个回答

16
W3C验证器对每个标记都进行警告。
<meta property="whatever" content...
要求将该财产作出要求。
<meta name="whatever ...

那么,你应该使用 "instead"。如果你更关心的是 Facebook 的话,我很高兴地告诉你,它可以容忍后者的形式,所以直接采用就好了:

<meta name="og:title" content="My nice picture"/>
<meta name="og:type" content="article"/>
<meta name="og:url" content="http://foobar123.com/test/simple.php"/>

在使用FB进行测试时请注意,FB会缓存页面解析(全局、Facebook端,强制刷新也无法解决),因此请确保每次更改内容以测试其发布到Facebook上时添加一个“唯一”的(但没有意义的)路径信息或GET参数到URL中:

mysite.com/test.php/bogusParam1
mysite.com/test.php/bogusParam2
mysite.com/test.php/bogusParam3
...
mysite.com/test.php?foo=hello
mysite.com/test.php?foo=howdy
mysite.com/test.php?foo=aloha

2
喜欢这个。似乎很少有帖子指向这个技巧。 - Ardee Aram
W3C验证器的当前版本抱怨name属性的值无效。因此,这个解决方案似乎让W3C和FB都感到不满。我想大家应该毕竟使用property - Qtax
警告OP,根据OpenGraph规范,这是无效的,除非您使用property,否则Google+将无法识别它。 - Navarr
最好能够提供到源代码/W3C规范和OpenGraph规范的链接。 - Cyril Duchon-Doris

6

HTML5和HTML+RDFa 1.1都还在开发中,这意味着我们现在所说的一切都可能会有所改变。你的问题有两个方面:

  • 它是否有效?
  • 它是否会创建互操作性问题?

对于有效性,你可以定期检查W3C验证器中规范的实施状态。它内置了一个实验性的HTML5验证器。

HTML5中的命名空间仍然存在争议。它们会导致不同于实际预期的DOM引起问题,这带来了我第二个问题:互操作性问题。你可以使用Live Dom Viewer测试标记的处理方式,或者使用类似Opera Dragonfly的工具来探索浏览器中文档的DOM表示。

如果您想进一步了解HTML5 DOM和RDFa主题,您可能想阅读Jenni的博客文章
到目前为止,您的标记并不是真正的问题,但如果涉及JavaScript,您将需要注意命名空间和带有冒号的值。

2

1

这是在HTML5中正确的做法:

    <meta property="http://ogp.me/ns#locale" content="en_US" />
<meta property="http://ogp.me/ns#site_name" content="xxxxxx" />
<meta property="http://ogp.me/ns#type" content="website" />
<meta property="http://ogp.me/ns#title" content="xxxxxxxxxxxx" />
<meta property="http://ogp.me/ns#description" content="xxxxxxxxxxxxxxxx" />
<meta property="http://ogp.me/ns/fb#app_id" content="xxxxxxxxxxxxxxxx" />   

等等,希望这可以帮到你


2
你能提供一下来源吗? - joar
@joar 最新的RDFa 1.1 Primer中有证据。还要检查最新的HTML5验证器,并确保选择RDFa 1.1预设。 - snahl

1
现在,HTML5验证器和Facebook都支持HTML+RDFa 1.1,因此您现在可以只使用property而不是name。在html5中,您也不必混乱xmlns声明。og前缀在(RDFa)规范中定义,因此您不必定义它。但是,您可以在html或head标记上明确说明prefix="og: http://ogp.me/ns#"

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