6

我正在编写 HTML/CSS/JS 大约两年了,只是决定更加专注于通过使用微数据/RDF 来增强我的标记。

通过进一步的调查和查找这件事在野外是如何处理的,我发现了 YouTube,发现他们在 div 块中使用元标签来描述他们的视频,发现这很奇怪,因为我从来没有在旁边使用元标签在文档的头部。

div-block 有一个 itemtype 来声明它使用的方案,所以我检查了给定的页面(schema.org),并通过在他们的文档中挖掘以下部分找到:

3c。缺失/隐含信息:使用带有内容的元标记

有时,网页包含对标记有价值的信息,但由于信息在页面上的显示方式而无法标记。[...]

在这些情况下,使用元标记和内容属性来指定信息。考虑这个例子——图像向用户显示了 5 星评分中的 4 星:

<div itemscope itemtype="http://schema.org/Offer">
  <span itemprop="name">Blend-O-Matic</span>
  <span itemprop="price">$19.95</span>
  <img src="four-stars.jpg" />
  Based on 25 user ratings
</div>

这是再次标记评级信息的示例。

<div itemscope itemtype="http://schema.org/Offer">
  <span itemprop="name">Blend-O-Matic</span>
  <span itemprop="price">$19.95</span>
  <div itemprop="reviews" itemscope itemtype="http://schema.org/AggregateRating">
    <img src="four-stars.jpg" />
    <meta itemprop="ratingValue" content="4" />
    <meta itemprop="bestRating" content="5" />
    Based on <span itemprop="ratingCount">25</span> user ratings
  </div>
</div>

来源:http: //schema.org/docs/gs.html#advanced_missing

现在,(有时)以这种方式添加微数据似乎是最佳实践,但我仍然觉得从头块中使用元数据仍然很奇怪,所以我检查了 w3 关于元标签并意识到这种感觉来自哪里。

4.2.5 元元素

...

可以使用此元素的上下文:

  • 如果存在charset属性,或者元素的http-equiv属性处于 Encoding 声明状态:在head元素中。
  • 如果http-equiv属性存在但不在 Encoding 声明状态:在head元素中。
  • 如果http-equiv属性存在但不在 Encoding 声明状态:在作为head元素的子元素的noscript元素中。
  • 如果存在name属性:需要元数据内容的位置。

...

必须指定namehttp-equivcharset属性之一。

如果指定了namehttp-equiv,则还必须指定content属性。否则,必须省略。

来源:http ://www.w3.org/TR/html5/document-metadata.html#the-meta-element

现在我不知道该怎么想,因为 schema.org 给出的文档实际上忽略了 w3 的建议。

因此,在我真正开始做错之前,我正在向更有经验的人寻求答案。

问候 JD。

4

1 回答 1

7

是的。这有点复杂。你坐得舒服吗?那我就开始...

微数据首先出现在现在称为HTML 生活标准的内容中,作为其中的一个组成部分。这是 WHATWG 制作的 HTML 规范。当时 W3C HTML5 草案自动进行了相同的更改,因此 Microdata 也出现在该标准中。然而,W3C 的人们认为它与他们已经研究了一段时间的现有标准 RDFa 相冲突和竞争。他们认为在主要 HTML5 标准文档中包含 Microdata,而 RDFa 是独立的,这是不公平的,因此 W3C 将 Microdata 移到了单独的标准中

HTML 生活标准(仍然)和 W3C 微数据标准(直到最近)都明确声明<meta>元素在<body>当且仅当它包含一个itemprop属性和一个content属性时才有效,并且没有其他<meta>元素特定的属性。(例如,它不能包含http-equivorname属性,但是idandclass是可以的。)

然而最近,已经决定在主要的 W3C HTML 规范而不是微数据规范中,有效性要求会更好。因此,实际要求已从微数据规范中删除,尽管仍有一些<meta>元素在<body>.

这一切都发生在 HTML5 规范修复之后——实际上现在只能进行澄清和错误修复——因此有效性信息被移至W3C HTML5.1 规范

这描述了使有效的有效性<meta>要求<body>。它说(见最后一个要点):

4.2.5 元元素

可以使用此元素的上下文:

  • 如果存在 charset 属性,或者元素的 http-equiv 属性处于 Encoding 声明状态:在 head 元素中。
  • 如果 http-equiv 属性存在但不在 Encoding 声明状态:在 head 元素中。
  • 如果 http-equiv 属性存在但不在 Encoding 声明状态:在作为 head 元素的子元素的 noscript 元素中。
  • 如果存在 name 属性:需要元数据内容的位置。
  • 如果 itemprop 属性存在:需要元数据内容的位置。
  • 如果 itemprop 属性存在:需要短语内容的位置。

请注意,该<link>元素也以类似的方式扩展。

更新:

正如评论中的 unor 所指出的,对 meta 元素的“可以使用此元素的上下文:”所做的更改并未纳入 HTML 5.1 建议,并且它们也没有恢复到 5.2 或 5.3。

它们现在出现在第 7.2 节内容模型下的单独 W3C 微数据规范中,其中第 4 点说:

如果 itemprop 属性出现在链接或元元素上,则该元素是流内容和短语内容,并且可以在需要短语内容的地方使用。

于 2013-09-15T18:25:15.043 回答