2013-09-14 2 views
1

Я помещаю сайт с микроданными Schema.org и столкнулся с quandry. Я понимаю, что я могу определить книгу, а затем его автор (я буду использовать ../, а не http://schema.org/ для пространства):html5 - Microdata - Добавление книги к автору (не наоборот)

<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 itemscope itemtype="../Book">James and the Giant Peach 
<span itemprop="author" itemref="main"></span></span> 

UPDATE: Я думаю, что я понял, это один из, для тех, кто смотрит. Вы можете определить itemprop для itemcope, который будет использоваться позже с 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-полосные отношениях только с одним из этих способов), но это решает мою особую проблему.

UPDATE2: Это решило мою предыдущую проблему, но теперь я не могу встроить ее в любые другие предметы. Итак, я хочу, чтобы пометить все это как статьи, я не могу это сделать, как:

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

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

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

ответ

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> 

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

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

Оба решения не так хороши, но оба работают.

+0

Спасибо, за это, к сожалению, моя вторая проблема мешает обеим решениям. Это страница о Роальде Дале ([здесь это pre-Microdata'd] (http://www.spartacus.schoolnet.co.uk/SPYdahl.htm), если вам интересно). Поэтому мне действительно нужна вся статья внутри Person itemscope, так как я устанавливаю itemprops для супруга, родителей, филиалов и т. Д. Решение 1 потребовало бы миллиона itemrefs, чтобы назначить Roald Dahl всем этим элементам. Решение 2 определяло бы половину моих семантических связей (супруга, родителей и т. Д.) Одному объекту Person и информации о книге другому объекту с тем же именем. –

+0

Еще один вариант - сделать расширение (http://schema.org/docs/extension.html), чтобы получить нужные вам классы и свойства. Или измените свои требования (например, не используйте статью). – ajax

+0

В балансе я пойду за вашим решением 2. Он сохраняет код простым, и вы надеетесь, что любая поисковая система будет считать, что два объекта с именем Roald Dahl - это одно и то же (тем более, что, как и в этом случае, знание вероятно, в их базе данных). Я думал, что я мог бы также создать «авторское» расширение в классе Person. Можно ли просто положить это как itemprop? Инструмент Google Structured Data будет показывать ошибки - должен ли я просто игнорировать это? –

Смежные вопросы