如何定义JSON-LD @context以连接/拆分值?

13

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

我找不到解决方案的用例是当多个值需要合并时。例如,schema.org定义了一个PostalAddress,其中只有一个字段用于streetAddress,但许多系统将街道地址存储为单独的值(街道号码、街道名称、街道方向...)。为了将传入的数据转换为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,这些值仍将包含在数组中,但无法保证它们的顺序是正确的。

2个回答

3
一种实现方式是使用单个数组字段来存储地址,包含有序的地址组成部分(例如["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/"
      }
    ]
  }

感谢回答。不幸的是,我需要保持原始文档的完整性。问题的目的是找到一种使用上下文处理翻译的方式,假设我不是提供输入数据的人。 - Brian Shamblen
好的,我明白了,对于误解我感到抱歉。也许我知道另一种方法,让我去查一下。尽管字段必须保持不变,但您是否对@context拥有完全控制权? - Val
是的。我正在尝试创建一种方法,允许用户将API输出映射到通用格式。我已经有一个工作的UI,可以允许一对一的映射,但是从json-ld处理器的文档中,我还没有能够弄清楚如何在源文档中操作数据,除了将键映射到它们各自的词汇表。 - Brian Shamblen

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接