问题描述
我们使用的是 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/"
}
}
解决方法
你只需要像这样的三个属性:
-
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'
您可以通过以下请求检索 cows
和 pigs
:
curl -L -X GET 'http://localhost:1026/v2/entities' \
-H 'fiware-servicepath: /#'
因此,如果您的关系是跨层次结构,则您只需在检索实体时提供带有通配符服务路径 fiware-servicepath
的 /#
。
请注意,如果在更长的服务路径(例如 /animals/cows
和 animals/pigs
)下找到数据,则您可以根据需要使用 /animals/#
或 /#
。>
我根本不推荐使用 FIWARE 服务路径。您很容易最终得到一个 ID 重复且一团糟的系统。
在链接数据和分布式场景中,您可以拥有指向存在于多个代理或系统中的实体的指针,并且只需使用 URI 通过关系指向它们。