我是Microdata的新手并使用Schema.org属性,并对itemscope
的范围有疑问。
我正在itemtype="http://schema.org/ImageGallery"
标记中创建<main>
。它的两个属性是mainContentOfPage
和primaryImageOfPage
。
但是,当我将它们嵌套在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>
答案 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属性都有一个或多个预期类型。对于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>
(替代hasPart
:adding a list that contains all images (mainEntity ItemList
))
每个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>