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インタフェースを実装するクラスのインスタンスを返します。クラスには、次のロジックが含まれています。

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

  2. 現在の設備に関する情報をフェッチします

  3. 着信データを個別のIMD構造に分割します

  4. これらの構造を設備情報で拡張します

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

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

  1. プレーンXML書式の着信メッセージをIMDシーダーXMLノードに変換します

  2. 指定された結果リストに新しい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へのマッピング

ペイロード・トランスフォーマ・スクリプトは、次のことを実行します。

  1. SGGペイロード処理構成フィールド「IMDシーダーBO(インターバル)」に定義されている名前でXML要素を作成し、すべての要素をプレーンXMLから新しい要素の子ノードとしてコピーします。

  2. setOriginメソッドで保存された値を移入したexternalId要素を挿入します。

  3. setConfigurationメソッドで保存された値を移入したserviceProviderExternalId要素を挿入します。

  4. SGGペイロード処理構成の「RAWの移入」チェックボックスが選択されている場合は、プレーンXML要素のテキストXML表現が移入されたrawData要素を挿入します。