Itron現在値読取XSL変換
Oracle Utilities Smart Grid Gateway Adapter for Itron OpenWayは、複数のItron OpenWay APIバージョンをサポートしています。このサポートを実現するために、一部の要求XSLでは、ソース・スキーマに埋め込まれたバージョン番号がチェックされます。同様に、応答XSLは、様々なソースXMLを処理し、共通のSGG書式に値をマップするように設計されています。
Itron現在値読取プロセスでは、次のXSL変換が使用されます。
D8-ContRdByEndptsRequest.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://www.itron.com/ami/2008/10/data"
xmlns:ns2="http://www.itron.com/ami/2008/10/common"
xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<ContingencyReadByEndpoints xmlns="http://www.itron.com/ami/2008/10/data">
<xsl:apply-templates select="./requestEnvelope/ContingencyReadByEndpoints/*"/>
</ContingencyReadByEndpoints>
</xsl:template>
<xsl:template match="ElectronicSerialNumbers">
<xsl:element name="ns2:ElectronicSerialNumbers">
<xsl:for-each select="./string">
<xsl:element name="ns3:string">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="StatusChangedService">
<xsl:element name="ns2:StatusChangedService">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="Parameters">
<ns1:Parameters>
<ns1:ReadingStartTime><xsl:value-of select="./ReadingStartTime"/></ns1:ReadingStartTime>
<ns1:ReadingEndTime><xsl:value-of select="./ReadingEndTime"/></ns1:ReadingEndTime>
<xsl:if test="string-length(./PerformDemandReset) > 0">
<ns1:PerformDemandReset><xsl:value-of select="./PerformDemandReset"/></ns1:PerformDemandReset>
</xsl:if>
<xsl:if test="string-length(./RetrieveHomeNetworkData) > 0">
<ns1:RetrieveHomeNetworkData><xsl:value-of select="./RetrieveHomeNetworkData"/></ns1:RetrieveHomeNetworkData>
</xsl:if>
<xsl:if test="string-length(./RetrieveInstantaneousData) > 0">
<ns1:RetrieveInstantaneousData><xsl:value-of select="./RetrieveInstantaneousData"/></ns1:RetrieveInstantaneousData>
</xsl:if>
<xsl:if test="string-length(./RetrieveLastDemandReset) > 0">
<ns1:RetrieveLastDemandReset><xsl:value-of select="./RetrieveLastDemandReset"/></ns1:RetrieveLastDemandReset>
</xsl:if>
<xsl:if test="string-length(./RetrieveLoadProfileData) > 0">
<ns1:RetrieveLoadProfileData><xsl:value-of select="./RetrieveLoadProfileData"/></ns1:RetrieveLoadProfileData>
</xsl:if>
<xsl:if test="string-length(./RetrieveLogEvents) > 0">
<ns1:RetrieveLogEvents><xsl:value-of select="./RetrieveLogEvents"/></ns1:RetrieveLogEvents>
</xsl:if>
<xsl:if test="string-length(./RetrieveNetworkStatistics) > 0">
<ns1:RetrieveNetworkStatistics><xsl:value-of select="./RetrieveNetworkStatistics"/></ns1:RetrieveNetworkStatistics>
</xsl:if>
<xsl:if test="string-length(./RetrievePriorSelfRead) > 0">
<ns1:RetrievePriorSelfRead><xsl:value-of select="./RetrievePriorSelfRead"/></ns1:RetrievePriorSelfRead>
</xsl:if>
<xsl:if test="string-length(./RetrieveRecentRegisters) > 0">
<ns1:RetrieveRecentRegisters><xsl:value-of select="./RetrieveRecentRegisters"/></ns1:RetrieveRecentRegisters>
</xsl:if>
<xsl:if test="string-length(./RetrieveVoltageMonitorData) > 0">
<ns1:RetrieveVoltageMonitorData><xsl:value-of select="./RetrieveVoltageMonitorData"/></ns1:RetrieveVoltageMonitorData>
</xsl:if>
<xsl:if test="string-length(./ReportSelfReadOption) > 0">
<ns1:ReportSelfReadOption><xsl:value-of select="./ReportSelfReadOption"/></ns1:ReportSelfReadOption>
</xsl:if>
<xsl:if test="string-length(./RetrieveExtendedCurrentData) > 0">
<ns1:RetrieveExtendedCurrentData><xsl:value-of select="./RetrieveExtendedCurrentData"/></ns1:RetrieveExtendedCurrentData>
</xsl:if>
<xsl:if test="string-length(./RetrievePriorExtendedSelfReadData) > 0">
<ns1:RetrievePriorExtendedSelfReadData><xsl:value-of select="./RetrievePriorExtendedSelfReadData"/></ns1:RetrievePriorExtendedSelfReadData>
</xsl:if>
<xsl:if test="string-length(./RetrieveInstrumentationProfileData) > 0">
<ns1:RetrieveInstrumentationProfileData><xsl:value-of select="./RetrieveInstrumentationProfileData"/></ns1:RetrieveInstrumentationProfileData>
</xsl:if>
<xsl:if test="string-length(./RetrieveExtendedLoadProfileData) > 0">
<ns1:RetrieveExtendedLoadProfileData><xsl:value-of select="./RetrieveExtendedLoadProfileData"/></ns1:RetrieveExtendedLoadProfileData>
</xsl:if>
<xsl:if test="string-length(./RetrieveToolboxData) > 0">
<ns1:RetrieveToolboxData><xsl:value-of select="./RetrieveToolboxData"/></ns1:RetrieveToolboxData>
</xsl:if>
<xsl:if test="string-length(./RetrieveTemperatureMonitoringData) > 0">
<ns1:RetrieveTemperatureMonitoringData><xsl:value-of select="./RetrieveTemperatureMonitoringData"/></ns1:RetrieveTemperatureMonitoringData>
</xsl:if>
</ns1:Parameters>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://www.itron.com/ami/2008/10/data">
<xsl:apply-templates select="*|text()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
D8-ContRdByEndptsResponse.xsl
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.itron.com/ami/2008/10/data"
xmlns:com="http://www.itron.com/ami/2008/10/common"
exclude-result-prefixes="env ns1 com">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="env:Envelope">
<xsl:apply-templates select="./env:Body/*"/>
</xsl:template>
<xsl:template match="ns1:ContingencyReadByEndpointsResponse">
<responseDetail>
<responseEnvelope>
<ContingencyReadByEndpointsResponse>
<xsl:apply-templates select="./*"/>
</ContingencyReadByEndpointsResponse>
</responseEnvelope>
</responseDetail>
</xsl:template>
<xsl:template match="env:Fault[./detail/*[contains('|OperationFault|NoValidTargetsFoundFault|InvalidUriFormatFault|InvalidDateTimeRangeFault|ArgumentFault|TooManyConcurrentRequestsFault|SecurityFault|', concat('|',local-name(),'|'))]]">
<fault>
<xsl:apply-templates select="./detail/*"/>
</fault>
</xsl:template>
<xsl:template match="env:Fault">
<fault>
<xsl:apply-templates select="./*"/>
</fault>
</xsl:template>
<xsl:template match="detail">
<detail><xsl:apply-templates select="./*" mode="serialize"/></detail>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="name">
<xsl:value-of select="local-name()"/>
</xsl:variable>
<xsl:element name="{$name}" namespace="">
<xsl:apply-templates select="*|text()"/>
</xsl:element>
</xsl:template>
<xsl:template match="*" mode="serialize">
<xsl:text><</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:for-each select="@*">
<xsl:value-of select="concat(' ', local-name())"/>
<xsl:text>="</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text>></xsl:text>
<xsl:apply-templates select="*" mode="serialize"/>
<xsl:value-of select="."/>
<xsl:text></</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>></xsl:text>
</xsl:template>
</xsl:stylesheet>
D8-GetContRdByEndptsRsReq.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://www.itron.com/ami/2008/10/data"
xmlns:ns2="http://www.itron.com/ami/2008/10/common">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<GetContingencyReadByEndpointsResult xmlns="http://www.itron.com/ami/2008/10/data">
<xsl:apply-templates select="./requestEnvelope/GetContingencyReadByEndpointsResult/*" />
</GetContingencyReadByEndpointsResult>
</xsl:template>
<xsl:template match="Id">
<xsl:element name="ns2:Id">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://www.itron.com/ami/2008/10/data">
<xsl:apply-templates select="*|text()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
D8-GetContRdByEndptsRsResp.xsl
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.itron.com/ami/2008/10/data"
xmlns:com="http://www.itron.com/ami/2008/10/common"
exclude-result-prefixes="env ns1 com">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="env:Envelope">
<xsl:apply-templates select="./env:Body/*"/>
</xsl:template>
<xsl:template match="ns1:GetContingencyReadByEndpointsResultResponse">
<responseDetail>
<responseEnvelope>
<GetContingencyReadByEndpointsResultResponse>
<xsl:apply-templates select="./*"/>
</GetContingencyReadByEndpointsResultResponse>
</responseEnvelope>
</responseDetail>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="name">
<xsl:value-of select="local-name()"/>
</xsl:variable>
<xsl:element name="{$name}" namespace="">
<xsl:apply-templates select="*|text()"/>
</xsl:element>
</xsl:template>
<xsl:template match="env:Fault[./detail/*[contains('|OperationFault|RequestNotFoundFault|RequestNotFinishedFault|ArgumentFault|TooManyConcurrentRequestsFault|SecurityFault|', concat('|',local-name(),'|'))]]">
<fault>
<xsl:apply-templates select="./detail/*"/>
</fault>
</xsl:template>
<xsl:template match="env:Fault">
<fault>
<xsl:apply-templates select="./*"/>
</fault>
</xsl:template>
<xsl:template match="detail">
<detail><xsl:apply-templates select="./*" mode="serialize"/></detail>
</xsl:template>
<xsl:template match="*" mode="serialize">
<xsl:text><</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:for-each select="@*">
<xsl:value-of select="concat(' ', local-name())"/>
<xsl:text>="</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text>></xsl:text>
<xsl:apply-templates select="*" mode="serialize"/>
<xsl:value-of select="."/>
<xsl:text></</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>></xsl:text>
</xsl:template>
</xsl:stylesheet>
D8-DataSubSvcRequest.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:data="http://www.itron.com/ami/2008/10/data"
xmlns:com="http://www.itron.com/ami/2008/10/common"
xmlns:ev="http://www.itron.com/ami/2008/10/events"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="data com ev soap11 soap12">
<xsl:template match="soap11:Envelope">
<xsl:apply-templates select="//data:DataArrived"/>
</xsl:template>
<xsl:template match="soap11:Body">
<xsl:apply-templates select="//data:DataArrived"/>
</xsl:template>
<xsl:template match="data:DataArrived">
<DataArrived>
<input>
<RequestToken>
<Id><xsl:value-of select="./data:input/data:RequestToken/com:Id"/></Id>
</RequestToken>
<ReadDataCollection>
<xsl:for-each select="./data:input/data:ReadDataCollection/data:ReadData">
<ReadData>
<Identifier><xsl:value-of select="./data:Identifier"/></Identifier>
<DeviceClass><xsl:value-of select="./data:DeviceClass"/></DeviceClass>
<ScalingType><xsl:value-of select="./data:ScalingType"/></ScalingType>
<xsl:call-template name="EventLog"/>
<xsl:call-template name="LoadProfileChannels"/>
<xsl:call-template name="NetworkStatistics"/>
<xsl:call-template name="RegisterValues"/>
<xsl:call-template name="BlockInfo"/>
<xsl:if test="./data:DeviceSerialNumber">
<DeviceSerialNumber><xsl:value-of select="./data:DeviceSerialNumber"/></DeviceSerialNumber>
</xsl:if>
</ReadData>
</xsl:for-each>
</ReadDataCollection>
<xsl:if test="count(./data:input/data:RequestMetadata/*) > 0">
<RequestMetadata>
<xsl:copy-of select="./data:input/data:RequestMetadata/*"/>
</RequestMetadata>
</xsl:if>
</input>
</DataArrived>
</xsl:template>
<xsl:template name="EventLog">
<xsl:if test="count(./data:EventLog/ev:MeterEvents/*) > 0 or count(./data:EventLog/ev:UnreportedEventCount) > 0">
<EventLog>
<xsl:if test="count(./data:EventLog/ev:MeterEvents/*) > 0">
<MeterEvents>
<xsl:for-each select="./data:EventLog/ev:MeterEvents/ev:MeterEvent">
<MeterEvent>
<Timestamp><xsl:value-of select="./ev:Timestamp"/></Timestamp>
<Category><xsl:value-of select="./ev:Category"/></Category>
<LogType><xsl:value-of select="./ev:LogType"/></LogType>
<Name><xsl:value-of select="./ev:Name"/></Name>
<xsl:if test="count(./ev:Arguments/*) > 0">
<Arguments>
<xsl:for-each select="./ev:Arguments/ev:Argument">
<Argument>
<Name><xsl:value-of select="./ev:Name"/></Name>
<Value><xsl:value-of select="./ev:Value"/></Value>
</Argument>
</xsl:for-each>
</Arguments>
</xsl:if>
<xsl:if test="./ev:ID">
<ID><xsl:value-of select="./ev:ID"/></ID>
</xsl:if>
<xsl:if test="./ev:Source">
<Source><xsl:value-of select="./ev:Source"/></Source>
</xsl:if>
<xsl:if test="./ev:SequenceNumber">
<SequenceNumber><xsl:value-of select="./ev:SequenceNumber"/></SequenceNumber>
</xsl:if>
</MeterEvent>
</xsl:for-each>
</MeterEvents>
</xsl:if>
<xsl:if test="./data:EventLog/ev:UnreportedEventCount">
<UnreportedEventCount><xsl:value-of select="./data:EventLog/ev:UnreportedEventCount"/></UnreportedEventCount>
</xsl:if>
</EventLog>
</xsl:if>
</xsl:template>
<xsl:template name="LoadProfileChannels">
<xsl:if test="count(./data:LoadProfileChannels/data:LoadProfileChannel/data:IntervalLength) > 0">
<LoadProfileChannels>
<xsl:for-each select="./data:LoadProfileChannels/data:LoadProfileChannel">
<LoadProfileChannel>
<IntervalLength><xsl:value-of select="./data:IntervalLength"/></IntervalLength>
<PulseMultiplier><xsl:value-of select="./data:PulseMultiplier"/></PulseMultiplier>
<Quantity><xsl:value-of select="./data:Quantity"/></Quantity>
<TimeDataEnd><xsl:value-of select="./data:TimeDataEnd"/></TimeDataEnd>
<IntervalValues>
<xsl:for-each select="./data:IntervalValues/data:IntervalValue">
<IntervalValue>
<ChannelValue><xsl:value-of select="./data:ChannelValue"/></ChannelValue>
<xsl:for-each select="./data:ProfileStatuses/data:ProfileStatus">
<ProfileStatuses>
<ProfileStatus><xsl:value-of select="."/></ProfileStatus>
</ProfileStatuses>
</xsl:for-each>
</IntervalValue>
</xsl:for-each>
</IntervalValues>
</LoadProfileChannel>
</xsl:for-each>
</LoadProfileChannels>
</xsl:if>
</xsl:template>
<xsl:template name="NetworkStatistics">
<xsl:if test="count(./data:NetworkStatistics/data:NetworkStatistic/data:Name) > 0">
<NetworkStatistics>
<xsl:for-each select="./data:NetworkStatistics/data:NetworkStatistic">
<NetworkStatistic>
<Name><xsl:value-of select="./data:Name"/></Name>
<NetworkKind><xsl:value-of select="./data:NetworkKind"/></NetworkKind>
<Value><xsl:value-of select="./data:Value"/></Value>
</NetworkStatistic>
</xsl:for-each>
</NetworkStatistics>
</xsl:if>
</xsl:template>
<xsl:template name="RegisterValues">
<xsl:if test="count(./data:RegisterValues/data:RegisterValue/data:Quantity) > 0">
<RegisterValues>
<xsl:for-each select="./data:RegisterValues/data:RegisterValue">
<RegisterValue>
<Quantity><xsl:value-of select="./data:Quantity"/></Quantity>
<Source><xsl:value-of select="./data:Source"/></Source>
<Timestamp><xsl:value-of select="substring(./data:Timestamp, 1, 19)"/></Timestamp>
<Value><xsl:value-of select="./data:Value"/></Value>
<xsl:if test="count(./data:Status/data:string) > 0">
<Status>
<xsl:for-each select="./data:Status/data:string">
<string><xsl:value-of select="."/></string>
</xsl:for-each>
</Status>
</xsl:if>
</RegisterValue>
</xsl:for-each>
</RegisterValues>
</xsl:if>
</xsl:template>
<xsl:template name="BlockInfo">
<xsl:if test="count(./data:BlockInfo/data:Block) > 0">
<BlockInfo>
<Block><xsl:value-of select="./data:BlockInfo/data:Block"/></Block>
<TotalBlocks><xsl:value-of select="./data:BlockInfo/data:TotalBlocks"/></TotalBlocks>
</BlockInfo>
</xsl:if>
</xsl:template>
<!-- When the SOAP Message has already been transformed by the SOAP Proxy -->
<xsl:template match="DataArrived[namespace-uri(.) != 'http://www.itron.com/ami/2008/10/data']">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
D8-DataSubSvcResponse.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.itron.com/ami/2008/10/data">
<xsl:template match="/">
<soap11:Envelope>
<soap11:Header/>
<soap11:Body>
<tns:DataArrivedResponse/>
</soap11:Body>
</soap11:Envelope>
</xsl:template>
</xsl:stylesheet>
D8-ReqStsChgSvcRequest.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:com="http://www.itron.com/ami/2008/10/common"
exclude-result-prefixes="soap11 soap12 com">
<xsl:template match="soap11:Envelope">
<xsl:apply-templates select="//com:StatusChanged"/>
</xsl:template>
<xsl:template match="soap11:Body">
<xsl:apply-templates select="//com:StatusChanged"/>
</xsl:template>
<xsl:template match="com:StatusChanged">
<StatusChanged>
<bo/>
<input>
<RequestStatus>
<RequestToken>
<Id><xsl:value-of select="./com:input/com:RequestStatus/com:RequestToken/com:Id"/></Id>
</RequestToken>
<State><xsl:value-of select="./com:input/com:RequestStatus/com:State"/></State>
<EndpointsScheduled><xsl:value-of select="./com:input/com:RequestStatus/com:EndpointsScheduled"/></EndpointsScheduled>
<Result><xsl:value-of select="./com:input/com:RequestStatus/com:Result"/></Result>
<SuccessfulEndpoints><xsl:value-of select="./com:input/com:RequestStatus/com:SuccessfulEndpoints"/></SuccessfulEndpoints>
<FailedEndpoints><xsl:value-of select="./com:input/com:RequestStatus/com:FailedEndpoints"/></FailedEndpoints>
<xsl:if test="string-length(./com:input/com:RequestStatus/com:CreatedWhen) > 0">
<CreatedWhen><xsl:value-of select="substring(./com:input/com:RequestStatus/com:CreatedWhen, 1, 23)"/></CreatedWhen>
</xsl:if>
<xsl:if test="string-length(./com:input/com:RequestStatus/com:FinishedWhen) > 0">
<FinishedWhen><xsl:value-of select="substring(./com:input/com:RequestStatus/com:FinishedWhen, 1, 23)"/></FinishedWhen>
</xsl:if>
<xsl:if test="count(./com:input/com:RequestStatus/com:Metadata/*) > 0">
<Metadata>
<xsl:copy-of select="./com:input/com:RequestStatus/com:Metadata/*"/>
</Metadata>
</xsl:if>
</RequestStatus>
</input>
</StatusChanged>
</xsl:template>
<!-- When the SOAP Message has already been transformed by the SOAP Proxy -->
<xsl:template match="StatusChanged[namespace-uri(.) != 'http://www.itron.com/ami/2008/10/common']">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
D8-RequestStatusChangedServiceResponse.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.itron.com/ami/2008/10/common">
<xsl:template match="/">
<soap11:Envelope>
<soap11:Header/>
<soap11:Body>
<tns:StatusChangedResponse/>
</soap11:Body>
</soap11:Envelope>
</xsl:template>
</xsl:stylesheet>