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

Joh*_*son 36 html validation facebook open-graph-protocol facebook-opengraph

我是Facebook Open Graph Protocol的新手.我一直试图弄清楚HTML prefix属性的含义是什么.Stack Overflow上最接近的帖子我可以找到处理这个主题的是这篇文章非常有用,因为它处理了各种可能的语法之间的区别以及使用哪种语法.

然而,该帖子没有说明这个prefix属性是什么或它做什么.AFAIK这不是标准的HTML属性.我能够找到这个文件,我认为W3C定义了这个属性,但却无法理解它.

有人可以向我解释一下:

  1. prefix属性有什么作用?

  2. 我能写吗?

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

    代替

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

    或者这会是语法错误?

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

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

感谢您回答我的问题.

小智 35

第一:

prefixRDFa(属性中的资源描述框架)扩展定义的属性之一.RDFa用于在以许多标记语言(如HTML和XML)表示的网页中实现语义Web.现在您还可以告诉它页面所代表的内容,例如人员,产品列表等,而不是让网页告诉浏览器应该如何构建它.

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

但有时单个语义词汇表不能代表和描述您的所有网页.这就是prefix属性的来源:

prefix属性有什么作用?

prefix属性允许您指定正在使用的一个或多个语义词汇表.以下示例使用两个词汇表来表示具有最喜欢的Animal 的Person: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>
Run Code Online (Sandbox Code Playgroud)

我可以编写<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
Run Code Online (Sandbox Code Playgroud)

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

是的你可以.根据prefix上面给出的属性的规范,以及RDFa Core规范中给出的大量示例,允许以下内容:

<html
    prefix="foaf: http://xmlns.com/foaf/0.1/
            dc: http://purl.org/dc/terms/"
>
    <!-- your page -->
</html>
Run Code Online (Sandbox Code Playgroud)

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

正如@wensveen所提到的,HTML5支持开箱即用的RDFa属性.

  • 仅供参考,这里是w3.org的官方解释:https://www.w3.org/TR/xhtml-rdfa-primer/#default_prefixes (2认同)
  • 由于 [RDFa Initial Contexts](https:// www.w3.org/TR/rdfa-core/#s_initialcontexts),帮助简化您的代码并减少整体带宽消耗。 (2认同)

wen*_*een 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规范

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