APXScheduleAPI XSD

Copy
Copied
<?xml version="1.0" encoding="utf-8"?>
<!-- Schema for APX ParameterSet. 
	 
	History:	
    	...
        Feb 21, 2025  Removed reference to MISO and PJM in the <Region> enumeration >> These regions utilize ScheduleData schema.
        Feb 21, 2025  Added AS-Only in the <TransactionType> enumeration
        Feb 21, 2025  SASM...SASM5 are not valid. The enumerations of <DataSource> and <MarketStage> contain SASM values for backward compatibility
        
  -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:apx="http://service.apx.com/schedule" targetNamespace="http://service.apx.com/schedule" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<!-- Non-empty string -->
	<xs:simpleType name="NonEmptyString">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:pattern value=".*[^\s].*"/>
			<xs:whiteSpace value="replace"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NonNegativeDecimal">
		<xs:restriction base="xs:decimal">
			<xs:minInclusive value="0.00"/>
			<xs:totalDigits value="10"/>
			<xs:fractionDigits value="3"/>
		</xs:restriction>
	</xs:simpleType>
  <xs:simpleType name="Pricedecimal">
    <xs:restriction base="xs:decimal">
      <xs:totalDigits value="10"/>
      <xs:fractionDigits value="4"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MWdecimal">
    <xs:restriction base="xs:decimal">
      <xs:totalDigits value="10"/>
      <xs:fractionDigits value="3"/>
    </xs:restriction>
  </xs:simpleType>
	<!-- ControlArea-->
	<xs:simpleType name="Region">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="MRTU"/>
			<xs:enumeration value="TX"/>
			<xs:enumeration value="ERCOT"/>
		</xs:restriction>
	</xs:simpleType>
	<!--MarketType-->
	<xs:simpleType name="MarketStage">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="DA"/>
			<xs:enumeration value="FMM"/>
			<xs:enumeration value="HA"/>
			<xs:enumeration value="RT"/>
      		<xs:enumeration value="DART"/>
      		<xs:enumeration value="SASM"/> 
      		<xs:enumeration value="SASM2"/>
      		<xs:enumeration value="SASM3"/>
      		<xs:enumeration value="SASM4"/>
      		<xs:enumeration value="SASM5"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- TransactionType-->
	<xs:simpleType name="TransactionType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Load"/>
			<xs:enumeration value="Gen"/>
			<xs:enumeration value="Import"/>
			<xs:enumeration value="Export"/>
			<xs:enumeration value="VirtualBid"/>
			<xs:enumeration value="VirtualOffer"/>
			<xs:enumeration value="ParticipatingLoad"/>
			<xs:enumeration value="LoadResource"/>
			<xs:enumeration value="Buy"/>
			<xs:enumeration value="Sell"/>
			<xs:enumeration value="SourceSink"/>
			<xs:enumeration value="Self-Arranged"/>
			<xs:enumeration value="AS-Only"/>
    </xs:restriction>
	</xs:simpleType>
	<!--ProductType-->
	<xs:simpleType name="ProductType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Energy"/>
			<xs:enumeration value="NonFirmEnergy"/>
			<xs:enumeration value="RegUp"/>
			<xs:enumeration value="RegDn"/>
			<xs:enumeration value="Spin"/>
			<xs:enumeration value="NSpin"/>
			<xs:enumeration value="NSPNM"/>
			<xs:enumeration value="RUC"/>
			<xs:enumeration value="Capacity"/>
			<xs:enumeration value="OffNSpin"/>
			<xs:enumeration value="UntCntg"/>
			<xs:enumeration value="RegMileDn"/>
			<xs:enumeration value="RegMileUp"/>
			<xs:enumeration value="Dynamic"/>
			<xs:enumeration value="FlexRampDn"/>
			<xs:enumeration value="FlexRampUp"/>		
			<xs:enumeration value="IFMU"/>
			<xs:enumeration value="Wheel"/>
			<xs:enumeration value="RRS-PFR"/>
			<xs:enumeration value="RRS-FFR"/>
			<xs:enumeration value="RRS-UFR"/>
			<xs:enumeration value="DynLmtMax"/>
			<xs:enumeration value="DynLmtMin"/>
			<xs:enumeration value="ECRS"/>
			<xs:enumeration value="ECRSM"/>
			<xs:enumeration value="ECRSS"/>
			<xs:enumeration value="OffECRS"/>
		</xs:restriction>
	</xs:simpleType>
	<!--ScheduleType-->
	<xs:simpleType name="ScheduleType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="FinancialTrade"/>
			<xs:enumeration value="PhysicalTrade"/>
			<xs:enumeration value="UpliftCostTrade"/>
			<xs:enumeration value="GrandfatheredTrade"/>
			<xs:enumeration value="PseudoTieTrade"/>
			<xs:enumeration value="RetailLoad"/>
			<xs:enumeration value="WholesaleLoad"/>
			<xs:enumeration value="Generation"/>
			<xs:enumeration value="Obligation"/>
			<xs:enumeration value="SelfProvision"/>
			<xs:enumeration value="CntrlLoad"/>      
			<xs:enumeration value="AS"/> 
		</xs:restriction>
	</xs:simpleType>
	<!-- ScalarParameterType-->
	<xs:complexType name="ScalarParameterType">
		<xs:attribute name="FromInterval" type="xs:positiveInteger" use="optional"/>
		<xs:attribute name="Name" type="apx:NonEmptyString" use="required"/>
		<xs:attribute name="Value" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!--Parameter single curve point-->
	<xs:complexType name="Point">
		<xs:attribute name="X" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="Y" type="apx:NonEmptyString" use="optional"/>
    <xs:attribute name="Z" type="apx:NonEmptyString" use="optional"/>
	</xs:complexType>
	<!-- Curve Parameter Type-->
	<xs:complexType name="ParameterCurveType">
		<xs:sequence>
			<xs:element name="Point" type="apx:Point" maxOccurs="16"/>
		</xs:sequence>
		<xs:attribute name="FromInterval" type="xs:positiveInteger" use="optional"/>
		<xs:attribute name="Name" type="apx:NonEmptyString" use="required"/>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- Resource Parameters-->
	<xs:complexType name="ResourceParameters">
		<xs:choice maxOccurs="unbounded">
			<xs:element name="Parameter" type="apx:ScalarParameterType"/>
			<xs:element name="ParameterCurve" type="apx:ParameterCurveType"/>
		</xs:choice>
		<xs:attribute name="IntervalLength" use="optional" default="PT1H">
			<xs:simpleType>
				<xs:restriction base="xs:duration">
					<xs:enumeration value="P1D"/>
					<xs:enumeration value="PT1H"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Location" type="apx:NonEmptyString" use="required"/>
	</xs:complexType>
	<!--     ==========================
		    Bilateral Schedule Specific parts 
	           ==========================   -->
	<!-- BilateralScheduleDetail -->
	<xs:complexType name="BilateralScheduleDetail">
		<xs:attribute name="FromInterval" type="xs:positiveInteger" use="required">
			<xs:annotation>
				<xs:documentation source="combined with interval length, this may span 23-25 hours. "/>
				<xs:documentation source="This means i is between 23 and 25 for intervalLength=60 or between 92 and 100 for intervalLength=15"/>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="MW" type="apx:NonNegativeDecimal" use="optional"/>
		<xs:attribute name="CounterPartyMW" type="apx:NonNegativeDecimal" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- BilateralSchedule-->
	<xs:complexType name="BilateralSchedule">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="BilateralScheduleDetail" type="apx:BilateralScheduleDetail"/>
		</xs:sequence>
		<xs:attribute name="IntervalLength" use="optional" default="PT1H">
			<xs:simpleType>
				<xs:annotation>
					<xs:documentation>In minutes. Represents how long each interval in ScheduleDetail is.</xs:documentation>
				</xs:annotation>
				<xs:restriction base="xs:duration">
					<xs:enumeration value="PT15M"/>
					<xs:enumeration value="PT1H"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="TransactionType" type="apx:TransactionType" use="required"/>
		<xs:attribute name="SourceLocation" type="apx:NonEmptyString" use="required"/>
		<xs:attribute name="SinkLocation" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="CounterParty" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="TradeName" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="DependOnTradeName" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ScheduleType" type="apx:ScheduleType" use="optional"/>
		<xs:attribute name="ProductType" type="apx:ProductType" use="required"/>
		<xs:attribute name="ExternalId" type="apx:NonEmptyString" use="optional"/>
	</xs:complexType>
	<!--   ==========================
			 BidOffer Specific parts 
	        ===========================     -->
	<!-- CurveType -->
	<xs:simpleType name="CurveType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Block"/>
			<xs:enumeration value="Slope"/>
			<xs:enumeration value="Fixed"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- BidCurve-->
	<xs:complexType name="BidCurve">
		<xs:attribute name="MW" type="apx:MWdecimal" use="optional"/>
		<xs:attribute name="Price" type="apx:Pricedecimal" use="optional"/>
	</xs:complexType>
	<!--  SelfScheduleType -->
	<xs:complexType name="SelfScheduleType">
		<xs:attribute name="FromInterval" type="xs:positiveInteger" use="required"/>
		<xs:attribute name="MW" type="apx:MWdecimal" use="optional"/>
		<xs:attribute name="Price" type="apx:Pricedecimal" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- MarketScheduleType-->
	<xs:complexType name="MarketScheduleType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="Curve">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="CurvePoint" type="apx:BidCurve" maxOccurs="16"/>
					</xs:sequence>
					<xs:attribute name="LinkedHours" type="apx:NonEmptyString" use="optional"/>
					<xs:attribute name="CurveType" type="apx:CurveType" use="optional"/>
					<xs:attribute name="FromInterval" type="xs:positiveInteger" use="required"/>
					<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
						</xs:annotation>
					</xs:attribute>
          <xs:attribute name="CooptimizedWithAS" type="xs:boolean" use="optional"/>
          <xs:attribute name="Reason" type="apx:NonEmptyString" use="optional"/>
		  <xs:attribute name="ReasonText" type="apx:NonEmptyString" use="optional"/>
        </xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!-- SubmitBid -->
	<xs:complexType name="BidsOffers">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="SelfSchedule">
				<xs:complexType>
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="Schedule" type="apx:SelfScheduleType"/>
					</xs:sequence>
					<xs:attribute name="ProductType" type="apx:ProductType" use="required"/>
					<xs:attribute name="ScheduleType" type="apx:ScheduleType" use="optional"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="MarketSchedule">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="apx:MarketScheduleType">
							<xs:attribute name="ProductType" type="apx:ProductType" use="required"/>
							<xs:attribute name="LinkedOfferID" type="apx:NonEmptyString" use="optional"/>         
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:choice>
		<xs:attribute name="IntervalLength" use="optional" default="PT1H">
			<xs:simpleType>
				<xs:restriction base="xs:duration">
					<xs:enumeration value="PT5M"/>
					<xs:enumeration value="PT15M"/>
					<xs:enumeration value="PT1H"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="TransactionType" type="apx:TransactionType" use="required"/>
		<xs:attribute name="Location" type="apx:NonEmptyString" use="required"/>
    <xs:attribute name="SinkLocation" type="apx:NonEmptyString" use="optional"/>    
		<xs:attribute name="WheelId" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ContractId" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="SupportingResource" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="NERCTag" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ExternalId" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ExpirationTime" type="xs:dateTime" use="optional"/>
    <xs:attribute name="BidName" type="apx:NonEmptyString" use="optional"/>
	</xs:complexType>
	<!-- Common API parent element-->
	<xs:complexType name="Header">
		<xs:sequence minOccurs="0" maxOccurs="1">
			<xs:element name="MarketParticipantData">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="BilateralSchedule" type="apx:BilateralSchedule"/>
						<xs:element name="BidsOffers" type="apx:BidsOffers"/>
						<xs:element name="ResourceParameters" type="apx:ResourceParameters"/>
					</xs:choice>
					<xs:attribute name="Region" type="apx:Region" use="required"/>
					<xs:attribute name="MarketParticipant" type="apx:NonEmptyString" use="required"/>
					<xs:attribute name="MarketStage" type="apx:MarketStage" use="required"/>
					<xs:attribute name="FirstIntervalBegin" type="xs:dateTime" use="required"/>
					<xs:attribute name="LastIntervalEnd" type="xs:dateTime" use="required"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="Version" type="xs:decimal" use="optional" default="2.1"/>
		<xs:attribute name="SourceSystem" type="apx:NonEmptyString" use="required"/>
		<xs:attribute name="CreateDate" type="xs:dateTime" use="required"/>
	</xs:complexType>
	<!-- Entry Points:-->
	<!-- Submit should not include status elements -->
	<xs:element name="Submit">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="apx:Header">
					<xs:attribute name="SubmitToISO" type="xs:boolean" use="optional" default="false"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<!-- Result includes status elements -->
	<xs:element name="Response">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="apx:Header">
					<xs:attribute name="FileStatus" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound GetStatus responses only. Do not Submit or expect in GetScheduleData responses</xs:documentation>
						</xs:annotation>
					</xs:attribute>
          <xs:attribute name="MarketStatus" type="apx:NonEmptyString" use="optional">
            <xs:annotation>
              <xs:documentation>Used by Outbound GetScheduleData responses only. Do not Submit or expect in GetStatus responses</xs:documentation>
            </xs:annotation>
          </xs:attribute>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
</xs:schema>

APXParameterSet XSD

Copy
Copied
<?xml version="1.0" encoding="utf-8"?>
<!-- Schema for APX ParameterSet. 
	 
	 Author: Andrew Thornton
	 Revision 	1.2
	 History:	
        Jul 01, 2010  Created
        Aug 05, 2010  Added "SASM" and "SASM2" market stages
        Oct 16, 2010  Added "DART" market stage
        Oct 18, 2010  Added 'DART', 'SASM', and 'SASM2' to the <DataSource> enumeration. Source for data copied from Awards into another market offering
        
  -->
<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:apx="http://service.apx.com/ParameterSet" targetNamespace="http://service.apx.com/ParameterSet" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <!-- Non-empty string -->
  <xs:simpleType name="NonEmptyString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:pattern value=".*[^\s].*"/>
      <xs:whiteSpace value="replace"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- ControlArea-->
  <xs:simpleType name="Region">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="MRTU"/>
      <xs:enumeration value="TX"/>
      <xs:enumeration value="MISO"/>
      <xs:enumeration value="PJM"/>
      <xs:enumeration value="ERCOT"/>
    </xs:restriction>
  </xs:simpleType>
  <!--MarketType-->
  <xs:simpleType name="MarketStage">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="DA"/>
      <xs:enumeration value="RT"/>
      <xs:enumeration value="DART"/>
      <xs:enumeration value="SASM"/>
      <xs:enumeration value="SASM2"/>
    </xs:restriction>
  </xs:simpleType>
  <!--MarketStatus-->
  <xs:simpleType name="MarketStatus">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="PRE"/>
      <xs:enumeration value="POST"/>
      <xs:enumeration value="AWARD"/>
    </xs:restriction>
  </xs:simpleType>
  <!--Application-->
  <xs:simpleType name="Application">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="BidsOffers"/>
      <xs:enumeration value="BilateralSchedule"/>
      <xs:enumeration value="ResourceParameters"/>
    </xs:restriction>
  </xs:simpleType>
  <!--DataSource-->
  <xs:simpleType name="DataSource">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="API"/>
      <xs:enumeration value="DA"/>
      <xs:enumeration value="DART"/>
      <xs:enumeration value="SASM"/>
      <xs:enumeration value="SASM2"/>
      <xs:enumeration value="ISO"/>
      <xs:enumeration value="UI"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="ParameterSet">
    <xs:complexType>
      <xs:all>
        <xs:element name="MarketParticipant" type="apx:NonEmptyString" minOccurs="1" maxOccurs="1"/>
        <xs:element name="MarketStage" type="apx:MarketStage" minOccurs="1" maxOccurs="1"/>
        <xs:element name="MarketStatus" type="apx:MarketStatus" minOccurs="1" maxOccurs="1"/>
        <xs:element name="FirstIntervalBegin" type="xs:dateTime" minOccurs="1" maxOccurs="1"/>
        <xs:element name="LastIntervalEnd" type="xs:dateTime" minOccurs="1" maxOccurs="1"/>
        <xs:element name="Region" type="apx:Region" minOccurs="1" maxOccurs="1"/>
        <xs:element name="Applications" minOccurs="1" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Application" type="apx:Application"  minOccurs="1" maxOccurs="3"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ExternalIds" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ExternalId"  type="apx:NonEmptyString" minOccurs="1" maxOccurs="unbounded"  />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DataSources" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="DataSource" type="apx:DataSource" minOccurs="1" maxOccurs="4" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

ScheduleData XSD

Copy
Copied
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:apx="http://service.apx.com/ScheduleData" targetNamespace="http://service.apx.com/ScheduleData" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<!-- Non-empty string -->
	<xs:simpleType name="NonEmptyString">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:whiteSpace value="replace"/>
			<xs:pattern value=".*[^\s].*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NonNegativeDecimal">
		<xs:restriction base="xs:decimal">
			<xs:minInclusive value="0.00"/>
			<xs:totalDigits value="10"/>
			<xs:fractionDigits value="3"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Pricedecimal">
		<xs:restriction base="xs:decimal">
			<xs:totalDigits value="10"/>
			<xs:fractionDigits value="4"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="MWdecimal">
		<xs:restriction base="xs:decimal">
			<xs:totalDigits value="10"/>
			<xs:fractionDigits value="3"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- ControlArea-->
	<xs:simpleType name="Region">
		<xs:restriction base="xs:string">
			<xs:enumeration value="ISONE"/>
			<xs:enumeration value="MISO"/>
			<xs:enumeration value="NYISO"/>
			<xs:enumeration value="PJM"/>
			<xs:enumeration value="SPP"/>
		</xs:restriction>
	</xs:simpleType>

  <!-- ParameterType-->
	<xs:complexType name="ParameterType">
		<xs:attribute name="IntervalEndGmt" type="xs:dateTime" use="optional">
      <xs:annotation>
        <xs:documentation source="ISO local interval ending time converted to GMT"/>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Value" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!--Parameter Tables-->
	<xs:complexType name="TableValueType">
		<xs:choice>
			<xs:element name="TwoColumns">
        <xs:annotation>
          <xs:documentation>Used in some ISOs for Bid Curves or Ramp Rate Curves</xs:documentation>
        </xs:annotation>
        <xs:complexType>
					<xs:sequence>
						<xs:element name="Row" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="Id" type="xs:byte" use="required"/>
								<xs:attribute name="X" type="xs:decimal" use="required"/>
								<xs:attribute name="Y" type="xs:decimal" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="ThreeColumns">
        <xs:annotation>
          <xs:documentation>Used in some ISOs for Ramp Rate Curves with three columns, e.g. SPP MW/rate/emergency rate</xs:documentation>
        </xs:annotation>
        <xs:complexType>
					<xs:sequence>
						<xs:element name="Row" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="Id" type="xs:byte" use="required"/>
								<xs:attribute name="X" type="xs:decimal" use="required"/>
								<xs:attribute name="Y1" type="xs:decimal" use="required"/>
								<xs:attribute name="Y2" type="xs:decimal" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Factors">
        <xs:annotation>
          <xs:documentation>Used for distribution factors or other 2-column non-curve sets</xs:documentation>
        </xs:annotation>
        <xs:complexType>
					<xs:sequence>
						<xs:element name="Factor" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="Id" type="xs:byte" use="required"/>
								<xs:attribute name="Name" type="xs:string" use="required"/>
								<xs:attribute name="X" type="xs:decimal" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:choice>
    <xs:attribute name="IntervalEndGmt" type="xs:dateTime" use="required">
      <xs:annotation>
        <xs:documentation source="ISO local interval ending time converted to GMT"/>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- Resource Parameters-->
	<xs:complexType name="ResourceParameters">
		<xs:choice maxOccurs="unbounded">
			<xs:element name="Value" type="apx:ParameterType"/>
			<xs:element name="TableValue" type="apx:TableValueType"/>
		</xs:choice>
    <xs:attribute name="MarketParticipant" type="apx:NonEmptyString" use="required"/>
    <xs:attribute name="Location" type="apx:NonEmptyString" use="required"/>
		<xs:attribute name="ParameterType" type="xs:string" use="required"/>
    <xs:attribute name="ReferenceCode" type="apx:NonEmptyString" use="optional"/>
    <xs:attribute name="IntervalLength" use="optional" default="PT1H">      
			<xs:simpleType>
				<xs:restriction base="xs:duration">
					<xs:enumeration value="P1D"/>
					<xs:enumeration value="PT1H"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
  
	<!--     ==========================
		    Bilateral Schedule Specific parts 
	           ==========================   -->
	<!-- BilateralScheduleDetail -->
	<xs:complexType name="BilateralScheduleDetail">
    <xs:attribute name="IntervalEndGmt" type="xs:dateTime" use="required">
      <xs:annotation>
        <xs:documentation source="ISO local interval ending time converted to GMT"/>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="MW" type="apx:NonNegativeDecimal" use="optional"/>
		<xs:attribute name="CounterPartyMW" type="apx:NonNegativeDecimal" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- BilateralSchedule-->
	<xs:complexType name="BilateralSchedules">
    <xs:annotation>
      <xs:documentation>In most ISOs, ReferenceCode attribute alone will identify the contract to schedule--other attributes not needed.</xs:documentation>
    </xs:annotation>
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="BilateralScheduleDetail" type="apx:BilateralScheduleDetail"/>
		</xs:sequence>
    <xs:attribute name="MarketParticipant" type="apx:NonEmptyString" use="required"/>
    <xs:attribute name="IntervalLength" use="optional" default="PT1H">
			<xs:simpleType>
				<xs:annotation>
					<xs:documentation>Represents how long each interval in ScheduleDetail is.</xs:documentation>
				</xs:annotation>
				<xs:restriction base="xs:duration">
					<xs:enumeration value="PT15M"/>
					<xs:enumeration value="PT1H"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Transaction" type="xs:string" use="optional"/>
		<xs:attribute name="Location" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="SinkLocation" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="CounterParty" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="TradeName" type="apx:NonEmptyString" use="optional"/>
    <xs:attribute name="ReferenceCode" type="apx:NonEmptyString" use="optional">
    <xs:annotation>
      <xs:documentation>This is the ISO code for the bilateral contract--if used, other attributes not needed</xs:documentation>
    </xs:annotation>
    </xs:attribute>
    <xs:attribute name="DependOnTradeName" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ExternalId" type="apx:NonEmptyString" use="optional"/>
	</xs:complexType>
  
	<!--   ==========================
			 BidOffer Specific parts 
	        ===========================     -->
	<!-- CurveType -->
	<xs:simpleType name="CurveType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Block"/>
			<xs:enumeration value="Slope"/>
			<xs:enumeration value="Fixed"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- BidCurve-->
	<xs:complexType name="BidCurve">
		<xs:attribute name="MW" type="apx:MWdecimal" use="optional"/>
		<xs:attribute name="Price" type="apx:Pricedecimal" use="optional"/>
	</xs:complexType>
	<!--  SelfScheduleType -->
	<xs:complexType name="SelfScheduleType">
    <xs:attribute name="IntervalEndGmt" type="xs:dateTime" use="required">
      <xs:annotation>
        <xs:documentation source="ISO local interval ending time converted to GMT"/>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="MW" type="apx:MWdecimal" use="optional"/>
		<xs:attribute name="Price" type="apx:Pricedecimal" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only (post-market price). Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
			<xs:annotation>
				<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<!-- MarketScheduleType-->
	<xs:complexType name="MarketScheduleType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="Curve">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="CurvePoint" type="apx:BidCurve" maxOccurs="16"/>
					</xs:sequence>
					<xs:attribute name="LinkedHours" type="apx:NonEmptyString" use="optional"/>
					<xs:attribute name="CurveType" type="apx:CurveType" use="optional"/>
          <xs:attribute name="IntervalEndGmt" type="xs:dateTime" use="required">
            <xs:annotation>
				      <xs:documentation source="ISO local interval ending time converted to GMT"/>
			      </xs:annotation>
          </xs:attribute>
          <xs:attribute name="CoOptimizedWithAS" type="xs:boolean" use="optional"/>
          <xs:attribute name="Reason" type="apx:NonEmptyString" use="optional"/>
          <xs:attribute name="Status" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="Message" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound methods only. Do not Submit</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!-- SubmitBid -->
	<xs:complexType name="BidsOffers">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="SelfSchedule">
				<xs:complexType>
					<xs:sequence minOccurs="0" maxOccurs="unbounded">
						<xs:element name="Schedule" type="apx:SelfScheduleType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="MarketSchedule">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="apx:MarketScheduleType">
							<xs:attribute name="LinkedOfferID" type="apx:NonEmptyString" use="optional"/>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:choice>
    <xs:attribute name="MarketParticipant" type="apx:NonEmptyString" use="required"/>
    <xs:attribute name="IntervalLength" use="optional" default="PT1H">
			<xs:simpleType>
				<xs:restriction base="xs:duration">
					<xs:enumeration value="PT5M"/>
					<xs:enumeration value="PT15M"/>
					<xs:enumeration value="PT1H"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Transaction" type="xs:string" use="required"/>
		<xs:attribute name="Location" type="apx:NonEmptyString" use="required"/>
    <xs:attribute name="SinkLocation" type="apx:NonEmptyString" use="optional">
      <xs:annotation>
        <xs:documentation>Only use for source/sink transactions</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LinkId" type="apx:NonEmptyString" use="optional"/>
    <xs:attribute name="WheelId" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ReferenceCode" type="apx:NonEmptyString" use="optional">
    <xs:annotation>
      <xs:documentation>Used to identify the Schedule ID in PJM and ISONE</xs:documentation>
    </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SupportingResource" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="NERCTag" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ExternalId" type="apx:NonEmptyString" use="optional"/>
		<xs:attribute name="ExpirationDateTime" type="xs:dateTime" use="optional"/>
    <xs:attribute name="MultiHourBlock" type="apx:NonEmptyString" use="optional"/>
    <xs:attribute name="OasisId" type="apx:NonEmptyString" use="optional"/>
  </xs:complexType>
  
	<!-- Common API parent element-->
	<xs:complexType name="Header">
    <xs:choice minOccurs="0" maxOccurs="1">
			<xs:element name="MarketBidData">
				<xs:complexType>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element name="BidsOffers" type="apx:BidsOffers"/>
						<xs:element name="ResourceParameters" type="apx:ResourceParameters"/>
					</xs:choice>
          <xs:attribute name="Date" type="xs:date" use="required"/>
          <xs:attribute name="EndDate" type="xs:date" use="optional"/>
				</xs:complexType>
			</xs:element>
      <xs:element name="MarketTradeData">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="BilateralSchedules" type="apx:BilateralSchedules"/>
          </xs:choice>
          <xs:attribute name="Date" type="xs:date" use="required"/>
          <xs:attribute name="EndDate" type="xs:date" use="optional"/>
        </xs:complexType>
      </xs:element>
    </xs:choice>
		<xs:attribute name="Version" type="xs:decimal" use="optional" default="2.1"/>
		<xs:attribute name="SourceSystem" type="apx:NonEmptyString" use="required"/>
		<xs:attribute name="CreateDate" type="xs:dateTime" use="required"/>
    <xs:attribute name="Region" type="apx:Region" use="required"/>
  </xs:complexType>
  
	<!-- Entry Points:-->
	<!-- Submit should not include status elements -->
	<xs:element name="Submit">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="apx:Header">
					<xs:attribute name="SubmitToISO" type="xs:boolean" use="optional" default="false"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<!-- Result includes status elements -->
	<xs:element name="Response">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="apx:Header">
					<xs:attribute name="FileStatus" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound GetStatus responses only. Do not Submit or expect in GetScheduleData responses</xs:documentation>
						</xs:annotation>
					</xs:attribute>
					<xs:attribute name="MarketStatus" type="apx:NonEmptyString" use="optional">
						<xs:annotation>
							<xs:documentation>Used by Outbound GetScheduleData responses only. Do not Submit or expect in GetStatus responses</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
  
</xs:schema>

APXScheduleAPI XSD
APXParameterSet XSD
ScheduleData XSD