4

我们什么时候应该使用<flexContainer>而不是<container>我看到了一些<flexContainer>的用例示例,他们将<flexContainer>用于 SDT 设备。< flexContainer>是否仅用于 SDT 设备?

想象一下,我们创建了一个<container>,它被设计用来保存温度传感器的值。设备的实际值存储在 <contentInstance> 中,温度类型(摄氏度或华氏度)由<container>资源的语义描述符字段定义。但是,我们也可以在< flexContainer >的[customAttribute]字段中定义值及其类型。那么,在这种情况下,为什么要在 <container> 的语义描述符字段中定义数据类型或者为什么要使用<container>而不是 <flexContainer>呢?

TS-0023 文档中为某些设备定义了 SDT。如果设备制造商没有定义 SDT,并且我们想使用该设备,我们如何为其创建 SDT/XML 文件?

4

1 回答 1

5

<flexContainer> 在很多方面与普通的 <container> 资源不同:

  • <container> 资源不会在资源本身中存储实际值。<container> 的子资源,即。<contentInstance> 或进一步的 <container> 资源,做。相比之下,<flexContainer> 特化本身保存实际值。
  • <flexContainer> 本身不能直接实例化,它只是进一步特化的逻辑基础(非常类似于 OOP 中的基类)。它定义了许多支持这些特殊化的属性,例如containerDefinition属性包含一个标识符,该标识符定义了特定 <flexContainer> 资源的实际类型。<flexContainer> 特化然后指定一个定义良好的结构,该结构可能包含相当复杂的数据点结构。TS-0023 中提到的设备和模块类就是这样的专业,例如温度。这些专业具有定义明确的结构,包括语义、约束等。
  • <flexContainer> 的一大优点是它可以更新,而 <container> 中的 <contentInstance> 只能添加或删除。这也意味着,如果应用程序只需要设备的当前状态并且对旧数据值不感兴趣,则单个 <flexContainer> 特化(或多或少)是应用程序所需的一切。
  • <flexContainer> 特化中包含的所有数据点都是同时读取和写入的。在某些情况下,这会减少大量通信开销,并减少读取或写入许多数据点时出现竞争条件的机会。

致 SDT:智能设备模板是定义“乐高”功能块的规范方法,即所谓的“模块类”。然后可以使用这些 ModuleClasses 来构建原型“设备”。提到的 oneM2M 规范“TS-0023:家用电器信息模型和映射”指定了许多这些模块类和设备以及到 <flexContainer> 专业化的映射。这意味着对于“温度”功能/ModuleClass 的定义,有一个可用的 oneM2M <hd:temperature> 资源。

当您想使用 SDT 创建新的设备定义时,我建议您首先查看 TS-0023 中已定义的模块类和设备的列表。如果您需要的功能不可用,那么您可以通过编写自己的 SDT 文件来定义自己的 ModuleClass 和 Device。

SDT 定义可在https://git.onem2m.org/MAS/SDT获得。

TS-0023 中定义的 ModuleClasses 和 Devices 的最新版本 SDT 可在https://git.onem2m.org/MAS/Home-Appliances获得。

可以在https://github.com/Homegateway/SDTTool找到从 SDT 定义生成必要 XSD 的工具。

还有两个注意事项

  • CSE 是否允许自定义 <flexContainer> 特化取决于 CSE 实施和策略。
  • 在撰写本文时(2019 年 4 月),oneM2M 正在开发新版本的 SDT,该版本支持例如产品定义、更好的继承和进一步的语义支持。oneM2M 还致力于新版本的 TS-0023 规范,以支持跨域的物联网场景和设备,而不仅仅是家庭域。
于 2019-04-11T13:48:59.197 回答