HTML前缀属性(Open Graph Protocol)的含义?

时间:2015-01-14 12:54:37

标签: html facebook facebook-opengraph validation open-graph-protocol

我是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规范的一部分,那么如何将包含此属性的网页提交给代码验证程序会导致我的代码符合标准?

  5. 感谢您回答我的问题。

2 个答案:

答案 0 :(得分:32)

<强>首先

prefix是{strong>一个由RDFa (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>
  

我可以写<html prefix="og:http://ogp.me/ns#">代替<html prefix="og: http://ogp.me/ns#">还是会出现语法错误?

除了无法使用以前的语法在Web上找到任何示例之外,从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

答案 1 :(得分:2)

看来前缀属性确实是在您链接的RDFa规范中定义的。虽然您需要为XHTML文档(application/xhtml+xml)和正确的doctype(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">)指定正确的媒体类型,并且可能需要更多的XML推送,但HTML5不需要这样做。 在HTML5中,您可以使用开箱即用的RDFa定义的属性。

请参阅:HTML+RDFa 1.1 specification

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