繁体   English   中英

将自定义属性添加到 JSON-LD 中的现有类型

[英]Adding custom properties to an existing type in JSON-LD

我正在研究使用 JSON-LD 和 Hydra 作为 API 负载。 它似乎很有前途,但我正在为一件事而苦苦挣扎 - 如何扩展预定义的类型。

例如,我有用户。 将它们建模为"@type": "http://schema.org/Person"似乎是合理的——因为用户就是人。 但我也希望在我的用户上拥有一些未在该类型上定义的属性 - 例如用户帐户信息。

我知道我可以为资源提供多种类型,因此我可以定义自己的词汇表来定义具有此信息的“用户”类型,但这是实现此目的的正确方法吗? 或者有没有更好的方法使用 JSON-LD 来实现这个目标?

一般来说,有四种方法可以接近它:

  • 对于类型(又名类):
    • 添加类型。 要传达schema:Person是虚构的,您可以向该实体添加ex:FictionalThing类型。
    • 改用子类型。 要传达schema:Person是虚构的,您可以将ex:FictionalPerson定义为schema:Person子类型,并且仅¹使用ex:FictionalPerson
  • 对于属性:
    • 添加属性。 要为schema:Person提供昵称,您可以添加ex:nickname属性。²
    • 改用子属性。 您可以将ex:nickname定义为schema:additionalName子属性,并且仅¹ 使用ex:nickname

重用现有的 RDF 类型/属性是一种很好的做法。 如果没有合适的术语/词汇,请定义您自己的.


在您的特定情况下,在我看来,您需要一种用于表示用户帐户的类型,因为schema:Person可以有多个帐户,并且可能没有该人的所有用户帐户都适用的用户数据。 因此,您可能需要考虑使用实体来表示用户帐户,并使用属性将此类帐户与schema:Person连接起来。

例如,您可以使用属性foaf:accountfoaf:OnlineAccount添加到schema:Person

{
  "@context": "http://www.w3.org/2013/json-ld-context/rdfa11",

  "@type": "schema:Person",
  "schema:name": "Name of the person",

  "foaf:account": {
    "@type": "foaf:OnlineAccount",
    "schema:name": "Name of the online account"
  }
}

¹ 或者在超级类型/超级属性之外使用它,如果您想支持不先阅读您自己的词汇表的消费者,这通常是一个好主意。

² 为此,您不必在schema:Person旁边添加另一种类型,因为您可以自由混合来自不同词汇表的类型和属性。 另请注意,您可以定义属性的 范围,这允许您“隐式”向引用/引用实体添加类型。 在上面的示例中,知道 FOAF 词汇表的消费者将添加类型foaf:Agent到类型schema:Person的实体,因为它是属性foaf:account的域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM