问题描述
我已经找到了 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,以便您更具互操作性,但反过来...如果那样做,您可能需要重新考虑是明智的...