4

我按照schema.org上的说明在他们的网站上添加了公司的营业时间,但是,W3C 的HTML 验证器不喜欢它>_< 它给了我以下错误:

元素时间上属性 datetime 的错误值 Mo-Fr 09:00-19:00:文字不满足时间-日期时间格式。

下面是我的HTML

<div>
    <p>Office Hours:</p>
    <p><time itemprop="openingHours" datetime="Mo-Fr 09:00-19:00">Monday-Friday: 9:00 am to 7:00 pm</time></p>
    <p><time itemprop="openingHours" datetime="Sa 10:00-17:00">Saturdays: 10:00 am to 5:00 pm</time></p>
    <p><time itemprop="openingHours" datetime="Su 11:00-16:00">Sundays: 11:00 am to 4:00 pm</time></p>
</div>

我究竟做错了什么?

4

1 回答 1

6

你做错了什么:

HTML 规范不支持您尝试表示的工作日和时间范围。您的标记不是严格有效的 HTML,但是您可以说它是有效的 HTML + Schema.org(尽管没有明确的标准)。

time元素用于特定日期、时间和/或时区数据。它也可以用于持续时间(电影的运行时间,作为真实世界的示例,可能看起来像2h 11m 33s)。规范中没有列出支持日期和时间范围的有效值。

HTML 规范的语义部分描述了属性的用法time和有效值。datetime以下是一些可接受值的示例:

有效日期字符串:2011-11-18

有效的本地日期和时间字符串:2011-11-18T14:54

有效的星期字符串:2011-W47

有效的持续时间字符串:PT4H18M3S

有效的时区偏移字符串:-08:00

其中,没有一个对您的特定用例有用或不合适。


你可以做什么:

您可以尝试使用<data>而不是<time>,例如:

<div itemscope itemtype="https://schema.org/LocalBusiness">
  <p>Office Hours:</p>
  <p><data itemprop="openingHours" value="Mo-Fr 09:00-19:00">Monday-Friday: 9:00 am to 7:00 pm</data></p>
  <p><data itemprop="openingHours" value="Sa 10:00-17:00">Saturdays: 10:00 am to 5:00 pm</data></p>
  <p><data itemprop="openingHours" value="Su 11:00-16:00">Sundays: 11:00 am to 4:00 pm</data></p>
</div>

这将验证,但是它绕过了基于时间的数据的规则(规范希望您使用<time>),并且您现在已经为多余的验证牺牲了语义。

还要注意包含的itemscope和 itemtype<div>


我的一般意见:

我个人会坚持使用 Schema.org 概述的<time>带有datetime属性的示例。但是上面的例子理论上应该可以正常工作。

这很好地说明了为什么我尽量不为完美的验证而汗流浃背。验证是一种有用的调试工具和质量检查,对于教授良好的标记实践很重要。了解有效的 HTML 是什么样子也很重要,并且使用验证器有助于了解 HTML 的“规则”——其中一部分是为了让您知道何时可以修改这些规则以适用于您的特定用例。

基本上:不要出汗。使用 Schema.org 的好处超过了这几行无效标记的成本。

于 2015-03-31T06:14:22.113 回答