XML書式
ここでは、XML書式のサンプルの実装について説明します。
サンプル・ファイル書式
ファイル書式は、「オンラインでのIMDとイベントのアップロード」画面のオンラインでのIMDアップロードのヒントに説明されています。(「メニュー」、「通信」、「IMD/イベント(XML)のロード」の順に選択)。
サンプル・ファイル
<deviceList>
<device>
<headEnd>L&G</headEnd>
<headEndExternalId>L+G</headEndExternalId>
<deviceId></deviceId>
<deviceIdentifierNumber>DEV-OUSGG-OSB-DEMO-001</deviceIdentifierNumber>
<initialMeasurementDataList>
<initialMeasurementData>
<preVEE>
<mcIdN></mcIdN>
<uom>KWH</uom>
<stDt>2010-05-19-00.00.00</stDt>
<enDt>2010-05-19-00.30.00</enDt>
<spi>900</spi>
<msrs>
<mL>
<s>1</s>
<q>0.2316</q>
</mL>
<mL>
<s>2</s>
<q>0.1416</q>
</mL>
</msrs>
</preVEE>
</initialMeasurementData>
<initialMeasurementData>
<initialMeasurementDataId>testValue</initialMeasurementDataId>
<preVEE>
<mcIdN></mcIdN>
<uom>KWH2</uom>
<stDt>2010-05-19-00.30.00</stDt>
<enDt>2010-05-19-01.00.00</enDt>
<spi>900</spi>
<msrs>
<mL>
<s>1</s>
<q>1.2316</q>
</mL>
<mL>
<s>2</s>
<q>2.1416</q>
</mL>
</msrs>
</preVEE>
</initialMeasurementData>
</initialMeasurementDataList>
</device>
</deviceList>
サンプル・スクリプト
サンプルの実装には、前述のXML書式で使用するように設計された、次のサンプル・スクリプトが含まれています。
DG_SmplPrXML: このサンプル・スクリプトには、ライブラリ・インタフェースに1つのメソッド – getParser()が含まれています。メソッドは、com.splwg.d1.domain.sgg.dg.processing.PayloadParserインタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。
-
XML書式の着信ペイロードを解析します
-
現在の設備に関する情報をフェッチします
-
着信データを個別のIMD構造に分割します
-
これらの構造を設備情報で拡張します
-
それらの構造をプレーンXML書式で1つずつ返します
DG_SmplTrXML: このサンプル・スクリプトには、ライブラリ・インタフェースに1つのメソッド – getTransfprmer()が含まれています。メソッドは、com.splwg.d1.domain.sgg.dg.processing.PayloadTransformerインタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。
-
プレーンXML書式の着信メッセージをIMDシーダーXMLノードに変換します
-
指定された結果リストに新しいXMLノードを子ノードとして追加します
これらのスクリプトを詳細に表示するには、スクリプト・ポータルを使用します。
解析
XMLパーサー・スクリプトは、前述のXML書式からプレーン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へのマッピング
ペイロード・トランスフォーマ・スクリプトは、次のことを実行します。
-
SGGペイロード処理構成フィールド「IMDシーダーBO(インターバル)」に定義されている名前でXML要素を作成し、すべての要素をプレーンXMLから新しい要素の子ノードとしてコピーします。
-
setOriginメソッドで保存された値を移入したexternalId要素を挿入します。
-
setConfigurationメソッドで保存された値を移入したserviceProviderExternalId要素を挿入します。
-
SGGペイロード処理構成の「RAWの移入」チェックボックスが選択されている場合は、プレーンXML要素のテキストXML表現が移入されたrawData要素を挿入します。