为什么需要在JSON-LD中在上下文之后指定类型?



在JSON-LD中,@type不仅出现在顶层,而且出现在contactPoint属性中。如果已经提供了上下文,为什么还需要它?

<script type="application/ld+json">
  { "@context" : "http://schema.org",
    "@type" : "Organization",
    "url" : "http://www.your-company-site.com",
    "contactPoint" : [
      { "@type" : "ContactPoint",
        "telephone" : "+1-401-555-1212",
        "contactType" : "customer service"
      }
    ]
  }
</script>

解析器是否从上下文和第一个@type行知道我们正在与一个组织合作,因此属性contactPoint意味着在其中具有该类型的对象?否则,我可以将该属性重命名为contact,然后指定@type应该通知它是什么?这个例子对我来说似乎是多余的。也许我误解了JSON-LD在这里是如何工作的。

Schema.org不要求属性可以具有哪些值。它列出了期望的值,但作者不必遵循这些值,这只是一个建议。

例如,contactPoint属性的期望值是一个ContactPoint类型的实体。但是也可以使用字符串或URL值(严格地说,甚至是Thing项,或任何其他类型)。

即使您总是遵循建议并使用预期的类型,也不一定清楚您指的是哪种类型,因为

  • 有一些属性期望几种类型中的一种作为值(例如,itemOffered期望ProductService)
  • 在Schema.org的未来版本中,
  • 属性可能会有一个额外的类型,然后就不再清楚你指的是哪个
  • 属性的预期类型可以在Schema.org的未来版本中删除,但是您已经发布的结构化数据可能对新的预期类型
  • 没有意义。

相关内容

最新更新