add files

This commit is contained in:
ChiKyun Kim
2025-09-09 13:59:12 +09:00
parent e94b06888d
commit 747aabe224
791 changed files with 3888723 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: fluxius
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_191

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>rise-v2g-shared</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,5 @@
#Generated by Maven
#Thu Jan 24 11:57:05 CET 2019
version=1.1.4-SNAPSHOT
groupId=com.v2gclarity.risev2g
artifactId=rise-v2g-shared

View File

@@ -0,0 +1,59 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.v2gclarity.risev2g</groupId>
<artifactId>rise-v2g-parent</artifactId>
<version>1.1.4-SNAPSHOT</version>
<relativePath>../RISE-V2G-PARENT</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>rise-v2g-shared</artifactId>
<name>rise-v2g-shared</name>
<repositories>
<!-- OpenEXI jars deployed in the /repo folder of RISE-V2G-Shared.
See https://devcenter.heroku.com/articles/local-maven-dependencies for how to deploy .jars locally which are not
published in a public Maven repo. -->
<repository>
<id>project.local</id>
<name>project</name>
<url>file:${project.basedir}/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.siemens.ct.exi</groupId>
<artifactId>exificient</artifactId>
<version>0.9.6</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>net.sourceforge.openexi</groupId>
<artifactId>nagasena</artifactId>
<version>0000.0002.0052.0</version>
</dependency>
<dependency>
<groupId>net.sourceforge.openexi</groupId>
<artifactId>nagasena-rta</artifactId>
<version>0000.0002.0052.0</version>
</dependency>
</dependencies>
</project>

95
temp/V2Gdecoder/README.md Normal file
View File

@@ -0,0 +1,95 @@
# V2Gdecoder
V2Gdecoder is a tool aimed to encode and decode V2G messages that commonly use EXI to compress exchanged XML files between a car Power-Line Communication module and a charging station.
This tool is based on [RISE V2G shared library](https://github.com/V2GClarity/RISE-V2G) to easily parse messages.
A release is available with a compiled Java Runtime binary there: https://github.com/FlUxIuS/V2Gdecoder/releases
## How to compile or execute
Install maven.
To compile:
```mvn compile assembly:single```
To execute:
```java -jar target/V2Gdecoder-jar-with-dependencies.jar```
If you wish to update risev2g version to something >1.2.6:
```
git clone https://github.com/V2GClarity/RISE-V2G/
cd RISE-V2G/RISE-V2G-PARENT
mvn install
```
Now copy RISE-V2G-Shared in our project:
```cp RISE-V2G/RISE-V2G-Shared/target/rise-v2g-shared-1.2.6.jar src/lib/com.v2gclarity.risev2g/```
Be aware that you might have to do some changes to the code.
## How to use
V2Gdecoder supports many methods to encode XML/decode EXI data as follows:
```
$ java -jar V2Gdecoder.jar -h
Unrecognized option: -h
usage: V2GEXI Helper
-e,--exi EXI format
-f,--file <arg> input file path
-o,--output output file in a dedicated path
-s,--string <arg> string to decode
-w,--web Webserver
-x,--xml XML format
```
To get it work, the directory "./schemas", containing V2G grammar, should be in tool's root directory.
### Decoding data
A compressed EXI data can be decoded as follows:
```
$ java -jar V2Gdecoder.jar -e -s 809802107f860d7bae65dd8a891a1d1d1c0e8bcbddddddcb9dcccb9bdc99cbd5148bd8d85b9bdb9a58d85b0b595e1a50d5a1d1d1c0e8bcbddddddcb9dcccb9bdc99cbcc8c0c0c4bcc0d0bde1b5b191cda59cb5b5bdc9948d958d91cd84b5cda184c8d4d9002b4b21890623696431024687474703a2f2f7777772e77332e6f72672f54522f63616e6f6e6963616c2d6578694852d0e8e8e0745e5eeeeeee5cee665cdee4ce5e646060625e60685ef0dad8cadcc646e6d0c2646a6c84165aa773adf12a841e302f171698e9c4d1e6bb2afdac13826f13ba6a09532c82a2841400000000000501c030a0161005696431001000100240880e201081203840110260a88032940000081030c08018503f03102400c0c3010031039804461800080
<?xml version="1.0" encoding="UTF-8"?><ns7:V2G_Message xmlns:ns7="urn:iso:15118:2:2013:MsgDef" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://www.w3.org/2001/XMLSchema" xmlns:ns4="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="urn:iso:15118:2:2013:MsgBody" xmlns:ns6="urn:iso:15118:2:2013:MsgDataTypes" xmlns:ns8="urn:iso:15118:2:2013:MsgHeader"><ns7:Header><ns8:SessionID>41FE1835EEB99776</ns8:SessionID><ns4:Signature><ns4:SignedInfo><ns4:CanonicalizationMethod Algorithm="http://www.w3.org/TR/canonical-exi"/><ns4:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/><ns4:Reference Id="id1" URI="#id1"><ns4:Transforms><ns4:Transform Algorithm="http://www.w3.org/TR/canonical-exi"/></ns4:Transforms><ns4:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ns4:DigestValue>stU7nW+JVCDxgXi4tMdOJo812VftYJwTeJ3TUEqZZBU=</ns4:DigestValue></ns4:Reference></ns4:SignedInfo><ns4:SignatureValue/></ns4:Signature></ns7:Header><ns7:Body><ns5:ChargeParameterDiscoveryRes><ns5:ResponseCode>OK</ns5:ResponseCode><ns5:EVSEProcessing>Finished</ns5:EVSEProcessing><ns6:SAScheduleList><ns6:SAScheduleTuple><ns6:SAScheduleTupleID>1</ns6:SAScheduleTupleID><ns6:PMaxSchedule><ns6:PMaxScheduleEntry><ns6:RelativeTimeInterval><ns6:start>0</ns6:start><ns6:duration>7200</ns6:duration></ns6:RelativeTimeInterval><ns6:PMax><ns6:Multiplier>3</ns6:Multiplier><ns6:Unit>W</ns6:Unit><ns6:Value>11</ns6:Value></ns6:PMax></ns6:PMaxScheduleEntry></ns6:PMaxSchedule><ns6:SalesTariff ns6:Id="id1"><ns6:SalesTariffID>1</ns6:SalesTariffID><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>0</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>1</ns6:EPriceLevel></ns6:SalesTariffEntry><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>1800</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>4</ns6:EPriceLevel></ns6:SalesTariffEntry><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>3600</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>2</ns6:EPriceLevel></ns6:SalesTariffEntry><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>5400</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>3</ns6:EPriceLevel></ns6:SalesTariffEntry></ns6:SalesTariff></ns6:SAScheduleTuple></ns6:SAScheduleList><ns6:DC_EVSEChargeParameter><ns6:DC_EVSEStatus><ns6:NotificationMaxDelay>0</ns6:NotificationMaxDelay><ns6:EVSENotification>None</ns6:EVSENotification><ns6:EVSEIsolationStatus>Valid</ns6:EVSEIsolationStatus><ns6:EVSEStatusCode>EVSE_Ready</ns6:EVSEStatusCode></ns6:DC_EVSEStatus><ns6:EVSEMaximumCurrentLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>A</ns6:Unit><ns6:Value>32</ns6:Value></ns6:EVSEMaximumCurrentLimit><ns6:EVSEMaximumPowerLimit><ns6:Multiplier>3</ns6:Multiplier><ns6:Unit>W</ns6:Unit><ns6:Value>63</ns6:Value></ns6:EVSEMaximumPowerLimit><ns6:EVSEMaximumVoltageLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>V</ns6:Unit><ns6:Value>400</ns6:Value></ns6:EVSEMaximumVoltageLimit><ns6:EVSEMinimumCurrentLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>A</ns6:Unit><ns6:Value>16</ns6:Value></ns6:EVSEMinimumCurrentLimit><ns6:EVSEMinimumVoltageLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>V</ns6:Unit><ns6:Value>230</ns6:Value></ns6:EVSEMinimumVoltageLimit><ns6:EVSEPeakCurrentRipple><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>A</ns6:Unit><ns6:Value>0</ns6:Value></ns6:EVSEPeakCurrentRipple></ns6:DC_EVSEChargeParameter></ns5:ChargeParameterDiscoveryRes></ns7:Body></ns7:V2G_Message>
```
By using parameters like "file" and "output", data can be taken from input file and exported in an output path respectively.
### Encoding data
In the inverse, the encoding feature can be used as follows:
```
$ java -jar V2Gdecoder.jar -x -s '<?xml version="1.0" encoding="UTF-8"?><ns4:supportedAppProtocolReq xmlns:ns4="urn:iso:15118:2:2010:AppProtocol" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://www.w3.org/2001/XMLSchema"><AppProtocol><ProtocolNamespace>urn:din:70121:2012:MsgDef</ProtocolNamespace><VersionNumberMajor>2</VersionNumberMajor><VersionNumberMinor>0</VersionNumberMinor><SchemaID>0</SchemaID><Priority>1</Priority></AppProtocol><AppProtocol><ProtocolNamespace>urn:iso:15118:2:2013:MsgDef</ProtocolNamespace><VersionNumberMajor>2</VersionNumberMajor><VersionNumberMinor>0</VersionNumberMinor><SchemaID>1</SchemaID><Priority>2</Priority></AppProtocol></ns4:supportedAppProtocolReq>'
8000DBAB9371D3234B71D1B981899189D191818991D26B9B3A232B30020000000001D75726E3A69736F3A31353131383A323A323031333A4D73674465660040000080880
```
### Using the web service
The tool can be runned as follows:
```
$ java -jar V2Gdecoder_test.jar -w
```
This opens a local port TCP 9000.
You can then use your favorite tool/interpreter to send EXI data to get the reply as follows:
```
In [1]: import requests
In [2]: r = requests.post("http://localhost:9000", headers={"Format":"EXI"}, data="809802107f860d7bae65d
...: d8a891a1d1d1c0e8bcbddddddcb9dcccb9bdc99cbd5148bd8d85b9bdb9a58d85b0b595e1a50d5a1d1d1c0e8bcbdddddd
...: cb9dcccb9bdc99cbcc8c0c0c4bcc0d0bde1b5b191cda59cb5b5bdc9948d958d91cd84b5cda184c8d4d9002b4b2189062
...: 3696431024687474703a2f2f7777772e77332e6f72672f54522f63616e6f6e6963616c2d6578694852d0e8e8e0745e5e
...: eeeeee5cee665cdee4ce5e646060625e60685ef0dad8cadcc646e6d0c2646a6c84165aa773adf12a841e302f171698e9
...: c4d1e6bb2afdac13826f13ba6a09532c82a2841400000000000501c030a0161005696431001000100240880e20108120
...: 3840110260a88032940000081030c08018503f03102400c0c3010031039804461800080")
In [3]: r.text
Out[3]: u'<?xml version="1.0" encoding="UTF-8"?><ns7:V2G_Message xmlns:ns7="urn:iso:15118:2:2013:MsgDef" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://www.w3.org/2001/XMLSchema" xmlns:ns4="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="urn:iso:15118:2:2013:MsgBody" xmlns:ns6="urn:iso:15118:2:2013:MsgDataTypes" xmlns:ns8="urn:iso:15118:2:2013:MsgHeader"><ns7:Header><ns8:SessionID>41FE1835EEB99776</ns8:SessionID><ns4:Signature><ns4:SignedInfo><ns4:CanonicalizationMethod Algorithm="http://www.w3.org/TR/canonical-exi"/><ns4:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/><ns4:Reference Id="id1" URI="#id1"><ns4:Transforms><ns4:Transform Algorithm="http://www.w3.org/TR/canonical-exi"/></ns4:Transforms><ns4:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ns4:DigestValue>stU7nW+JVCDxgXi4tMdOJo812VftYJwTeJ3TUEqZZBU=</ns4:DigestValue></ns4:Reference></ns4:SignedInfo><ns4:SignatureValue/></ns4:Signature></ns7:Header><ns7:Body><ns5:ChargeParameterDiscoveryRes><ns5:ResponseCode>OK</ns5:ResponseCode><ns5:EVSEProcessing>Finished</ns5:EVSEProcessing><ns6:SAScheduleList><ns6:SAScheduleTuple><ns6:SAScheduleTupleID>1</ns6:SAScheduleTupleID><ns6:PMaxSchedule><ns6:PMaxScheduleEntry><ns6:RelativeTimeInterval><ns6:start>0</ns6:start><ns6:duration>7200</ns6:duration></ns6:RelativeTimeInterval><ns6:PMax><ns6:Multiplier>3</ns6:Multiplier><ns6:Unit>W</ns6:Unit><ns6:Value>11</ns6:Value></ns6:PMax></ns6:PMaxScheduleEntry></ns6:PMaxSchedule><ns6:SalesTariff ns6:Id="id1"><ns6:SalesTariffID>1</ns6:SalesTariffID><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>0</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>1</ns6:EPriceLevel></ns6:SalesTariffEntry><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>1800</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>4</ns6:EPriceLevel></ns6:SalesTariffEntry><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>3600</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>2</ns6:EPriceLevel></ns6:SalesTariffEntry><ns6:SalesTariffEntry><ns6:RelativeTimeInterval><ns6:start>5400</ns6:start></ns6:RelativeTimeInterval><ns6:EPriceLevel>3</ns6:EPriceLevel></ns6:SalesTariffEntry></ns6:SalesTariff></ns6:SAScheduleTuple></ns6:SAScheduleList><ns6:DC_EVSEChargeParameter><ns6:DC_EVSEStatus><ns6:NotificationMaxDelay>0</ns6:NotificationMaxDelay><ns6:EVSENotification>None</ns6:EVSENotification><ns6:EVSEIsolationStatus>Valid</ns6:EVSEIsolationStatus><ns6:EVSEStatusCode>EVSE_Ready</ns6:EVSEStatusCode></ns6:DC_EVSEStatus><ns6:EVSEMaximumCurrentLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>A</ns6:Unit><ns6:Value>32</ns6:Value></ns6:EVSEMaximumCurrentLimit><ns6:EVSEMaximumPowerLimit><ns6:Multiplier>3</ns6:Multiplier><ns6:Unit>W</ns6:Unit><ns6:Value>63</ns6:Value></ns6:EVSEMaximumPowerLimit><ns6:EVSEMaximumVoltageLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>V</ns6:Unit><ns6:Value>400</ns6:Value></ns6:EVSEMaximumVoltageLimit><ns6:EVSEMinimumCurrentLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>A</ns6:Unit><ns6:Value>16</ns6:Value></ns6:EVSEMinimumCurrentLimit><ns6:EVSEMinimumVoltageLimit><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>V</ns6:Unit><ns6:Value>230</ns6:Value></ns6:EVSEMinimumVoltageLimit><ns6:EVSEPeakCurrentRipple><ns6:Multiplier>0</ns6:Multiplier><ns6:Unit>A</ns6:Unit><ns6:Value>0</ns6:Value></ns6:EVSEPeakCurrentRipple></ns6:DC_EVSEChargeParameter></ns5:ChargeParameterDiscoveryRes></ns7:Body></ns7:V2G_Message>'
```
## Issues when decoding data
XML definition schemas are available in the "./schemas" directory. Unfortunately, a lot of constructors use very old definitions. To fix the issue, you can make your own definition or try to contact us for more information.

113
temp/V2Gdecoder/pom.xml Normal file
View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fluxlus.V2Gdecoder</groupId>
<artifactId>V2Gdecoder</artifactId>
<version>1.0-SNAPSHOT</version>
<name>V2Gdecoder</name>
<url>https://github.com/FlUxIuS/V2Gdecoder</url>
<packaging>jar</packaging> <!-- new -->
<description>V2Gdecoder description. </description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<repositories>
<repository>
<id>project-local-repo</id>
<url>file://${project.basedir}/src/lib/</url>
</repository>
</repositories>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>com.v2gclarity.risev2g</groupId>
<artifactId>rise-v2g-shared</artifactId>
<version>1.2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.siemens.ct.exi/exificient -->
<dependency>
<groupId>com.siemens.ct.exi</groupId>
<artifactId>exificient</artifactId>
<version>1.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
<build>
<finalName>V2Gdecoder</finalName> <!-- added now-->
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.fluxlus.V2Gdecoder.V2Gdecoder</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<!-- <plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin> -->
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- https://mvnrepository.com/artifact/com.siemens.ct.exi/exificient-core -->
</plugins>
</pluginManagement>
</build>
</project>

View File

@@ -0,0 +1,14 @@
1. Generated the Java classes from V2G_CI_MsgDef.xsd into the package v2gMessages.msgDef.
This creates all message types defined in
- V2G_CI_MsgDef
- V2G_CI_MsgHeader
- V2G_CI_MsgBody
- V2G_CI_MsgDataTypes
- xldsig-core-schema.xsd
2. Generated the Java classes from V2G_CI_AppProtocol.xsd into the package v2gMessages.appProtocol
(because of the class ResponseCodeType, which is defined in both schema files and would therefore
raise conflicts).
3. Add SECCDiscoveryReq.java and SECCDiscoveryRes.java to the package v2gMessages.

View File

@@ -0,0 +1,55 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2010:AppProtocol"
targetNamespace="urn:iso:15118:2:2010:AppProtocol">
<xs:element name="supportedAppProtocolReq">
<xs:complexType>
<xs:sequence>
<xs:element name="AppProtocol" type="AppProtocolType" maxOccurs="20"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="supportedAppProtocolRes">
<xs:complexType>
<xs:sequence>
<xs:element name="ResponseCode" type="responseCodeType"/>
<xs:element name="SchemaID" type="idType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="AppProtocolType">
<xs:sequence>
<xs:element name="ProtocolNamespace" type="protocolNamespaceType"/>
<xs:element name="VersionNumberMajor" type="xs:unsignedInt"/>
<xs:element name="VersionNumberMinor" type="xs:unsignedInt"/>
<xs:element name="SchemaID" type="idType"/>
<xs:element name="Priority" type="priorityType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="idType">
<xs:restriction base="xs:unsignedByte"/>
</xs:simpleType>
<xs:simpleType name="protocolNameType">
<xs:restriction base="xs:string">
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="protocolNamespaceType">
<xs:restriction base="xs:anyURI">
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="priorityType">
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="20"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="responseCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK_SuccessfulNegotiation"/>
<xs:enumeration value="OK_SuccessfulNegotiationWithMinorDeviation"/>
<xs:enumeration value="Failed_NoNegotiation"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@@ -0,0 +1,497 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgBody"
xmlns:v2gci_d="urn:iso:15118:2:2013:MsgDef"
xmlns:v2gci_t="urn:iso:15118:2:2013:MsgDataTypes"
targetNamespace="urn:iso:15118:2:2013:MsgBody"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="urn:iso:15118:2:2013:MsgDataTypes" schemaLocation="V2G_CI_MsgDataTypes.xsd"/>
<!-- Body -->
<xs:complexType name="BodyType">
<xs:sequence>
<xs:element ref="BodyElement" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="BodyElement" type="BodyBaseType" abstract="true"/>
<xs:complexType name="BodyBaseType" abstract="true"/>
<!-- ....................... -->
<!-- Common Messages (AC/DC) -->
<!-- ....................... -->
<!-- -->
<!-- Session Setup -->
<!-- -->
<xs:element name="SessionSetupReq" type="SessionSetupReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionSetupReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="EVCCID" type="v2gci_t:evccIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SessionSetupRes" type="SessionSetupResType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionSetupResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="EVSETimeStamp" type="xs:long" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Discovery -->
<!-- -->
<xs:element name="ServiceDiscoveryReq" type="ServiceDiscoveryReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDiscoveryReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ServiceScope" type="v2gci_t:serviceScopeType" minOccurs="0"/>
<xs:element name="ServiceCategory" type="v2gci_t:serviceCategoryType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServiceDiscoveryRes" type="ServiceDiscoveryResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDiscoveryResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="PaymentOptionList" type="v2gci_t:PaymentOptionListType"/>
<xs:element name="ChargeService" type="v2gci_t:ChargeServiceType"/>
<!--<xs:element name="ServiceList" type="v2gci_t:ServiceTagListType" minOccurs="0"/> -->
<xs:element name="ServiceList" type="v2gci_t:ServiceListType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Detail -->
<!-- -->
<xs:element name="ServiceDetailReq" type="ServiceDetailReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDetailReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ServiceID" type="v2gci_t:serviceIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServiceDetailRes" type="ServiceDetailResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDetailResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="ServiceID" type="v2gci_t:serviceIDType"/>
<xs:element name="ServiceParameterList" type="v2gci_t:ServiceParameterListType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Payment & Selection -->
<!-- -->
<xs:element name="PaymentServiceSelectionReq" type="PaymentServiceSelectionReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentServiceSelectionReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="SelectedPaymentOption" type="v2gci_t:paymentOptionType"/>
<xs:element name="SelectedServiceList" type="v2gci_t:SelectedServiceListType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PaymentServiceSelectionRes" type="PaymentServiceSelectionResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentServiceSelectionResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Payment Details -->
<!-- -->
<xs:element name="PaymentDetailsReq" type="PaymentDetailsReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentDetailsReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="eMAID" type="v2gci_t:eMAIDType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PaymentDetailsRes" type="PaymentDetailsResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentDetailsResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="GenChallenge" type="v2gci_t:genChallengeType"/>
<xs:element name="EVSETimeStamp" type="xs:long"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Authorization-->
<!-- -->
<xs:element name="AuthorizationReq" type="AuthorizationReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="AuthorizationReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="GenChallenge" type="v2gci_t:genChallengeType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="AuthorizationRes" type="AuthorizationResType" substitutionGroup="BodyElement"/>
<xs:complexType name="AuthorizationResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Charge Parameter Discovery -->
<!-- -->
<xs:element name="ChargeParameterDiscoveryReq" type="ChargeParameterDiscoveryReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargeParameterDiscoveryReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="MaxEntriesSAScheduleTuple" type="xs:unsignedShort" minOccurs="0"/>
<!-- new -->
<xs:element name="RequestedEnergyTransferMode" type="v2gci_t:EnergyTransferModeType"/>
<xs:element ref="v2gci_t:EVChargeParameter"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ChargeParameterDiscoveryRes" type="ChargeParameterDiscoveryResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargeParameterDiscoveryResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
<xs:element ref="v2gci_t:SASchedules" minOccurs="0"/>
<xs:element ref="v2gci_t:EVSEChargeParameter"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Power Delivery -->
<!-- -->
<xs:element name="PowerDeliveryReq" type="PowerDeliveryReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PowerDeliveryReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ChargeProgress" type="v2gci_t:chargeProgressType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="ChargingProfile" type="v2gci_t:ChargingProfileType" minOccurs="0"/>
<xs:element ref="v2gci_t:EVPowerDeliveryParameter" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PowerDeliveryRes" type="PowerDeliveryResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PowerDeliveryResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element ref="v2gci_t:EVSEStatus"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Metering Receipt -->
<!-- -->
<xs:element name="MeteringReceiptReq" type="MeteringReceiptReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="MeteringReceiptReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="SessionID" type="v2gci_t:sessionIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType" minOccurs="0"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="MeteringReceiptRes" type="MeteringReceiptResType" substitutionGroup="BodyElement"/>
<xs:complexType name="MeteringReceiptResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element ref="v2gci_t:EVSEStatus"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- SessionStop -->
<!-- -->
<xs:element name="SessionStopReq" type="SessionStopReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionStopReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ChargingSession" type="v2gci_t:chargingSessionType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SessionStopRes" type="SessionStopResType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionStopResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Certificate Update -->
<!-- -->
<xs:element name="CertificateUpdateReq" type="CertificateUpdateReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateUpdateReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="eMAID" type="v2gci_t:eMAIDType"/>
<xs:element name="ListOfRootCertificateIDs" type="v2gci_t:ListOfRootCertificateIDsType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CertificateUpdateRes" type="CertificateUpdateResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateUpdateResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="SAProvisioningCertificateChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureEncryptedPrivateKey" type="v2gci_t:ContractSignatureEncryptedPrivateKeyType"/>
<xs:element name="DHpublickey" type="v2gci_t:DiffieHellmanPublickeyType"/>
<xs:element name="eMAID" type="v2gci_t:EMAIDType"/>
<xs:element name="RetryCounter" type="xs:short" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Certificate Installation -->
<!-- -->
<xs:element name="CertificateInstallationReq" type="CertificateInstallationReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateInstallationReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="OEMProvisioningCert" type="v2gci_t:certificateType"/>
<xs:element name="ListOfRootCertificateIDs" type="v2gci_t:ListOfRootCertificateIDsType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CertificateInstallationRes" type="CertificateInstallationResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateInstallationResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="SAProvisioningCertificateChain" type="v2gci_t:CertificateChainType"/>
<!-- new -->
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureEncryptedPrivateKey" type="v2gci_t:ContractSignatureEncryptedPrivateKeyType"/>
<xs:element name="DHpublickey" type="v2gci_t:DiffieHellmanPublickeyType"/>
<xs:element name="eMAID" type="v2gci_t:EMAIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ....................... -->
<!-- AC-Messages -->
<!-- ....................... -->
<!-- -->
<!-- Charging Status -->
<!-- -->
<xs:element name="ChargingStatusReq" type="ChargingStatusReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargingStatusReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ChargingStatusRes" type="ChargingStatusResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargingStatusResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="EVSEMaxCurrent" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType" minOccurs="0"/>
<xs:element name="ReceiptRequired" type="xs:boolean" minOccurs="0"/>
<xs:element name="AC_EVSEStatus" type="v2gci_t:AC_EVSEStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ....................... -->
<!-- DC-Messages -->
<!-- ....................... -->
<!-- -->
<!-- Cable Check -->
<!-- -->
<xs:element name="CableCheckReq" type="CableCheckReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CableCheckReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CableCheckRes" type="CableCheckResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CableCheckResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Pre-Charge -->
<!-- -->
<xs:element name="PreChargeReq" type="PreChargeReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PreChargeReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
<xs:element name="EVTargetVoltage" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVTargetCurrent" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PreChargeRes" type="PreChargeResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PreChargeResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Current Demand -->
<!-- -->
<xs:element name="CurrentDemandReq" type="CurrentDemandReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CurrentDemandReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
<xs:element name="EVTargetCurrent" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVMaximumVoltageLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumCurrentLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumPowerLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="BulkChargingComplete" type="xs:boolean" minOccurs="0"/>
<xs:element name="ChargingComplete" type="xs:boolean"/>
<xs:element name="RemainingTimeToFullSoC" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="RemainingTimeToBulkSoC" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVTargetVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CurrentDemandRes" type="CurrentDemandResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CurrentDemandResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVSEPresentCurrent" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVSECurrentLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEVoltageLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEPowerLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEMaximumVoltageLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumCurrentLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumPowerLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType" minOccurs="0"/>
<xs:element name="ReceiptRequired" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Welding Detection -->
<!-- -->
<xs:element name="WeldingDetectionReq" type="WeldingDetectionReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="WeldingDetectionReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="WeldingDetectionRes" type="WeldingDetectionResType" substitutionGroup="BodyElement"/>
<xs:complexType name="WeldingDetectionResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,721 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgDataTypes"
xmlns:xmlsig="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="urn:iso:15118:2:2013:MsgDataTypes"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<!-- =================== -->
<!-- Complex types -->
<!-- =================== -->
<!-- -->
<!-- service-related types -->
<!-- -->
<xs:complexType name="ServiceType">
<xs:sequence>
<xs:element name="ServiceID" type="serviceIDType"/>
<xs:element name="ServiceName" type="serviceNameType" minOccurs="0"/>
<xs:element name="ServiceCategory" type="serviceCategoryType"/>
<xs:element name="ServiceScope" type="serviceScopeType" minOccurs="0"/>
<xs:element name="FreeService" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceListType">
<xs:sequence>
<xs:element name="Service" type="ServiceType" maxOccurs="8"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SelectedServiceListType">
<xs:sequence>
<xs:element name="SelectedService" type="SelectedServiceType" maxOccurs="16"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SelectedServiceType">
<xs:sequence>
<xs:element name="ServiceID" type="serviceIDType"/>
<xs:element name="ParameterSetID" type="xs:short" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceParameterListType">
<xs:sequence>
<xs:element name="ParameterSet" type="ParameterSetType" maxOccurs="255"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterSetType">
<xs:sequence>
<xs:element name="ParameterSetID" type="xs:short"/>
<xs:element name="Parameter" type="ParameterType" maxOccurs="16"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterType">
<xs:choice>
<xs:element name="boolValue" type="xs:boolean"/>
<xs:element name="byteValue" type="xs:byte"/>
<xs:element name="shortValue" type="xs:short"/>
<xs:element name="intValue" type="xs:int"/>
<xs:element name="physicalValue" type="PhysicalValueType"/>
<xs:element name="stringValue" type="xs:string"/>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="ChargeServiceType">
<xs:complexContent>
<xs:extension base="ServiceType">
<xs:sequence>
<xs:element name="SupportedEnergyTransferMode" type="SupportedEnergyTransferModeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SupportedEnergyTransferModeType">
<xs:sequence>
<xs:element name="EnergyTransferMode" type="EnergyTransferModeType" maxOccurs="6"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- security related types -->
<!-- -->
<xs:complexType name="ContractSignatureEncryptedPrivateKeyType">
<xs:simpleContent>
<xs:extension base="privateKeyType">
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="DiffieHellmanPublickeyType">
<xs:simpleContent>
<xs:extension base="dHpublickeyType">
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="EMAIDType">
<xs:simpleContent>
<xs:extension base="eMAIDType">
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="CertificateChainType">
<xs:sequence>
<xs:element name="Certificate" type="certificateType"/>
<xs:element name="SubCertificates" type="SubCertificatesType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:complexType>
<xs:complexType name="SubCertificatesType">
<xs:sequence>
<xs:element name="Certificate" type="certificateType" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListOfRootCertificateIDsType">
<xs:sequence>
<xs:element name="RootCertificateID" type="xmlsig:X509IssuerSerialType" maxOccurs="20"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- metering related types -->
<!-- -->
<xs:complexType name="MeterInfoType">
<xs:sequence>
<xs:element name="MeterID" type="meterIDType"/>
<xs:element name="MeterReading" type="xs:unsignedLong" minOccurs="0"/>
<xs:element name="SigMeterReading" type="sigMeterReadingType" minOccurs="0"/>
<xs:element name="MeterStatus" type="meterStatusType" minOccurs="0"/>
<xs:element name="TMeter" type="xs:long" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- Physical value type -->
<!-- -->
<xs:complexType name="PhysicalValueType">
<xs:sequence>
<xs:element name="Multiplier" type="unitMultiplierType"/>
<xs:element name="Unit" type="unitSymbolType"/>
<xs:element name="Value" type="xs:short"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- header related types -->
<!-- -->
<xs:complexType name="NotificationType">
<xs:sequence>
<xs:element name="FaultCode" type="faultCodeType"/>
<xs:element name="FaultMsg" type="faultMsgType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- Tariff related types -->
<!-- -->
<xs:complexType name="SASchedulesType" abstract="true"/>
<xs:element name="SASchedules" type="SASchedulesType" abstract="true"/>
<xs:element name="SAScheduleList" type="SAScheduleListType" substitutionGroup="SASchedules"/>
<xs:complexType name="SAScheduleListType">
<xs:complexContent>
<xs:extension base="SASchedulesType">
<xs:sequence>
<xs:element name="SAScheduleTuple" type="SAScheduleTupleType" maxOccurs="3"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SAScheduleTupleType">
<xs:sequence>
<xs:element name="SAScheduleTupleID" type="SAIDType"/>
<xs:element name="PMaxSchedule" type="PMaxScheduleType"/>
<xs:element name="SalesTariff" type="SalesTariffType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SalesTariffType">
<xs:sequence>
<xs:element name="SalesTariffID" type="SAIDType"/>
<xs:element name="SalesTariffDescription" type="tariffDescriptionType" minOccurs="0"/>
<xs:element name="NumEPriceLevels" type="xs:unsignedByte" minOccurs="0"/>
<xs:element ref="SalesTariffEntry" maxOccurs="1024"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:complexType>
<xs:complexType name="PMaxScheduleType">
<xs:sequence>
<xs:element ref="PMaxScheduleEntry" maxOccurs="1024"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Entry" type="EntryType" abstract="true"/>
<xs:complexType name="EntryType" abstract="true">
<xs:sequence>
<xs:element ref="TimeInterval"/>
</xs:sequence>
</xs:complexType>
<xs:element name="SalesTariffEntry" type="SalesTariffEntryType" substitutionGroup="Entry"/>
<xs:complexType name="SalesTariffEntryType">
<xs:complexContent>
<xs:extension base="EntryType">
<xs:sequence>
<xs:element name="EPriceLevel" type="xs:unsignedByte" minOccurs="0"/>
<xs:element name="ConsumptionCost" type="ConsumptionCostType" minOccurs="0" maxOccurs="3"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PMaxScheduleEntry" type="PMaxScheduleEntryType" substitutionGroup="Entry"/>
<xs:complexType name="PMaxScheduleEntryType">
<xs:complexContent>
<xs:extension base="EntryType">
<xs:sequence>
<xs:element name="PMax" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="IntervalType" abstract="true"/>
<xs:element name="TimeInterval" type="IntervalType" abstract="true"/>
<xs:element name="RelativeTimeInterval" type="RelativeTimeIntervalType" substitutionGroup="TimeInterval"/>
<xs:complexType name="RelativeTimeIntervalType">
<xs:complexContent>
<xs:extension base="IntervalType">
<xs:sequence>
<xs:element name="start">
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="16777214"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="duration" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="86400"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ConsumptionCostType">
<xs:sequence>
<xs:element name="startValue" type="PhysicalValueType"/>
<xs:element name="Cost" type="CostType" maxOccurs="3"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CostType">
<xs:sequence>
<xs:element name="costKind" type="costKindType"/>
<xs:element name="amount" type="xs:unsignedInt"/>
<xs:element name="amountMultiplier" type="unitMultiplierType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- EV/EVSE related types -->
<!-- -->
<xs:complexType name="EVSEStatusType" abstract="true">
<xs:sequence>
<xs:element name="NotificationMaxDelay" type="xs:unsignedShort"/>
<xs:element name="EVSENotification" type="EVSENotificationType"/>
</xs:sequence>
</xs:complexType>
<xs:element name="EVSEStatus" type="EVSEStatusType" abstract="true"/>
<xs:element name="AC_EVSEStatus" type="AC_EVSEStatusType" substitutionGroup="EVSEStatus"/>
<xs:complexType name="AC_EVSEStatusType">
<xs:complexContent>
<xs:extension base="EVSEStatusType">
<xs:sequence>
<xs:element name="RCD" type="xs:boolean"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="EVStatusType" abstract="true"/>
<xs:element name="EVStatus" type="EVStatusType" abstract="true"/>
<xs:element name="DC_EVSEStatus" type="DC_EVSEStatusType" substitutionGroup="EVSEStatus"/>
<xs:complexType name="DC_EVSEStatusType">
<xs:complexContent>
<xs:extension base="EVSEStatusType">
<xs:sequence>
<xs:element name="EVSEIsolationStatus" type="isolationLevelType" minOccurs="0"/>
<xs:element name="EVSEStatusCode" type="DC_EVSEStatusCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVStatus" type="DC_EVStatusType" substitutionGroup="EVStatus"/>
<xs:complexType name="DC_EVStatusType">
<xs:complexContent>
<xs:extension base="EVStatusType">
<xs:sequence>
<xs:element name="EVReady" type="xs:boolean"/>
<xs:element name="EVErrorCode" type="DC_EVErrorCodeType"/>
<xs:element name="EVRESSSOC" type="percentValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- EVSE/EV Charge Parameter related types -->
<!-- -->
<xs:complexType name="EVChargeParameterType" abstract="true">
<xs:sequence>
<xs:element name="DepartureTime" type="xs:unsignedInt" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="EVChargeParameter" type="EVChargeParameterType" abstract="true"/>
<xs:element name="AC_EVChargeParameter" type="AC_EVChargeParameterType" substitutionGroup="EVChargeParameter"/>
<xs:complexType name="AC_EVChargeParameterType">
<xs:complexContent>
<xs:extension base="EVChargeParameterType">
<xs:sequence>
<xs:element name="EAmount" type="PhysicalValueType"/>
<xs:element name="EVMaxVoltage" type="PhysicalValueType"/>
<xs:element name="EVMaxCurrent" type="PhysicalValueType"/>
<xs:element name="EVMinCurrent" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVChargeParameter" type="DC_EVChargeParameterType" substitutionGroup="EVChargeParameter"/>
<xs:complexType name="DC_EVChargeParameterType">
<xs:complexContent>
<xs:extension base="EVChargeParameterType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="DC_EVStatusType"/>
<xs:element name="EVMaximumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVMaximumPowerLimit" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVEnergyCapacity" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVEnergyRequest" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="FullSOC" type="percentValueType" minOccurs="0"/>
<xs:element name="BulkSOC" type="percentValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="EVSEChargeParameterType" abstract="true"/>
<xs:element name="EVSEChargeParameter" type="EVSEChargeParameterType" abstract="true"/>
<xs:element name="AC_EVSEChargeParameter" type="AC_EVSEChargeParameterType" substitutionGroup="EVSEChargeParameter"/>
<xs:complexType name="AC_EVSEChargeParameterType">
<xs:complexContent>
<xs:extension base="EVSEChargeParameterType">
<xs:sequence>
<xs:element name="AC_EVSEStatus" type="AC_EVSEStatusType"/>
<!--<xs:element name="EVSEMaxVoltage" type="PhysicalValueType"/> -->
<xs:element name="EVSENominalVoltage" type="PhysicalValueType"/>
<xs:element name="EVSEMaxCurrent" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVSEChargeParameter" type="DC_EVSEChargeParameterType" substitutionGroup="EVSEChargeParameter"/>
<xs:complexType name="DC_EVSEChargeParameterType">
<xs:complexContent>
<xs:extension base="EVSEChargeParameterType">
<xs:sequence>
<xs:element name="DC_EVSEStatus" type="DC_EVSEStatusType"/>
<xs:element name="EVSEMaximumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMaximumPowerLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMaximumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMinimumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMinimumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVSECurrentRegulationTolerance" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEPeakCurrentRipple" type="PhysicalValueType"/>
<xs:element name="EVSEEnergyToBeDelivered" type="PhysicalValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- EV Power Delivery related types -->
<!-- -->
<xs:complexType name="EVPowerDeliveryParameterType" abstract="true"/>
<xs:element name="EVPowerDeliveryParameter" type="EVPowerDeliveryParameterType" abstract="true"/>
<xs:element name="DC_EVPowerDeliveryParameter" type="DC_EVPowerDeliveryParameterType" substitutionGroup="EVPowerDeliveryParameter"/>
<xs:complexType name="DC_EVPowerDeliveryParameterType">
<xs:complexContent>
<xs:extension base="EVPowerDeliveryParameterType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="DC_EVStatusType"/>
<xs:element name="BulkChargingComplete" type="xs:boolean" minOccurs="0"/>
<xs:element name="ChargingComplete" type="xs:boolean"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- ChargingProfileType -->
<!-- -->
<xs:complexType name="ChargingProfileType">
<xs:sequence>
<xs:element name="ProfileEntry" type="ProfileEntryType" maxOccurs="24"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ProfileEntryType">
<xs:sequence>
<xs:element name="ChargingProfileEntryStart" type="xs:unsignedInt"/>
<!-- <xs:element name="ChargingProfileEntryMaxPower" type="PMaxType"/> -->
<xs:element name="ChargingProfileEntryMaxPower" type="PhysicalValueType"/>
<!-- 2013-06-20 VR: added per DE 101 and AT 5 -->
<xs:element name="ChargingProfileEntryMaxNumberOfPhasesInUse" type="maxNumPhasesType" minOccurs="0"/>
<!-- end add-->
</xs:sequence>
</xs:complexType>
<!-- =================== -->
<!-- Simple types -->
<!-- =================== -->
<!-- -->
<!-- General Types -->
<!-- -->
<xs:simpleType name="percentValueType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="faultMsgType">
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVSEProcessingType">
<xs:restriction base="xs:string">
<xs:enumeration value="Finished"/>
<xs:enumeration value="Ongoing"/>
<xs:enumeration value="Ongoing_WaitingForCustomerInteraction"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVSENotificationType">
<xs:restriction base="xs:string">
<xs:enumeration value="None"/>
<xs:enumeration value="StopCharging"/>
<xs:enumeration value="ReNegotiation"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="chargeProgressType">
<xs:restriction base="xs:string">
<xs:enumeration value="Start"/>
<xs:enumeration value="Stop"/>
<xs:enumeration value="Renegotiate"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="chargingSessionType">
<xs:restriction base="xs:string">
<xs:enumeration value="Terminate"/>
<xs:enumeration value="Pause"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceNameType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceCategoryType">
<xs:restriction base="xs:string">
<xs:enumeration value="EVCharging"/>
<xs:enumeration value="Internet"/>
<xs:enumeration value="ContractCertificate"/>
<xs:enumeration value="OtherCustom"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceScopeType">
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="maxNumPhasesType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="valueType">
<xs:restriction base="xs:string">
<xs:enumeration value="bool"/>
<xs:enumeration value="byte"/>
<xs:enumeration value="short"/>
<xs:enumeration value="int"/>
<xs:enumeration value="physicalValue"/>
<xs:enumeration value="string"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="meterStatusType">
<xs:restriction base="xs:short"/>
</xs:simpleType>
<!-- -->
<!-- EnergyTransferType -->
<!-- -->
<xs:simpleType name="EnergyTransferModeType">
<xs:restriction base="xs:string">
<xs:enumeration value="AC_single_phase_core"/>
<xs:enumeration value="AC_three_phase_core"/>
<xs:enumeration value="DC_core"/>
<xs:enumeration value="DC_extended"/>
<xs:enumeration value="DC_combo_core"/>
<xs:enumeration value="DC_unique"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- security types -->
<!-- -->
<xs:simpleType name="genChallengeType">
<xs:restriction base="xs:base64Binary">
<xs:length value="16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="certificateType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="800"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="dHpublickeyType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="65"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="privateKeyType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="48"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="sigMeterReadingType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Identification Numbers -->
<!-- -->
<xs:simpleType name="sessionIDType">
<xs:restriction base="xs:hexBinary">
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evccIDType">
<xs:restriction base="xs:hexBinary">
<xs:maxLength value="6"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evseIDType">
<xs:restriction base="xs:string">
<xs:minLength value="7"/>
<xs:maxLength value="37"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceIDType">
<xs:restriction base="xs:unsignedShort"/>
</xs:simpleType>
<xs:simpleType name="eMAIDType">
<xs:restriction base="xs:string">
<xs:minLength value="14"/>
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="meterIDType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Tariffs and payment -->
<!-- -->
<xs:simpleType name="SAIDType">
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tariffDescriptionType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="costKindType">
<xs:restriction base="xs:string">
<xs:enumeration value="relativePricePercentage"/>
<xs:enumeration value="RenewableGenerationPercentage"/>
<xs:enumeration value="CarbonDioxideEmission"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PaymentOptionListType">
<xs:sequence>
<xs:element name="PaymentOption" type="paymentOptionType" minOccurs="1" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="paymentOptionType">
<xs:restriction base="xs:string">
<xs:enumeration value="Contract"/>
<xs:enumeration value="ExternalPayment"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Fault and Response Codes -->
<!-- -->
<xs:simpleType name="faultCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="ParsingError"/>
<xs:enumeration value="NoTLSRootCertificatAvailable"/>
<xs:enumeration value="UnknownError"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="responseCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK"/>
<xs:enumeration value="OK_NewSessionEstablished"/>
<xs:enumeration value="OK_OldSessionJoined"/>
<xs:enumeration value="OK_CertificateExpiresSoon"/>
<xs:enumeration value="FAILED"/>
<xs:enumeration value="FAILED_SequenceError"/>
<xs:enumeration value="FAILED_ServiceIDInvalid"/>
<xs:enumeration value="FAILED_UnknownSession"/>
<xs:enumeration value="FAILED_ServiceSelectionInvalid"/>
<xs:enumeration value="FAILED_PaymentSelectionInvalid"/>
<xs:enumeration value="FAILED_CertificateExpired"/>
<xs:enumeration value="FAILED_SignatureError"/>
<xs:enumeration value="FAILED_NoCertificateAvailable"/>
<xs:enumeration value="FAILED_CertChainError"/>
<xs:enumeration value="FAILED_ChallengeInvalid"/>
<xs:enumeration value="FAILED_ContractCanceled"/>
<xs:enumeration value="FAILED_WrongChargeParameter"/>
<xs:enumeration value="FAILED_PowerDeliveryNotApplied"/>
<xs:enumeration value="FAILED_TariffSelectionInvalid"/>
<xs:enumeration value="FAILED_ChargingProfileInvalid"/>
<xs:enumeration value="FAILED_MeteringSignatureNotValid"/>
<xs:enumeration value="FAILED_NoChargeServiceSelected"/>
<xs:enumeration value="FAILED_WrongEnergyTransferMode"/>
<xs:enumeration value="FAILED_ContactorError"/>
<xs:enumeration value="FAILED_CertificateNotAllowedAtThisEVSE"/>
<xs:enumeration value="FAILED_CertificateRevoked"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Multiplier and Unit Types -->
<!-- -->
<xs:simpleType name="unitMultiplierType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="-3"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="unitSymbolType">
<xs:restriction base="xs:string">
<xs:enumeration value="h">
<xs:annotation>
<xs:documentation>Time in hours</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m">
<xs:annotation>
<xs:documentation>Time in minutes</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="s">
<xs:annotation>
<xs:documentation>Time in seconds</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="A">
<xs:annotation>
<xs:documentation>Current in Ampere</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="V">
<xs:annotation>
<xs:documentation>Voltage in Volt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W">
<xs:annotation>
<xs:documentation>Active power in Watt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Wh">
<xs:annotation>
<xs:documentation>Real energy in Watt hours</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- only DC related -->
<!-- -->
<xs:simpleType name="DC_EVSEStatusCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="EVSE_NotReady"/>
<xs:enumeration value="EVSE_Ready"/>
<xs:enumeration value="EVSE_Shutdown"/>
<xs:enumeration value="EVSE_UtilityInterruptEvent"/>
<xs:enumeration value="EVSE_IsolationMonitoringActive"/>
<xs:enumeration value="EVSE_EmergencyShutdown"/>
<xs:enumeration value="EVSE_Malfunction"/>
<xs:enumeration value="Reserved_8"/>
<xs:enumeration value="Reserved_9"/>
<xs:enumeration value="Reserved_A"/>
<xs:enumeration value="Reserved_B"/>
<xs:enumeration value="Reserved_C"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="isolationLevelType">
<xs:restriction base="xs:string">
<xs:enumeration value="Invalid"/>
<xs:enumeration value="Valid"/>
<xs:enumeration value="Warning"/>
<xs:enumeration value="Fault"/>
<xs:enumeration value="No_IMD"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DC_EVErrorCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="NO_ERROR"/>
<xs:enumeration value="FAILED_RESSTemperatureInhibit"/>
<xs:enumeration value="FAILED_EVShiftPosition"/>
<xs:enumeration value="FAILED_ChargerConnectorLockFault"/>
<xs:enumeration value="FAILED_EVRESSMalfunction"/>
<xs:enumeration value="FAILED_ChargingCurrentdifferential"/>
<xs:enumeration value="FAILED_ChargingVoltageOutOfRange"/>
<xs:enumeration value="Reserved_A"/>
<xs:enumeration value="Reserved_B"/>
<xs:enumeration value="Reserved_C"/>
<xs:enumeration value="FAILED_ChargingSystemIncompatibility"/>
<xs:enumeration value="NoData"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

Binary file not shown.

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgDef" xmlns:v2gci_h="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody" targetNamespace="urn:iso:15118:2:2013:MsgDef"
elementFormDefault="qualified" attributeFormDefault="qualified" version="15118 2.0">
<!-- attributeFormDefault="unqualified" -->
<xs:import namespace="urn:iso:15118:2:2013:MsgHeader" schemaLocation="V2G_CI_MsgHeader.xsd"/>
<xs:import namespace="urn:iso:15118:2:2013:MsgBody" schemaLocation="V2G_CI_MsgBody.xsd"/>
<!-- Message Structure -->
<xs:element name="V2G_Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="v2gci_h:MessageHeaderType"/>
<xs:element name="Body" type="v2gci_b:BodyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_t="urn:iso:15118:2:2013:MsgDataTypes"
xmlns:xmlsig="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="urn:iso:15118:2:2013:MsgHeader"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="urn:iso:15118:2:2013:MsgDataTypes" schemaLocation="V2G_CI_MsgDataTypes.xsd"/>
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<!-- Message Header -->
<xs:complexType name="MessageHeaderType">
<xs:sequence>
<xs:element name="SessionID" type="v2gci_t:sessionIDType"/>
<xs:element name="Notification" type="v2gci_t:NotificationType" minOccurs="0"/>
<xs:element ref="xmlsig:Signature" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgDef" xmlns:v2gci_h="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody" targetNamespace="urn:iso:15118:2:2013:MsgDef"
elementFormDefault="qualified" attributeFormDefault="qualified" version="15118 2.0">
<!-- attributeFormDefault="unqualified" -->
<xs:import namespace="urn:iso:15118:2:2013:MsgHeader" schemaLocation="V2G_CI_MsgHeader.xsd"/>
<xs:import namespace="urn:iso:15118:2:2013:MsgBody" schemaLocation="V2G_CI_MsgBody.xsd"/>
<!-- Message Structure -->
<xs:element name="V2G_Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="v2gci_h:MessageHeaderType"/>
<xs:element name="Body" type="v2gci_b:BodyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,14 @@
1. Generated the Java classes from V2G_CI_MsgDef.xsd into the package v2gMessages.msgDef.
This creates all message types defined in
- V2G_CI_MsgDef
- V2G_CI_MsgHeader
- V2G_CI_MsgBody
- V2G_CI_MsgDataTypes
- xldsig-core-schema.xsd
2. Generated the Java classes from V2G_CI_AppProtocol.xsd into the package v2gMessages.appProtocol
(because of the class ResponseCodeType, which is defined in both schema files and would therefore
raise conflicts).
3. Add SECCDiscoveryReq.java and SECCDiscoveryRes.java to the package v2gMessages.

View File

@@ -0,0 +1,55 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2010:AppProtocol"
targetNamespace="urn:iso:15118:2:2010:AppProtocol">
<xs:element name="supportedAppProtocolReq">
<xs:complexType>
<xs:sequence>
<xs:element name="AppProtocol" type="AppProtocolType" maxOccurs="20"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="supportedAppProtocolRes">
<xs:complexType>
<xs:sequence>
<xs:element name="ResponseCode" type="responseCodeType"/>
<xs:element name="SchemaID" type="idType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="AppProtocolType">
<xs:sequence>
<xs:element name="ProtocolNamespace" type="protocolNamespaceType"/>
<xs:element name="VersionNumberMajor" type="xs:unsignedInt"/>
<xs:element name="VersionNumberMinor" type="xs:unsignedInt"/>
<xs:element name="SchemaID" type="idType"/>
<xs:element name="Priority" type="priorityType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="idType">
<xs:restriction base="xs:unsignedByte"/>
</xs:simpleType>
<xs:simpleType name="protocolNameType">
<xs:restriction base="xs:string">
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="protocolNamespaceType">
<xs:restriction base="xs:anyURI">
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="priorityType">
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="20"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="responseCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK_SuccessfulNegotiation"/>
<xs:enumeration value="OK_SuccessfulNegotiationWithMinorDeviation"/>
<xs:enumeration value="Failed_NoNegotiation"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@@ -0,0 +1,497 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgBody"
xmlns:v2gci_d="urn:iso:15118:2:2013:MsgDef"
xmlns:v2gci_t="urn:iso:15118:2:2013:MsgDataTypes"
targetNamespace="urn:iso:15118:2:2013:MsgBody"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="urn:iso:15118:2:2013:MsgDataTypes" schemaLocation="V2G_CI_MsgDataTypes.xsd"/>
<!-- Body -->
<xs:complexType name="BodyType">
<xs:sequence>
<xs:element ref="BodyElement" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="BodyElement" type="BodyBaseType" abstract="true"/>
<xs:complexType name="BodyBaseType" abstract="true"/>
<!-- ....................... -->
<!-- Common Messages (AC/DC) -->
<!-- ....................... -->
<!-- -->
<!-- Session Setup -->
<!-- -->
<xs:element name="SessionSetupReq" type="SessionSetupReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionSetupReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="EVCCID" type="v2gci_t:evccIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SessionSetupRes" type="SessionSetupResType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionSetupResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="EVSETimeStamp" type="xs:long" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Discovery -->
<!-- -->
<xs:element name="ServiceDiscoveryReq" type="ServiceDiscoveryReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDiscoveryReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ServiceScope" type="v2gci_t:serviceScopeType" minOccurs="0"/>
<xs:element name="ServiceCategory" type="v2gci_t:serviceCategoryType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServiceDiscoveryRes" type="ServiceDiscoveryResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDiscoveryResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="PaymentOptionList" type="v2gci_t:PaymentOptionListType"/>
<xs:element name="ChargeService" type="v2gci_t:ChargeServiceType"/>
<!--<xs:element name="ServiceList" type="v2gci_t:ServiceTagListType" minOccurs="0"/> -->
<xs:element name="ServiceList" type="v2gci_t:ServiceListType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Detail -->
<!-- -->
<xs:element name="ServiceDetailReq" type="ServiceDetailReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDetailReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ServiceID" type="v2gci_t:serviceIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServiceDetailRes" type="ServiceDetailResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ServiceDetailResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="ServiceID" type="v2gci_t:serviceIDType"/>
<xs:element name="ServiceParameterList" type="v2gci_t:ServiceParameterListType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Payment & Selection -->
<!-- -->
<xs:element name="PaymentServiceSelectionReq" type="PaymentServiceSelectionReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentServiceSelectionReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="SelectedPaymentOption" type="v2gci_t:paymentOptionType"/>
<xs:element name="SelectedServiceList" type="v2gci_t:SelectedServiceListType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PaymentServiceSelectionRes" type="PaymentServiceSelectionResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentServiceSelectionResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Payment Details -->
<!-- -->
<xs:element name="PaymentDetailsReq" type="PaymentDetailsReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentDetailsReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="eMAID" type="v2gci_t:eMAIDType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PaymentDetailsRes" type="PaymentDetailsResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PaymentDetailsResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="GenChallenge" type="v2gci_t:genChallengeType"/>
<xs:element name="EVSETimeStamp" type="xs:long"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Authorization-->
<!-- -->
<xs:element name="AuthorizationReq" type="AuthorizationReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="AuthorizationReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="GenChallenge" type="v2gci_t:genChallengeType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="AuthorizationRes" type="AuthorizationResType" substitutionGroup="BodyElement"/>
<xs:complexType name="AuthorizationResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Charge Parameter Discovery -->
<!-- -->
<xs:element name="ChargeParameterDiscoveryReq" type="ChargeParameterDiscoveryReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargeParameterDiscoveryReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="MaxEntriesSAScheduleTuple" type="xs:unsignedShort" minOccurs="0"/>
<!-- new -->
<xs:element name="RequestedEnergyTransferMode" type="v2gci_t:EnergyTransferModeType"/>
<xs:element ref="v2gci_t:EVChargeParameter"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ChargeParameterDiscoveryRes" type="ChargeParameterDiscoveryResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargeParameterDiscoveryResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
<xs:element ref="v2gci_t:SASchedules" minOccurs="0"/>
<xs:element ref="v2gci_t:EVSEChargeParameter"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Power Delivery -->
<!-- -->
<xs:element name="PowerDeliveryReq" type="PowerDeliveryReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PowerDeliveryReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ChargeProgress" type="v2gci_t:chargeProgressType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="ChargingProfile" type="v2gci_t:ChargingProfileType" minOccurs="0"/>
<xs:element ref="v2gci_t:EVPowerDeliveryParameter" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PowerDeliveryRes" type="PowerDeliveryResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PowerDeliveryResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element ref="v2gci_t:EVSEStatus"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Metering Receipt -->
<!-- -->
<xs:element name="MeteringReceiptReq" type="MeteringReceiptReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="MeteringReceiptReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="SessionID" type="v2gci_t:sessionIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType" minOccurs="0"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="MeteringReceiptRes" type="MeteringReceiptResType" substitutionGroup="BodyElement"/>
<xs:complexType name="MeteringReceiptResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element ref="v2gci_t:EVSEStatus"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- SessionStop -->
<!-- -->
<xs:element name="SessionStopReq" type="SessionStopReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionStopReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ChargingSession" type="v2gci_t:chargingSessionType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SessionStopRes" type="SessionStopResType" substitutionGroup="BodyElement"/>
<xs:complexType name="SessionStopResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Certificate Update -->
<!-- -->
<xs:element name="CertificateUpdateReq" type="CertificateUpdateReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateUpdateReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="eMAID" type="v2gci_t:eMAIDType"/>
<xs:element name="ListOfRootCertificateIDs" type="v2gci_t:ListOfRootCertificateIDsType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CertificateUpdateRes" type="CertificateUpdateResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateUpdateResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="SAProvisioningCertificateChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureEncryptedPrivateKey" type="v2gci_t:ContractSignatureEncryptedPrivateKeyType"/>
<xs:element name="DHpublickey" type="v2gci_t:DiffieHellmanPublickeyType"/>
<xs:element name="eMAID" type="v2gci_t:EMAIDType"/>
<xs:element name="RetryCounter" type="xs:short" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Certificate Installation -->
<!-- -->
<xs:element name="CertificateInstallationReq" type="CertificateInstallationReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateInstallationReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="OEMProvisioningCert" type="v2gci_t:certificateType"/>
<xs:element name="ListOfRootCertificateIDs" type="v2gci_t:ListOfRootCertificateIDsType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CertificateInstallationRes" type="CertificateInstallationResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CertificateInstallationResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="SAProvisioningCertificateChain" type="v2gci_t:CertificateChainType"/>
<!-- new -->
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureEncryptedPrivateKey" type="v2gci_t:ContractSignatureEncryptedPrivateKeyType"/>
<xs:element name="DHpublickey" type="v2gci_t:DiffieHellmanPublickeyType"/>
<xs:element name="eMAID" type="v2gci_t:EMAIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ....................... -->
<!-- AC-Messages -->
<!-- ....................... -->
<!-- -->
<!-- Charging Status -->
<!-- -->
<xs:element name="ChargingStatusReq" type="ChargingStatusReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargingStatusReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ChargingStatusRes" type="ChargingStatusResType" substitutionGroup="BodyElement"/>
<xs:complexType name="ChargingStatusResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="EVSEMaxCurrent" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType" minOccurs="0"/>
<xs:element name="ReceiptRequired" type="xs:boolean" minOccurs="0"/>
<xs:element name="AC_EVSEStatus" type="v2gci_t:AC_EVSEStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ....................... -->
<!-- DC-Messages -->
<!-- ....................... -->
<!-- -->
<!-- Cable Check -->
<!-- -->
<xs:element name="CableCheckReq" type="CableCheckReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CableCheckReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CableCheckRes" type="CableCheckResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CableCheckResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Pre-Charge -->
<!-- -->
<xs:element name="PreChargeReq" type="PreChargeReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="PreChargeReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
<xs:element name="EVTargetVoltage" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVTargetCurrent" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PreChargeRes" type="PreChargeResType" substitutionGroup="BodyElement"/>
<xs:complexType name="PreChargeResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Current Demand -->
<!-- -->
<xs:element name="CurrentDemandReq" type="CurrentDemandReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="CurrentDemandReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
<xs:element name="EVTargetCurrent" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVMaximumVoltageLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumCurrentLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumPowerLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="BulkChargingComplete" type="xs:boolean" minOccurs="0"/>
<xs:element name="ChargingComplete" type="xs:boolean"/>
<xs:element name="RemainingTimeToFullSoC" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="RemainingTimeToBulkSoC" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVTargetVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CurrentDemandRes" type="CurrentDemandResType" substitutionGroup="BodyElement"/>
<xs:complexType name="CurrentDemandResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVSEPresentCurrent" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVSECurrentLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEVoltageLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEPowerLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEMaximumVoltageLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumCurrentLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumPowerLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType" minOccurs="0"/>
<xs:element name="ReceiptRequired" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Welding Detection -->
<!-- -->
<xs:element name="WeldingDetectionReq" type="WeldingDetectionReqType" substitutionGroup="BodyElement"/>
<xs:complexType name="WeldingDetectionReqType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="WeldingDetectionRes" type="WeldingDetectionResType" substitutionGroup="BodyElement"/>
<xs:complexType name="WeldingDetectionResType">
<xs:complexContent>
<xs:extension base="BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,721 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgDataTypes"
xmlns:xmlsig="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="urn:iso:15118:2:2013:MsgDataTypes"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<!-- =================== -->
<!-- Complex types -->
<!-- =================== -->
<!-- -->
<!-- service-related types -->
<!-- -->
<xs:complexType name="ServiceType">
<xs:sequence>
<xs:element name="ServiceID" type="serviceIDType"/>
<xs:element name="ServiceName" type="serviceNameType" minOccurs="0"/>
<xs:element name="ServiceCategory" type="serviceCategoryType"/>
<xs:element name="ServiceScope" type="serviceScopeType" minOccurs="0"/>
<xs:element name="FreeService" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceListType">
<xs:sequence>
<xs:element name="Service" type="ServiceType" maxOccurs="8"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SelectedServiceListType">
<xs:sequence>
<xs:element name="SelectedService" type="SelectedServiceType" maxOccurs="16"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SelectedServiceType">
<xs:sequence>
<xs:element name="ServiceID" type="serviceIDType"/>
<xs:element name="ParameterSetID" type="xs:short" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceParameterListType">
<xs:sequence>
<xs:element name="ParameterSet" type="ParameterSetType" maxOccurs="255"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterSetType">
<xs:sequence>
<xs:element name="ParameterSetID" type="xs:short"/>
<xs:element name="Parameter" type="ParameterType" maxOccurs="16"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterType">
<xs:choice>
<xs:element name="boolValue" type="xs:boolean"/>
<xs:element name="byteValue" type="xs:byte"/>
<xs:element name="shortValue" type="xs:short"/>
<xs:element name="intValue" type="xs:int"/>
<xs:element name="physicalValue" type="PhysicalValueType"/>
<xs:element name="stringValue" type="xs:string"/>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="ChargeServiceType">
<xs:complexContent>
<xs:extension base="ServiceType">
<xs:sequence>
<xs:element name="SupportedEnergyTransferMode" type="SupportedEnergyTransferModeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SupportedEnergyTransferModeType">
<xs:sequence>
<xs:element name="EnergyTransferMode" type="EnergyTransferModeType" maxOccurs="6"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- security related types -->
<!-- -->
<xs:complexType name="ContractSignatureEncryptedPrivateKeyType">
<xs:simpleContent>
<xs:extension base="privateKeyType">
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="DiffieHellmanPublickeyType">
<xs:simpleContent>
<xs:extension base="dHpublickeyType">
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="EMAIDType">
<xs:simpleContent>
<xs:extension base="eMAIDType">
<xs:attribute name="Id" type="xs:ID" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="CertificateChainType">
<xs:sequence>
<xs:element name="Certificate" type="certificateType"/>
<xs:element name="SubCertificates" type="SubCertificatesType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:complexType>
<xs:complexType name="SubCertificatesType">
<xs:sequence>
<xs:element name="Certificate" type="certificateType" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListOfRootCertificateIDsType">
<xs:sequence>
<xs:element name="RootCertificateID" type="xmlsig:X509IssuerSerialType" maxOccurs="20"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- metering related types -->
<!-- -->
<xs:complexType name="MeterInfoType">
<xs:sequence>
<xs:element name="MeterID" type="meterIDType"/>
<xs:element name="MeterReading" type="xs:unsignedLong" minOccurs="0"/>
<xs:element name="SigMeterReading" type="sigMeterReadingType" minOccurs="0"/>
<xs:element name="MeterStatus" type="meterStatusType" minOccurs="0"/>
<xs:element name="TMeter" type="xs:long" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- Physical value type -->
<!-- -->
<xs:complexType name="PhysicalValueType">
<xs:sequence>
<xs:element name="Multiplier" type="unitMultiplierType"/>
<xs:element name="Unit" type="unitSymbolType"/>
<xs:element name="Value" type="xs:short"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- header related types -->
<!-- -->
<xs:complexType name="NotificationType">
<xs:sequence>
<xs:element name="FaultCode" type="faultCodeType"/>
<xs:element name="FaultMsg" type="faultMsgType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- Tariff related types -->
<!-- -->
<xs:complexType name="SASchedulesType" abstract="true"/>
<xs:element name="SASchedules" type="SASchedulesType" abstract="true"/>
<xs:element name="SAScheduleList" type="SAScheduleListType" substitutionGroup="SASchedules"/>
<xs:complexType name="SAScheduleListType">
<xs:complexContent>
<xs:extension base="SASchedulesType">
<xs:sequence>
<xs:element name="SAScheduleTuple" type="SAScheduleTupleType" maxOccurs="3"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SAScheduleTupleType">
<xs:sequence>
<xs:element name="SAScheduleTupleID" type="SAIDType"/>
<xs:element name="PMaxSchedule" type="PMaxScheduleType"/>
<xs:element name="SalesTariff" type="SalesTariffType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SalesTariffType">
<xs:sequence>
<xs:element name="SalesTariffID" type="SAIDType"/>
<xs:element name="SalesTariffDescription" type="tariffDescriptionType" minOccurs="0"/>
<xs:element name="NumEPriceLevels" type="xs:unsignedByte" minOccurs="0"/>
<xs:element ref="SalesTariffEntry" maxOccurs="1024"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:ID"/>
</xs:complexType>
<xs:complexType name="PMaxScheduleType">
<xs:sequence>
<xs:element ref="PMaxScheduleEntry" maxOccurs="1024"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Entry" type="EntryType" abstract="true"/>
<xs:complexType name="EntryType" abstract="true">
<xs:sequence>
<xs:element ref="TimeInterval"/>
</xs:sequence>
</xs:complexType>
<xs:element name="SalesTariffEntry" type="SalesTariffEntryType" substitutionGroup="Entry"/>
<xs:complexType name="SalesTariffEntryType">
<xs:complexContent>
<xs:extension base="EntryType">
<xs:sequence>
<xs:element name="EPriceLevel" type="xs:unsignedByte" minOccurs="0"/>
<xs:element name="ConsumptionCost" type="ConsumptionCostType" minOccurs="0" maxOccurs="3"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PMaxScheduleEntry" type="PMaxScheduleEntryType" substitutionGroup="Entry"/>
<xs:complexType name="PMaxScheduleEntryType">
<xs:complexContent>
<xs:extension base="EntryType">
<xs:sequence>
<xs:element name="PMax" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="IntervalType" abstract="true"/>
<xs:element name="TimeInterval" type="IntervalType" abstract="true"/>
<xs:element name="RelativeTimeInterval" type="RelativeTimeIntervalType" substitutionGroup="TimeInterval"/>
<xs:complexType name="RelativeTimeIntervalType">
<xs:complexContent>
<xs:extension base="IntervalType">
<xs:sequence>
<xs:element name="start">
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="16777214"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="duration" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="86400"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ConsumptionCostType">
<xs:sequence>
<xs:element name="startValue" type="PhysicalValueType"/>
<xs:element name="Cost" type="CostType" maxOccurs="3"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CostType">
<xs:sequence>
<xs:element name="costKind" type="costKindType"/>
<xs:element name="amount" type="xs:unsignedInt"/>
<xs:element name="amountMultiplier" type="unitMultiplierType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- EV/EVSE related types -->
<!-- -->
<xs:complexType name="EVSEStatusType" abstract="true">
<xs:sequence>
<xs:element name="NotificationMaxDelay" type="xs:unsignedShort"/>
<xs:element name="EVSENotification" type="EVSENotificationType"/>
</xs:sequence>
</xs:complexType>
<xs:element name="EVSEStatus" type="EVSEStatusType" abstract="true"/>
<xs:element name="AC_EVSEStatus" type="AC_EVSEStatusType" substitutionGroup="EVSEStatus"/>
<xs:complexType name="AC_EVSEStatusType">
<xs:complexContent>
<xs:extension base="EVSEStatusType">
<xs:sequence>
<xs:element name="RCD" type="xs:boolean"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="EVStatusType" abstract="true"/>
<xs:element name="EVStatus" type="EVStatusType" abstract="true"/>
<xs:element name="DC_EVSEStatus" type="DC_EVSEStatusType" substitutionGroup="EVSEStatus"/>
<xs:complexType name="DC_EVSEStatusType">
<xs:complexContent>
<xs:extension base="EVSEStatusType">
<xs:sequence>
<xs:element name="EVSEIsolationStatus" type="isolationLevelType" minOccurs="0"/>
<xs:element name="EVSEStatusCode" type="DC_EVSEStatusCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVStatus" type="DC_EVStatusType" substitutionGroup="EVStatus"/>
<xs:complexType name="DC_EVStatusType">
<xs:complexContent>
<xs:extension base="EVStatusType">
<xs:sequence>
<xs:element name="EVReady" type="xs:boolean"/>
<xs:element name="EVErrorCode" type="DC_EVErrorCodeType"/>
<xs:element name="EVRESSSOC" type="percentValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- EVSE/EV Charge Parameter related types -->
<!-- -->
<xs:complexType name="EVChargeParameterType" abstract="true">
<xs:sequence>
<xs:element name="DepartureTime" type="xs:unsignedInt" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="EVChargeParameter" type="EVChargeParameterType" abstract="true"/>
<xs:element name="AC_EVChargeParameter" type="AC_EVChargeParameterType" substitutionGroup="EVChargeParameter"/>
<xs:complexType name="AC_EVChargeParameterType">
<xs:complexContent>
<xs:extension base="EVChargeParameterType">
<xs:sequence>
<xs:element name="EAmount" type="PhysicalValueType"/>
<xs:element name="EVMaxVoltage" type="PhysicalValueType"/>
<xs:element name="EVMaxCurrent" type="PhysicalValueType"/>
<xs:element name="EVMinCurrent" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVChargeParameter" type="DC_EVChargeParameterType" substitutionGroup="EVChargeParameter"/>
<xs:complexType name="DC_EVChargeParameterType">
<xs:complexContent>
<xs:extension base="EVChargeParameterType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="DC_EVStatusType"/>
<xs:element name="EVMaximumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVMaximumPowerLimit" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVEnergyCapacity" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVEnergyRequest" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="FullSOC" type="percentValueType" minOccurs="0"/>
<xs:element name="BulkSOC" type="percentValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="EVSEChargeParameterType" abstract="true"/>
<xs:element name="EVSEChargeParameter" type="EVSEChargeParameterType" abstract="true"/>
<xs:element name="AC_EVSEChargeParameter" type="AC_EVSEChargeParameterType" substitutionGroup="EVSEChargeParameter"/>
<xs:complexType name="AC_EVSEChargeParameterType">
<xs:complexContent>
<xs:extension base="EVSEChargeParameterType">
<xs:sequence>
<xs:element name="AC_EVSEStatus" type="AC_EVSEStatusType"/>
<!--<xs:element name="EVSEMaxVoltage" type="PhysicalValueType"/> -->
<xs:element name="EVSENominalVoltage" type="PhysicalValueType"/>
<xs:element name="EVSEMaxCurrent" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVSEChargeParameter" type="DC_EVSEChargeParameterType" substitutionGroup="EVSEChargeParameter"/>
<xs:complexType name="DC_EVSEChargeParameterType">
<xs:complexContent>
<xs:extension base="EVSEChargeParameterType">
<xs:sequence>
<xs:element name="DC_EVSEStatus" type="DC_EVSEStatusType"/>
<xs:element name="EVSEMaximumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMaximumPowerLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMaximumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMinimumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMinimumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVSECurrentRegulationTolerance" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEPeakCurrentRipple" type="PhysicalValueType"/>
<xs:element name="EVSEEnergyToBeDelivered" type="PhysicalValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- EV Power Delivery related types -->
<!-- -->
<xs:complexType name="EVPowerDeliveryParameterType" abstract="true"/>
<xs:element name="EVPowerDeliveryParameter" type="EVPowerDeliveryParameterType" abstract="true"/>
<xs:element name="DC_EVPowerDeliveryParameter" type="DC_EVPowerDeliveryParameterType" substitutionGroup="EVPowerDeliveryParameter"/>
<xs:complexType name="DC_EVPowerDeliveryParameterType">
<xs:complexContent>
<xs:extension base="EVPowerDeliveryParameterType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="DC_EVStatusType"/>
<xs:element name="BulkChargingComplete" type="xs:boolean" minOccurs="0"/>
<xs:element name="ChargingComplete" type="xs:boolean"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- ChargingProfileType -->
<!-- -->
<xs:complexType name="ChargingProfileType">
<xs:sequence>
<xs:element name="ProfileEntry" type="ProfileEntryType" maxOccurs="24"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ProfileEntryType">
<xs:sequence>
<xs:element name="ChargingProfileEntryStart" type="xs:unsignedInt"/>
<!-- <xs:element name="ChargingProfileEntryMaxPower" type="PMaxType"/> -->
<xs:element name="ChargingProfileEntryMaxPower" type="PhysicalValueType"/>
<!-- 2013-06-20 VR: added per DE 101 and AT 5 -->
<xs:element name="ChargingProfileEntryMaxNumberOfPhasesInUse" type="maxNumPhasesType" minOccurs="0"/>
<!-- end add-->
</xs:sequence>
</xs:complexType>
<!-- =================== -->
<!-- Simple types -->
<!-- =================== -->
<!-- -->
<!-- General Types -->
<!-- -->
<xs:simpleType name="percentValueType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="faultMsgType">
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVSEProcessingType">
<xs:restriction base="xs:string">
<xs:enumeration value="Finished"/>
<xs:enumeration value="Ongoing"/>
<xs:enumeration value="Ongoing_WaitingForCustomerInteraction"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVSENotificationType">
<xs:restriction base="xs:string">
<xs:enumeration value="None"/>
<xs:enumeration value="StopCharging"/>
<xs:enumeration value="ReNegotiation"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="chargeProgressType">
<xs:restriction base="xs:string">
<xs:enumeration value="Start"/>
<xs:enumeration value="Stop"/>
<xs:enumeration value="Renegotiate"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="chargingSessionType">
<xs:restriction base="xs:string">
<xs:enumeration value="Terminate"/>
<xs:enumeration value="Pause"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceNameType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceCategoryType">
<xs:restriction base="xs:string">
<xs:enumeration value="EVCharging"/>
<xs:enumeration value="Internet"/>
<xs:enumeration value="ContractCertificate"/>
<xs:enumeration value="OtherCustom"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceScopeType">
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="maxNumPhasesType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="valueType">
<xs:restriction base="xs:string">
<xs:enumeration value="bool"/>
<xs:enumeration value="byte"/>
<xs:enumeration value="short"/>
<xs:enumeration value="int"/>
<xs:enumeration value="physicalValue"/>
<xs:enumeration value="string"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="meterStatusType">
<xs:restriction base="xs:short"/>
</xs:simpleType>
<!-- -->
<!-- EnergyTransferType -->
<!-- -->
<xs:simpleType name="EnergyTransferModeType">
<xs:restriction base="xs:string">
<xs:enumeration value="AC_single_phase_core"/>
<xs:enumeration value="AC_three_phase_core"/>
<xs:enumeration value="DC_core"/>
<xs:enumeration value="DC_extended"/>
<xs:enumeration value="DC_combo_core"/>
<xs:enumeration value="DC_unique"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- security types -->
<!-- -->
<xs:simpleType name="genChallengeType">
<xs:restriction base="xs:base64Binary">
<xs:length value="16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="certificateType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="800"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="dHpublickeyType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="65"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="privateKeyType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="48"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="sigMeterReadingType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Identification Numbers -->
<!-- -->
<xs:simpleType name="sessionIDType">
<xs:restriction base="xs:hexBinary">
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evccIDType">
<xs:restriction base="xs:hexBinary">
<xs:maxLength value="6"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evseIDType">
<xs:restriction base="xs:string">
<xs:minLength value="7"/>
<xs:maxLength value="37"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceIDType">
<xs:restriction base="xs:unsignedShort"/>
</xs:simpleType>
<xs:simpleType name="eMAIDType">
<xs:restriction base="xs:string">
<xs:minLength value="14"/>
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="meterIDType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Tariffs and payment -->
<!-- -->
<xs:simpleType name="SAIDType">
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="255"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tariffDescriptionType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="costKindType">
<xs:restriction base="xs:string">
<xs:enumeration value="relativePricePercentage"/>
<xs:enumeration value="RenewableGenerationPercentage"/>
<xs:enumeration value="CarbonDioxideEmission"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PaymentOptionListType">
<xs:sequence>
<xs:element name="PaymentOption" type="paymentOptionType" minOccurs="1" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="paymentOptionType">
<xs:restriction base="xs:string">
<xs:enumeration value="Contract"/>
<xs:enumeration value="ExternalPayment"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Fault and Response Codes -->
<!-- -->
<xs:simpleType name="faultCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="ParsingError"/>
<xs:enumeration value="NoTLSRootCertificatAvailable"/>
<xs:enumeration value="UnknownError"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="responseCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK"/>
<xs:enumeration value="OK_NewSessionEstablished"/>
<xs:enumeration value="OK_OldSessionJoined"/>
<xs:enumeration value="OK_CertificateExpiresSoon"/>
<xs:enumeration value="FAILED"/>
<xs:enumeration value="FAILED_SequenceError"/>
<xs:enumeration value="FAILED_ServiceIDInvalid"/>
<xs:enumeration value="FAILED_UnknownSession"/>
<xs:enumeration value="FAILED_ServiceSelectionInvalid"/>
<xs:enumeration value="FAILED_PaymentSelectionInvalid"/>
<xs:enumeration value="FAILED_CertificateExpired"/>
<xs:enumeration value="FAILED_SignatureError"/>
<xs:enumeration value="FAILED_NoCertificateAvailable"/>
<xs:enumeration value="FAILED_CertChainError"/>
<xs:enumeration value="FAILED_ChallengeInvalid"/>
<xs:enumeration value="FAILED_ContractCanceled"/>
<xs:enumeration value="FAILED_WrongChargeParameter"/>
<xs:enumeration value="FAILED_PowerDeliveryNotApplied"/>
<xs:enumeration value="FAILED_TariffSelectionInvalid"/>
<xs:enumeration value="FAILED_ChargingProfileInvalid"/>
<xs:enumeration value="FAILED_MeteringSignatureNotValid"/>
<xs:enumeration value="FAILED_NoChargeServiceSelected"/>
<xs:enumeration value="FAILED_WrongEnergyTransferMode"/>
<xs:enumeration value="FAILED_ContactorError"/>
<xs:enumeration value="FAILED_CertificateNotAllowedAtThisEVSE"/>
<xs:enumeration value="FAILED_CertificateRevoked"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Multiplier and Unit Types -->
<!-- -->
<xs:simpleType name="unitMultiplierType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="-3"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="unitSymbolType">
<xs:restriction base="xs:string">
<xs:enumeration value="h">
<xs:annotation>
<xs:documentation>Time in hours</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m">
<xs:annotation>
<xs:documentation>Time in minutes</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="s">
<xs:annotation>
<xs:documentation>Time in seconds</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="A">
<xs:annotation>
<xs:documentation>Current in Ampere</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="V">
<xs:annotation>
<xs:documentation>Voltage in Volt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W">
<xs:annotation>
<xs:documentation>Active power in Watt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Wh">
<xs:annotation>
<xs:documentation>Real energy in Watt hours</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- only DC related -->
<!-- -->
<xs:simpleType name="DC_EVSEStatusCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="EVSE_NotReady"/>
<xs:enumeration value="EVSE_Ready"/>
<xs:enumeration value="EVSE_Shutdown"/>
<xs:enumeration value="EVSE_UtilityInterruptEvent"/>
<xs:enumeration value="EVSE_IsolationMonitoringActive"/>
<xs:enumeration value="EVSE_EmergencyShutdown"/>
<xs:enumeration value="EVSE_Malfunction"/>
<xs:enumeration value="Reserved_8"/>
<xs:enumeration value="Reserved_9"/>
<xs:enumeration value="Reserved_A"/>
<xs:enumeration value="Reserved_B"/>
<xs:enumeration value="Reserved_C"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="isolationLevelType">
<xs:restriction base="xs:string">
<xs:enumeration value="Invalid"/>
<xs:enumeration value="Valid"/>
<xs:enumeration value="Warning"/>
<xs:enumeration value="Fault"/>
<xs:enumeration value="No_IMD"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DC_EVErrorCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="NO_ERROR"/>
<xs:enumeration value="FAILED_RESSTemperatureInhibit"/>
<xs:enumeration value="FAILED_EVShiftPosition"/>
<xs:enumeration value="FAILED_ChargerConnectorLockFault"/>
<xs:enumeration value="FAILED_EVRESSMalfunction"/>
<xs:enumeration value="FAILED_ChargingCurrentdifferential"/>
<xs:enumeration value="FAILED_ChargingVoltageOutOfRange"/>
<xs:enumeration value="Reserved_A"/>
<xs:enumeration value="Reserved_B"/>
<xs:enumeration value="Reserved_C"/>
<xs:enumeration value="FAILED_ChargingSystemIncompatibility"/>
<xs:enumeration value="NoData"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:din:70121:2012:MsgDef" xmlns:v2gci_h="urn:iso:15118:2:2010:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody" targetNamespace="urn:iso:15118:2:2013:MsgDef"
elementFormDefault="qualified" attributeFormDefault="qualified" version="15118 2.0">
<!-- attributeFormDefault="unqualified" -->
<xs:import namespace="urn:iso:15118:2:2013:MsgHeader" schemaLocation="V2G_CI_MsgHeader.xsd"/>
<xs:import namespace="urn:iso:15118:2:2013:MsgBody" schemaLocation="V2G_CI_MsgBody.xsd"/>
<!-- Message Structure -->
<xs:element name="V2G_Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="v2gci_h:MessageHeaderType"/>
<xs:element name="Body" type="v2gci_b:BodyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_t="urn:iso:15118:2:2013:MsgDataTypes"
xmlns:xmlsig="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="urn:iso:15118:2:2013:MsgHeader"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:import namespace="urn:iso:15118:2:2013:MsgDataTypes" schemaLocation="V2G_CI_MsgDataTypes.xsd"/>
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<!-- Message Header -->
<xs:complexType name="MessageHeaderType">
<xs:sequence>
<xs:element name="SessionID" type="v2gci_t:sessionIDType"/>
<xs:element name="Notification" type="v2gci_t:NotificationType" minOccurs="0"/>
<xs:element ref="xmlsig:Signature" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgDef" xmlns:v2gci_h="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody" targetNamespace="urn:iso:15118:2:2013:MsgDef"
elementFormDefault="qualified" attributeFormDefault="qualified" version="15118 2.0">
<!-- attributeFormDefault="unqualified" -->
<xs:import namespace="urn:iso:15118:2:2013:MsgHeader" schemaLocation="V2G_CI_MsgHeader.xsd"/>
<xs:import namespace="urn:iso:15118:2:2013:MsgBody" schemaLocation="V2G_CI_MsgBody.xsd"/>
<!-- Message Structure -->
<xs:element name="V2G_Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="v2gci_h:MessageHeaderType"/>
<xs:element name="Body" type="v2gci_b:BodyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,240 @@
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="0.1" elementFormDefault="qualified">
<!-- Basic Types Defined for Signatures -->
<simpleType name="CryptoBinary">
<restriction base="base64Binary"></restriction>
</simpleType>
<!-- Start Signature -->
<element name="Signature" type="ds:SignatureType"/>
<complexType name="SignatureType">
<sequence>
<element ref="ds:SignedInfo"/>
<element ref="ds:SignatureValue"/>
<element ref="ds:KeyInfo" minOccurs="0"/>
<element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureValue" type="ds:SignatureValueType"/>
<complexType name="SignatureValueType">
<simpleContent>
<extension base="base64Binary">
<attribute name="Id" type="ID" use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Start SignedInfo -->
<element name="SignedInfo" type="ds:SignedInfoType"/>
<complexType name="SignedInfoType">
<sequence>
<element ref="ds:CanonicalizationMethod"/>
<element ref="ds:SignatureMethod"/>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
<complexType name="CanonicalizationMethodType" mixed="true">
<sequence>
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="SignatureMethod" type="ds:SignatureMethodType"/>
<complexType name="SignatureMethodType" mixed="true">
<sequence>
<element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
<!--
(0,unbounded) elements from (1,1) external namespace
-->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- Start Reference -->
<element name="Reference" type="ds:ReferenceType"/>
<complexType name="ReferenceType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
<element ref="ds:DigestMethod"/>
<element ref="ds:DigestValue"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="URI" type="anyURI" use="optional"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<element name="Transforms" type="ds:TransformsType"/>
<complexType name="TransformsType">
<sequence>
<element ref="ds:Transform" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="Transform" type="ds:TransformType"/>
<complexType name="TransformType" mixed="true">
<choice minOccurs="0" maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
<element name="XPath" type="string"/>
</choice>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- End Reference -->
<element name="DigestMethod" type="ds:DigestMethodType"/>
<complexType name="DigestMethodType" mixed="true">
<sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="DigestValue" type="ds:DigestValueType"/>
<simpleType name="DigestValueType">
<restriction base="base64Binary"/>
</simpleType>
<!-- End SignedInfo -->
<!-- Start KeyInfo -->
<element name="KeyInfo" type="ds:KeyInfoType"/>
<complexType name="KeyInfoType" mixed="true">
<choice maxOccurs="unbounded">
<element ref="ds:KeyName"/>
<element ref="ds:KeyValue"/>
<element ref="ds:RetrievalMethod"/>
<element ref="ds:X509Data"/>
<element ref="ds:PGPData"/>
<element ref="ds:SPKIData"/>
<element ref="ds:MgmtData"/>
<any processContents="lax" namespace="##other"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
</choice>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="KeyName" type="string"/>
<element name="MgmtData" type="string"/>
<element name="KeyValue" type="ds:KeyValueType"/>
<complexType name="KeyValueType" mixed="true">
<choice>
<element ref="ds:DSAKeyValue"/>
<element ref="ds:RSAKeyValue"/>
<any namespace="##other" processContents="lax"/>
</choice>
</complexType>
<element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
<complexType name="RetrievalMethodType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
</sequence>
<attribute name="URI" type="anyURI"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<!-- Start X509Data -->
<element name="X509Data" type="ds:X509DataType"/>
<complexType name="X509DataType">
<sequence maxOccurs="unbounded">
<choice>
<element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
<element name="X509SKI" type="base64Binary"/>
<element name="X509SubjectName" type="string"/>
<element name="X509Certificate" type="base64Binary"/>
<element name="X509CRL" type="base64Binary"/>
<any namespace="##other" processContents="lax"/>
</choice>
</sequence>
</complexType>
<complexType name="X509IssuerSerialType">
<sequence>
<element name="X509IssuerName" type="string"/>
<element name="X509SerialNumber" type="integer"/>
</sequence>
</complexType>
<!-- End X509Data -->
<!-- Begin PGPData -->
<element name="PGPData" type="ds:PGPDataType"/>
<complexType name="PGPDataType">
<choice>
<sequence>
<element name="PGPKeyID" type="base64Binary"/>
<element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<sequence>
<element name="PGPKeyPacket" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</choice>
</complexType>
<!-- End PGPData -->
<!-- Begin SPKIData -->
<element name="SPKIData" type="ds:SPKIDataType"/>
<complexType name="SPKIDataType">
<sequence maxOccurs="unbounded">
<element name="SPKISexp" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"/>
</sequence>
</complexType>
<!-- End SPKIData -->
<!-- End KeyInfo -->
<!-- Start Object (Manifest, SignatureProperty) -->
<element name="Object" type="ds:ObjectType"/>
<complexType name="ObjectType" mixed="true">
<sequence minOccurs="0" maxOccurs="unbounded">
<any namespace="##any" processContents="lax"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="MimeType" type="string" use="optional"/>
<!-- add a grep facet -->
<attribute name="Encoding" type="anyURI" use="optional"/>
</complexType>
<element name="Manifest" type="ds:ManifestType"/>
<complexType name="ManifestType">
<sequence>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
<complexType name="SignaturePropertiesType">
<sequence>
<element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperty" type="ds:SignaturePropertyType"/>
<complexType name="SignaturePropertyType" mixed="true">
<choice maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (1,unbounded) namespaces -->
</choice>
<attribute name="Target" type="anyURI" use="required"/>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<!-- End Object (Manifest, SignatureProperty) -->
<!-- Start Algorithm Parameters -->
<simpleType name="HMACOutputLengthType">
<restriction base="integer"/>
</simpleType>
<!-- Start KeyValue Element-types -->
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
<complexType name="DSAKeyValueType">
<sequence>
<sequence minOccurs="0">
<element name="P" type="ds:CryptoBinary"/>
<element name="Q" type="ds:CryptoBinary"/>
</sequence>
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
<element name="Y" type="ds:CryptoBinary"/>
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
<sequence minOccurs="0">
<element name="Seed" type="ds:CryptoBinary"/>
<element name="PgenCounter" type="ds:CryptoBinary"/>
</sequence>
</sequence>
</complexType>
<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
<complexType name="RSAKeyValueType">
<sequence>
<element name="Modulus" type="ds:CryptoBinary"/>
<element name="Exponent" type="ds:CryptoBinary"/>
</sequence>
</complexType>
<!-- End KeyValue Element-types -->
<!-- End Signature -->
</schema>

View File

@@ -0,0 +1,240 @@
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="0.1" elementFormDefault="qualified">
<!-- Basic Types Defined for Signatures -->
<simpleType name="CryptoBinary">
<restriction base="base64Binary"></restriction>
</simpleType>
<!-- Start Signature -->
<element name="Signature" type="ds:SignatureType"/>
<complexType name="SignatureType">
<sequence>
<element ref="ds:SignedInfo"/>
<element ref="ds:SignatureValue"/>
<element ref="ds:KeyInfo" minOccurs="0"/>
<element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureValue" type="ds:SignatureValueType"/>
<complexType name="SignatureValueType">
<simpleContent>
<extension base="base64Binary">
<attribute name="Id" type="ID" use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Start SignedInfo -->
<element name="SignedInfo" type="ds:SignedInfoType"/>
<complexType name="SignedInfoType">
<sequence>
<element ref="ds:CanonicalizationMethod"/>
<element ref="ds:SignatureMethod"/>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
<complexType name="CanonicalizationMethodType" mixed="true">
<sequence>
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="SignatureMethod" type="ds:SignatureMethodType"/>
<complexType name="SignatureMethodType" mixed="true">
<sequence>
<element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
<!--
(0,unbounded) elements from (1,1) external namespace
-->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- Start Reference -->
<element name="Reference" type="ds:ReferenceType"/>
<complexType name="ReferenceType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
<element ref="ds:DigestMethod"/>
<element ref="ds:DigestValue"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="URI" type="anyURI" use="optional"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<element name="Transforms" type="ds:TransformsType"/>
<complexType name="TransformsType">
<sequence>
<element ref="ds:Transform" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="Transform" type="ds:TransformType"/>
<complexType name="TransformType" mixed="true">
<choice minOccurs="0" maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
<element name="XPath" type="string"/>
</choice>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- End Reference -->
<element name="DigestMethod" type="ds:DigestMethodType"/>
<complexType name="DigestMethodType" mixed="true">
<sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="DigestValue" type="ds:DigestValueType"/>
<simpleType name="DigestValueType">
<restriction base="base64Binary"/>
</simpleType>
<!-- End SignedInfo -->
<!-- Start KeyInfo -->
<element name="KeyInfo" type="ds:KeyInfoType"/>
<complexType name="KeyInfoType" mixed="true">
<choice maxOccurs="unbounded">
<element ref="ds:KeyName"/>
<element ref="ds:KeyValue"/>
<element ref="ds:RetrievalMethod"/>
<element ref="ds:X509Data"/>
<element ref="ds:PGPData"/>
<element ref="ds:SPKIData"/>
<element ref="ds:MgmtData"/>
<any processContents="lax" namespace="##other"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
</choice>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="KeyName" type="string"/>
<element name="MgmtData" type="string"/>
<element name="KeyValue" type="ds:KeyValueType"/>
<complexType name="KeyValueType" mixed="true">
<choice>
<element ref="ds:DSAKeyValue"/>
<element ref="ds:RSAKeyValue"/>
<any namespace="##other" processContents="lax"/>
</choice>
</complexType>
<element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
<complexType name="RetrievalMethodType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
</sequence>
<attribute name="URI" type="anyURI"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<!-- Start X509Data -->
<element name="X509Data" type="ds:X509DataType"/>
<complexType name="X509DataType">
<sequence maxOccurs="unbounded">
<choice>
<element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
<element name="X509SKI" type="base64Binary"/>
<element name="X509SubjectName" type="string"/>
<element name="X509Certificate" type="base64Binary"/>
<element name="X509CRL" type="base64Binary"/>
<any namespace="##other" processContents="lax"/>
</choice>
</sequence>
</complexType>
<complexType name="X509IssuerSerialType">
<sequence>
<element name="X509IssuerName" type="string"/>
<element name="X509SerialNumber" type="integer"/>
</sequence>
</complexType>
<!-- End X509Data -->
<!-- Begin PGPData -->
<element name="PGPData" type="ds:PGPDataType"/>
<complexType name="PGPDataType">
<choice>
<sequence>
<element name="PGPKeyID" type="base64Binary"/>
<element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<sequence>
<element name="PGPKeyPacket" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</choice>
</complexType>
<!-- End PGPData -->
<!-- Begin SPKIData -->
<element name="SPKIData" type="ds:SPKIDataType"/>
<complexType name="SPKIDataType">
<sequence maxOccurs="unbounded">
<element name="SPKISexp" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"/>
</sequence>
</complexType>
<!-- End SPKIData -->
<!-- End KeyInfo -->
<!-- Start Object (Manifest, SignatureProperty) -->
<element name="Object" type="ds:ObjectType"/>
<complexType name="ObjectType" mixed="true">
<sequence minOccurs="0" maxOccurs="unbounded">
<any namespace="##any" processContents="lax"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="MimeType" type="string" use="optional"/>
<!-- add a grep facet -->
<attribute name="Encoding" type="anyURI" use="optional"/>
</complexType>
<element name="Manifest" type="ds:ManifestType"/>
<complexType name="ManifestType">
<sequence>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
<complexType name="SignaturePropertiesType">
<sequence>
<element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperty" type="ds:SignaturePropertyType"/>
<complexType name="SignaturePropertyType" mixed="true">
<choice maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (1,unbounded) namespaces -->
</choice>
<attribute name="Target" type="anyURI" use="required"/>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<!-- End Object (Manifest, SignatureProperty) -->
<!-- Start Algorithm Parameters -->
<simpleType name="HMACOutputLengthType">
<restriction base="integer"/>
</simpleType>
<!-- Start KeyValue Element-types -->
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
<complexType name="DSAKeyValueType">
<sequence>
<sequence minOccurs="0">
<element name="P" type="ds:CryptoBinary"/>
<element name="Q" type="ds:CryptoBinary"/>
</sequence>
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
<element name="Y" type="ds:CryptoBinary"/>
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
<sequence minOccurs="0">
<element name="Seed" type="ds:CryptoBinary"/>
<element name="PgenCounter" type="ds:CryptoBinary"/>
</sequence>
</sequence>
</complexType>
<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
<complexType name="RSAKeyValueType">
<sequence>
<element name="Modulus" type="ds:CryptoBinary"/>
<element name="Exponent" type="ds:CryptoBinary"/>
</sequence>
</complexType>
<!-- End KeyValue Element-types -->
<!-- End Signature -->
</schema>

View File

@@ -0,0 +1,55 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2010:AppProtocol"
targetNamespace="urn:iso:15118:2:2010:AppProtocol">
<xs:element name="supportedAppProtocolReq">
<xs:complexType>
<xs:sequence>
<xs:element name="AppProtocol" type="AppProtocolType" maxOccurs="20"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="supportedAppProtocolRes">
<xs:complexType>
<xs:sequence>
<xs:element name="ResponseCode" type="responseCodeType"/>
<xs:element name="SchemaID" type="idType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="AppProtocolType">
<xs:sequence>
<xs:element name="ProtocolNamespace" type="protocolNamespaceType"/>
<xs:element name="VersionNumberMajor" type="xs:unsignedInt"/>
<xs:element name="VersionNumberMinor" type="xs:unsignedInt"/>
<xs:element name="SchemaID" type="idType"/>
<xs:element name="Priority" type="priorityType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="idType">
<xs:restriction base="xs:unsignedByte"/>
</xs:simpleType>
<xs:simpleType name="protocolNameType">
<xs:restriction base="xs:string">
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="protocolNamespaceType">
<xs:restriction base="xs:anyURI">
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="priorityType">
<xs:restriction base="xs:unsignedByte">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="20"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="responseCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK_SuccessfulNegotiation"/>
<xs:enumeration value="OK_SuccessfulNegotiationWithMinorDeviation"/>
<xs:enumeration value="Failed_NoNegotiation"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@@ -0,0 +1,482 @@
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:iso:15118:2:2010:MsgBody"
xmlns="urn:iso:15118:2:2010:MsgBody"
xmlns:v2gci_d="urn:iso:15118:2:2010:MsgDef"
xmlns:v2gci_t="urn:iso:15118:2:2010:MsgDataTypes"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="urn:iso:15118:2:2010:MsgDef" schemaLocation="V2G_CI_MsgDef.xsd"/>
<xs:import namespace="urn:iso:15118:2:2010:MsgDataTypes" schemaLocation="V2G_CI_MsgDataTypes.xsd"/>
<!-- ....................... -->
<!-- Common Messages (AC/DC) -->
<!-- ....................... -->
<!-- -->
<!-- Session Setup -->
<!-- -->
<xs:element name="SessionSetupReq" type="SessionSetupReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="SessionSetupReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="EVCCID" type="v2gci_t:evccIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SessionSetupRes" type="SessionSetupResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="SessionSetupResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="DateTimeNow" type="xs:long" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Discovery -->
<!-- -->
<xs:element name="ServiceDiscoveryReq" type="ServiceDiscoveryReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ServiceDiscoveryReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ServiceScope" type="v2gci_t:serviceScopeType" minOccurs="0"/>
<xs:element name="ServiceCategory" type="v2gci_t:serviceCategoryType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServiceDiscoveryRes" type="ServiceDiscoveryResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ServiceDiscoveryResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="PaymentOptions" type="v2gci_t:PaymentOptionsType"/>
<xs:element name="ChargeService" type="v2gci_t:ServiceChargeType"/>
<xs:element name="ServiceList" type="v2gci_t:ServiceTagListType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Detail -->
<!-- -->
<xs:element name="ServiceDetailReq" type="ServiceDetailReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ServiceDetailReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ServiceID" type="v2gci_t:serviceIDType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServiceDetailRes" type="ServiceDetailResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ServiceDetailResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="ServiceID" type="v2gci_t:serviceIDType"/>
<xs:element name="ServiceParameterList" type="v2gci_t:ServiceParameterListType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Service Payment & Selection -->
<!-- -->
<xs:element name="ServicePaymentSelectionReq" type="ServicePaymentSelectionReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ServicePaymentSelectionReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="SelectedPaymentOption" type="v2gci_t:paymentOptionType"/>
<xs:element name="SelectedServiceList" type="v2gci_t:SelectedServiceListType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ServicePaymentSelectionRes" type="ServicePaymentSelectionResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ServicePaymentSelectionResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Payment Details -->
<!-- -->
<xs:element name="PaymentDetailsReq" type="PaymentDetailsReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="PaymentDetailsReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ContractID" type="v2gci_t:contractIDType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PaymentDetailsRes" type="PaymentDetailsResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="PaymentDetailsResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="GenChallenge" type="v2gci_t:genChallengeType"/>
<xs:element name="DateTimeNow" type="xs:long"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Contract Authentification -->
<!-- -->
<xs:element name="ContractAuthenticationReq" type="ContractAuthenticationReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ContractAuthenticationReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="GenChallenge" type="v2gci_t:genChallengeType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ContractAuthenticationRes" type="ContractAuthenticationResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ContractAuthenticationResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Charge Parameter Discovery -->
<!-- -->
<xs:element name="ChargeParameterDiscoveryReq" type="ChargeParameterDiscoveryReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ChargeParameterDiscoveryReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="EVRequestedEnergyTransferType" type="v2gci_t:EVRequestedEnergyTransferType"/>
<xs:element ref="v2gci_t:EVChargeParameter"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ChargeParameterDiscoveryRes" type="ChargeParameterDiscoveryResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ChargeParameterDiscoveryResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element ref="v2gci_t:SASchedules"/>
<xs:element ref="v2gci_t:EVSEChargeParameter"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Power Delivery -->
<!-- -->
<xs:element name="PowerDeliveryReq" type="PowerDeliveryReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="PowerDeliveryReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ReadyToChargeState" type="xs:boolean"/>
<xs:element name="ChargingProfile" type="v2gci_t:ChargingProfileType" minOccurs="0"/>
<xs:element ref="v2gci_t:EVPowerDeliveryParameter" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PowerDeliveryRes" type="PowerDeliveryResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="PowerDeliveryResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element ref="v2gci_t:EVSEStatus"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Charging Status -->
<!-- -->
<xs:element name="ChargingStatusReq" type="ChargingStatusReqType" substitutionGroup="v2gci_d:BodyElement"/>
<!-- <xs:element name="MeteringStatusReq" type="MeteringStatusReqType" substitutionGroup="v2gci_d:BodyElement"/> -->
<xs:complexType name="ChargingStatusReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ChargingStatusRes" type="ChargingStatusResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="ChargingStatusResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="EVSEID" type="v2gci_t:evseIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType"/>
<xs:element name="EVSEMaxCurrent" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType" minOccurs="0"/>
<xs:element name="ReceiptRequired" type="xs:boolean"/>
<xs:element name="AC_EVSEStatus" type="v2gci_t:AC_EVSEStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Metering Receipt -->
<!-- -->
<xs:element name="MeteringReceiptReq" type="MeteringReceiptReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="MeteringReceiptReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="SessionID" type="v2gci_t:sessionIDType"/>
<xs:element name="SAScheduleTupleID" type="v2gci_t:SAIDType" minOccurs="0"/>
<xs:element name="MeterInfo" type="v2gci_t:MeterInfoType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF"/>
</xs:extension>
<!-- only needed if receipt is required -->
</xs:complexContent>
</xs:complexType>
<xs:element name="MeteringReceiptRes" type="MeteringReceiptResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="MeteringReceiptResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="AC_EVSEStatus" type="v2gci_t:AC_EVSEStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- SessionStop -->
<!-- -->
<xs:element name="SessionStopReq" type="SessionStopType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="SessionStopType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SessionStopRes" type="SessionStopResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="SessionStopResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Certificate Update -->
<!-- -->
<xs:element name="CertificateUpdateReq" type="CertificateUpdateReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CertificateUpdateReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractID" type="v2gci_t:contractIDType"/>
<xs:element name="ListOfRootCertificateIDs" type="v2gci_t:ListOfRootCertificateIDsType"/>
<xs:element name="DHParams" type="v2gci_t:dHParamsType"/>
<!-- new -->
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CertificateUpdateRes" type="CertificateUpdateResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CertificateUpdateResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureEncryptedPrivateKey" type="v2gci_t:privateKeyType"/>
<xs:element name="DHParams" type="v2gci_t:dHParamsType"/>
<xs:element name="ContractID" type="v2gci_t:contractIDType"/>
<xs:element name="RetryCounter" type="xs:short"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Certificate Installation -->
<!-- -->
<xs:element name="CertificateInstallationReq" type="CertificateInstallationReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CertificateInstallationReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="OEMProvisioningCert" type="v2gci_t:certificateType"/>
<xs:element name="ListOfRootCertificateIDs" type="v2gci_t:ListOfRootCertificateIDsType"/>
<xs:element name="DHParams" type="v2gci_t:dHParamsType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CertificateInstallationRes" type="CertificateInstallationResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CertificateInstallationResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="ContractSignatureCertChain" type="v2gci_t:CertificateChainType"/>
<xs:element name="ContractSignatureEncryptedPrivateKey" type="v2gci_t:privateKeyType"/>
<xs:element name="DHParams" type="v2gci_t:dHParamsType"/>
<xs:element name="ContractID" type="v2gci_t:contractIDType"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ....................... -->
<!-- DC-Messages -->
<!-- ....................... -->
<!-- -->
<!-- Cable Check -->
<!-- -->
<xs:element name="CableCheckReq" type="CableCheckReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CableCheckReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CableCheckRes" type="CableCheckResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CableCheckResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEProcessing" type="v2gci_t:EVSEProcessingType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Pre-Charge -->
<!-- -->
<xs:element name="PreChargeReq" type="PreChargeReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="PreChargeReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
<xs:element name="EVTargetVoltage" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVTargetCurrent" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PreChargeRes" type="PreChargeResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="PreChargeResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Current Demand -->
<!-- -->
<xs:element name="CurrentDemandReq" type="CurrentDemandReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CurrentDemandReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
<xs:element name="EVTargetCurrent" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVMaximumVoltageLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumCurrentLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumPowerLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="BulkChargingComplete" type="xs:boolean" minOccurs="0"/>
<xs:element name="ChargingComplete" type="xs:boolean"/>
<xs:element name="RemainingTimeToFullSoC" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="RemainingTimeToBulkSoC" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVTargetVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CurrentDemandRes" type="CurrentDemandResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="CurrentDemandResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVSEPresentCurrent" type="v2gci_t:PhysicalValueType"/>
<xs:element name="EVSECurrentLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEVoltageLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEPowerLimitAchieved" type="xs:boolean"/>
<xs:element name="EVSEMaximumVoltageLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumCurrentLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumPowerLimit" type="v2gci_t:PhysicalValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Welding Detection -->
<!-- -->
<xs:element name="WeldingDetectionReq" type="WeldingDetectionReqType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="WeldingDetectionReqType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="v2gci_t:DC_EVStatusType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="WeldingDetectionRes" type="WeldingDetectionResType" substitutionGroup="v2gci_d:BodyElement"/>
<xs:complexType name="WeldingDetectionResType">
<xs:complexContent>
<xs:extension base="v2gci_d:BodyBaseType">
<xs:sequence>
<xs:element name="ResponseCode" type="v2gci_t:responseCodeType"/>
<xs:element name="DC_EVSEStatus" type="v2gci_t:DC_EVSEStatusType"/>
<xs:element name="EVSEPresentVoltage" type="v2gci_t:PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,696 @@
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:iso:15118:2:2010:MsgDataTypes"
xmlns="urn:iso:15118:2:2010:MsgDataTypes"
xmlns:v2gci_b="urn:iso:15118:2:2010:MsgBody"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="urn:iso:15118:2:2010:MsgBody" schemaLocation="V2G_CI_MsgBody.xsd"/>
<!-- =================== -->
<!-- Complex types -->
<!-- =================== -->
<!-- -->
<!-- service-related types -->
<!-- -->
<xs:complexType name="ServiceType">
<xs:sequence>
<xs:element name="ServiceTag" type="ServiceTagType"/>
<xs:element name="FreeService" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceTagListType">
<xs:sequence>
<xs:element name="Service" type="ServiceType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceTagType">
<xs:sequence>
<xs:element name="ServiceID" type="serviceIDType"/>
<xs:element name="ServiceName" type="serviceNameType" minOccurs="0"/>
<xs:element name="ServiceCategory" type="serviceCategoryType"/>
<xs:element name="ServiceScope" type="serviceScopeType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SelectedServiceListType">
<xs:sequence>
<xs:element name="SelectedService" type="SelectedServiceType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SelectedServiceType">
<xs:sequence>
<xs:element name="ServiceID" type="serviceIDType"/>
<xs:element name="ParameterSetID" type="xs:short" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceParameterListType">
<xs:sequence>
<xs:element name="ParameterSet" type="ParameterSetType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterSetType">
<xs:sequence>
<xs:element name="ParameterSetID" type="xs:short"/>
<xs:element name="Parameter" type="ParameterType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterType">
<xs:choice>
<xs:element name="boolValue" type="xs:boolean"/>
<xs:element name="byteValue" type="xs:byte"/>
<xs:element name="shortValue" type="xs:short"/>
<xs:element name="intValue" type="xs:int"/>
<xs:element name="physicalValue" type="PhysicalValueType"/>
<xs:element name="stringValue" type="xs:string"/>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="ValueType" type="valueType" use="required"/>
</xs:complexType>
<xs:simpleType name="valueType">
<xs:restriction base="xs:string">
<xs:enumeration value="bool"/>
<xs:enumeration value="byte"/>
<xs:enumeration value="short"/>
<xs:enumeration value="int"/>
<xs:enumeration value="physicalValue"/>
<xs:enumeration value="string"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="ServiceCharge" type="ServiceChargeType"/>
<xs:complexType name="ServiceChargeType">
<xs:complexContent>
<xs:extension base="ServiceType">
<xs:sequence>
<xs:element name="EnergyTransferType" type="EVSESupportedEnergyTransferType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- security related types -->
<!-- -->
<xs:complexType name="CertificateChainType">
<xs:sequence>
<xs:element name="Certificate" type="certificateType"/>
<xs:element name="SubCertificates" type="SubCertificatesType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SubCertificatesType">
<xs:sequence>
<xs:element name="Certificate" type="certificateType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListOfRootCertificateIDsType">
<xs:sequence>
<xs:element name="RootCertificateID" type="rootCertificateIDType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- metering related types -->
<!-- -->
<xs:complexType name="MeterInfoType">
<xs:sequence>
<xs:element name="MeterID" type="meterIDType"/>
<xs:element name="MeterReading" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="SigMeterReading" type="sigMeterReadingType" minOccurs="0"/>
<xs:element name="MeterStatus" type="meterStatusType" minOccurs="0"/>
<xs:element name="TMeter" type="xs:long" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="meterStatusType">
<xs:restriction base="xs:short"/>
</xs:simpleType>
<!-- -->
<!-- Physical value type -->
<!-- -->
<xs:complexType name="PhysicalValueType">
<xs:sequence>
<xs:element name="Multiplier" type="unitMultiplierType"/>
<xs:element name="Unit" type="unitSymbolType" minOccurs="0"/>
<xs:element name="Value" type="xs:short"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- header related types -->
<!-- -->
<xs:complexType name="NotificationType">
<xs:sequence>
<xs:element name="FaultCode" type="faultCodeType"/>
<xs:element name="FaultMsg" type="faultMsgType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- Tariff related types -->
<!-- -->
<xs:complexType name="SASchedulesType" abstract="true"/>
<xs:element name="SASchedules" type="SASchedulesType"/>
<xs:element name="SAScheduleList" type="SAScheduleListType" substitutionGroup="SASchedules"/>
<xs:complexType name="SAScheduleListType">
<xs:complexContent>
<xs:extension base="SASchedulesType">
<xs:sequence>
<xs:element name="SAScheduleTuple" type="SAScheduleTupleType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SAScheduleTupleType">
<xs:sequence>
<xs:element name="SAScheduleTupleID" type="SAIDType"/>
<xs:element name="PMaxSchedule" type="PMaxScheduleType"/>
<xs:element name="SalesTariff" type="SalesTariffType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SalesTariffType">
<xs:sequence>
<xs:element name="SalesTariffID" type="SAIDType"/>
<xs:element name="SalesTariffDescription" type="tariffDescriptionType" minOccurs="0"/>
<xs:element name="NumEPriceLevels" type="xs:unsignedByte"/>
<xs:element ref="SalesTariffEntry" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Id" type="xs:IDREF" use="required"/>
</xs:complexType>
<xs:complexType name="PMaxScheduleType">
<xs:sequence>
<xs:element name="PMaxScheduleID" type="SAIDType"/>
<xs:element ref="PMaxScheduleEntry" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Entry" type="EntryType"/>
<xs:complexType name="EntryType" abstract="true">
<xs:sequence>
<xs:element ref="TimeInterval"/>
</xs:sequence>
</xs:complexType>
<xs:element name="SalesTariffEntry" type="SalesTariffEntryType" substitutionGroup="Entry"/>
<xs:complexType name="SalesTariffEntryType">
<xs:complexContent>
<xs:extension base="EntryType">
<xs:sequence>
<xs:element name="EPriceLevel" type="xs:unsignedByte"/>
<xs:element name="ConsumptionCost" type="ConsumptionCostType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="PMaxScheduleEntry" type="PMaxScheduleEntryType" substitutionGroup="Entry"/>
<xs:complexType name="PMaxScheduleEntryType">
<xs:complexContent>
<xs:extension base="EntryType">
<xs:sequence>
<xs:element name="PMax" type="PMaxType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="IntervalType" abstract="true"/>
<xs:element name="TimeInterval" type="IntervalType"/>
<xs:element name="RelativeTimeInterval" type="RelativeTimeIntervalType" substitutionGroup="TimeInterval"/>
<xs:complexType name="RelativeTimeIntervalType">
<xs:complexContent>
<xs:extension base="IntervalType">
<xs:sequence>
<xs:element name="start" type="xs:unsignedInt"/>
<xs:element name="duration" type="xs:unsignedInt" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ConsumptionCostType">
<xs:sequence>
<xs:element name="startValue" type="xs:unsignedInt"/>
<xs:element name="Cost" type="CostType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CostType">
<xs:sequence>
<xs:element name="costKind" type="costKindType"/>
<xs:element name="amount" type="xs:unsignedInt"/>
<xs:element name="amountMultiplier" type="unitMultiplierType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<!-- -->
<!-- EV/EVSE related types -->
<!-- -->
<xs:complexType name="EVSEStatusType" abstract="true"/>
<xs:element name="EVSEStatus" type="EVSEStatusType"/>
<xs:element name="AC_EVSEStatus" type="AC_EVSEStatusType" substitutionGroup="EVSEStatus"/>
<xs:complexType name="AC_EVSEStatusType">
<xs:complexContent>
<xs:extension base="EVSEStatusType">
<xs:sequence>
<xs:element name="PowerSwitchClosed" type="xs:boolean"/>
<xs:element name="RCD" type="xs:boolean"/>
<xs:element name="NotificationMaxDelay" type="xs:unsignedInt"/>
<xs:element name="EVSENotification" type="EVSENotificationType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="EVStatusType" abstract="true"/>
<xs:element name="EVStatus" type="EVStatusType"/>
<xs:element name="DC_EVSEStatus" type="DC_EVSEStatusType" substitutionGroup="EVSEStatus"/>
<xs:complexType name="DC_EVSEStatusType">
<xs:complexContent>
<xs:extension base="EVSEStatusType">
<xs:sequence>
<xs:element name="EVSEIsolationStatus" type="isolationLevelType" minOccurs="0"/>
<xs:element name="EVSEStatusCode" type="DC_EVSEStatusCodeType"/>
<xs:element name="NotificationMaxDelay" type="xs:unsignedInt"/>
<xs:element name="EVSENotification" type="EVSENotificationType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVStatus" type="DC_EVStatusType" substitutionGroup="EVStatus"/>
<xs:complexType name="DC_EVStatusType">
<xs:complexContent>
<xs:extension base="EVStatusType">
<xs:sequence>
<xs:element name="EVReady" type="xs:boolean"/>
<xs:element name="EVCabinConditioning" type="xs:boolean" minOccurs="0"/>
<xs:element name="EVRESSConditioning" type="xs:boolean" minOccurs="0"/>
<xs:element name="EVErrorCode" type="DC_EVErrorCodeType"/>
<xs:element name="EVRESSSOC" type="percentValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- EVSE/EV Charge Parameter related types -->
<!-- -->
<xs:complexType name="EVChargeParameterType" abstract="true"/>
<xs:element name="EVChargeParameter" type="EVChargeParameterType"/>
<xs:element name="AC_EVChargeParameter" type="AC_EVChargeParameterType" substitutionGroup="EVChargeParameter"/>
<xs:complexType name="AC_EVChargeParameterType">
<xs:complexContent>
<xs:extension base="EVChargeParameterType">
<xs:sequence>
<xs:element name="DepartureTime" type="xs:unsignedInt"/>
<xs:element name="EAmount" type="PhysicalValueType"/>
<xs:element name="EVMaxVoltage" type="PhysicalValueType"/>
<xs:element name="EVMaxCurrent" type="PhysicalValueType"/>
<xs:element name="EVMinCurrent" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVChargeParameter" type="DC_EVChargeParameterType" substitutionGroup="EVChargeParameter"/>
<xs:complexType name="DC_EVChargeParameterType">
<xs:complexContent>
<xs:extension base="EVChargeParameterType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="DC_EVStatusType"/>
<xs:element name="EVMaximumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVMaximumPowerLimit" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVMaximumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVEnergyCapacity" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVEnergyRequest" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="FullSOC" type="percentValueType" minOccurs="0"/>
<xs:element name="BulkSOC" type="percentValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="EVSEChargeParameterType" abstract="true"/>
<xs:element name="EVSEChargeParameter" type="EVSEChargeParameterType"/>
<xs:element name="AC_EVSEChargeParameter" type="AC_EVSEChargeParameterType" substitutionGroup="EVSEChargeParameter"/>
<xs:complexType name="AC_EVSEChargeParameterType">
<xs:complexContent>
<xs:extension base="EVSEChargeParameterType">
<xs:sequence>
<xs:element name="AC_EVSEStatus" type="AC_EVSEStatusType"/>
<xs:element name="EVSEMaxVoltage" type="PhysicalValueType"/>
<xs:element name="EVSEMaxCurrent" type="PhysicalValueType"/>
<xs:element name="EVSEMinCurrent" type="PhysicalValueType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="DC_EVSEChargeParameter" type="DC_EVSEChargeParameterType" substitutionGroup="EVSEChargeParameter"/>
<xs:complexType name="DC_EVSEChargeParameterType">
<xs:complexContent>
<xs:extension base="EVSEChargeParameterType">
<xs:sequence>
<xs:element name="DC_EVSEStatus" type="DC_EVSEStatusType"/>
<xs:element name="EVSEMaximumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMaximumPowerLimit" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEMaximumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMinimumCurrentLimit" type="PhysicalValueType"/>
<xs:element name="EVSEMinimumVoltageLimit" type="PhysicalValueType"/>
<xs:element name="EVSECurrentRegulationTolerance" type="PhysicalValueType" minOccurs="0"/>
<xs:element name="EVSEPeakCurrentRipple" type="PhysicalValueType"/>
<xs:element name="EVSEEnergyToBeDelivered" type="PhysicalValueType" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- EV Power Delivery related types -->
<!-- -->
<xs:complexType name="EVPowerDeliveryParameterType" abstract="true"/>
<xs:element name="EVPowerDeliveryParameter" type="EVPowerDeliveryParameterType"/>
<xs:element name="DC_EVPowerDeliveryParameter" type="DC_EVPowerDeliveryParameterType" substitutionGroup="EVPowerDeliveryParameter"/>
<xs:complexType name="DC_EVPowerDeliveryParameterType">
<xs:complexContent>
<xs:extension base="EVPowerDeliveryParameterType">
<xs:sequence>
<xs:element name="DC_EVStatus" type="DC_EVStatusType"/>
<xs:element name="BulkChargingComplete" type="xs:boolean" minOccurs="0"/>
<xs:element name="ChargingComplete" type="xs:boolean"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- ChargingProfileType -->
<!-- -->
<xs:complexType name="ChargingProfileType">
<xs:sequence>
<xs:element name="SAScheduleTupleID" type="SAIDType"/>
<xs:element name="ProfileEntry" type="ProfileEntryType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ProfileEntryType">
<xs:sequence>
<xs:element name="ChargingProfileEntryStart" type="xs:unsignedInt"/>
<xs:element name="ChargingProfileEntryMaxPower" type="PMaxType"/>
</xs:sequence>
</xs:complexType>
<!-- =================== -->
<!-- Simple types -->
<!-- =================== -->
<!-- -->
<!-- General Types -->
<!-- -->
<xs:simpleType name="PMaxType">
<xs:restriction base="xs:short"/>
</xs:simpleType>
<xs:simpleType name="percentValueType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="faultMsgType">
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVSEProcessingType">
<xs:restriction base="xs:string">
<xs:enumeration value="Finished"/>
<xs:enumeration value="Ongoing"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVSENotificationType">
<xs:restriction base="xs:string">
<xs:enumeration value="None"/>
<xs:enumeration value="StopCharging"/>
<xs:enumeration value="ReNegotiation"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- service related types -->
<!-- -->
<xs:simpleType name="serviceNameType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceCategoryType">
<xs:restriction base="xs:string">
<xs:enumeration value="EVCharging"/>
<xs:enumeration value="Internet"/>
<xs:enumeration value="ContractCertificate"/>
<xs:enumeration value="OtherCustom"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceScopeType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- EnergyTransferType -->
<!-- -->
<xs:simpleType name="EVSESupportedEnergyTransferType">
<xs:restriction base="xs:string">
<xs:enumeration value="AC_single_phase_core"/>
<xs:enumeration value="AC_three_phase_core"/>
<xs:enumeration value="DC_core"/>
<xs:enumeration value="DC_extended"/>
<xs:enumeration value="DC_combo_core"/>
<xs:enumeration value="DC_dual"/>
<xs:enumeration value="AC_core1p_DC_extended"/>
<xs:enumeration value="AC_single_DC_core"/>
<xs:enumeration value="AC_single_phase_three_phase_core_DC_extended"/>
<xs:enumeration value="AC_core3p_DC_extended"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EVRequestedEnergyTransferType">
<xs:restriction base="xs:string">
<xs:enumeration value="AC_single_phase_core"/>
<xs:enumeration value="AC_three_phase_core"/>
<xs:enumeration value="DC_core"/>
<xs:enumeration value="DC_extended"/>
<xs:enumeration value="DC_combo_core"/>
<xs:enumeration value="DC_unique"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- security types -->
<!-- -->
<xs:simpleType name="genChallengeType">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="certificateType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="1200"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="rootCertificateIDType">
<xs:restriction base="xs:string">
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="dHParamsType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="privateKeyType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="128"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="sigMeterReadingType">
<xs:restriction base="xs:base64Binary">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Identification Numbers -->
<!-- -->
<xs:simpleType name="sessionIDType">
<xs:restriction base="xs:hexBinary">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evccIDType">
<xs:restriction base="xs:hexBinary">
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evseIDType">
<xs:restriction base="xs:hexBinary">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="serviceIDType">
<xs:restriction base="xs:unsignedShort"/>
</xs:simpleType>
<xs:simpleType name="contractIDType">
<xs:restriction base="xs:string">
<xs:maxLength value="24"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="meterIDType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Tariffs and payment -->
<!-- -->
<xs:simpleType name="SAIDType">
<xs:restriction base="xs:short"/>
</xs:simpleType>
<xs:simpleType name="tariffDescriptionType">
<xs:restriction base="xs:string">
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="costKindType">
<xs:restriction base="xs:string">
<xs:enumeration value="relativePricePercentage"/>
<xs:enumeration value="RenewableGenerationPercentage"/>
<xs:enumeration value="CarbonDioxideEmission"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PaymentOptionsType">
<xs:sequence>
<xs:element name="PaymentOption" type="paymentOptionType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="paymentOptionType">
<xs:restriction base="xs:string">
<xs:enumeration value="Contract"/>
<xs:enumeration value="ExternalPayment"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Fault and Response Codes -->
<!-- -->
<xs:simpleType name="faultCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="ParsingError"/>
<xs:enumeration value="NoTLSRootCertificatAvailable"/>
<xs:enumeration value="UnknownError"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="responseCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK"/>
<xs:enumeration value="OK_NewSessionEstablished"/>
<xs:enumeration value="OK_OldSessionJoined"/>
<xs:enumeration value="OK_CertificateExpiresSoon"/>
<xs:enumeration value="FAILED"/>
<xs:enumeration value="FAILED_SequenceError"/>
<xs:enumeration value="FAILED_ServiceIDInvalid"/>
<xs:enumeration value="FAILED_UnknownSession"/>
<xs:enumeration value="FAILED_ServiceSelectionInvalid"/>
<xs:enumeration value="FAILED_PaymentSelectionInvalid"/>
<xs:enumeration value="FAILED_CertificateExpired"/>
<xs:enumeration value="FAILED_SignatureError"/>
<xs:enumeration value="FAILED_NoCertificateAvailable"/>
<xs:enumeration value="FAILED_CertChainError"/>
<xs:enumeration value="FAILED_ChallengeInvalid"/>
<xs:enumeration value="FAILED_ContractCanceled"/>
<xs:enumeration value="FAILED_WrongChargeParameter"/>
<xs:enumeration value="FAILED_PowerDeliveryNotApplied"/>
<xs:enumeration value="FAILED_TariffSelectionInvalid"/>
<xs:enumeration value="FAILED_ChargingProfileInvalid"/>
<xs:enumeration value="FAILED_EVSEPresentVoltageToLow"/>
<xs:enumeration value="FAILED_MeteringSignatureNotValid"/>
<xs:enumeration value="FAILED_WrongEnergyTransferType"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Multiplier and Unit Types -->
<!-- -->
<xs:simpleType name="unitMultiplierType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="-3"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="unitSymbolType">
<xs:restriction base="xs:string">
<xs:enumeration value="h">
<xs:annotation>
<xs:documentation>Time in hours</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m">
<xs:annotation>
<xs:documentation>Time in minutes</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="s">
<xs:annotation>
<xs:documentation>Time in seconds</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="A">
<xs:annotation>
<xs:documentation>Current in Ampere</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Ah">
<xs:annotation>
<xs:documentation>Ampere hour</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="V">
<xs:annotation>
<xs:documentation>Voltage in Volt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="VA">
<xs:annotation>
<xs:documentation>Apparent power in Volt Ampere</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W">
<xs:annotation>
<xs:documentation>Active power in Watt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W/s">
<xs:annotation>
<xs:documentation>Watt per second</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Wh">
<xs:annotation>
<xs:documentation>Real energy in Watt hours</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- only DC related -->
<!-- -->
<xs:simpleType name="DC_EVSEStatusCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="EVSE_NotReady"/>
<xs:enumeration value="EVSE_Ready"/>
<xs:enumeration value="EVSE_Shutdown"/>
<xs:enumeration value="EVSE_UtilityInterruptEvent"/>
<xs:enumeration value="EVSE_Precharge"/>
<xs:enumeration value="EVSE_IsolationMonitoringActive"/>
<xs:enumeration value="EVSE_EmergencyShutdown"/>
<xs:enumeration value="EVSE_Malfunction"/>
<xs:enumeration value="Reserved_8"/>
<xs:enumeration value="Reserved_9"/>
<xs:enumeration value="Reserved_A"/>
<xs:enumeration value="Reserved_B"/>
<xs:enumeration value="Reserved_C"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="isolationLevelType">
<xs:restriction base="xs:string">
<xs:enumeration value="Invalid"/>
<xs:enumeration value="Safe"/>
<xs:enumeration value="Warning"/>
<xs:enumeration value="Fault"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DC_EVErrorCodeType">
<xs:restriction base="xs:string">
<xs:enumeration value="NO_ERROR"/>
<xs:enumeration value="FAILED_RESSTemperatureInhibit"/>
<xs:enumeration value="FAILED_EVShiftPosition"/>
<xs:enumeration value="FAILED_ChargerConnectorLockFault"/>
<xs:enumeration value="FAILED_EVRESSMalfunction"/>
<xs:enumeration value="FAILED_ChargingCurrentdifferential"/>
<xs:enumeration value="FAILED_ChargingVoltageOutOfRange"/>
<xs:enumeration value="Reserved_A"/>
<xs:enumeration value="Reserved_B"/>
<xs:enumeration value="Reserved_C"/>
<xs:enumeration value="FAILED_ChargingSystemIncompatibility"/>
<xs:enumeration value="NoData"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

Binary file not shown.

View File

@@ -0,0 +1,28 @@
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:iso:15118:2:2010:MsgDef"
xmlns="urn:iso:15118:2:2010:MsgDef"
xmlns:v2gci_h="urn:iso:15118:2:2010:MsgHeader"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="urn:iso:15118:2:2010:MsgHeader" schemaLocation="V2G_CI_MsgHeader.xsd"/>
<!-- Message Structure -->
<xs:element name="V2G_Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="v2gci_h:MessageHeaderType"/>
<xs:element name="Body" type="BodyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Body -->
<xs:complexType name="BodyType">
<xs:sequence>
<xs:element ref="BodyElement" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="BodyElement" type="BodyBaseType"/>
<xs:complexType name="BodyBaseType" abstract="true"/>
</xs:schema>

View File

@@ -0,0 +1,23 @@
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:iso:15118:2:2010:MsgHeader"
xmlns="urn:iso:15118:2:2010:MsgHeader"
xmlns:v2gci_d="urn:iso:15118:2:2010:MsgDef"
xmlns:v2gci_t="urn:iso:15118:2:2010:MsgDataTypes"
xmlns:xmlsig="http://www.w3.org/2000/09/xmldsig#"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="urn:iso:15118:2:2010:MsgDef" schemaLocation="V2G_CI_MsgDef.xsd"/>
<xs:import namespace="urn:iso:15118:2:2010:MsgDataTypes" schemaLocation="V2G_CI_MsgDataTypes.xsd"/>
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
<!-- Message Header -->
<xs:complexType name="MessageHeaderType">
<xs:sequence>
<xs:element name="SessionID" type="v2gci_t:sessionIDType"/>
<xs:element name="Notification" type="v2gci_t:NotificationType" minOccurs="0"/>
<xs:element ref="xmlsig:Signature" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@@ -0,0 +1,18 @@
<!-- This XML document originates from the ISO/IEC 15118-2 standard which can be obtained from ISO at http://www.iso.org/iso/catalogue_detail.htm?csnumber=55366 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:iso:15118:2:2013:MsgDef" xmlns:v2gci_h="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody" targetNamespace="urn:iso:15118:2:2013:MsgDef"
elementFormDefault="qualified" attributeFormDefault="qualified" version="15118 2.0">
<!-- attributeFormDefault="unqualified" -->
<xs:import namespace="urn:iso:15118:2:2013:MsgHeader" schemaLocation="V2G_CI_MsgHeader.xsd"/>
<xs:import namespace="urn:iso:15118:2:2013:MsgBody" schemaLocation="V2G_CI_MsgBody.xsd"/>
<!-- Message Structure -->
<xs:element name="V2G_Message">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="v2gci_h:MessageHeaderType"/>
<xs:element name="Body" type="v2gci_b:BodyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,240 @@
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="0.1" elementFormDefault="qualified">
<!-- Basic Types Defined for Signatures -->
<simpleType name="CryptoBinary">
<restriction base="base64Binary"></restriction>
</simpleType>
<!-- Start Signature -->
<element name="Signature" type="ds:SignatureType"/>
<complexType name="SignatureType">
<sequence>
<element ref="ds:SignedInfo"/>
<element ref="ds:SignatureValue"/>
<element ref="ds:KeyInfo" minOccurs="0"/>
<element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureValue" type="ds:SignatureValueType"/>
<complexType name="SignatureValueType">
<simpleContent>
<extension base="base64Binary">
<attribute name="Id" type="ID" use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Start SignedInfo -->
<element name="SignedInfo" type="ds:SignedInfoType"/>
<complexType name="SignedInfoType">
<sequence>
<element ref="ds:CanonicalizationMethod"/>
<element ref="ds:SignatureMethod"/>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
<complexType name="CanonicalizationMethodType" mixed="true">
<sequence>
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
<!-- (0,unbounded) elements from (1,1) namespace -->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="SignatureMethod" type="ds:SignatureMethodType"/>
<complexType name="SignatureMethodType" mixed="true">
<sequence>
<element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
<!--
(0,unbounded) elements from (1,1) external namespace
-->
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- Start Reference -->
<element name="Reference" type="ds:ReferenceType"/>
<complexType name="ReferenceType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
<element ref="ds:DigestMethod"/>
<element ref="ds:DigestValue"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="URI" type="anyURI" use="optional"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<element name="Transforms" type="ds:TransformsType"/>
<complexType name="TransformsType">
<sequence>
<element ref="ds:Transform" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="Transform" type="ds:TransformType"/>
<complexType name="TransformType" mixed="true">
<choice minOccurs="0" maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
<element name="XPath" type="string"/>
</choice>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<!-- End Reference -->
<element name="DigestMethod" type="ds:DigestMethodType"/>
<complexType name="DigestMethodType" mixed="true">
<sequence>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="Algorithm" type="anyURI" use="required"/>
</complexType>
<element name="DigestValue" type="ds:DigestValueType"/>
<simpleType name="DigestValueType">
<restriction base="base64Binary"/>
</simpleType>
<!-- End SignedInfo -->
<!-- Start KeyInfo -->
<element name="KeyInfo" type="ds:KeyInfoType"/>
<complexType name="KeyInfoType" mixed="true">
<choice maxOccurs="unbounded">
<element ref="ds:KeyName"/>
<element ref="ds:KeyValue"/>
<element ref="ds:RetrievalMethod"/>
<element ref="ds:X509Data"/>
<element ref="ds:PGPData"/>
<element ref="ds:SPKIData"/>
<element ref="ds:MgmtData"/>
<any processContents="lax" namespace="##other"/>
<!-- (1,1) elements from (0,unbounded) namespaces -->
</choice>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="KeyName" type="string"/>
<element name="MgmtData" type="string"/>
<element name="KeyValue" type="ds:KeyValueType"/>
<complexType name="KeyValueType" mixed="true">
<choice>
<element ref="ds:DSAKeyValue"/>
<element ref="ds:RSAKeyValue"/>
<any namespace="##other" processContents="lax"/>
</choice>
</complexType>
<element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
<complexType name="RetrievalMethodType">
<sequence>
<element ref="ds:Transforms" minOccurs="0"/>
</sequence>
<attribute name="URI" type="anyURI"/>
<attribute name="Type" type="anyURI" use="optional"/>
</complexType>
<!-- Start X509Data -->
<element name="X509Data" type="ds:X509DataType"/>
<complexType name="X509DataType">
<sequence maxOccurs="unbounded">
<choice>
<element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
<element name="X509SKI" type="base64Binary"/>
<element name="X509SubjectName" type="string"/>
<element name="X509Certificate" type="base64Binary"/>
<element name="X509CRL" type="base64Binary"/>
<any namespace="##other" processContents="lax"/>
</choice>
</sequence>
</complexType>
<complexType name="X509IssuerSerialType">
<sequence>
<element name="X509IssuerName" type="string"/>
<element name="X509SerialNumber" type="integer"/>
</sequence>
</complexType>
<!-- End X509Data -->
<!-- Begin PGPData -->
<element name="PGPData" type="ds:PGPDataType"/>
<complexType name="PGPDataType">
<choice>
<sequence>
<element name="PGPKeyID" type="base64Binary"/>
<element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<sequence>
<element name="PGPKeyPacket" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</choice>
</complexType>
<!-- End PGPData -->
<!-- Begin SPKIData -->
<element name="SPKIData" type="ds:SPKIDataType"/>
<complexType name="SPKIDataType">
<sequence maxOccurs="unbounded">
<element name="SPKISexp" type="base64Binary"/>
<any namespace="##other" processContents="lax" minOccurs="0"/>
</sequence>
</complexType>
<!-- End SPKIData -->
<!-- End KeyInfo -->
<!-- Start Object (Manifest, SignatureProperty) -->
<element name="Object" type="ds:ObjectType"/>
<complexType name="ObjectType" mixed="true">
<sequence minOccurs="0" maxOccurs="unbounded">
<any namespace="##any" processContents="lax"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
<attribute name="MimeType" type="string" use="optional"/>
<!-- add a grep facet -->
<attribute name="Encoding" type="anyURI" use="optional"/>
</complexType>
<element name="Manifest" type="ds:ManifestType"/>
<complexType name="ManifestType">
<sequence>
<element ref="ds:Reference" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
<complexType name="SignaturePropertiesType">
<sequence>
<element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
</sequence>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<element name="SignatureProperty" type="ds:SignaturePropertyType"/>
<complexType name="SignaturePropertyType" mixed="true">
<choice maxOccurs="unbounded">
<any namespace="##other" processContents="lax"/>
<!-- (1,1) elements from (1,unbounded) namespaces -->
</choice>
<attribute name="Target" type="anyURI" use="required"/>
<attribute name="Id" type="ID" use="optional"/>
</complexType>
<!-- End Object (Manifest, SignatureProperty) -->
<!-- Start Algorithm Parameters -->
<simpleType name="HMACOutputLengthType">
<restriction base="integer"/>
</simpleType>
<!-- Start KeyValue Element-types -->
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
<complexType name="DSAKeyValueType">
<sequence>
<sequence minOccurs="0">
<element name="P" type="ds:CryptoBinary"/>
<element name="Q" type="ds:CryptoBinary"/>
</sequence>
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
<element name="Y" type="ds:CryptoBinary"/>
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
<sequence minOccurs="0">
<element name="Seed" type="ds:CryptoBinary"/>
<element name="PgenCounter" type="ds:CryptoBinary"/>
</sequence>
</sequence>
</complexType>
<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
<complexType name="RSAKeyValueType">
<sequence>
<element name="Modulus" type="ds:CryptoBinary"/>
<element name="Exponent" type="ds:CryptoBinary"/>
</sequence>
</complexType>
<!-- End KeyValue Element-types -->
<!-- End Signature -->
</schema>

View File

@@ -0,0 +1,14 @@
1. Generated the Java classes from V2G_CI_MsgDef.xsd into the package v2gMessages.msgDef.
This creates all message types defined in
- V2G_CI_MsgDef
- V2G_CI_MsgHeader
- V2G_CI_MsgBody
- V2G_CI_MsgDataTypes
- xldsig-core-schema.xsd
2. Generated the Java classes from V2G_CI_AppProtocol.xsd into the package v2gMessages.appProtocol
(because of the class ResponseCodeType, which is defined in both schema files and would therefore
raise conflicts).
3. Add SECCDiscoveryReq.java and SECCDiscoveryRes.java to the package v2gMessages.

View File

@@ -0,0 +1,116 @@
package com.fluxlus.V2Gdecoder;
import com.fluxlus.V2Gdecoder.server.MultiThreadedServer;
import java.io.IOException;
import org.apache.commons.cli.*;
import org.xml.sax.SAXException;
import com.siemens.ct.exi.core.exceptions.EXIException;
import com.siemens.ct.exi.core.grammars.Grammars;
import com.siemens.ct.exi.grammars.GrammarFactory;
import com.v2gclarity.risev2g.shared.enumerations.GlobalValues;
import com.fluxlus.V2Gdecoder.dataprocess.*;
/*
* Copyright (C) V2Gdecoder by FlUxIuS (Sebastien Dudek)
*/
public class V2Gdecoder {
public static void main(String[] args) throws IOException, SAXException, EXIException {
Options options = new Options();
Option sinput = new Option("s", "string", true, "string to decode");
sinput.setRequired(false);
options.addOption(sinput);
Option finput = new Option("f", "file", true, "input file path");
finput.setRequired(false);
options.addOption(finput);
Option output = new Option("o", "output", false, "output file in a dedicated path");
output.setRequired(false);
options.addOption(output);
Option xmlformat = new Option("x", "xml", false, "XML format");
xmlformat.setRequired(false);
options.addOption(xmlformat);
Option exiform = new Option("e", "exi", false, "EXI format");
exiform.setRequired(false);
options.addOption(exiform);
Option webserv = new Option("w", "web", false, "Webserver");
webserv.setRequired(false);
options.addOption(webserv);
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
CommandLine cmd = null;
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
System.out.println(e.getMessage());
formatter.printHelp("V2GEXI Helper", options);
System.exit(1);
}
String inputFilePath = cmd.getOptionValue("file");
if (!cmd.hasOption("file"))
{
inputFilePath = cmd.getOptionValue("string");
}
//String outputFilePath = cmd.getOptionValue("output"); /* TODO: custom output file */
decodeMode dmode = decodeMode.STRTOSTR;
String result = null;
/* Initialize grammars */
Grammars[] grammars = {null, null, null};
/* BOTTLENECK: slow operation */
try {
grammars[0] = GrammarFactory.newInstance().createGrammars("." + GlobalValues.SCHEMA_PATH_MSG_DEF.toString());
} catch (EXIException e) {
e.printStackTrace();
}
try {
grammars[1] = GrammarFactory.newInstance().createGrammars("." + GlobalValues.SCHEMA_PATH_APP_PROTOCOL.toString());
} catch (EXIException e) {
e.printStackTrace();
}
try {
grammars[2] = GrammarFactory.newInstance().createGrammars("." + GlobalValues.SCHEMA_PATH_XMLDSIG.toString());
} catch (EXIException e) {
e.printStackTrace();
}
if (cmd.hasOption("xml"))
{ // We wan to encode a XML input
if (cmd.hasOption("file"))
{
dmode = decodeMode.FILETOSTR;
if (cmd.hasOption("output"))
dmode = decodeMode.FILETOFILE;
} else {
dmode = decodeMode.STRTOSTR;
if (cmd.hasOption("output"))
dmode = decodeMode.STRTOSTR;
}
result = dataprocess.fuzzyExiEncoder(inputFilePath, dmode, grammars);
if (!cmd.hasOption("output"))
System.out.println(result);
} else if (cmd.hasOption("exi")) { // We wan to decode an EXI input
if (cmd.hasOption("file"))
{ // if a file path is provided
dmode = decodeMode.FILETOSTR;
if (cmd.hasOption("output"))
dmode = decodeMode.FILETOFILE;
} else { // if input is provided in stdin
dmode = decodeMode.STRTOSTR;
if (cmd.hasOption("output"))
dmode = decodeMode.STRTOFILE;
}
result = dataprocess.fuzzyExiDecoded(inputFilePath, dmode, grammars);
if (!cmd.hasOption("output"))
{ // output in stdout
System.out.println(result);
}
} else if (cmd.hasOption("web")) { // run a encoder/decoder service on port TCP 9000
MultiThreadedServer server = new MultiThreadedServer(9000, grammars);
new Thread(server).start();
}
}
}

View File

@@ -0,0 +1,43 @@
package com.fluxlus.V2Gdecoder.binascii;
/*
* code from: https://github.com/EverythingMe/inbloom/blob/master/java/src/main/java/me/everything/inbloom/BinAscii.java
*/
public class BinAscii {
final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
/**
* Transform a byte array into a it's hexadecimal representation
*/
public static String hexlify(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
String ret = new String(hexChars);
return ret;
}
/**
* Transform a string of hexadecimal chars into a byte array
*/
public static byte[] unhexlify(String argbuf) {
int arglen = argbuf.length();
if (arglen % 2 != 0)
throw new RuntimeException("Odd-length string");
byte[] retbuf = new byte[arglen/2];
for (int i = 0; i < arglen; i += 2) {
int top = Character.digit(argbuf.charAt(i), 16);
int bot = Character.digit(argbuf.charAt(i+1), 16);
if (top == -1 || bot == -1)
throw new RuntimeException("Non-hexadecimal digit found");
retbuf[i / 2] = (byte) ((top << 4) + bot);
}
return retbuf;
}
}

View File

@@ -0,0 +1,223 @@
package com.fluxlus.V2Gdecoder.dataprocess;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Timestamp;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import com.v2gclarity.risev2g.shared.enumerations.GlobalValues;
// import com.v2gclarity.risev2g.shared.messageHandling.MessageHandler;
// import com.v2gclarity.risev2g.shared.utils.MiscUtils;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
import com.siemens.ct.exi.core.EXIFactory;
import com.siemens.ct.exi.grammars.GrammarFactory;
import com.siemens.ct.exi.core.grammars.Grammars;
import com.siemens.ct.exi.main.api.sax.EXIResult;
import com.siemens.ct.exi.main.api.sax.EXISource;
import com.siemens.ct.exi.core.exceptions.EXIException;
import com.siemens.ct.exi.core.helpers.DefaultEXIFactory;
import com.fluxlus.V2Gdecoder.binascii.BinAscii;
/*
* Copyright (C) V2Gdecoder by FlUxIuS (Sebastien Dudek)
*/
public class dataprocess {
// public MessageHandler messageHandler;
// public MessageHandler getMessageHandler() {
// return messageHandler;
// }
// public static void initConfig() {
// MiscUtils.loadProperties("./test.properties");
// }
public static String Xml2Exi(String inputsc, String xmlstr, decodeMode mode, Grammars grammar) throws IOException, SAXException, EXIException {
/*
* Encode XML to EXI
* In(1): XML string or input file path string
* In(2): (decodeMode) Input/Output mode
* Out: encoded result string
* */
EXIFactory exiFactory = DefaultEXIFactory.newInstance();
ByteArrayOutputStream bosEXI = null;
OutputStream osEXI = null;
String result = null;
String outfile = null;
exiFactory.setGrammars(grammar);
EXIResult exiResult = new EXIResult(exiFactory);
if (mode == decodeMode.FILETOSTR || mode == decodeMode.STRTOSTR)
{ // stream output
bosEXI = new ByteArrayOutputStream();
exiResult.setOutputStream(bosEXI);
} else { // file output
if (mode == decodeMode.STRTOFILE) {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
String filename = new String("out."+timestamp.toString()+".exi");
outfile = filename;
osEXI = new FileOutputStream(filename);
}
else
osEXI = new FileOutputStream(xmlstr + ".exi");
exiResult.setOutputStream(osEXI);
}
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler( exiResult.getHandler() );
xmlReader.parse(new InputSource(new StringReader(inputsc))); // parse XML input
if (mode == decodeMode.FILETOSTR || mode == decodeMode.STRTOSTR)
{
result = BinAscii.hexlify(bosEXI.toByteArray());
bosEXI.close();
} else {
osEXI.close();
result = new String("File written in '" + mode + outfile + "'");
}
return result;
}
public static String Exi2Xml(String existr, decodeMode mode, Grammars grammar) throws IOException, SAXException, EXIException, TransformerException {
/*
* Decode EXI data to XML
* In(1): String to decode
* In(2): (decodeMode) Input/Output
* In(3): String of grammar XSD path to use
* Out: decoded result string
* */
EXIFactory exiFactory = DefaultEXIFactory.newInstance();
String result = null;
String inputsc = existr;
Result res = null;
ByteArrayOutputStream outputStream = null;
InputSource is = null;
exiFactory.setGrammars(grammar);
if (mode == decodeMode.FILETOSTR || mode == decodeMode.FILETOFILE)
is = new InputSource(inputsc);
else
is = new InputSource(new ByteArrayInputStream(BinAscii.unhexlify(inputsc)));
SAXSource exiSource = new EXISource(exiFactory);
exiSource.setInputSource(is);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
if (mode == decodeMode.STRTOFILE || mode == decodeMode.FILETOFILE)
{
String filename = null;
if (mode == decodeMode.STRTOFILE)
{
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
filename = new String("out."+timestamp.toString()+".xml");
} else
filename = existr + ".xml";
res = new StreamResult(filename);
result = new String("File written in '" + filename + "'");
} else {
outputStream = new ByteArrayOutputStream();
res = new StreamResult(outputStream);
}
transformer.transform(exiSource, res);
if (mode == decodeMode.FILETOSTR || mode == decodeMode.STRTOSTR)
result = new String(outputStream.toByteArray());
return result;
}
public static String fuzzyExiEncoder(String xmlstr, decodeMode dmode, Grammars[] grammars) throws IOException, SAXException
{
/*
* Enumerate V2G grammar to decode EXI data
* In(1): Input string
* In(2): (decodeMode) Input/Output modes
* Out: Decoded result string
*/
String result = null;
String inputsc = null;
Grammars grammar = null;
if (dmode == decodeMode.FILETOSTR || dmode == decodeMode.FILETOFILE)
{ // In case the input is a file
byte[] rbytes = Files.readAllBytes(Paths.get(xmlstr));
inputsc = new String(rbytes);
} else {
inputsc = xmlstr;
}
/* Selects grammar intelligenly */
if (inputsc.contains("supportedAppProtocol"))
{ // select AppProtocol schema to set V2G grammar
grammar = grammars[1];
} else if (inputsc.contains("V2G_Message")) { // select MSG DEF
grammar = grammars[0];
} else { // XMLDSIG by default
grammar = grammars[2];
}
try {
result = Xml2Exi(inputsc, xmlstr, dmode, grammar);
} catch(EXIException e)
{
e.printStackTrace();
}
return result;
}
public static String fuzzyExiDecoded(String strinput, decodeMode dmode, Grammars[] grammars)
{
/*
* Enumerate V2G grammar to decode EXI data
* In(1): Input string
* In(2): (decodeMode) Input/Output modes
* Out: Decoded result string
*/
String result = null;
try {
result = Exi2Xml(strinput, dmode, grammars[0]);
} catch (Exception e1) {
try {
result = Exi2Xml(strinput, dmode, grammars[1]);
} catch (Exception e2) {
try {
result = Exi2Xml(strinput, dmode, grammars[2]);
} catch (EXIException e3) {
// do nothing
//e3.printStackTrace();
} catch (Exception b3) {
// do nothing
//b3.printStackTrace();
}
}
}
return result;
}
}

View File

@@ -0,0 +1,12 @@
package com.fluxlus.V2Gdecoder.dataprocess;
/*
* Copyright (C) V2Gdecoder by FlUxIuS (Sebastien Dudek)
*/
public enum decodeMode {
STRTOSTR,
STRTOFILE,
FILETOSTR,
FILETOFILE
}

View File

@@ -0,0 +1,73 @@
package com.fluxlus.V2Gdecoder.server;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import com.siemens.ct.exi.core.grammars.Grammars;
/*
* Copyright (C) V2Gdecoder by FlUxIuS (Sebastien Dudek)
*/
public class MultiThreadedServer implements Runnable{
protected int serverPort = 8080;
protected ServerSocket serverSocket = null;
protected boolean isStopped = false;
protected Thread runningThread= null;
protected Grammars[] grammars = null;
public MultiThreadedServer(int port, Grammars[] grammars){
this.serverPort = port;
this.grammars = grammars;
}
public void run(){
synchronized(this){
this.runningThread = Thread.currentThread();
}
openServerSocket();
while(! isStopped()){
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
} catch (IOException e) {
if(isStopped()) {
System.out.println("Server Stopped.") ;
return;
}
throw new RuntimeException(
"Error accepting client connection", e);
}
new Thread(
new WorkerRunnable(
clientSocket, this.grammars, "Multithreaded Server")
).start();
}
System.out.println("Server Stopped.") ;
}
private synchronized boolean isStopped() {
return this.isStopped;
}
public synchronized void stop(){
this.isStopped = true;
try {
this.serverSocket.close();
} catch (IOException e) {
throw new RuntimeException("Error closing server", e);
}
}
private void openServerSocket() {
try {
this.serverSocket = new ServerSocket(this.serverPort);
} catch (IOException e) {
throw new RuntimeException("Cannot open port 8080", e);
}
}
}

View File

@@ -0,0 +1,113 @@
package com.fluxlus.V2Gdecoder.server;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import org.xml.sax.SAXException;
import com.siemens.ct.exi.core.exceptions.EXIException;
import com.siemens.ct.exi.core.grammars.Grammars;
import com.fluxlus.V2Gdecoder.dataprocess.dataprocess;
import com.fluxlus.V2Gdecoder.dataprocess.decodeMode;
public class WorkerRunnable implements Runnable{
protected Socket clientSocket = null;
protected String serverText = null;
protected Grammars[] grammars = null;
public WorkerRunnable(Socket clientSocket, Grammars[] grammars, String serverText) {
this.clientSocket = clientSocket;
this.serverText = serverText;
this.grammars = grammars;
}
public static Map<String, String> parseHTTPHeaders(InputStream inputStream)
throws IOException {
int charRead;
StringBuffer sb = new StringBuffer();
while (true) {
sb.append((char) (charRead = inputStream.read()));
if ((char) charRead == '\r') {
sb.append((char) inputStream.read());
charRead = inputStream.read();
if (charRead == '\r') {
sb.append((char) inputStream.read());
break;
} else {
sb.append((char) charRead);
}
}
}
String[] headersArray = sb.toString().split("\r\n");
Map<String, String> headers = new HashMap<>();
for (int i = 1; i < headersArray.length - 1; i++) {
headers.put(headersArray[i].split(": ")[0],
headersArray[i].split(": ")[1]);
}
return headers;
}
public static String parseHTTPBody(InputStream inputStream)
throws IOException {
StringBuilder stringBuilder = new StringBuilder();
int length = inputStream.available();
InputStreamReader test = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(test);
char[] charBuffer = new char[4096];
int bytesRead;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
if (stringBuilder.length() <= length) {
break;
}
}
return stringBuilder.toString();
}
public void run() {
try {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
//long time = System.currentTimeMillis();
Map<String, String> headers = parseHTTPHeaders(input);
System.out.println(headers);
String body = parseHTTPBody(input);
String result = null;
System.out.println(headers.get("Format").toString());
if (headers.get("Format").contains("EXI"))
{
result = dataprocess.fuzzyExiDecoded(body, decodeMode.STRTOSTR, this.grammars);
} else {
try {
result = dataprocess.fuzzyExiEncoder(body, decodeMode.STRTOSTR, this.grammars);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//System.out.println(result);
output.write(("HTTP/1.1 200 OK\n\n" + result +
"").getBytes());
output.close();
input.close();
} catch (IOException e) {
//report exception somewhere.
e.printStackTrace();
}
}
}