html5 - Микроданные - Добавление книги к автору (не наоборот)

Я помечаю сайт микроданными 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>

ОБНОВЛЕНИЕ: я думаю, что понял это, для тех, кто ищет. Вы можете определить itemprop для itemscope, чтобы использовать его позже с 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 полон двусторонних отношений только с одним из этих способов), но это решает мою конкретную проблему.

ОБНОВЛЕНИЕ 2: это решило мою предыдущую проблему, но теперь я не могу встроить это в какие-либо другие области видимости. Итак, я хочу пометить все это как статью, я не могу сделать это так:

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

Теперь мой хак itemprop="author" также назначен на верхний уровень Article. Теперь мой код говорит людям, что Роальд Даль написал не только данные книги, но и саму эту статью!

Любые предложения, как решить эту проблему, или решение моей исходной проблемы, которое не вызывает эту проблему?


person sprawled octopus    schedule 14.09.2013    source источник


Ответы (1)


Размышляя о вашей проблеме, я пришел к двум (оба немного неуклюжим) решениям. Делюсь своими мыслями.

Итак, отвечая на ваш первоначальный вопрос. Вы можете сказать, что ваш _автор _пишет _книги и использовать новое 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>

Следующая мысль касается вашего обновленного вопроса. Я не вижу другого выхода, кроме как дублировать часть данных в невидимых тегах где-то на странице, не охватываемой Статьей. Но, возможно, я что-то упускаю. Например.,

<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>

Оба решения не ТАК хороши, но оба работают.

person ajax    schedule 15.09.2013
comment
Спасибо за это, к сожалению, моя вторая проблема мешает обоим решениям. Это страница, посвященная Роальду Далю (вот она, созданная до Microdata если вам интересно). Так что мне действительно нужна вся статья внутри области элементов Person, так как я устанавливаю параметры элементов для супруга, родителей, принадлежности и многого другого. Решение 1 потребовало бы миллиона itemrefs, чтобы назначить Roald Dahl всем этим itemprops. Решение 2 определило бы половину моих семантических ссылок (супруг, родители и т. д.) на один объект Person, а информацию о книге — на другой объект с тем же именем. - person sprawled octopus; 16.09.2013
comment
Еще один вариант — сделать расширение (schema.org/docs/extension.html) для получить классы и свойства, которые вам нужны. Или измените свои требования (например, не используйте статью). - person ajax; 17.09.2013
comment
В итоге я выберу ваше решение 2. Оно сохраняет код простым, и вы надеетесь, что любая поисковая система сочтет, что два объекта с именем Роальд Даль — это одно и то же (тем более что, как в этом случае, знание, вероятно, в их базе). Я подумал, что могу также создать авторское расширение для класса Person. Можно ли просто указать это как itemprop? Инструмент структурированных данных Google покажет ошибки — мне просто игнорировать это? - person sprawled octopus; 17.09.2013
comment
Да для обоих. Что-то вроде ‹div itemprop=agent itemscope itemtype=schema.org/Person/Author› ‹ h1 itemprop=name›Роальд Даль‹/h1› ‹span itemprop=book›Book1‹/span› ‹/div› Не стесняйтесь принять мой ответ, если считаете, что он вам помог :) - person ajax; 17.09.2013