<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:r="http://system.aib-net.org" xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://system.aib-net.org" elementFormDefault="qualified"
  attributeFormDefault="unqualified">
  <xs:element name="Env">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:Header"/>
        <xs:element ref="r:Body"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Header">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:MessageID"/>
        <xs:element ref="r:FromRegistry"/>
        <xs:element ref="r:ToRegistry"/>
        <xs:element ref="r:Context"/>
      </xs:sequence>
      <xs:attribute name="MessageTransmissionTime" type="r:MessageTransmissionTime" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="MessageID" type="xs:token"/>
  <xs:element name="FromRegistry">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="GS1"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ToRegistry">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="GS1"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Context">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="transfer"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="Body">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:SendingAccountID"/>
        <xs:element ref="r:ReceivingAccountID"/>
        <xs:element ref="r:NumberOfCertificates"/>
        <xs:element ref="r:Message" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="r:Certificates" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="SendingAccountID">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:AccountID">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ReceivingAccountID">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:AccountID">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="NumberOfCertificates" type="xs:positiveInteger"/>
  <xs:element name="Message" type="r:LongString"/>
  <xs:element name="Certificates">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:StartCertificateNumber"/>
        <xs:element ref="r:EndCertificateNumber"/>
        <xs:element ref="r:IssuingBody"/>
        <xs:element ref="r:CountryOfIssue"/>
        <xs:element ref="r:DateOfIssue"/>
        <xs:element ref="r:ProductionPeriod"/>
        <xs:element ref="r:EnergyCarrier"/>
        <xs:element ref="r:Conversion"/>
        <xs:element ref="r:Storage" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="r:Product" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="r:ProductionDeviceID"/>
        <xs:element ref="r:ProductionDeviceName" minOccurs="0"/>
        <xs:element ref="r:DateOperational"/>
        <xs:element ref="r:Capacity"/>
        <xs:element ref="r:Module" minOccurs="0"/>
        <xs:element ref="r:ProductionTechnology"/>
        <xs:element ref="r:EnergySource"/>
        <xs:element ref="r:SourceShares" minOccurs="0"/>
        <xs:element ref="r:SupportFlag"/>
        <xs:element ref="r:ProductionSupportDescription" minOccurs="0"/>
        <xs:element ref="r:InvestmentSupportDescription" minOccurs="0"/>
        <xs:element ref="r:ProductionDeviceLocation"/>
        <xs:element ref="r:DisseminationLevel"/>
        <xs:element ref="r:Cogeneration" minOccurs="0"/>
        <xs:element ref="r:ElectricalEfficiency" minOccurs="0"/>
        <xs:element ref="r:ThermalEfficiency" minOccurs="0"/>
        <xs:element ref="r:Gas" minOccurs="0"/>
        <xs:element ref="r:CalorificValue" minOccurs="0"/>
        <xs:element ref="r:GHGEmissions" minOccurs="0"/>
        <xs:element ref="r:RadioactiveWasteProduced" minOccurs="0"/>
        <xs:element ref="r:Sustainability" minOccurs="0"/>
        <xs:element ref="r:Label" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="r:AdditionalInfo" minOccurs="0"/>
        <xs:element ref="r:CustomAttributes" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="faceValue" type="r:FaceValue" default="MWh"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="StartCertificateNumber">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:CertificateNumberType">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="EndCertificateNumber">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:CertificateNumberType">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="IssuingBody" type="r:TinyToken"/>
  <xs:element name="CountryOfIssue" type="r:TinyToken"/>
  <xs:element name="DateOfIssue">
    <xs:simpleType>
      <xs:restriction base="xs:date">
        <xs:minInclusive value="2004-03-17"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="ProductionPeriod">
    <xs:complexType>
      <xs:attribute name="start" use="required" type="r:ProductionDateTime"/>
      <xs:attribute name="end" use="required" type="r:ProductionDateTime"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="EnergyCarrier">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="Electricity"/>
        <xs:enumeration value="EnergyGas"/>
        <xs:enumeration value="Hydrogen"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="Conversion">
    <xs:complexType>
      <xs:attribute name="tag" type="r:TinyToken" use="required"/>
      <xs:attribute name="preConversionSupportFlag" type="r:TinyToken" use="optional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Storage">
    <xs:complexType>
      <xs:attribute name="tag" type="r:StorageTagType" default="S0100"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Product">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:Purpose" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="r:CompetentAuthority" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="r:ProductType" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" type="r:TinyToken" use="required"/>
      <xs:attribute name="legalStatus" type="r:LegalStatus" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Purpose">
    <xs:simpleType>
      <xs:restriction base="r:TinyToken">
        <xs:enumeration value="Disclosure"/>
        <xs:enumeration value="Support"/>
        <xs:enumeration value="Target"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="CompetentAuthority">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:length value="4" fixed="true"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="ProductType">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:TinyToken">
          <xs:attribute name="type" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:NMTOKEN">
                <xs:enumeration value="driver"/>
                <xs:enumeration value="targetType"/>
                <xs:enumeration value="targetScheme"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProductionDeviceID">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:ProductionDeviceID">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="GS1"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProductionDeviceName" type="r:MediumToken"/>
  <xs:element name="DateOperational" type="r:Date"/>
  <xs:element name="Capacity">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ElectricalCapacity" type="r:Decimal_Positive" minOccurs="0"/>
        <xs:element name="MechanicalCapacity" type="r:Decimal_Positive" minOccurs="0"/>
        <xs:element name="ThermalCapacity" type="r:Decimal_Positive" minOccurs="0"/>
        <xs:element name="GasProductionCapacity" type="r:Decimal_Positive" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Module">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ModuleCapacity" type="r:Decimal_Positive" minOccurs="1" maxOccurs="1"/>
        <xs:element name="ModuleDateOperational" type="r:Date" minOccurs="0"/>
        <xs:element name="ModuleDescription" type="r:MediumString" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProductionTechnology">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:TinyToken">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="EnergySource">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:TinyToken">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
          <xs:attribute name="advancedBiomassFeedstock" type="xs:boolean" use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="SourceShares" type="r:MediumString"/>
  <xs:element name="SupportFlag">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:SupportFlagType">
          <xs:attribute name="cS" type="xs:NMTOKEN" use="optional" default="eecs"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProductionSupportDescription" type="r:LongString"/>
  <xs:element name="InvestmentSupportDescription" type="r:LongString"/>
  <xs:element name="ProductionDeviceLocation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:Coordinates" minOccurs="0"/>
        <xs:element ref="r:Address" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Coordinates">
    <xs:complexType>
      <xs:attribute name="Longitude" type="r:TinyToken" use="required"/>
      <xs:attribute name="Latitude" type="r:TinyToken" use="required"/>
      <xs:attribute name="CoordinateCode" type="r:TinyToken" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Address">
    <xs:complexType>
      <xs:attribute name="Country" type="r:TinyToken" use="required"/>
      <xs:attribute name="City" type="r:MediumToken150" use="required"/>
      <xs:attribute name="PostCode" type="r:TinyToken10" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="DisseminationLevel" type="r:TinyToken"/>
  <xs:element name="Cogeneration">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:UseOfHeat" minOccurs="0"/>
        <xs:element ref="r:PercentagePrimaryEnergySaved" minOccurs="0"/>
        <xs:element ref="r:AmountPrimaryEnergySaved" minOccurs="0"/>
        <xs:element ref="r:OverallPrimaryEnergySavings" minOccurs="0"/>
        <xs:element ref="r:UsefulHeat" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="HECCriteriaMet" type="xs:boolean" use="optional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="UseOfHeat" type="r:TinyToken"/>
  <xs:element name="PercentagePrimaryEnergySaved" type="r:FixedPercentage"/>
  <xs:element name="AmountPrimaryEnergySaved" type="r:Decimal_Positive"/>
  <xs:element name="OverallPrimaryEnergySavings" type="r:FixedPercentage"/>
  <xs:element name="UsefulHeat" type="r:Decimal_Positive"/>
  <xs:element name="ElectricalEfficiency" type="r:FixedPercentage"/>
  <xs:element name="ThermalEfficiency" type="r:FixedPercentage"/>
  <xs:element name="Gas">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CompositionPurity" type="r:Composition_Purity" minOccurs="0"/>
        <xs:element name="GasCompositionCriteria" type="r:TinyToken" minOccurs="0"/>
        <xs:element name="GasUsage" type="r:TinyToken" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="type" type="r:TinyToken" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="CalorificValue">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:Decimal_Positive_Allow_Empty">
          <xs:attribute name="type" type="r:CalorificValueType" use="required"/>
          <xs:attribute name="unit" type="r:TinyToken" use="optional" default="MJ/kg"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="GHGEmissions">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="r:GHGEmissionProduced" minOccurs="0"/>
        <xs:element ref="r:AbsoluteGHGEmissionSaved" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="GHGSavingsCriteriaMet" use="optional" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="GHGEmissionProduced">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:GHGEmissionProducedType">
          <xs:attribute name="calculationMethod" type="r:TinyToken" use="required"/>
          <xs:attribute name="unit" type="r:TinyToken" use="optional" default="Kg CO2eq/MWh"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="AbsoluteGHGEmissionSaved">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:Decimal_Non_Negative">
          <xs:attribute name="calculationMethod" type="r:TinyToken" use="required"/>
          <xs:attribute name="unit" type="r:TinyToken" use="optional" default="Kg/MWh"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="RadioactiveWasteProduced">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="r:Decimal_Non_Negative">
          <xs:attribute name="calculationMethod" type="r:TinyToken" use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Sustainability">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="RequirementReference" type="r:TinyToken" minOccurs="0"/>
        <xs:element name="Scheme" type="r:TinyToken" minOccurs="0"/>
        <xs:element name="AuditReport" type="r:MediumString" minOccurs="0"/>
        <xs:element name="SustainabilityAdditionalInfo" type="r:MediumString" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="sustainabilityCriteriaMet" type="xs:boolean" use="optional"/>
      <xs:attribute name="certificationBody" type="r:TinyToken" use="optional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Label" type="r:TinyToken"/>
  <xs:element name="AdditionalInfo" type="r:MediumString"/>
  <xs:element name="CustomAttributes">
    <xs:complexType>
      <xs:sequence>
        <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!--Defined Types-->
  <xs:simpleType name="SupportFlagType">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="StorageTagType">
    <xs:restriction base="xs:token">
      <xs:length value="5" fixed="true"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="FaceValue">
    <xs:restriction base="r:TinyToken">
      <xs:enumeration value="MWh"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CertificateNumberType">
    <xs:restriction base="xs:token">
      <xs:pattern value="[0-9]{30}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="AccountID">
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="preserve"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ProductionDeviceID">
    <xs:restriction base="xs:token">
      <xs:pattern value="[0-9]{18}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="LegalStatus">
    <xs:restriction base="r:TinyToken">
      <xs:enumeration value="LC"/>
      <xs:enumeration value="NGC"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CalorificValueType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="lower"/>
      <xs:enumeration value="higher"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- Datatypes -->
  <xs:simpleType name="MediumString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="LongString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="1024"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TinyToken">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="20"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TinyToken10">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="10"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MediumToken">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MediumToken150">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="150"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ProductionDateTime">
    <xs:restriction base="xs:dateTime">
      <xs:minInclusive value="2004-03-17T00:00:00+00:00"/>
      <xs:pattern value="\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MessageTransmissionTime">
    <xs:restriction base="xs:dateTime">
      <xs:pattern value="\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Date">
    <xs:restriction base="xs:date">
      <xs:minInclusive value="1800-01-01"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Decimal_Non_Negative">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0.000"/>
      <xs:maxInclusive value="99999999.999"/>
      <xs:fractionDigits fixed="true" value="3"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Decimal_Positive">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0.001"/>
      <xs:maxInclusive value="99999999.999"/>
      <xs:fractionDigits fixed="true" value="3"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Decimal">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="-99999999.999"/>
      <xs:maxInclusive value="99999999.999"/>
      <xs:fractionDigits fixed="true" value="3"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="GHGEmissionProducedType">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="-99999999.999"/>
      <xs:maxInclusive value="99999999.999"/>
      <xs:fractionDigits fixed="true" value="3"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="FixedPercentage">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0.1"/>
      <xs:maxInclusive value="100.0"/>
      <xs:fractionDigits fixed="true" value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Decimal_Positive_Allow_Empty">
    <xs:union memberTypes="r:Empty r:Decimal_Positive"/>
  </xs:simpleType>
  <xs:simpleType name="Composition_Purity">
    <xs:union memberTypes="r:TinyToken r:Decimal"/>
  </xs:simpleType>
  <xs:simpleType name="Empty">
    <xs:restriction base="xs:string">
      <xs:enumeration value=""/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
