Ketenprotocol AVG Datex-II V3
De beschrijving van de technische interface voor Actuele Verkeersgegevens is vastgelegd in het, in de onderliggende paragrafen beschreven, ketenprotocol-AVG. Dit protocol is bedoeld om een beschrijving te geven hoe systemen voor de uitwisseling van DATEX II v3.x met elkaar verbinden en data met payload van het type MeasurementSiteTable publication (MST) en MeasuredDataPublication (MDP) dienen uit te wisselen. Voor de uitwisseling wordt gebruik maakt van Exchange 2020. Alle berichten worden in een messageContainer verstuurd met daarin optioneel drie secties: payload, exchangeInformation en informationManagement.
Payload
Wanneer de payload-sectie bestaat, bevat deze het inhoudelijke DATEX II bericht met de MST of MDP informatie.
Exchange Information
De exchangeInformation gaat over de uitwisseling tussen de Supplier en de Client. In de onderstaande paragrafen staan tabellen met verwijzingen als sd x.x.x. Dit verwijst zowel naar de onderdelen in de sequence diagrammen als naar de meegeleverde XML-voorbeelden.
Push Methode
Systemen binnen de AVG keten hebben een interface beschikbaar om data te "pushen" naar een afnemende partij. Het systeem van deze partij moet gebouwd zijn om te werken met "Exchange 2020 Ketenprotocol WSDL".
De push methode bevat een aantal onderdelen die hier onder beschreven worden. Het gaat om:
- Administratie;
- Start Connection and Deliver Data
- Maintain Connection
- Close Connection or Fail
- Request Snapshot
- Weigeren van data.
Administratie
Zowel de aanleverende (Supplier) als de afnemende (Client) partij houden een offline administratie bij. Hierin staat geregistreerd bij het aanleverend systeem:
- End Point waarop het afnemende systeem de data wil ontvangen;
Hierin staat geregistreerd bij het afnemende systeem:
- End Point waarop de het aanleverend systeem de registratie wil ontvangen.
MST
Start Connection and Deliver Data voor MST publicaties
De client state is 'offline'. Het aanleverend systeem (Supplier) maakt kenbaar dat het klaar is voor levering door een openSession bericht te sturen naar het afnemend systeem.
sd 1.0 openSession
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | openSession |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
operatingMode | onOccurence |
updateMethod | allElementUpdate |
deliveyFrequency | 300 |
exchangeStatus | openingSession |
XML Voorbeeld
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>openSession</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de Supplier vandaan stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SupplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de Supplier naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>ClientName</ex:name>
</ex:clientOrCisProvider>
<ex:subscription>
<!-- Maximaal 300 seconden voor een voglend bericht of keepalive -->
<ex:deliveyFrequency>300</ex:deliveyFrequency>
</ex:subscription>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>openingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Dit zal het aanleverende systeem elke 10 minuten doen net zolang tot het afnemende systeem reageert of tot dit handmatig overruled wordt. Na handmatige overruling moet de aanvraag natuurlijk ook weer gestart worden.
Het afnemende systeem reageert op een van de drie volgende mogelijkheden:
- Succes Snapshot on openSession
- Succes Ack on openSession
- Fail on openSession
Succes Snapshot on openSession
In dit geval zal het afnemend systeem, wanneer het een Exchange openSession bericht ontvangt, een Exchange snapshotSynchronizationRequest bericht terugsturen waarna het leverende systeem de client State naar 'online' zet.
sd 1.1.1 return snapshotSynchronizationRequest
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | snapshotSynchronisationRequest |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de client naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de client vandaan stuurt -->
<ex:address>https://100.100.100.100</ex:address>
<ex:name>ClientId</ex:name>
</ex:clientOrCisProvider>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>openingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:48Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>snapshotSynchronisationRequest</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Hierna wordt er door het leverende systeem een volledige MST publication gegenereerd. Deze wordt met een ExchangeInformation(payloadDelivery) naar de afnemende partij wordt gestuurd. De gegevens bevinden zich in een payload van het type 'measurementSiteTablePublication'.
sd 1.1.2 payloadDelivery Snapshot
Elementen binnen payload | |
---|---|
Alle MST informatie | measurementSiteTablePublication |
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | payloadDelivery |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
updateMethod | snapshot |
exchangeStatus | online |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" xmlns:inf="http://datex2.eu/schema/3/informationManagement" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="String" profileVersion="String" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:payload xmlns:roa="http://datex2.eu/schema/3/roadTrafficData" xsi:type="roa:MeasurementSiteTablePublication" xmlns:loc="http://datex2.eu/schema/3/locationReferencing" lang="nl" modelBaseVersion="3">
<!-- Example payload -->
<com:publicationTime>2020-11-04T09:30:47Z</com:publicationTime>
<com:publicationCreator>
<com:country>NL</com:country>
<com:nationalIdentifier>NDW</com:nationalIdentifier>
</com:publicationCreator>
<roa:headerInformation>
<com:informationStatus>real</com:informationStatus>
</roa:headerInformation>
<roa:measurementSiteTable id="GEO0C_MST" version="Last">
<roa:measurementSite id="GEO0C_Z_RWSTI356713" version="18">
<roa:measurementSiteRecordVersionTime>2021-12-14T04:05:29Z</roa:measurementSiteRecordVersionTime>
<roa:measurementEquipmentReference>Z_RWS_356713</roa:measurementEquipmentReference>
<roa:measurementEquipmentTypeUsed>
<com:values>
<com:value lang="nl">lus</com:value>
</com:values>
</roa:measurementEquipmentTypeUsed>
<roa:measurementSiteName>
<com:values>
<com:value lang="nl">059hrl006450</com:value>
</com:values>
</roa:measurementSiteName>
<roa:measurementSiteNumberOfLanes>1</roa:measurementSiteNumberOfLanes>
<roa:measurementSpecificCharacteristics index="1">
<roa:measurementSpecificCharacteristics>
<roa:accuracy>95.0</roa:accuracy>
<roa:computationMethod>harmonicAverageOfSamplesInATimePeriod</roa:computationMethod>
<roa:period>60.0</roa:period>
<roa:specificMeasurementValueType>trafficFlow</roa:specificMeasurementValueType>
<roa:specificVehicleCharacteristics>
<com:lengthCharacteristic>
<com:comparisonOperator>greaterThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>1.85</com:vehicleLength>
</com:lengthCharacteristic>
<com:lengthCharacteristic>
<com:comparisonOperator>lessThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>2.40</com:vehicleLength>
</com:lengthCharacteristic>
</roa:specificVehicleCharacteristics>
<roa:specificLane>
<loc:laneNumber>1</loc:laneNumber>
</roa:specificLane>
</roa:measurementSpecificCharacteristics>
</roa:measurementSpecificCharacteristics>
<!-- other traffic flow indexes -->
<!-- other traffic flow indexes -->
<!-- other traffic flow indexes -->
<roa:measurementSpecificCharacteristics index="7">
<roa:measurementSpecificCharacteristics>
<roa:accuracy>95.0</roa:accuracy>
<roa:period>60.0</roa:period>
<roa:specificMeasurementValueType>trafficSpeed</roa:specificMeasurementValueType>
<roa:specificVehicleCharacteristics>
<com:lengthCharacteristic>
<com:comparisonOperator>greaterThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>1.85</com:vehicleLength>
</com:lengthCharacteristic>
<com:lengthCharacteristic>
<com:comparisonOperator>lessThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>2.40</com:vehicleLength>
</com:lengthCharacteristic>
</roa:specificVehicleCharacteristics>
<roa:specificLane>
<loc:laneNumber>1</loc:laneNumber>
</roa:specificLane>
</roa:measurementSpecificCharacteristics>
</roa:measurementSpecificCharacteristics>
<!-- other traffic speed indexes -->
<!-- other traffic speed indexes -->
<!-- other traffic speed indexes -->
<roa:measurementSiteLocation xsi:type="loc:PointLocation">
<loc:supplementaryPositionalDescription>
<loc:carriageway>
<loc:carriageway>mainCarriageway</loc:carriageway>
</loc:carriageway>
</loc:supplementaryPositionalDescription>
<!-- Use the assigned location referencing method.
Here pointByCoordinates is used for simpleness -->
<loc:pointByCoordinates>
<loc:bearing>250</loc:bearing>
<loc:pointCoordinates>
<loc:latitude>51.688665</loc:latitude>
<loc:longitude>3.848675</loc:longitude>
</loc:pointCoordinates>
</loc:pointByCoordinates>
</roa:measurementSiteLocation>
</roa:measurementSite>
<!-- The rest of the MST siterecords -->
<!-- The rest of the MST siterecords -->
<!-- The rest of the MST siterecords -->
</roa:measurementSiteTable>
<!-- Possible other MeasurementSiteTables -->
<!-- Possible other MeasurementSiteTables -->
</con:payload>
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>payloadDelivery</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:updateMethod>snapshot</ex:updateMethod>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:49Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Het ontvangende systeem reageert met een 'ack'-bericht dat het snapshot correct is ontvangen.
sd 1.1.3 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | Return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | Online |
returnStatus | Ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:50Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Hierna gaat het leverende systeem uit de loop 'Supplier Status offline Open Session' en gaat deze naar het volgende sequence diagram 'Maintain Connection'.
Succes Ack on openSession
In dit geval zal het afnemend systeem, wanneer het een Exchange openSession bericht ontvangt, een Exchange bericht met de waarde 'ack' terugsturen waarna het leverende systeem de client State naar 'online' zet.
sd 1.2.1 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de client naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de client vandaan stuurt -->
<ex:address>https://100.100.100.100</ex:address>
<ex:name>ClientId</ex:name>
</ex:clientOrCisProvider>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>openingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Daarna gaat het leverende systeem uit de loop 'Supplier Status offline Open Session' en gaat deze naar het volgende sequence diagram 'Maintain Connection' (zie het volgende hoofdstuk).
Fail on openSession
Wanneer het afnemend systeem een fail terugstuurt op de openSession of er helemaal geen antwoord komt, blijft het aanleverende systeem elke tien minuten proberen een verbinding op te zetten.
sd 1.3.1 return fail
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | fail |
codedInvalidityReason | bv: invalidExchangeContext |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:roa="http://datex2.eu/schema/3/roadTrafficData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de client naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de client vandaan stuurt -->
<ex:address>https://100.100.100.100</ex:address>
<ex:name>ClientId</ex:name>
</ex:clientOrCisProvider>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>offline</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>fail</ex:returnStatus>
<!-- fill in the invalidity reason from the list -->
<ex:codedInvalidityReason>invalidExchangeContext</ex:codedInvalidityReason>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Maintain Connection
De verbinding tussen het aanleverend systeem en het afnemend systeem zal worden onderhouden door het aanleverend systeem. Er zijn twee scenarios: 'Data Ready for Payload Push' en 'no data keepAlive'
Data ready for payload push
Wanneer er binnen 5 minuten na het laatst verstuurde bericht er een update op de data is zal deze direct verstuurd worden door middel van een allElementUpdate bericht waarbij de data zich bevindt in een payload van het type MeasurementSiteTablePublication.
sd 2.1.1 allElementUpdate
Elementen binnen payload | |
---|---|
Alle geüpdatete measurementSiteRecords | measurementSiterecords |
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | payloadDelivery |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
updateMethod | allElementUpdate |
exchangeStatus | online |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" modelBaseVersion="3" profileName="NP2022MST" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" extensionName="Exchange 2020" extensionVersion="1" xmlns:inf="http://datex2.eu/schema/3/informationManagement">
<con:payload xmlns:com="http://datex2.eu/schema/3/common" xmlns:d2="http://datex2.eu/schema/3/d2Payload" xmlns:roa="http://datex2.eu/schema/3/roadTrafficData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:loc="http://datex2.eu/schema/3/locationReferencing" xsi:type="roa:MeasurementSiteTablePublication" lang="en-us" modelBaseVersion="3" xsi:schemaLocation="http://datex2.eu/schema/3/d2Payload DATEXII_3_D2Payload.xsd">
<com:publicationTime>2001-12-17T09:30:47Z</com:publicationTime>
<com:publicationCreator>
<com:country>nl</com:country>
<com:nationalIdentifier>NLNDW</com:nationalIdentifier>
</com:publicationCreator>
<roa:headerInformation>
<com:confidentiality>noRestriction</com:confidentiality>
<com:informationStatus>real</com:informationStatus>
</roa:headerInformation>
<roa:measurementSiteTable id="GEO0C_MST" version="Last">
<roa:measurementSite id="GEO0C_Z_RWSTI356713" version="19">
<roa:measurementSiteRecordVersionTime>2021-12-17T09:30:49Z</roa:measurementSiteRecordVersionTime>
<roa:measurementEquipmentReference>Z_RWS_356713</roa:measurementEquipmentReference>
<roa:measurementEquipmentTypeUsed>
<com:values>
<com:value lang="nl">lus</com:value>
</com:values>
</roa:measurementEquipmentTypeUsed>
<roa:measurementSiteName>
<com:values>
<com:value lang="nl">059hrl006450</com:value>
</com:values>
</roa:measurementSiteName>
<roa:measurementSiteNumberOfLanes>1</roa:measurementSiteNumberOfLanes>
<roa:measurementSpecificCharacteristics index="1">
<roa:measurementSpecificCharacteristics>
<roa:accuracy>95.0</roa:accuracy>
<roa:computationMethod>harmonicAverageOfSamplesInATimePeriod</roa:computationMethod>
<roa:period>60.0</roa:period>
<roa:specificMeasurementValueType>trafficFlow</roa:specificMeasurementValueType>
<roa:specificVehicleCharacteristics>
<com:lengthCharacteristic>
<com:comparisonOperator>greaterThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>1.85</com:vehicleLength>
</com:lengthCharacteristic>
<com:lengthCharacteristic>
<com:comparisonOperator>lessThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>2.40</com:vehicleLength>
</com:lengthCharacteristic>
</roa:specificVehicleCharacteristics>
<roa:specificLane>
<loc:laneNumber>1</loc:laneNumber>
</roa:specificLane>
</roa:measurementSpecificCharacteristics>
</roa:measurementSpecificCharacteristics>
<!-- other traffic flow indexes -->
<!-- other traffic flow indexes -->
<!-- other traffic flow indexes -->
<roa:measurementSpecificCharacteristics index="7">
<roa:measurementSpecificCharacteristics>
<roa:accuracy>95.0</roa:accuracy>
<roa:period>60.0</roa:period>
<roa:specificMeasurementValueType>trafficSpeed</roa:specificMeasurementValueType>
<roa:specificVehicleCharacteristics>
<com:lengthCharacteristic>
<com:comparisonOperator>greaterThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>1.85</com:vehicleLength>
</com:lengthCharacteristic>
<com:lengthCharacteristic>
<com:comparisonOperator>lessThanOrEqualTo</com:comparisonOperator>
<com:vehicleLength>2.40</com:vehicleLength>
</com:lengthCharacteristic>
</roa:specificVehicleCharacteristics>
<roa:specificLane>
<loc:laneNumber>1</loc:laneNumber>
</roa:specificLane>
</roa:measurementSpecificCharacteristics>
</roa:measurementSpecificCharacteristics>
<!-- other traffic speed indexes -->
<!-- other traffic speed indexes -->
<!-- other traffic speed indexes -->
<roa:measurementSiteLocation xsi:type="loc:PointLocation">
<loc:supplementaryPositionalDescription>
<loc:carriageway>
<loc:carriageway>mainCarriageway</loc:carriageway>
</loc:carriageway>
</loc:supplementaryPositionalDescription>
<!-- Use the assigned location referencing method.
Here pointByCoordinates is used for simpleness -->
<loc:pointByCoordinates>
<loc:bearing>250</loc:bearing>
<loc:pointCoordinates>
<loc:bearing>250</loc:bearing>
<loc:latitude>51.688665</loc:latitude>
<loc:longitude>3.848675</loc:longitude>
</loc:pointCoordinates>
</loc:pointByCoordinates>
</roa:measurementSiteLocation>
</roa:measurementSite>
</roa:measurementSiteTable>
</con:payload>
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>payloadDelivery</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>2020</ex:exchangeSpecificationVersion>
<ex:operatingMode>onOccurrence</ex:operatingMode>
<ex:updateMethod>allElementUpdate</ex:updateMethod>
<ex:supplierOrCisRequester>
<ex:name>SupplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2021-12-17T09:30:51Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 2.1.2 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | online |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:52Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
No data keepAlive
Wanneer er na 5 minuten sinds het versturen van het laatste bericht nog geen update op de data te versturen is, zal het aanleverende systeem een keep-alive bericht sturen. Dit zal het systeem elke 5 minuten blijven doen totdat er een update op de data is en er een allElementUpdate verstuurd wordt (de vorige paragraaf).
sd 2.2.1 keepAlive
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | keepAlive |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
operatingMode | onOccurence |
updateMethod | allElementUpdate |
deliveyFrequency | 300 |
exchangeStatus | online |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>keepAlive</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:operatingMode>onOccurrence</ex:operatingMode>
<ex:updateMethod>allElementUpdate</ex:updateMethod>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:subscription>
<ex:deliveyFrequency>300</ex:deliveyFrequency>
</ex:subscription>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:52Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 2.2.2 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | online |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:53Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
CloseSession or Fail
Wanneer het ontvangende systeem de verbinding wil verbreken, dient deze een closeSessionRequest sturen als reactie op een pushbericht of een keepAlive-bericht. Het aanleverende systeem reageert dan met een closeSession bericht. Het ontvangende systeem reageert hetzelfde wanneer een bericht geweigerd wordt door het ontvangende systeem (fail).
Ook wanneer het ontvangende systeem voor een timeout zorgt bij het aanleverende systeem, zal het aanleverende systeem een closeSession sturen.
Het aanleverende systeem zal na bevestiging of timeout de sessie naar 'offline' zetten, zo wordt de verbinding inactief en zal er geen data meer verstuurd worden.
sd 3.1 return closeSessionRequest
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | closingSession |
returnStatus | closeSessionRequest |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>closingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:54Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>closeSessionRequest</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 3.2 return fail
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | fail |
codedInvalidityReason | bv: invalidMessage |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>offline</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:55Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>fail</ex:returnStatus>
<!-- fill in the invalidity reason from the list -->
<ex:codedInvalidityReason>invalidMessage</ex:codedInvalidityReason>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 3.3 closeSession
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | closeSession |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | closingSession |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>closeSession</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SupplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>closingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:55Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 3.4 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | offline |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>offline</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:56Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Snapshot Request
Wanneer een ontvangend systeem, om wat voor reden dan ook, een snapshot nodig heeft om de huidige situatie weer te weten, kan deze op elk bericht een return bericht sturen met een snapshotSynchronizationRequest. Het aanleverende systeem zal als gevolg van dit verzoek een snapshot genereren en daarna deze naar het ontvangende systeem sturen en daarna doorgaan met de 'maintain Connection'. Dit verzoek kan alleen plaats vinden wanneer de session op 'online' staat. Anders moet eerst de verbinding weer opgezet worden.
sd 4.1 return snapshotSynchronizationRequest
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | online |
returnStatus | snapshotSynchronisationRequest |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de client naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de client vandaan stuurt -->
<ex:address>https://100.100.100.100</ex:address>
<ex:name>ClientId</ex:name>
</ex:clientOrCisProvider>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>snapshotSynchronisationRequest</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Hierna wordt er door het leverende systeem een volledige MST publication gegenereerd. Deze wordt met een ExchangeInformation(payloadDelivery) naar de afnemende partij wordt gestuurd. De gegevens bevinden zich in een payload van het type 'MeasuredDataPublication'.
sd 4.2 payloadDelivery Snapshot
Elementen binnen payload | |
---|---|
Alle minuut metingen | measuredDataPublication |
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | payloadDelivery |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
updateMethod | snapshot |
exchangeStatus | online |
Zie het eerdere Snapshot voorbeeld bij sd 1.1.2.
1 TODO: WSDL-omschrijvingen zijn hier te vinden.
InformationManagement
Bij measurementSiteTable publicaties worden measurementSites met behulp van het informationManagement beëindigd. Vanaf het moment dat deze is beëindigd, mag aanleverend systeem geen data meer over deze measurementSite leveren.
Voorbeeld:
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<informationManagement>
<inf:informationManagedResourceList>
<inf:elementReference>
<managementStatus xmlns="http://datex2.eu/schema/3/informationManagement">closed</managementStatus>
<versionedReference xmlns="http://datex2.eu/schema/3/informationManagement" id="GEO0C_Z_RWSTI356713" version="19" />
</inf:elementReference>
</inf:informationManagedResourceList>
</informationManagement>
MDP
Start Connection and Deliver Data voor MDP publicaties
De client state is 'offline'. Het aanleverend systeem (Supplier) maakt kenbaar dat het klaar is voor levering door een openSession bericht te sturen naar het afnemend systeem.
sd 1.0 openSession
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | openSession |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
operatingMode | onOccurence |
updateMethod | allElementUpdate |
deliveyFrequency | 300 |
exchangeStatus | openingSession |
XML Voorbeeld
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>openSession</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de Supplier vandaan stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SupplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de Supplier naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>ClientName</ex:name>
</ex:clientOrCisProvider>
<ex:subscription>
<!-- Maximaal 300 seconden voor een voglend bericht of keepalive -->
<ex:deliveyFrequency>300</ex:deliveyFrequency>
</ex:subscription>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>openingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Dit zal het aanleverende systeem elke 10 minuten doen net zolang tot het afnemende systeem reageert of tot dit handmatig overruled wordt. Na handmatige overruling moet de aanvraag natuurlijk ook weer gestart worden.
Het afnemende systeem reageert op een van de drie volgende mogelijkheden:
- Succes Ack on openSession
- Fail on openSession
Succes Ack on openSession
In dit geval zal het afnemend systeem, wanneer het een Exchange openSession bericht ontvangt, een Exchange bericht met de waarde 'ack' terugsturen waarna het leverende systeem de client State naar 'online' zet.
sd 1.2.1 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de client naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de client vandaan stuurt -->
<ex:address>https://100.100.100.100</ex:address>
<ex:name>ClientId</ex:name>
</ex:clientOrCisProvider>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>openingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Daarna gaat het leverende systeem uit de loop 'Supplier Status offline Open Session' en gaat deze naar het volgende sequence diagram 'Maintain Connection' (zie hieronder).
Fail on openSession
Wanneer het afnemend systeem een fail terugstuurt op de openSession of er helemaal geen antwoord komt, blijft het aanleverende systeem elke tien minuten proberen een verbinding op te zetten.
sd 1.3.1 return fail
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | fail |
codedInvalidityReason | bv: invalidExchangeContext |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:roa="http://datex2.eu/schema/3/roadTrafficData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<!-- ip address waar de client naar toe stuurt -->
<ex:address>https://10.10.10.10/</ex:address>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:clientOrCisProvider>
<!-- ip address waar de client vandaan stuurt -->
<ex:address>https://100.100.100.100</ex:address>
<ex:name>ClientId</ex:name>
</ex:clientOrCisProvider>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>offline</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:47Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>fail</ex:returnStatus>
<!-- fill in the invalidity reason from the list -->
<ex:codedInvalidityReason>invalidExchangeContext</ex:codedInvalidityReason>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
Maintain Connection
De verbinding tussen het aanleverend systeem en het afnemend systeem zal worden onderhouden door het aanleverend systeem. Er zijn twee scenarios: 'Data Ready for Payload Push' en 'no data keepAlive'
Data ready for payload push
Wanneer er binnen 5 minuten na het laatst verstuurde bericht er een update op de data is zal deze direct verstuurd worden door middel van een allElementUpdate bericht waarbij de data zich bevindt in een payload van het type MeasuredDataPublication.
sd 2.1.1 allElementUpdate
Elementen binnen payload | |
---|---|
Alle geüpdatete measurementSiteRecords | measurementSiterecords |
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | payloadDelivery |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
updateMethod | allElementUpdate |
exchangeStatus | online |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" modelBaseVersion="3" profileName="NP2022MST" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" extensionName="Exchange 2020" extensionVersion="1" xmlns:inf="http://datex2.eu/schema/3/informationManagement">
<con:payload xmlns:com="http://datex2.eu/schema/3/common" xmlns:d2="http://datex2.eu/schema/3/d2Payload" xmlns:roa="http://datex2.eu/schema/3/roadTrafficData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:loc="http://datex2.eu/schema/3/locationReferencing" xsi:type="roa:MeasurementSiteTablePublication" lang="en-us" modelBaseVersion="3" xsi:schemaLocation="http://datex2.eu/schema/3/d2Payload DATEXII_3_D2Payload.xsd">
<com:publicationTime>2001-12-17T09:30:47Z</com:publicationTime>
<com:publicationCreator>
<com:country>nl</com:country>
<com:nationalIdentifier>NLNDW</com:nationalIdentifier>
</com:publicationCreator>
<roa:headerInformation>
<com:confidentiality>noRestriction</com:confidentiality>
<com:informationStatus>real</com:informationStatus>
</roa:headerInformation>
<!-- payload -->
</con:payload>
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>payloadDelivery</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>2020</ex:exchangeSpecificationVersion>
<ex:operatingMode>onOccurrence</ex:operatingMode>
<ex:updateMethod>allElementUpdate</ex:updateMethod>
<ex:supplierOrCisRequester>
<ex:name>SupplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2021-12-17T09:30:51Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 2.1.2 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | online |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:52Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
No data keepAlive
Wanneer er na 5 minuten sinds het versturen van het laatste bericht nog geen update op de data te versturen is, zal het aanleverende systeem een keep-alive bericht sturen. Dit zal het systeem elke 5 minuten blijven doen totdat er een update op de data is en er een allElementUpdate verstuurd wordt (de vorige paragraaf).
sd 2.2.1 keepAlive
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | keepAlive |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
operatingMode | onOccurence |
updateMethod | allElementUpdate |
deliveyFrequency | 300 |
exchangeStatus | online |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>keepAlive</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:operatingMode>onOccurrence</ex:operatingMode>
<ex:updateMethod>allElementUpdate</ex:updateMethod>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
<ex:subscription>
<ex:deliveyFrequency>300</ex:deliveyFrequency>
</ex:subscription>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:52Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 2.2.2 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | online |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>online</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:53Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
CloseSession or Fail
Wanneer het ontvangende systeem de verbinding wil verbreken, dient deze een closeSessionRequest sturen als reactie op een pushbericht of een keepAlive-bericht. Het aanleverende systeem reageert dan met een closeSession bericht. Het ontvangende systeem reageert hetzelfde wanneer een bericht geweigerd wordt door het ontvangende systeem (fail).
Ook wanneer het ontvangende systeem voor een timeout zorgt bij het aanleverende systeem, zal het aanleverende systeem een closeSession sturen.
Het aanleverende systeem zal na bevestiging of timeout de sessie naar 'offline' zetten, zo wordt de verbinding inactief en zal er geen data meer verstuurd worden.
sd 3.1 return closeSessionRequest
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | closingSession |
returnStatus | closeSessionRequest |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>closingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:54Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>closeSessionRequest</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 3.2 return fail
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | openingSession |
returnStatus | fail |
codedInvalidityReason | bv: invalidMessage |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>offline</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:55Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>fail</ex:returnStatus>
<!-- fill in the invalidity reason from the list -->
<ex:codedInvalidityReason>invalidMessage</ex:codedInvalidityReason>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 3.3 closeSession
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | closeSession |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | closingSession |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>closeSession</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SupplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>closingSession</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:55Z</ex:messageGenerationTimestamp>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>
sd 3.4 return ack
Elementen binnen exchangeInformation | Waarde |
---|---|
messageType | return |
codedExchangeProtocol | statefulPush |
exchangeSpecificationVersion | Exchange 2020 |
exchangeStatus | offline |
returnStatus | ack |
XML Voorbeeld
<?xml version="1.0" encoding="UTF-8"?>
<con:messageContainer xmlns:com="http://datex2.eu/schema/3/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" modelBaseVersion="3" extensionName="Exchange 2020" extensionVersion="1" profileName="MST Exchange 2020" profileVersion="1" xsi:schemaLocation="http://datex2.eu/schema/3/messageContainer DATEXII_3_MessageContainer.xsd">
<con:exchangeInformation modelBaseVersion="3">
<ex:messageType>return</ex:messageType>
<ex:exchangeContext>
<ex:codedExchangeProtocol>statefulPush</ex:codedExchangeProtocol>
<ex:exchangeSpecificationVersion>Exchange 2020</ex:exchangeSpecificationVersion>
<ex:supplierOrCisRequester>
<ex:name>SuplierName</ex:name>
</ex:supplierOrCisRequester>
</ex:exchangeContext>
<ex:dynamicInformation>
<ex:exchangeStatus>offline</ex:exchangeStatus>
<ex:messageGenerationTimestamp>2020-11-04T09:30:56Z</ex:messageGenerationTimestamp>
<ex:returnInformation>
<ex:returnStatus>ack</ex:returnStatus>
</ex:returnInformation>
</ex:dynamicInformation>
</con:exchangeInformation>
</con:messageContainer>