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

标签 rdf ontology json-ld structured-data vocabulary

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

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

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

最佳答案

一般来说,有四种方法可以处理它:

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

重用 existing RDF types/properties 是个好习惯.如果没有合适的术语/词汇,define your own .


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

例如,您可以使用属性 foaf:account添加 foaf:OnlineAccountschema: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"
  }
}

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

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

关于rdf - 将自定义属性添加到 JSON-LD 中的现有类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53243358/

相关文章:

rdf - rdf :type 令人费解的语义

schema - 如果使用JSON-LD,是否还需要将meta/itemprop数据应用于结构化数据?

graph - allegrograph 和五列 mysql 表有什么区别?

java - 使用不同程序但具有不同结果的相同 Sparql

java - 在耶拿阅读嵌套的 RDF 三元组

escaping - 是否应转义JSON-LD字符串?

schema.org - Google 会接受组合的 JSON-LD 和 HTML 元/微数据吗?

rdf - Sparql:在 dbpedia.org 上列出史蒂文斯 PIL 伯格的电影

rdf - 猫头鹰是什么:Nothing class designed to do?

ontology - 如何找到文本所涉及的 wikidata(或 freebase 或 DBpedia)主题列表?