同时使用 containedIn 和 additionalProperty 来描述一个项目

Using both containedIn and additionalProperty to describe an item

我有一个 table 包含城市的一些属性。该城市是更大区域的一部分,因此我想添加 属性 containedIn。但是,我还想指出该区域的类型,例如 "region"、"province" 或 "state",因此我尝试将 additionalProperty 添加到这些区域。我很困惑如何正确有效地做到这一点。

这是我尝试过的方法,但是 Google 结构化数据测试工具给出了 two/duplicate 项(和两个 name 属性)。我想将 containedInadditionalProperty 添加到 San JuanSan Pablo,但似乎 属性 name 都被 [=11] 识别=] 和 additionalProperty,所以我不知道如何解决它:

<div itemscope itemtype='http://schema.org/City'>

<h1 itemprop='name'>San Pedro</h1>

<table>
  <tr itemprop='additionalProperty' itemscope itemtype='http://schema.org/PropertyValue'>
    <td itemprop='name'>Type</td>
    <td itemprop='value'>city</td>
  </tr>
  <tr itemprop='additionalProperty containedIn' itemscope itemtype='http://schema.org/PropertyValue http://schema.org/AdministrativeArea'>
    <td itemprop='name'>State</td>
    <td itemprop='value'><a itemprop='url' href='#.html'><span itemprop='name'>San Juan</span></a></td>
  </tr>
  <tr itemprop='additionalProperty containedIn' itemscope itemtype='http://schema.org/PropertyValue http://schema.org/AdministrativeArea'>
    <td itemprop='name'>Region</td>
    <td itemprop='value'><a itemprop='url' href='#.html'><span itemprop='name'>San Pablo</span></a></td>
  </tr>
</table>

</div>

显示在Google的SDTT

Google 的 SDTT 中的显示对于您提供的微数据来说似乎是正确的:

  • 如果您使用多个属性添加一个项目,SDTT 每 属性 显示一次该项目。

    这就是他们决定展示它的方式。他们也可以决定展示这样的东西,但他们没有:

    additionalProperty, containedIn
    
      @type     PropertyValue
      @type     AdministrativeArea
    
  • 如果您使用多个属性来添加一个项目,and/or如果这个项目有多种类型,您不添加multiple/different个项目,它是同一个项目.

    name 仅适用于多种类型中的一种,或者仅适用于多种属性之一添加的项目,这是没有意义的。只有一个项目,一组属性,多种类型,由多个属性添加。

含义

据我了解您的数据,您有一个城市 (San Pedro),它是两个行政区域(San Juan、San Pablo)的一部分。

我不确定对它建模是否有意义,因此 AdministrativeArea 也是 PropertyValue。将 additionalProperty PropertyValue 应用于 AdministrativeArea.

似乎更有意义

table 内不是那么容易,所以为了这个例子,我使用 div

<div itemprop='containedIn' itemscope itemtype='http://schema.org/AdministrativeArea'>
  <a itemprop='url' href='#.html'><span itemprop='name'>San Juan</span></a>
  <div itemprop='additionalProperty' itemscope itemtype='http://schema.org/PropertyValue'>
    <meta itemprop='name' content='State'>
    <meta itemprop='value' content='San Juan'>
  </div>
</div>

备注:"type of area"

使用 additionalType 而不是 additionalProperty

使用additionalProperty PropertyValue指定区域类型是可能的,但不常见。通常实际类型用于此类目的。

找到代表该概念的类型(例如 "Region"),或创建您自己的类型,并将其添加到您能找到的最具体的 Schema.org 类型之外。

在 Microdata 中,itemtype 属性只能从相同的词汇表中获取类型,所以你必须使用 additionalType property:

<div itemprop='containedIn' itemscope itemtype='http://schema.org/AdministrativeArea'>
  <a itemprop='url' href='#.html'><span itemprop='name'>San Juan</span></a>
  <link itemprop="additionalType" href="http://example.com/some-vocabulary/Region">
</div>

对于城市:通过使用 Schema.org 的 City 类型,您已经表明它是一座城市,因此您的 additionalProperty(type=city)似乎是多余。但是如果你想传达一些其他类型,你也可以使用与additionalType相同的方法。