HTML前缀属性(开放图谱协议)是什么意思?

59

我对Facebook Open Graph Protocol还不熟悉。我一直在尝试弄清楚HTML中prefix属性的含义。在Stack Overflow上,我找到了与此主题相关的最接近的文章是这篇文章。这篇文章非常有帮助,因为它涉及各种可能的语法之间的差异以及要使用哪种语法。

然而,这篇文章没有说明prefix属性是什么或者它的作用是什么。据我所知,这不是标准的HTML属性。我找到了这个文档,我认为这是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树的任何位置指定多个前缀是否有不合理的地方?

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

  • 感谢您回答我的问题。


    3
    好问题。就我个人而言,我对发明一种非标准属性感到有些恼火,因为已经存在完全可行的解决方案。我无法找到任何合理的解释。 - wensveen
    2个回答

    60

    首先:

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

    为了能够在您的 Web 页面上进行语义表示,您需要使用一个语义词汇表,它告诉浏览器您页面中正在表示的内容。一个流行的语义词汇表schema.org

    但有时一个单独的语义词汇表不能完全表示和描述您的 Web 页面。这就是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#">,这会造成语法错误吗?

    除了在网上找不到使用前一种语法的示例之外,从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默认支持RDFa属性。


    2
    仅供参考,这是来自w3.org的官方解释:https://www.w3.org/TR/xhtml-rdfa-primer/#default_prefixes - matteo
    3
    由于RDFa初始上下文,对于许多词汇表来说,prefix属性可以完全省略,这有助于简化您的代码并减少总带宽消耗。 - vhs

    2
    看起来你提供的RDFa规范确实定义了prefix属性。在XHTML文档中,你需要指定正确的媒体类型(application/xhtml+xml)和正确的文档类型(<!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规范 我不知道将前缀映射到命名空间的这种方式是否有特定的优势。对我来说也不是完全清楚。

    有趣 - 我知道HTML5中有SVG和Math的补充,但我从未听说过HTML+RDFa。您可以添加RDFa属性而无需任何通知(Doctype、MIME类型、命名空间声明),并且仍然可以根据W3C验证器生成正确的HTML5。我在MDN等开发者资源中没有找到关于此的任何信息。 - wortwart

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