カンマ区切り値書式

ここでは、カンマ区切り値書式のサンプルの実装について説明します。

サンプル・ファイル書式

このサンプルでは、データはカンマ区切り値ファイルとして保存されています。

注意: この例の値には、リテラルのカンマ文字を使用できません。この制限は、ファイル・パーサーの実装を簡単にするために追加されています。この制限を回避するために、解析ロジックを再実装できます。残りの機能には影響しません。

サンプルCSVファイルには、次のレコード・タイプが含まれています。

インターバル使用: インターバル使用の測定に使用

設備イベント: 設備イベントに使用

証跡レコード: 読取日時およびファイル内のインターバル使用および設備イベントのレコード数を提供するために使用

インターバル使用書式

番号

フィールド名

タイプ

定義

1

レコード・タイプID

定数値「U」

レコード・タイプ識別子

2

開始日時

Unix時間書式での時間。

検針の開始日時

3

終了日時

Unix時間書式での時間。

検針の終了日時

4

設備ID

任意のテキスト

設備識別子

5

インターバル期間

整数

検針の秒単位での間隔(秒/インターバル)。

6

単位

任意のテキスト

データ値の単位の説明

7

データ・エントリ

「:」で区切られた浮動小数点数およびオプションの任意のテキスト

各レコードには、データ・エントリ・フィールドを数に制限なく含めることができます。各データ・エントリは、検針値とオプションの検針ステータス・フラグの2つのフィールドのセットです。フィールドは「:」文字で区切られます。検針ステータス・フラグが指定されていない場合、セパレータはありません。

設備イベント書式

番号

フィールド名

タイプ

定義

1

レコード・タイプID

定数値「E」

レコード・タイプ識別子

2

イベント日時

Unix時間書式での時間。

イベントが発生した日時

3

設備ID

任意のテキスト

設備識別子

4

イベント名

任意のテキスト

イベントの主ID名

証跡レコード書式

番号

フィールド名

タイプ

定義

1

レコード・タイプID

定数値「T」

レコード・タイプ識別子

2

作成日時

Unix時間書式での時間。

検針の開始日時

3

レコード合計

整数

ファイル内のレコード数を表示

サンプル・ファイル

U,1,86400,DEVICE_DG_0,900,KWH,1:S,2.5,-3.99:R,4:B
E,86400,DEVICE_DG_1,Power Outage
U,2,86400,DEVICE_DG_2,900,KWH,1:S,2,3:R,4:B,5,6,7:A
E,86402,DEVICE_DG_3,Tamper attempt suspected
U,3,86400,DEVICE_DG_4,900,KWH,1:S
T,86401,5

サンプル・スクリプト

サンプルの実装には、前述のCSV書式で使用するように設計された、次のサンプル・スクリプトが含まれています。

DG_​SmplPrCSV: このサンプル・スクリプトには、ライブラリ・インタフェースに1つのメソッド – getParser()が含まれています。メソッドは、com.splwg.d1.domain.sgg.dg.processing.PayloadParserインタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。

  1. CSV書式の着信ペイロードを解析します。

  2. 着信データを着信データ型に基づいて使用またはイベント関連の構造に変換します

  3. その構造をプレーンXML書式で1つずつ返します

DG_​SmPrCSVCh: このスクリプトは、ヘルパーを使用してCSV形式をチャンク(chunkSizeパラメータで作成される)で解析する方法を示すサンプルとして提供されています。このサンプル・スクリプトには、ライブラリ・インタフェースに1つのメソッド – getParser()が含まれています。このメソッドは、com.splwg.d1.domain.sgg.dg.processing.ChunkProcessorインタフェースおよびcom.splwg.d1.domain.sgg.dg.processing.GenericPayloadインタフェースを実装するクラスのインスタンスを返します。

ChunkProcessorインタフェースは、チャンク対応プロセッサとその他の実装を区別します。Groovyに実装されたカスタム・パーサーは、このインタフェースを実装できます。GenericPayloadインタフェースは、特定のヘルパーを介してペイロードにアクセスするために必要なメソッドを定義します。このインタフェースを介して、カスタム・パーサーはLineReaderChunkedのインスタンスにアクセスします。

chunkSize動的パラメータがSGGペイロード処理構成で設定されていない場合、ペイロード全体が処理されます。chunkSizeパラメータの詳細は、「共通パラメータ」を参照してください。

クラスには、次のロジックが含まれています。
  1. LineReaderChunked.readLineWithinChunk()メソッドを使用して、着信ペイロードから行を読み取ります

  2. 前のステップで読み取られた着信ペイロード(CSV形式)の行を解析します。

  3. 着信データを着信データ型に基づいて使用またはイベント関連の構造に変換します

  4. その構造をプレーンXML書式で1つずつ返します

DG_​SmplTrCSV: このサンプル・スクリプトには、ライブラリ・インタフェースに1つのメソッド – getTransformer()が含まれています。メソッドは、com.splwg.d1.domain.sgg.dg.processing.PayloadTransformerインタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。

  1. プレーンXML書式の着信メッセージをネイティブ書式(IMDシーダーまたは設備イベント・シーダーのXMLノード)に変換します。

  2. 指定された結果リストに新しいXMLノードを子ノードとして追加します。

これらのスクリプトを詳細に表示するには、スクリプト・ポータルを使用します。

解析

パーサー・スクリプトは、次のデータ・マッピングを実行します。

インターバル使用からプレーンXMLへのマッピング

次の表は、着信インターバル・データのフィールドと、プレーンXML書式のペイロード/使用量要素の子要素の間のマッピングを示しています。

インターバル使用フィールド プレーンXML要素

レコード・タイプID

RecordType

開始日時

StartDateTime

終了日時

EndDateTime

設備ID

DeviceId

インターバル期間

IntervalDuration

単位

単位

データ・エントリ

Intervals/

Interval/

[Status]

着信ファイルからのレコード・コンテンツ。

RawData

設備イベントからプレーンXMLへのマッピング

次の表は、着信インターバル・データのフィールドと、プレーンXML書式のペイロード/イベント要素の子要素の間のマッピングを示しています。

設備イベント・フィールド プレーンXML要素

レコード・タイプID

RecordType

イベント日時

DateTime

設備ID

DeviceId

イベント名

Name

着信ファイルからのレコード・コンテンツ。

RawData

プレーンXML書式のXMLスキーマ

プレーンXMLは、インターバル使用と設備イベントに関連する要素で同時に構成されます。

<xs:schema attributeFormDefault="unqualified" 
elementFormDefault="qualified" 
targetNamespace="http://xmlns.oracle.com/GenericAdapter" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:ga="http://xmlns.oracle.com/GenericAdapter">
  <xs:element name="Payload" type="ga:PayloadType"/>
  <xs:complexType name="PayloadType">
    <xs:sequence>
      <xs:choice>
        <xs:element name="Usage" type="ga:UsageType"/>
        <xs:element name="Event" type="ga:EventType"/>
      </xs:choice>
      <xs:element name="RawData"  type="ga:NonEmptyString"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="UsageType">
    <xs:sequence>
      <xs:element name="RecordType" type="ga:RecordTypeUsageType"/>
      <xs:element name="StartDateTime" type="xs:integer"/>
      <xs:element name="EndDateTime" type="xs:integer"/>
      <xs:element name="DeviceId" type="ga:NonEmptyString"/>
      <xs:element name="IntervalDuration" type="xs:integer"/>
      <xs:element name="UOM" type="ga:NonEmptyString"/>
      <xs:element name="Intervals" type="ga:IntervalList"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="RecordTypeUsageType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="U"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="IntervalList">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="Interval" type="ga:IntervalType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="IntervalType">
    <xs:sequence>
      <xs:element name="Value" type="xs:float"/>
      <xs:element name="Status" type="ga:NonEmptyString" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="EventType">
    <xs:sequence>
      <xs:element name="RecordType" type="ga:RecordTypeEventType"/>
      <xs:element name="DateTime" type="xs:integer"/>
      <xs:element name="DeviceId" type="ga:NonEmptyString"/>
      <xs:element name="Name" type="ga:NonEmptyString"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="RecordTypeEventType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="E"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NonEmptyString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
注意: 現在のプレーンXML構造を生成するために使用された着信ファイルの一部は、Payload/RawData要素に配置されます。

変換

トランスフォーマ・スクリプトは、次のデータ・マッピングを実行します。

プレーンXMLからシーダーXMLへのマッピング

ペイロード・トランスフォーマは、次のようにIMDまたは設備イベント(あるいはその両方)のシーダーXML要素を作成します。

使用マッピング: 「Payload/*」ノードの名前が「Usage」(インターバル使用)と等しい場合は、スクリプトにより、SGGペイロード処理構成フィールド「IMDシーダーBO(インターバル)」に定義されている名前と、次のマッピング表に従った構造を使用してXML要素が作成されます。

プレーンXML要素

IMDシーダー要素

特記

RecordType

該当なし

DeviceId

dvcIdN

単位

externalUOM

IntervalDuration

spi

StartDateTime

stDt

OUAF dateTimeタイプへの変換

EndDateTime

enDt

OUAF dateTimeタイプへの変換

Intervals/

Interval/

Value [Status]

msrs

msrs/mL/q

Status ->

msrs/mL/sts/stsL/st

該当なし

imdType

定数値「D1IL」

externalId

setOriginメソッドに保存される値。

serviceProviderExternalId

setConfigurationメソッドに保存される値。

RawData

rawData

SGGペイロード処理構成の「RAWの移入」チェックボックスが選択されている場合。

設備イベント・マッピング: 「Payload/*」ノードの名前が「Event」(設備イベント・データ)と等しい場合は、SGGペイロード処理構成フィールド「設備イベント・シーダーBO」に定義されている名前と、次のマッピング表に従った構造を使用してXML要素が作成されます。

プレーンXML要素

設備イベント・シーダー要素

特記

RecordType

該当なし

DateTime

eventDateTime

OUAF dateTimeタイプへの変換

DeviceId

externalUOM

Name

externalEventName

externalSourceIdentifier

setOriginメソッドに保存される値。

externalSenderId

setConfigurationメソッドに保存される値。

RawData

rawEventInformation

SGGペイロード処理構成の「RAWの移入」チェックボックスが選択されている場合。