从ImageObject中声明ImageGallery属性:您可以使用不同的itemtype从其父级嵌套itemtype吗?

时间:2017-12-06 18:15:48

标签: html5 schema.org microdata

我是Microdata的新手并使用Schema.org属性,并对itemscope的范围有疑问。

我正在itemtype="http://schema.org/ImageGallery"标记中创建<main>。它的两个属性是mainContentOfPageprimaryImageOfPage

但是,当我将它们嵌套在ImageObject声明中时,Google会说:

  

ImageObject不是mainContentOfPage&amp;的已知有效目标类型。 primaryImageOfPage属性。

每个元素是否都不从其父级继承itemscope?这似乎就是这种情况,因为我从Google测试工具中得到了上述验证错误。

不幸的是,ImageObject似乎没有使用大多数ImageGallery属性。

任何关于我做错事的指示都会非常感激。

<main itemscope itemtype="http://schema.org/ImageGallery">
        <!-- Box 1 -->
        <article itemscope itemtype="http://schema.org/ImageObject" itemprop="workExample">
            <figure role="figure">
                <img id="id_BoxImage1" src="/images/nav/grid1.jpg" alt="{Caption}" role="img"  itemprop="image contentUrl"/>
                <figcaption itemprop="about">{Caption}</figcaption>
            </figure>
        </article>
        <!-- <article> Box 2 -->
        <!-- <article> Box 3 -->
        <!-- Box Main -->
        <article itemscope itemtype="http://schema.org/ImageObject" itemprop="mainContentOfPage workExample">
            <figure role="figure">
                <img itemprop="primaryImageOfPage image contentUrl"/>
                <figcaption itemprop="about">{Caption}</figcaption>
            </figure>
        </article>
        <!-- <article> Box 5 -->
        <!-- <article> Box 6 -->
    <!-- <article> Box 7 -->
</main>

1 个答案:

答案 0 :(得分:1)

itemprop适用于其最近的父itemscope

您不能使用应用于父itemscope的类型的属性,您只能使用应用于最近的父itemscope的类型的属性。

<div itemscope itemtype="http://schema.org/Person">
  <!-- you can only use 'Person' properties here -->

  <div itemprop="owns" itemscope itemtype="http://schema.org/Product">
    <!-- you can only use 'Product' properties here, 
         not 'Person' properties -->

    <div itemprop="manufacturer" itemscope itemtype="http://schema.org/Organization">
      <!-- you can only use 'Organization' properties here, 
           not 'Person'/'Product' properties -->
    </div>

  </div>

</div>

在您的示例中,使用Schema.org存在两个单独的问题。

Schema.org:范围(属性的值)

每个Schema.org属性都有一个或多个预期类型。对于mainContentOfPage property,预期类型为WebPageElement

在您的示例中,您要将mainContentOfPage添加到ImageGallery(这很好),并为ImageObject提供mainContentOfPage值(这不是很好) 。 WebPageElement不是ImageObject的父类型,因此ImageObject不是预期值。它在技术上/正式允许,但Google的SDTT通常会识别所述的预期类型,并在使用其他内容时出错。

如果您想传达图片是图片库的一部分,您可以使用Schema.org的hasPart属性:

<main itemscope itemtype="http://schema.org/ImageGallery">

  <article itemprop="hasPart" itemscope itemtype="http://schema.org/ImageObject"></article>

</main>

(替代hasPartadding a list that contains all images (mainEntity ItemList)

Schema.org:域(类型的属性)

每个Schema.org属性都有一个或多个可以添加的类型。对于primaryImageOfPage属性,类型为WebPage

在您的示例中,您要将primaryImageOfPage属性添加到ImageObject,但WebPage不是ImageObject的父类型。

ImageGallery可以拥有primaryImageOfPage属性,因为ImageGallery更具体WebPage。因此,如果您想传达图库中的一个图像是主图像,您可以使用:

<main itemscope itemtype="http://schema.org/ImageGallery">

  <article itemprop="hasPart primaryImageOfPage" itemscope itemtype="http://schema.org/ImageObject"></article>

  <article itemprop="hasPart" itemscope itemtype="http://schema.org/ImageObject"></article>

</main>