カンマ区切り値書式
ここでは、カンマ区切り値書式のサンプルの実装について説明します。
サンプル・ファイル書式
このサンプルでは、データはカンマ区切り値ファイルとして保存されています。
注意: この例の値には、リテラルのカンマ文字を使用できません。この制限は、ファイル・パーサーの実装を簡単にするために追加されています。この制限を回避するために、解析ロジックを再実装できます。残りの機能には影響しません。
サンプル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インタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。
-
CSV書式の着信ペイロードを解析します。
-
着信データを着信データ型に基づいて使用またはイベント関連の構造に変換します
-
その構造をプレーン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パラメータの詳細は、「共通パラメータ」を参照してください。
-
LineReaderChunked.readLineWithinChunk()メソッドを使用して、着信ペイロードから行を読み取ります
-
前のステップで読み取られた着信ペイロード(CSV形式)の行を解析します。
-
着信データを着信データ型に基づいて使用またはイベント関連の構造に変換します
-
その構造をプレーンXML書式で1つずつ返します
DG_SmplTrCSV: このサンプル・スクリプトには、ライブラリ・インタフェースに1つのメソッド – getTransformer()が含まれています。メソッドは、com.splwg.d1.domain.sgg.dg.processing.PayloadTransformerインタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。
-
プレーンXML書式の着信メッセージをネイティブ書式(IMDシーダーまたは設備イベント・シーダーのXMLノード)に変換します。
-
指定された結果リストに新しい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からシーダー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の移入」チェックボックスが選択されている場合。 |