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

Why do types need to be specified in JSON-LD after the context?

在 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 does not require 属性 可以有哪些值。它列出了 预期的 值,但作者不必遵循该值,这只是一个建议。

例如contactPoint property is an entity with the ContactPoint类型的期望值。但是可以使用字符串或 URL 值来代替(严格来说甚至是 Thing 项目,或任何其他类型)。

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

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