我们可以使用关系交叉引用不同服务路径中的实体吗?

问题描述

我们使用的是 FIWARE Orion NGSI V2 版本。我们正在尝试创建一个数据模型,其中实体存在于不同的服务路径中,并且这些实体通过关系相互连接。

我们检查了 FIWARE 文档,但没有找到有关如何实现这一点的任何答案。

请在附件中找到我们正在努力实现的目标的图示。还有我们正在使用的 FIWARE Orion 版本。要在不同服务路径中的实体之间创建“连接到”关系。能否请您指导我们如何实现这一目标。

{
"orion" : {
  "version" : "2.4.0-next","uptime" : "0 d,0 h,1 m,7 s","git_hash" : "4f26834ca928e468b091729d93dabd22108a2690","compile_time" : "Tue Mar 31 16:21:23 UTC 2020","compiled_by" : "root","compiled_in" : "3369cff2fa4c","release_date" : "Tue Mar 31 16:21:23 UTC 2020","doc" : "https://fiware-orion.rtfd.io/"
}

}

enter image description here

解决方法

你只需要像这样的三个属性:

  • XXXSource,为实体的de ID
  • XXXSourceType,用于实体类型
  • XXXSourcePath,为实体的服务路径

其中 XXX 是指定关系名称的标记,如果您需要区分它们中的许多。例如:

  • managerSource
  • managerSourceType
  • managerSourcePath

其他命名变体也是可能的,例如

  • refXXX
  • refXXXType
  • refXXXPath
,

fiware-servicepath 标头旨在以分层方式在逻辑上划分系统,默认情况下假定为 / 层次结构。

如果您创建以下内容:

curl -L -X POST 'http://localhost:1026/v2/entities/' \
-H 'fiware-servicepath: /pigs' \
-d {
    "id": "urn:ngsi-ld:Animal:001","type": "Animal",}'
curl -L -X POST 'http://localhost:1026/v2/entities/' \
-H 'fiware-servicepath: /cows' \
-d {
    "id": "urn:ngsi-ld:Animal:002",}'

您只能通过请求以下内容来检索 cows

curl -L -X GET 'http://localhost:1026/v2/entities' \
-H 'fiware-servicepath: /cows' 

您可以通过以下请求检索 cowspigs

curl -L -X GET 'http://localhost:1026/v2/entities' \
-H 'fiware-servicepath: /#' 

因此,如果您的关系是跨层次结构,则您只需在检索实体时提供带有通配符服务路径 fiware-servicepath/#

请注意,如果在更长的服务路径(例如 /animals/cowsanimals/pigs)下找到数据,则您可以根据需要使用 /animals/#/#。>

,

我根本不推荐使用 FIWARE 服务路径。您很容易最终得到一个 ID 重复且一团糟的系统。

在链接数据和分布式场景中,您可以拥有指向存在于多个代理或系统中的实体的指针,并且只需使用 URI 通过关系指向它们。