json-ld:引用schema:Person的详细信息

json-ld: referencing to details of a schema:Person

是否可以在空白节点上引用 属性?在下面的示例中,如何表达 Secret Agent 2 知道电子邮件 james@007.uk 属于 Secret Agent 1?以下根据this example for blank nodes

{
  "@context": "http://schema.org/",
  "@id": "_:n1",
  "name": "Secret Agent 1",
  "email": "james@007.uk",         //the property I want to add
  "knows": {
    "name": "Secret Agent 2",
    "knows": {
      "@id": "_:n1"
    },
    "knowsAbout": {                //Agent 2 knows that an email
      "@id": "_:n1#email"          //is the contact for Secret Agent 1
    }                              //and that the email is "james@007.uk"
  }
}

尝试 in the json-ld playground 时,带有 "@id": "_:n1#email" 的位被解释为不存在的新节点 _:b2

在 JSON-LD 中,或者在一般的 RDF 中,你不能真正做到这一点。本文档描述了两个实体,每个实体都具有一组相互了解的属性和资产。该关系是实体之间的关系,与这些实体的特定属性无关。

您可以使电子邮件地址本身成为一个实体,然后声明与它有某种关系。例如,schema.org 有一个 PropertyValueSpecification,它可以有一个 @id,因此可以被引用,但这不是我选择建模的方式。

JSON-LD-star is a proposed specification for describing the properties of relationships themselves (a variation on RDF-star),因此您可以将关系 _:n1 :email "james@007.uk" 创建为一个实体,但这并没有真正达到您描述的间接性。不过,它可能类似于以下内容:

{
  "@context": "https://schema.org",
  "@id": "_:n1",
  "email": "james@007.uk",
  "knows": {
    "name": "Secret Agent 2",
    "knows": {
      "@id": "_:n1"
    },
    "knowsAbout": {
      "@id": {
        "@id": "_:n1",
        "email": "james@007.uk"
      }
    }
  }
}

但请注意,这些只是提议的标准。

如果您要使用 PropertyValueSpecification 间接寻址(或某种类似的建模),您可以说您知道该电子邮件及其与 _:n1 的关系,而无需泄露实际的电子邮件,本身,但这绝对是非典型的数据建模。