Files
cariflex/tools/shapeshifter-library-python-main/test/schema/UFTP-common.xsd
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

230 lines
10 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- -->
<!-- ShapeShifter Specification Version -->
<!-- -->
<xs:simpleType name="SpecVersion">
<xs:restriction base="xs:string">
<!-- Basic SemVer pattern match, i.e. 3.1.15 -->
<xs:pattern value="(\d+\.\d+\.\d+)"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- UUID Type -->
<!-- -->
<xs:simpleType name="UUIDType">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Entity Address Type -->
<!-- -->
<xs:simpleType name="EntityAddressType">
<xs:restriction base="xs:string">
<xs:pattern value="(ea1\.[0-9]{4}-[0-9]{2}\..{1,244}:.{1,244}|ean\.[0-9]{12,34})"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Internet Domain Type -->
<!-- -->
<xs:simpleType name="InternetDomainType">
<xs:restriction base="xs:string">
<xs:pattern value="([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- ISO-4217 Currency Type -->
<!-- -->
<xs:simpleType name="ISO4217CurrencyType">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{3}"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Currency Amount Type -->
<!-- -->
<xs:simpleType name="CurrencyAmountType">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="4"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Time Zone Name Type -->
<!-- -->
<xs:simpleType name="TimeZoneNameType">
<xs:restriction base="xs:string">
<xs:pattern value="(Africa|America|Australia|Europe|Pacific)/[a-zA-Z0-9_/]{3,}"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Period Type -->
<!-- -->
<xs:simpleType name="PeriodType">
<xs:restriction base="xs:date"/>
</xs:simpleType>
<!-- -->
<!-- Time Zone Type -->
<!-- -->
<xs:simpleType name="TimeZoneType">
<xs:restriction base="xs:string">
<xs:pattern value="(Africa|America|Australia|Europe|Pacific)/[a-zA-Z0-9_/]{3,}"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Activation Factor Type -->
<!-- -->
<xs:simpleType name="ActivationFactorType">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="2"/>
<xs:minInclusive value="0.01"/>
<xs:maxInclusive value="1.00"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- USER Role Type -->
<!-- -->
<xs:simpleType name="USEF-RoleType">
<xs:restriction base="xs:string">
<xs:enumeration value="AGR"/>
<xs:enumeration value="CRO"/>
<xs:enumeration value="DSO"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Redispatch by Type -->
<!-- -->
<xs:simpleType name="RedispatchByType">
<xs:restriction base="xs:string">
<xs:enumeration value="AGR"/>
<xs:enumeration value="DSO"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Accepted or Rejected Type -->
<!-- -->
<xs:simpleType name="AcceptedRejectedType">
<xs:restriction base="xs:string">
<xs:enumeration value="Accepted"/>
<xs:enumeration value="Rejected"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Available or Requested Type -->
<!-- -->
<xs:simpleType name="AvailableRequestedType">
<xs:restriction base="xs:string">
<xs:enumeration value="Available"/>
<xs:enumeration value="Requested"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Accepted or Disputed Type -->
<!-- -->
<xs:simpleType name="AcceptedDisputedType">
<xs:restriction base="xs:string">
<xs:enumeration value="Accepted"/>
<xs:enumeration value="Disputed"/>
</xs:restriction>
</xs:simpleType>
<!-- -->
<!-- Signed Message Type -->
<!-- -->
<xs:complexType name="SignedMessageType">
<xs:annotation>
<xs:documentation>The SignedMessage element represents the secure wrapper used to submit USEF XML messages from the local message queue to the message queue of a remote participant. It contains minimal metadata (which is distinct from the common metadata used for all other messages), allowing the recipient to look up the sender's cryptographic scheme and public keys, and the actual XML message, as transformed (signed/sealed) using that cryptographic scheme.</xs:documentation>
</xs:annotation>
<xs:attribute name="SenderDomain" type="InternetDomainType" use="required">
<xs:annotation>
<xs:documentation>The Internet domain of the USEF participant sending this message. Upon receiving a message, the recipient should validate that its value matches the corresponding attribute value specified in the inner XML message, once un-sealed: if not, the message must be rejected as invalid.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SenderRole" type="USEF-RoleType" use="required">
<xs:annotation>
<xs:documentation>The USEF role of the participant sending this message: AGR, BRP, CRO, DSO or MDC. Receive-time validation should take place as described for the SenderDomain attribute above.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Body" type="xs:base64Binary" use="required">
<xs:annotation>
<xs:documentation>The Base-64 encoded inner XML message contained in this wrapper, as transformed (signed/sealed) using the sender's cryptographic scheme. The recipient can determine which scheme applies using a DNS or configuration file lookup, based on the combination of SenderDomain and SenderRole.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- -->
<!-- Payload Message Type -->
<!-- -->
<xs:complexType name="PayloadMessageType" abstract="true">
<xs:attribute name="Version" type="SpecVersion" use="required">
<xs:annotation>
<xs:documentation>Version of the Shapeshifter specification used by the USEF participant sending this message.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SenderDomain" type="InternetDomainType" use="required">
<xs:annotation>
<xs:documentation>The Internet domain of the USEF participant sending this message. When receiving a message, its value should match the value specified in the SignedMessage wrapper: otherwise, the message must be rejected as invalid. When replying to this message, this attribute is used to look up the USEF endpoint the reply message should be delivered to.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RecipientDomain" type="InternetDomainType" use="required">
<xs:annotation>
<xs:documentation>Internet domain of the participant this message is intended for. When sending a message, this attribute, combined with the RecipientRole, is used to look up the USEF endpoint the message should be delivered to.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="TimeStamp" type="xs:dateTime" use="required">
<xs:annotation>
<xs:documentation>Date and time this message was created, including the time zone (ISO 8601 formatted as per http://www.w3.org/TR/NOTE-datetime).</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MessageID" type="UUIDType" use="required">
<xs:annotation>
<xs:documentation>Unique identifier (UUID/GUID as per IETF RFC 4122) for this message, to be generated when composing each message.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ConversationID" type="UUIDType" use="required">
<xs:annotation>
<xs:documentation>Unique identifier (UUID/GUID as per IETF RFC 4122) used to correlate responses with requests, to be generated when composing the first message in a conversation and subsequently copied from the original message to each reply message.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- -->
<!-- Payload Message Response Type -->
<!-- -->
<xs:complexType name="PayloadMessageResponseType" abstract="true">
<xs:complexContent>
<xs:extension base="PayloadMessageType">
<xs:attribute name="Result" type="AcceptedRejectedType" use="required">
<xs:annotation>
<xs:documentation>Indication whether the query was executed successfully or failed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RejectionReason" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>In case the query failed, this attribute must contain a human-readable description of the failure reason.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Test Message Type -->
<!-- -->
<xs:complexType name="TestMessageType">
<xs:complexContent>
<xs:extension base="PayloadMessageType"/>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- Test Message Response Type -->
<!-- -->
<xs:complexType name="TestMessageResponseType">
<xs:complexContent>
<xs:extension base="PayloadMessageType"/>
</xs:complexContent>
</xs:complexType>
<!-- -->
<!-- ELEMENT DEFINITIONS -->
<!-- -->
<xs:element name="SignedMessage" type="SignedMessageType"/>
<xs:element name="TestMessage" type="TestMessageType"/>
<xs:element name="TestMessageResponse" type="TestMessageResponseType"/>
</xs:schema>