Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rdf 向JSON-LD中的现有类型添加自定义属性_Rdf_Ontology_Json Ld_Structured Data_Vocabulary - Fatal编程技术网

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

Rdf 向JSON-LD中的现有类型添加自定义属性,rdf,ontology,json-ld,structured-data,vocabulary,Rdf,Ontology,Json Ld,Structured Data,Vocabulary,我正在研究JSON-LD和Hydra作为API负载的使用。这似乎很有希望,但我正在努力解决一件事——如何扩展预定义类型 例如,我有用户。将它们建模为“@type”似乎是合理的:http://schema.org/Person“-因为用户都是人。但我也希望在我的用户上有一些未在该类型上定义的属性,例如用户帐户信息 我知道我可以为一个资源提供多种类型,因此我可以定义自己的词汇表来定义一种拥有这些信息的“用户”,但这是实现这一点的正确方法吗?还是有更好的方法使用JSON-LD来实现这一目标?一般来说,

我正在研究JSON-LD和Hydra作为API负载的使用。这似乎很有希望,但我正在努力解决一件事——如何扩展预定义类型

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


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

一般来说,有四种方法可以实现这一目标:

  • 对于类型(也称为类):
    • 添加一个类型。要表示
      模式:Person
      是虚构的,您可以向该实体添加
      例如:virtualAlthing
      类型
    • 改用子类型。若要表示
      模式:人物
      是虚构的,您可以将
      ex:virtualperson
      定义为
      模式:人物
      ,并且只使用
      ex:virtualperson
  • 对于属性:
    • 添加属性。要为
      架构:Person
      提供昵称,可以添加
      例如:昵称
      属性
    • 改用子属性。您可以将
      ex:昵称
      定义为
      schema:additionalName
      ,并且只使用
      ex:昵称
重复使用是一种很好的做法。如果没有合适的术语/词汇


在您的特定情况下,在我看来,您需要一种类型来表示用户帐户,因为
模式:Person
可以有多个帐户,并且可能没有适用于该用户的所有用户帐户的用户数据。因此,您可能需要考虑使用一个实体来表示一个用户帐户,以及一个属性来将这样一个帐户连接到<代码>模式:人< /代码>。 例如,您可以使用该属性将添加到:

{
“@context”:”http://www.w3.org/2013/json-ld-context/rdfa11",
“@type”:“schema:Person”,
“schema:name”:“此人的姓名”,
“foaf:帐户”:{
“@type”:“foaf:OnlineAccount”,
“架构:名称”:“联机帐户的名称”
}
}

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

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