如何实施一个FIWARE项目
How to implement a FIWARE project
大家好,完成有关 NGSI-LD 的教程后:
https://github.com/fiware/tutorials.NGSI-LD/
我目前正在尝试实现我的数据模型并面临多个问题。
首先我知道什么是 JSON、JSON-LD 和 NGSI-LD,以及上下文代理和 MongoDB 如何协同工作的基础知识。
我的问题是如何设置这样的项目。我没有找到任何关于如何设置项目的教程。我需要知道的要点是:
- 如何设置 orion 上下文代理
- 如何向上下文代理提供上下文文件
- 如何设置MongoDB
- 如何将以上所有内容连接到一个项目
现在我尝试使用以下教程将我的数据模型转换为 json-ld 和 ngsi-ld:
https://github.com/FIWARE/tutorials.Understanding-At-Context/tree/ba6ac22ce329ed8eaac6ef5f01266048dc84d244
之后我从像 CRUD-OPerations 这样的教程中删除了数据模型并插入了我的数据模型。但是当我开始教程并发出 POST 请求时,它会接受任何数据,而忽略数据模型。我可以创建具有不存在属性的数据模型中不存在的实体。如果我使用默认数据模型开始一个教程,也会出现同样的问题。所以它似乎总是忽略上下文文件。
在我使用 POST 写入一些数据并使用 GET 读取(两者都运行良好)并关闭项目之后,下一个问题出现了。重启教程后,我写的所有数据都被删除了。
我是不是没有真正理解 FIWARE 的全部要点,还是我做错了什么?
我将不胜感激从链接到详细解释的任何信息。
如上所述here, the NGSI-LD interface is a flexible API which outputs various JSON and JSON-LD格式化并用于数据交换。这些教程仅描述 接口的正确使用 。它们不包括生产部署。
After I restart the tutorial all data i have written is deleted.
教程就是这样 - 它们从零开始。 docker-file
中的 Mongo-DB 实例没有 persistent volume 并自行清理。
it accepts any data, ignoring the data-model.
那是因为 JSON-LD @context
不习惯 validate JSON data - you need a JSON schema for that. Technically the @vocab
element in the NGSI-LD core context @context
file pushes any unknown elements onto the so-called default context https://uri.etsi.org/ngsi-ld/default-context/
. The @context
file is simply providing a mechanism to standardize the attribute names into IRIs. Assuming you have created a Swagger/Open API file for your use case, then you can use the Swagger editor 生成服务器或客户端代码存根。在 Java 中执行此操作会导致 POJO 仅接受模型的属性。
How to setup the orion context broker
您可以使用提供的 docker-compose
作为入门的基础,但对于 Kubernetes 上的适当大规模部署,提供的 Helm Charts are recommended. The Orion-LD documentation 有更多详细信息。
How to provide the context File to the Context Broker
您将 @context
文件放在 public 网络服务器上。如何托管 @context
文件由您决定。教程使用 HTTPD for this purpose. The main idea behind an @context
is that you are publishing an agreed set of IRIs which correspond to the attributes in your data. Smart Data Models, Schema.org, GS1 并且许多其他机构生成 IRI,您应该重用它们并 link 给它们或发布您自己的 @context
描述您自己的世界。
一旦 @context
只需将 Link
header 附加到每个上下文代理请求。
'Link: <http://path/to/my/context/ngsi-context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"'
How to setup MongoDB
您可以阅读有关官方Mongo-DB图片的信息here - there are plenty of tutorials out there which discuss persistence-storage
如果您为每个正在使用的 NGSILD-Tenant
添加索引,您将获得更好的性能 - 默认名为 orion
:
conn = new Mongo();db.createCollection("orion");
db = conn.getDB("orion");
db.createCollection("entities");
db.entities.createIndex({"_id.servicePath": 1, "_id.id": 1, "_id.type": 1}, {unique: true});
db.entities.createIndex({"_id.type": 1});
db.entities.createIndex({"_id.id": 1});
How to connect all of the above together to a project
教程慢慢搭建了一个toy example,但显然水平很有限。这是一个非常广泛的主题 - 你最好进一步询问 training or consultancy via the FIWARE Marketplace or your local FIWARE iHub
大家好,完成有关 NGSI-LD 的教程后: https://github.com/fiware/tutorials.NGSI-LD/ 我目前正在尝试实现我的数据模型并面临多个问题。
首先我知道什么是 JSON、JSON-LD 和 NGSI-LD,以及上下文代理和 MongoDB 如何协同工作的基础知识。
我的问题是如何设置这样的项目。我没有找到任何关于如何设置项目的教程。我需要知道的要点是:
- 如何设置 orion 上下文代理
- 如何向上下文代理提供上下文文件
- 如何设置MongoDB
- 如何将以上所有内容连接到一个项目
现在我尝试使用以下教程将我的数据模型转换为 json-ld 和 ngsi-ld: https://github.com/FIWARE/tutorials.Understanding-At-Context/tree/ba6ac22ce329ed8eaac6ef5f01266048dc84d244
之后我从像 CRUD-OPerations 这样的教程中删除了数据模型并插入了我的数据模型。但是当我开始教程并发出 POST 请求时,它会接受任何数据,而忽略数据模型。我可以创建具有不存在属性的数据模型中不存在的实体。如果我使用默认数据模型开始一个教程,也会出现同样的问题。所以它似乎总是忽略上下文文件。
在我使用 POST 写入一些数据并使用 GET 读取(两者都运行良好)并关闭项目之后,下一个问题出现了。重启教程后,我写的所有数据都被删除了。
我是不是没有真正理解 FIWARE 的全部要点,还是我做错了什么?
我将不胜感激从链接到详细解释的任何信息。
如上所述here, the NGSI-LD interface is a flexible API which outputs various JSON and JSON-LD格式化并用于数据交换。这些教程仅描述 接口的正确使用 。它们不包括生产部署。
After I restart the tutorial all data i have written is deleted.
教程就是这样 - 它们从零开始。 docker-file
中的 Mongo-DB 实例没有 persistent volume 并自行清理。
it accepts any data, ignoring the data-model.
那是因为 JSON-LD @context
不习惯 validate JSON data - you need a JSON schema for that. Technically the @vocab
element in the NGSI-LD core context @context
file pushes any unknown elements onto the so-called default context https://uri.etsi.org/ngsi-ld/default-context/
. The @context
file is simply providing a mechanism to standardize the attribute names into IRIs. Assuming you have created a Swagger/Open API file for your use case, then you can use the Swagger editor 生成服务器或客户端代码存根。在 Java 中执行此操作会导致 POJO 仅接受模型的属性。
How to setup the orion context broker
您可以使用提供的 docker-compose
作为入门的基础,但对于 Kubernetes 上的适当大规模部署,提供的 Helm Charts are recommended. The Orion-LD documentation 有更多详细信息。
How to provide the context File to the Context Broker
您将 @context
文件放在 public 网络服务器上。如何托管 @context
文件由您决定。教程使用 HTTPD for this purpose. The main idea behind an @context
is that you are publishing an agreed set of IRIs which correspond to the attributes in your data. Smart Data Models, Schema.org, GS1 并且许多其他机构生成 IRI,您应该重用它们并 link 给它们或发布您自己的 @context
描述您自己的世界。
一旦 @context
只需将 Link
header 附加到每个上下文代理请求。
'Link: <http://path/to/my/context/ngsi-context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"'
How to setup MongoDB
您可以阅读有关官方Mongo-DB图片的信息here - there are plenty of tutorials out there which discuss persistence-storage
如果您为每个正在使用的 NGSILD-Tenant
添加索引,您将获得更好的性能 - 默认名为 orion
:
conn = new Mongo();db.createCollection("orion");
db = conn.getDB("orion");
db.createCollection("entities");
db.entities.createIndex({"_id.servicePath": 1, "_id.id": 1, "_id.type": 1}, {unique: true});
db.entities.createIndex({"_id.type": 1});
db.entities.createIndex({"_id.id": 1});
How to connect all of the above together to a project
教程慢慢搭建了一个toy example,但显然水平很有限。这是一个非常广泛的主题 - 你最好进一步询问 training or consultancy via the FIWARE Marketplace or your local FIWARE iHub