是否有将 FIWARE NGSI-LD 实体表示迁移到 NGSI-v2 的标准化方法?

问题描述

我已经找到了 FIWARE-Community 的 this script,它将 NGSI-v2 规范化表示转换为 NGSI-LD 表示。

相反方向有类似的东西吗?我知道大多数步骤都可以向后完成。但是,我不确定转换回 "type": "Property" 节点的通常程序。

例如,给定一个 NGSI-v2 实体表示:

{
    "id": "Store:001","type": "Store","name": {
        "type": "Text","value": "Checkpoint Markt"
    }
}

在此运行脚本将导致:

{
    "@context": [
        https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
    ],"id": "urn:ngsi-ld:Store:Store:001","name": {
        "type": "Property,"value": "Checkpoint Markt"
    }
}

因此在这种情况下,将 "type": "Property" 节点转换回 "type": "Text" 非常困难。

但鉴于以下 NGSI-v2 实体表示:

{
    "type": "Store","id": "Store:002","address": {
        "type": "PostalAddress","value": {
            "streetAddress": "Friedrichstraße 44","addressRegion": "Berlin","addressLocality": "Kreuzberg","postalCode": "10969"
        }
    }
}

将转换为:

{
    "@context": [
        https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
    ],"id": "urn:ngsi-ld:Store:Store:002","address": {
        "type": "Property","value": {
            "streetAddress": "Friedrichstra\u00dfe 44","postalCode": "10969","type": "PostalAddress"
        }
    }
}

这是由脚本中的一个特殊情况引起的:

if attr['type'] == 'PostalAddress':
    ld_attr['value']['type'] = 'PostalAddress'

难道不能用这样一个 "type": _-pair 的值来扩展所有转换后的属性吗?或者是否有理由在代码中将其限制为“PostalAddress”类型?否则,是否有任何规范将这些 "type": "Property" 节点转换回?

解决方法

我不是 NGSI-LD 方面的专家,但这种特殊情况的转换可以通过这种方式解决:

  • 如果 Property 在其 type 中有 value,则将其用于 NGSIv2 中的属性类型(如您展示的“PostalAddress”案例)
  • 如果 Property 在其 type 中没有任何 value,则使用 NGSIv2 specification“部分表示”部分中指定的默认类型作为属性 type .例如,如果 value"Checkpoint Markt"(这是一个字符串),那么 NGSIv2 中的属性类型将对应于 "Text"
,

从 NGSI-LD 转换为 NGSIv2 不是一个好主意。

NGSI-LD >> NGSIv2 ...在这种情况下,您可能需要从 NGSIv2 转换为 NGSI-LD,以便您更具互操作性,但反过来...如果那样做,您可能需要重新考虑是明智的...