html5 - 微数据 - 向作者添加书籍(反之亦然)

时间:2013-09-14 14:37:30

标签: html5 microdata schema.org

我正在用Schema.org微数据标记一个网站,并且遇到了一个问题。我知道我可以定义一本书,然后是作者(我将使用../而不是http://schema.org/作为空间):

<div itemscope itemtype="../Book">
<span itemprop="name">Charlie and the Chocolate Factory</span>
written by <span itemprop="author">Roald Dahl</span>
</div>

但是我正在标记一个关于作者的页面,所以我想要一种方法来列出他的书,并说所有这些项目都是由他写的,而不是一遍又一遍地列出他的名字:

<article itemscope itemtype="../Person" id="main">
<h1 itemprop="name">Roald Dahl</h1>
<p>His books included <span itemscope itemtype="../Book">Charlie and the
Chocolate Factory</span> and 
<span itemscope itemtype="../Book">James and the Giant Peach</span></p>
</article>

有什么想法吗?只是把 itemref =“main”没有帮助(因为我试图给出一个特定的关系,作者的关系,而不仅仅是关联这两件事)。空的span元素是否有意义?:

<span itemscope itemtype="../Book">James and the Giant Peach
<span itemprop="author" itemref="main"></span></span>

更新:我认为我已经想到了这个,对于任何想要的人。您可以为itemscope定义一个itemprop,稍后将使用itemref。所以我认为答案是:

<article itemscope itemtype="../Person" itemprop="author" id="main">
<h1 itemprop="name">Roald Dahl</h1>
<p>His books included <span itemscope itemtype="../Book" itemref="main">Charlie
and the Chocolate Factory</span> and 
<span itemscope itemtype="../Book" itemref="main">James and the Giant Peach</span>
</article>

如果我想连接多个itemprop,我不知道该做什么(Schema.org完全关于双向关系,只有其中一种定义方式)但这解决了我的特殊问题。

UPDATE2 :这解决了我之前的问题,但我现在无法将其嵌入到任何其他项目范围内。所以,我想将整个事情标记为文章,我不能这样做:

<main itemscope itemtype="../Article">
<article itemscope itemtype="../Person" itemprop="author" id="main">
<h1 itemprop="name">Roald Dahl</h1>
....
</article></main>

现在我的itemprop =“author”hack也被分配到顶级 Article 。现在我的代码告诉人们Roald Dahl不仅写了给出的书,而且写了这篇文章本身!

有关如何解决此问题的任何建议,或解决原始问题但不会导致此问题?

1 个答案:

答案 0 :(得分:0)

考虑到你的问题我已经解决了两个问题(两者都有点尴尬)。分享我的想法。

回答你原来的问题。您可以说_ 作者 _ 撰写 _ 图书并使用新的http://schema.org/WriteAction课程。它的描述

  

创作书面创意内容的行为。

适合您的使用案例。实际上它在页面的示例中有所涉及。

然后我们可以做像:

<main itemscope itemtype="http://schema.org/Article">
    <article  itemscope itemtype="http://schema.org/WriteAction">
        <div itemprop="agent" itemscope itemtype="http://schema.org/Person">
            <h1 itemprop="name">Roald Dahl</h1>
        </div>
        <p>His books included <span itemprop="result" itemscope itemtype="http://schema.org/Book"><span itemprop="name">Charlie and the Chocolate Factory</span></span> and 
        <span itemprop="result" itemscope itemtype="http://schema.org/Book"><span itemprop="name">James and the Giant Peach</span></span></p>
    </article>
</main>

接下来想一想你的更新问题。我没有看到其他选项,而不是在 Article 未涵盖的页面上某处的隐形标签中复制部分数据。但也许我错过了什么。 例如,

<main itemscope itemtype="http://schema.org/Article">
    <article>
        <h1>Roald Dahl</h1>
        <p>His books included <span itemscope itemtype="http://schema.org/Book" itemref="main">
            <span itemprop="name">Charlie and the Chocolate Factory</span></span>
        and 
        <span itemscope itemtype="http://schema.org/Book" itemref="main">
            <span itemprop="name">James and the Giant Peach</span></span></p>
    </article>
</main>
<!-- in the footer or any other place -->
<div itemscope itemtype="http://schema.org/Person" itemprop="author" id="main">
    <meta itemprop="name" content="Roald Dahl"/>
</div>

这两种解决方案都不太好但都有效。