在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
期望Product
或Service
) 在Schema.org的未来版本中, - 属性可能会有一个额外的类型,然后就不再清楚你指的是哪个
- 属性的预期类型可以在Schema.org的未来版本中删除,但是您已经发布的结构化数据可能对新的预期类型 没有意义。