我正在尝试使用Schema.org本体修改现有HTML以包含微数据。
由于历史原因,HTML的结构不是适当的层次结构,很容易允许使用单个itemscope
。在此示例中,articleBody
实际上与name
,author
和datePublished
分开。
这是一个简单的代码片段,用于演示问题的示例以及我要完成的任务:
<html>
<body>
<div itemscope itemtype="http://schema.org/NewsArticle">
<h1 itemprop="name">Example News Article Page</h1>
<span itemprop="datePublished">January 1, 2014</span>
<span itemprop="author">John Doe</span>
</div>
<div itemprop="articleBody">
<p>
Lorem Ipsum
</p>
</div>
</body>
</html>
显然,articleBody
不包含在itemscope
中,因此任何解析器都不知道该片段与之相关的是什么。
我尝试使用itemref
将articleBody
与实际NewsArticle
相关联。
<html>
<body>
<div itemscope itemtype="http://schema.org/NewsArticle" id="myArticle">
<h1 itemprop="name">Example News Article Page</h1>
<span itemprop="datePublished">January 1, 2014</span>
<span itemprop="author">John Doe</span>
</div>
<div itemprop="articleBody" itemref="myArticle">
<p>
Lorem Ipsum
</p>
</div>
</body>
</html>
这似乎不起作用。我还修改了它以使用添加itemscope
的变体,重新声明itemtype
等等......不幸的是,这些方法似乎都不起作用。我假设这不是itemref
的正确用法。
我也尝试了itemid
。例如:
<html>
<body>
<div itemscope itemtype="http://schema.org/NewsArticle" itemid="foo">
<h1 itemprop="name">Example News Article Page</h1>
<span itemprop="datePublished">January 1, 2014</span>
<span itemprop="author">John Doe</span>
</div>
<div itemprop="articleBody" itemscope itemtype="http://schema.org/NewsArticle" itemid="foo">
<p>
Lorem Ipsum
</p>
</div>
</body>
</html>
同样,这似乎不起作用。在这两种情况下,Google的结构化数据测试程序都没有显示预期的结果(正文不存在或与文章本身无关),Yandex给出了错误unable to determine affiliation of these fields. There are two possible reasons: this fields are incorrectly placed or an orphan itemprop attribute is indicated
我不太确定是否有可能做我想要完成的事情。我试图以这种方式做事的原因是我们有一个很多预先存在的和复杂的HTML模板以及大量的JavaScript。尝试重构或以其他方式修改现有HTML,除了添加注释外,很快就会成为一场噩梦。
是否可以执行我尝试实施的操作?如果是这样,你能告诉我一个简单的代码示例或指出我的尝试中的缺陷吗?
谢谢!
更新
我使用itemref
让文章工作。我遇到的问题是我向后使用了引用 - 我指的是来自NewsArticle
的{{1}}而不是相反。这是我的片段:
articleBody
不幸的是,这似乎不具备可扩展性。假设我想引用在页面页脚中标记的<html>
<body>
<div itemref="content" id="articleHeader" itemscope itemtype="http://schema.org/NewsArticle">
<h1 itemprop="name">Example News Article Page</h1>
<span itemprop="author">John Doe</span>
</div>
<div id="content" itemprop="articleBody">
<p>
Lorem Ipsum blah blah blah
</p>
</div>
</body>
</html>
。如果我在文章中添加了另一个copyrightHolder
,那么它似乎会爆炸,itemref
与articleBody
无关。 E.g。
NewsArticle
答案 0 :(得分:2)
看来我走在了正确的轨道上。我遇到的问题是我尝试多次声明itemref
次,每次都是另一次id
。根据{{3}},itemref
实际上需要W3C id
个值。
以下是工作示例:
<html>
<body>
<div itemref="content company" id="articleHeader" itemscope itemtype="http://schema.org/NewsArticle">
<h1 itemprop="name">Example News Article Page</h1>
<span itemprop="author">John Doe</span>
</div>
<div id="content" itemprop="articleBody">
<p>
Lorem Ipsum blah blah blah
</p>
</div>
<div id="company" itemprop="copyrightHolder">
My Awesome Company
</div>
</body>
</html>