【问题标题】:Meaning of HTML prefix attribute (Open Graph Protocol)?HTML前缀属性(开放图协议)的含义?
【发布时间】:2015-03-12 16:00:08
【问题描述】:

我是Facebook Open Graph Protocol 的新手。我一直在试图弄清楚 HTML prefix 属性的含义是什么。我在 Stack Overflow 上找到的最接近此主题的帖子是 this post,它非常有帮助,因为它处理了各种可能的语法之间的差异以及使用哪一种。

但是,该帖子没有说明此 prefix 属性是什么或它的作用。 AFAIK 这不是标准的 HTML 属性。我能够找到this document,我认为这是 W3C 定义此属性的位置,但无法理解它。

谁能给我解释一下:

  1. prefix 属性有什么作用?

  2. 我可以写吗

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

    而不是

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

    还是语法错误?

  3. 我可以为任何给定的 HTML 标记包含多个 prefix 属性吗?

    <head prefix="a: http://www.aaa.com/ns#" prefix="b: http://www.bbb.com/ns#">

    根据我对 HTML 的了解,这是错误的,但 prefix 是一个非标准属性。所以也许,我想知道的是,我可以写:

    <head prefix="a: http://www.aaa.com/ns# b: http://www.bbb.com/ns#">

    或者由于某种原因在 HTML 树的任何位置指定多个前缀没有意义?

  4. 如果这个 prefix 标签不是 HTML 规范的一部分,那么将包含此属性的页面提交给代码验证器怎么会导致我的代码符合标准?

感谢您回答我的问题。

【问题讨论】:

  • 好问题。一方面,我实际上对已经存在完美解决方案的非标准属性的发明感到有点恼火。我找不到任何理由。

标签: html facebook validation facebook-opengraph


【解决方案1】:

第一:

prefixRDFa (Resource Description Framework in Attributes) 扩展定义的一个属性。 RDFa 用于在以 HTML 和 XML 等多种标记语言表示的网页中实现 Semantic Web。现在您可以告诉浏览器页面代表什么,而不是让网页告诉浏览器应该如何构建它,例如一个人、一个产品列表等。

为了能够在网页上以语义方式表示数据,您需要使用语义词汇,它可以准确地告诉浏览器:您的网页中表示的是什么。一个流行的语义词汇schema.org

但有时一个单一的语义词汇无法代表和描述您的所有网页。这就是 prefix 属性的用武之地:

prefix 属性有什么作用?

prefix 属性允许您指定使用的一个或多个语义词汇。以下示例使用两个词汇表来表示具有最喜欢的动物schema.orgvocab.org

<p vocab="http://schema.org/" prefix="ov: http://open.vocab.org/terms/" resource="#manu" typeof="Person">
    My name is <span property="name">MY_NAME</span>

    and my telephone is <span property="telephone">MY_TELEPHONE</span>.

    My favorite animal is the <span property="ov:preferredAnimal">FAVORITE_ANIMAL</span>.
</p>

我可以写&lt;html prefix="og:http://ogp.me/ns#"&gt; 而不是&lt;html prefix="og: http://ogp.me/ns#"&gt;,否则会是语法错误吗?

除了在网上找不到任何使用前一种语法的例子之外,从RDFa Core的规范中你可以看到至少一个空格确实是强制性的:

prefix
    a white space separated list of prefix-name IRI pairs of the form
    NCName ':' ' '+ xsd:anyURI

我可以为任何给定的 HTML 标记包含多个 prefix 属性吗?

是的,你可以。从上面给出的prefix 属性的规范,以及从RDFa Core 的规范中给出的大量示例来看,以下是允许的:

<html
    prefix="foaf: http://xmlns.com/foaf/0.1/
            dc: http://purl.org/dc/terms/"
>
    <!-- your page -->
</html>

如果这个 prefix 标签不是 HTML 规范的一部分,那么将包含这个属性的页面提交给代码验证器会如何导致我的代码符合标准?

正如@wensveen 所述,HTML5 supports the RDFa attributes out-of-the-box

【讨论】:

【解决方案2】:

看起来 prefix 属性确实在您链接的 RDFa 规范中定义。虽然您需要为 XHTML 文档 (application/xhtml+xml) 和正确的文档类型 (&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd"&gt;) 指定正确的媒体类型,并且可能还有一些 XML 俯卧撑,但这对于 HTML5 来说不是必需的。 在 HTML5 中,您可以直接使用 RDFa 定义的属性。

见:HTML+RDFa 1.1 specification

我不知道这种将前缀映射到命名空间的方式是否有任何特定优势。我也不是很清楚。

【讨论】:

  • 有趣 - 我知道 HTML5 中添加的 SVG 和数学,但我从未听说过 HTML+RDFa。您可以在没有任何通知的情况下添加 RDFa 属性(Doctype、MIME 类型、命名空间声明),并且仍然根据 W3C 验证器生成正确的 HTML5。我在 MDN 等开发人员资源上没有找到关于此的消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多