将 JSON-LD @context 定义为 join/split 值?

Define JSON-LD @context to join/split values?

我想使用 jsonld.js 库的 expandcompact 方法将来自各种来源的数据转换为通用格式进行处理。如果我获取源 JSON 文档,向其中添加一个 @context,然后通过 expand 方法传递它,我可以获得我需要的通用格式。

我无法找到解决方案的用例是需要合并多个值时。例如,schema.org 为 streetAddress 定义了具有单个字段的 PostalAddress,但许多系统将街道地址存储为单独的值(街道编号、街道名称、街道方向...) .要将传入数据转换为 schema.org 格式,我需要一种方法来在我的 @context 中指示多个字段以正确的顺序组成 streetAddress

压缩文档

{
    "@context": {
        "displaName": "http://schema.org/name",
        "website": "http://schema.org/homepage",
        "icon": "http://schema.org/image",
        "streetNumber": "http://schema.org/streetAddress"
    },
    "displaName": "John Doe",
    "website": "http://example.com/",
    "icon": "http://example.com/images/test.png",
    "streetNumber": "123",
    "streetName": "Main St",
    "streetDirection": "South"
}

扩展文档

{
   "http://schema.org/name":[
      {
         "@value":"John Doe"
      }
   ],
   "http://schema.org/image":[
      {
         "@value":"http://example.com/images/test.png"
      }
   ],
   "http://schema.org/streetAddress":[
      {
         "@value":"123"
      }
   ],
   "http://schema.org/homepage":[
      {
         "@value":"http://example.com/"
      }
   ]
}

我已经查看了我能找到的所有 JSON-LD 规范,但未能找到任何指示使用 @context 拆分或连接值的方法的内容。

是否有人知道以正确的顺序将多个值映射到一个上下文 属性 并可能在值之间添加空格的方法。我还需要为相反的场景找到解决方案,在这种情况下,我需要以正确的顺序将一个字段拆分为多个值。

注意:即使我将所有三个属性都映射到 streetAddress,这些值也会全部包含在数组中,但不能保证它们的顺序正确。

实现此目的的一种可能方法是为包含有序地址组件的地址使用单个数组字段(即 ["number", "direction", "name"])。然后在 @context 中,您可以将 address 指定为 @container: @list,这将确保地址组件的顺序正确。

因此压缩后的文档将是:

{
    "@context": {
        "displaName": "http://schema.org/name",
        "website": "http://schema.org/homepage",
        "icon": "http://schema.org/image",
        "address": {
          "@id": "http://schema.org/streetAddress",
          "@container": "@list"
        }
    },
    "displaName": "John Doe",
    "website": "http://example.com/",
    "icon": "http://example.com/images/test.png",
    "address": ["123", "South", "Main St"]
}

扩展后的是

  {
    "http://schema.org/streetAddress": [
      {
        "@list": [
          {
            "@value": "123"
          },
          {
            "@value": "South"
          },
          {
            "@value": "Main St"
          }
        ]
      }
    ],
    "http://schema.org/name": [
      {
        "@value": "John Doe"
      }
    ],
    "http://schema.org/image": [
      {
        "@value": "http://example.com/images/test.png"
      }
    ],
    "http://schema.org/homepage": [
      {
        "@value": "http://example.com/"
      }
    ]
  }

我在 jsonld.js Github 存储库上发布了一个问题。根据 jsonld.js 库的原始创建者 @dlongley 的说法,使用标准 JSON-LD 无法操纵此庄园中的属性。

https://github.com/digitalbazaar/jsonld.js/issues/115