تحويلات XSL لطلب آخر قراءة لأجل Itron
يدعم الموفق لجيت واي الشبكات الذكي للخدمات والمرافق من أوراكل من أجل Itron OpenWay إصدارات متعددة من الواجهة البرمجية للتطبيق من أجل Itron OpenWay. وللحصول على هذا الدعم، يقوم العديد من ملفات XSL للطلب بالتحقق من رقم الإصدار المضمن في مخطط المصدر. وبطريقة مشابهة، تم تصميم ملفات XSL للاستجابات للتعامل مع تنسيق XML لمصدر مختلف وربط القيم بتنسيق جيت واي الشبكات الذكي العام.
تستخدم عملية طلب آخر قراءة من أجل 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>