メインコンテンツまでスキップ

使用例

構成

ここでは、コンテナデータの取扱いについて、以下のシステム構成を例に説明します。

図 3-1: 構成図

以下の項目ごとに説明します。

  • コンテナデータの作成方法
  • コンテナデータの利用方法

コンテナデータの作成方法

構成図の左側に注目し、ここでは、センサデータ取得からコンテナの作成方法を説明します。

図 3-2: 構成図上での注目ポイント

コンテナデータは以下の構造です。

Alt text

図 3-3: コンテナフォーマット(再掲)

コンテナは、仕様に従ったヘッダと自由なペイロードから構成されます。 コンテナを作成するためには、格納するデータに適切なヘッダを付加する必要があります。

具体的には、ペイロードの前方に必要なヘッダを作成し、それらを結合することによってコンテナデータを作成します。

ここでは拡張パート(Extended Part)を使用しないコンテナを作ります。

コンテナデータ作成の具体例

コンテナデータを作成するためには、まず準備が必要です。 ペイロードはセンサデータをそのまま用いるため、 まずヘッダを構成する複数のフィールドについて、それぞれの必要な値を用意します。

図 3-4: コモンパートの構成(再掲)

  1. Container Type
    コンテナタイプを設定します。
    このフィールドは実現するサービスによって自由に選択するものであり、 センサの種類や装置のベンダー、作られるデータを根拠に選択するものではありません。

    ここでは、「リアルタイム扱いなし、拡張パートなし、コンテナの Fragment なし」を示す 0xAAAAコンテナタイプの一覧[Link]から選択します。

  2. Container Length
    コンテナの全体長を設定します。
    コンテナ全体の長さは、図 3-4:コモンパートの構成に示した length の和です。 Data ID Length は 0x10 とするので以下の計算結果が Container Length です。

    (0x02 + 0x02 + 0x01 + 0x01 + 0x10) + 0x38 = 0x4E

    Container Length は 2byte なので、0x004Eです。

  3. Data ID Type
    Data ID の種類を設定します。

    ここでは Data ID に 16 バイトの UUID を使用するため、 0x00 を設定します。 コンテナタイプの一覧[Link] を参照すると、0x00 は UUID を DataID として使用する場合の指定値であることがわかります。

  4. Data ID Length
    Data ID の長さを設定します。

    ここでは、16 バイトの UUID を使用するため Data ID Length は 16 バイト を示す、0x10 の1バイトとします。

  5. Data ID
    Data ID を設定します。
    スキーマリポジトリ内で他の Data ID と重複しないように、自由に値を決定します。

    ここでは、UUID を使うため 16 バイトの値が必要です。
    00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF を設定します。

  6. Payload
    コンテナデータに設定する Payload です。 ここでは、センサから取得した 0x38 byte のデータがあるものとします。

ここまでで、ヘッダとペイロードの準備ができたので表 3-1:コンテナデータの例 にまとめます。

表 3-1: コンテナデータの例

header field namelengthhex value
Data ID0x02AA AA
Container Length0x0200 4E
Data ID Type0x0100
Data ID Length0x0110
Data ID0x1000 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
(Payload)0x3800 00 01 83 AC 9B 68 82 C0 0C FE 19 BE 8D 35 A8 C0 10 8E 4F 9A 4F 34 D6 C0 16 A0 0D 7A E1 47 AE 40 1C C2 A8 77 EC 15 97 40 40 5A 19 88 95 BC 73 C0 3D D8 31 5C FF D6 1B

表の hex value 列に示された値を、順に結合したバイト列が、コンテナフォーマットの仕様を満たしたコンテナデータです。

以上で、ヘッダのコモンパートとペイロードを用いた、コンテナデータの作成手順についての具体例を示しました。

コンテナデータの利用方法

構成図の右側に注目し、コンテナを受信して必要な情報を利用する手順について説明します。

図 3-5: 構成図上での注目ポイント

コンテナを利用するための以下のように大まかな利用の流れを説明します。

  • ヘッダとペイロードの分割
  • スキーマリポジトリからのスキーマ情報取得
  • スキーマ情報を用いたペイロードの利用

その後、コンテナデータを利用するための具体な例についても説明します。

ヘッダとペイロードの分割

コンテナから情報を取り出すためには、コンテナをヘッダとペイロードに分割し、ヘッダの各フィールドの情報を取り出します。
以下、図 3-6: ヘッダとペイロードの分割 処理のイメージ を参考にしてください。

コンテナの処理

図 3-6: ヘッダとペイロードの分割 処理のイメージ

これによって各ヘッダに含まれる情報と、ペイロードのデータが取得できます。

スキーマリポジトリからのスキーマ情報取得

スキーマリポジトリからスキーマ情報を取得する手順について説明します。

この手順では、コンテナヘッダの Data ID Type と Data ID を用いて、スキーマリポジトリからスキーマ情報を取得します。

スキーマの取得

図 3-7: スキーマリポジトリからのスキーマ情報取得

スキーマリポジトリからスキーマ情報を取得する際には、仕様上決められた手続きや手順はありません。
そのため、スキーマリポジトリの実装に合わせた方法でスキーマ情報を取得する必要があります。

スキーマ情報を用いたペイロードの利用

スキーマ情報はペイロードの持つデータ構造やデータ型を示したもので外部ファイルとして提供されます。 この情報には、コンテナフォーマットの仕様に定められた項目が含まれます。

スキーマ情報を用いてペイロードを読み込むことで情報を利用できます。

下図 3-8:はスキーマ情報を用いて、ペイロードから情報を取り出す手順を示したものです。

スキーマの取得

図 3-8: スキーマ情報を用いたペイロードの利用

スキーマ情報によって、ペイロードの中から、スキーマ情報上で指定された名前や型(数値や文字列型)を持つセンサデータの組が取得できます。

コンテナデータ利用の具体例

先程の具体例で作成したコンテナデータを対象に、以下にコンテナデータの利用方法の一例を示します。

ヘッダとペイロードの分割例

コンテナを受取ったシステムは、コンテナフォーマットの仕様に従い、ヘッダフィールドの値を取得します。

例えば、Data ID は 6byte 目から Data ID Length(0x10 バイト)読み取った結果であるということになります。

表 3-2:コンテナデータの例(ヘッダとペイロード分割済)

header field nameoffsetlengthhex value(16 進数)
Container Type02AA AA
Container Length2200 4E
Data ID Type4100
Data ID Length5110
Data ID60x1000 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
(Payload)6 + 0x100x004E - (6 + 0x10)00 00 01 83 AC 9B 68 82 C0 0C FE 19 BE 8D 35 A8 C0 10 8E 4F 9A 4F 34 D6 C0 16 A0 0D 7A E1 47 AE 40 1C C2 A8 77 EC 15 97 40 40 5A 19 88 95 BC 73 C0 3D D8 31 5C FF D6 1B

コンテナ作成側の意図するようにコンテナヘッダやペイロードに分割できます。

スキーマリポジトリからのスキーマ情報取得例

Data ID Type と Data ID を用いて、スキーマリポジトリから対応するスキーマ情報を取得します。
ここで、スキーマリポジトリは上記の 2 つの情報に基づいて対応するスキーマ情報を提供します。

ここでは、Data ID Type(0x00)と Data ID(0x00112233445566778899AABBCCDDEEFF) で得られたスキーマ情報は以下とします。

表 3-3: (表 3-2:)のコンテナデータに対応するスキーマ情報

field nametypeoffsetlength
dtint08
xfloat88
yfloat168
zfloat248
alphafloat328
betafloat408
gammafloat488

スキーマ情報は表 3-3:の列の情報で構成されます。

このスキーマ情報を用いてペイロードを利用します。

スキーマ情報を用いたペイロードの利用例

スキーマ情報を利用して、ペイロードから情報を読みます。

ペイロードは以下の 56byte(0x38) のデータ列です。

00 00 01 83 AC 9B 68 82 C0 0C FE 19 BE 8D 35 A8 C0 10 8E 4F 9A 4F 34 D6 C0 16 A0 0D 7A E1 47 AE 40 1C C2 A8 77 EC 15 97 40 40 5A 19 88 95 BC 73 C0 3D D8 31 5C FF D6 1B

スキーマ情報に従って、以下の手順でペイロードを分割し各フィールドごとの値に変換します。

  1. スキーマ情報に対応した position(データ位置) とlength(データ長) でペイロードを切り分けます。
  2. type(種類)に従い、データ列(hex value)を値にする。

最初の工程を実施すると、以下の表 3-4:になります。

表 3-4: スキーマ情報を用いたペイロードの切り分け

field namepostionlengthhex value(raw)
dt0800 00 01 83 ac 9b 68 82
x88c0 0c fe 19 be 8d 35 a8
y168c0 10 8e 4f 9a 4f 34 d6
z248c0 16 a0 0d 7a e1 47 ae
alpha32840 1c c2 a8 77 ec 15 97
beta40840 40 5a 19 88 95 bc 73
gamma488c0 3d d8 31 5c ff d6 1b

各フィールドに対応するバイト列が取り出せました。 ここで得られた各フィールドに対応するバイト列を type に基づいて値に変換することで以下の表 3-5:が得られます。

表 3-5: スキーマ情報を用いたペイロードの利用

field namehex value(raw)typevalue
dt00 00 01 83 ac 9b 68 82int1665048209538
xc0 0c fe 19 be 8d 35 a8float-3.624072540935874
yc0 10 8e 4f 9a 4f 34 d6float-4.138975535473227
zc0 16 a0 0d 7a e1 47 aefloat-5.6563014221191406
alpha40 1c c2 a8 77 ec 15 97float7.190095781120724
beta40 40 5a 19 88 95 bc 73float32.70390422164282
gammac0 3d d8 31 5c ff d6 1bfloat-29.844503223857924

上記の表から xフィールドに着目し、バイト列をtype に基づいて値にする手順を説明します。

type が float の場合、バイト列は IEEE 754 形式の 8 バイトの浮動小数点実数(倍精度浮動小数点実数)を示します。

したがって、切り分けたバイト列は浮動小数点実数として読み取ります

ここでは、c0 0c fe 19 be 8d 35 a8 というバイト列から -3.624072540935874 という値を利用できます。 この変換は、ほとんどのプログラミング言語で準備されている機能を用いて実現できます。

このように、スキーマ情報に従って整理された情報は、 フィールド名に対応する値として整理され、各種の処理に利用できます。

まとめ

  • コンテナフォーマットに従ってコンテナデータの作成する手順とコンテナデータを利用する方法について示しました。
  • スキーマ情報について、その具体的な内容とペイロードの読み込みにおいての利用方法を示しました。
  • スキーマリポジトリがコンテナデータに対応するスキーマ情報を提供する役割を示しました。

コンテナヘッダの拡張パートについての具体例は含まれていませんが、コンテナフォーマットの技術的な基礎についての説明が記述されています。