我已阅读the HTML5 specification,the microdata specification和the WHATWG HTML5 (with microdata) specification。这些都写得很好,也很容易理解。
但现在我读了schema.org Book specification,并遇到了以下代码段:
<span itemprop="price" content="6.99">$6.99</span>
<span itemprop="inLanguage" content="en">English-language</span>
<span itemprop="name" content="Tolkien, J. R. R. (John Ronald Reuel)">
J. R. R. Tolkien</span>
显然(与JSON版本相比),这些微数据属性的值是content
元素的span
属性的值。 (当然,如果没有content
属性,则该值将是textContents
元素的span
。)
但我在HTML和微数据规范中找不到任何对此做法的支持。事实上,我甚至找不到任何证据表明content
元素都有span
属性!
微观数据规范在为values提供规则时,对span
content
属性没有任何说明。 [除非&#39;元素&#39; textContent&#39;被content
属性覆盖,但我也找不到任何支持。]
甚至完整的WHATWG HTML5 +微数据规范也不支持content
上有span
属性的声明(请参阅The span
element和Global attributes)。< / p>
因此,我认为schema.org示例不符合要求。但这也是错误的吗?如果不是,这种做法来自何处,以及它是如何被接受的?
答案 0 :(得分:6)
是的,这是错误的。 Microdata和HTML5都没有为content
元素定义span
属性。
有些人想要使用它,例如参见这些问题中的代码:
我不确定这种混乱究竟来自哪里。
(Google的结构化数据测试工具错误地使用content
属性而非元素内容没有帮助;但至少所有other Microdata parsers似乎都正确地执行了此操作。)
也许有些人感到困惑,因为RDFa(但不是Microdata)定义并允许span
@vocab
。请参阅HTML + RDFa的content
attribute:
为避免疑义,HTML5内容模型中的所有元素都允许使用以下RDFa属性:
@typeof
,@property
,@resource
,@prefix
,{{ 1}},@content
,@about
,@rel
,@rev
,@datatype
和@inlist
。
答案 1 :(得分:2)
(抱歉,我没有足够的声誉发表评论。)
我们现在在2017年底。不知何故,MDN webdocs(https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/itemprop)
模式文档(http://schema.org/telephone)仍然建议使用微数据在content
上使用span
属性。当然,没有html5验证器会接受这个。