<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="HolidayXML_v2" targetNamespace="http://doug.setzer.development/HolidayXML_v2.xsd" elementFormDefault="qualified" xmlns="http://doug.setzer.development/HolidayXML_v2.xsd" xmlns:mstns="http://doug.setzer.development/HolidayXML_v2.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="HolidayXMLType">
    <xs:sequence>
      <xs:element name="Holiday" type="HolidayType" minOccurs="1" maxOccurs="unbounded" nillable="false" />
      <xs:element name="YearSpecificHolidays" type="YearSpecificHolidaysType" minOccurs="0" maxOccurs="1" />
    </xs:sequence>
    <xs:attribute name="CountryCode" type="CountryCodeType" use="required" />
  </xs:complexType>
  <xs:complexType name="HolidayType">
    <xs:sequence>
      <xs:element name="Code" type="xs:string" maxOccurs="1" minOccurs="1" nillable="false" />
      <xs:element name="Descriptor" maxOccurs="1" minOccurs="1" type="xs:string" />
      <xs:element name="HolidayType" type="HolidayTypeType" minOccurs="1" maxOccurs="1" />
      <xs:element name="BankHoliday" type="BankHolidayType" maxOccurs="1" minOccurs="1" nillable="false" />
      <xs:element name="HolidayDateType" type="HolidayDateTypeType" maxOccurs="1" minOccurs="1" nillable="false" />
      <xs:element name="RelatedActualHolidayCode" type="xs:string" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="Rules" type="RulesType" />
      <xs:element name="Links" type="LinksType" minOccurs="0" maxOccurs="1" />
      <xs:element name="Notes" type="xs:string" minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="HolidayTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Notable" />
      <xs:enumeration value="Religious" />
      <xs:enumeration value="NotableReligious" />
      <xs:enumeration value="Other" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="BankHolidayType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Recognized" />
      <xs:enumeration value="NotRecognized" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="HolidayDateTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Observed" />
      <xs:enumeration value="Actual" />
      <xs:enumeration value="ObservedActual" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="SetDayRuleType">
    <xs:sequence>
      <xs:element name="Month" type="xs:int" maxOccurs="1" minOccurs="1" nillable="false" />
      <xs:element name="Day" type="xs:int" maxOccurs="1" minOccurs="1" nillable="false" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="RulesType">
    <xs:sequence>
      <xs:element name="YearOverrides" type="YearOverridesType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="SetDayRule" type="SetDayRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="EasterRule" type="EasterRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="DaysOffsetFromHolidayRule" type="DaysOffsetFromHolidayRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="OccurrenceOfWeekdayInMonthRule" type="OccurrenceOfWeekdayInMonthRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="OccurrenceOfWeekdayAfterHolidayRule" type="OccurrenceOfWeekdayAfterHolidayRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="OccurrenceOfWeekdayBeforeDateRule" type="OccurrenceOfWeekdayBeforeDateRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="WeekendObservedForActualRule" type="WeekendObservedForActualRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="WeekendMondayObservedForActualRule" type="WeekendMondayObservedForActualRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="LastOccurrenceOfWeekdayRule" type="LastOccurrenceOfWeekdayRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="NonWeekendDaysOffsetFromHolidayRule" type="NonWeekendDaysOffsetFromHolidayRuleType" maxOccurs="1" minOccurs="0" nillable="false" />
      <xs:element name="ApplicableRegions" type="ApplicableRegionsType" minOccurs="0" maxOccurs="1" nillable="false" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="HolidayXML" type="HolidayXMLType">
  </xs:element>
  <xs:simpleType name="CountryCodeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Canada" />
      <xs:enumeration value="GreatBritain" />
      <xs:enumeration value="IrelandNorthern" />
      <xs:enumeration value="IrelandRepublicOf" />
      <xs:enumeration value="Scotland" />
      <xs:enumeration value="UnitedStates" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="EasterRuleType">
    <xs:restriction base="xs:string" />
  </xs:simpleType>
  <xs:complexType name="DaysOffsetFromHolidayRuleType">
    <xs:sequence>
      <xs:element name="Code" type="xs:string" />
      <xs:element name="Offset" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="OccurrenceOfWeekdayInMonthRuleType">
    <xs:sequence>
      <xs:element name="OccurrenceNumber" type="xs:int" />
      <xs:element name="DayOfWeek" type="DayOfWeekType" />
      <xs:element name="Month" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="OccurrenceOfWeekdayAfterHolidayRuleType">
    <xs:sequence>
      <xs:element name="OccurrenceNumber" type="xs:int" />
      <xs:element name="DayOfWeek" type="DayOfWeekType" />
      <xs:element name="Code" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="OccurrenceOfWeekdayBeforeDateRuleType">
    <xs:sequence>
      <xs:element name="OccurrenceNumber" type="xs:int" />
      <xs:element name="DayOfWeek" type="DayOfWeekType" />
      <xs:element name="Month" type="xs:int" />
      <xs:element name="Day" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="DayOfWeekType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Sunday" />
      <xs:enumeration value="Monday" />
      <xs:enumeration value="Tuesday" />
      <xs:enumeration value="Wednesday" />
      <xs:enumeration value="Thursday" />
      <xs:enumeration value="Friday" />
      <xs:enumeration value="Saturday" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="WeekendObservedForActualRuleType">
    <xs:sequence>
      <xs:element name="Code" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LastOccurrenceOfWeekdayRuleType">
    <xs:sequence>
      <xs:element name="DayOfWeek" type="DayOfWeekType" />
      <xs:element name="Month" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="YearOverrideType">
    <xs:sequence>
      <xs:element name="OverrideDate" type="xs:date" />
    </xs:sequence>
    <xs:attribute name="Year" type="xs:int" />
  </xs:complexType>
  <xs:complexType name="YearOverridesType">
    <xs:sequence>
      <xs:element name="YearOverride" type="YearOverrideType" minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="WeekendMondayObservedForActualRuleType">
    <xs:sequence>
      <xs:element name="Code" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="NonWeekendDaysOffsetFromHolidayRuleType">
    <xs:sequence>
      <xs:element name="Code" type="xs:string" />
      <xs:element name="Offset" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="YearHolidayType">
    <xs:sequence>
      <xs:element name="Holiday" type="HolidayType" />
    </xs:sequence>
    <xs:attribute name="Year" type="xs:int" />
  </xs:complexType>
  <xs:complexType name="YearSpecificHolidaysType">
    <xs:sequence>
      <xs:element name="YearHoliday" type="YearHolidayType" minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LinkType">
    <xs:sequence>
      <xs:element name="Url" type="xs:string" />
      <xs:element name="Caption" type="xs:string" />
      <xs:element name="Notes" type="xs:string" minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LinksType">
    <xs:sequence>
      <xs:element name="Link" type="LinkType" minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="RegionType">
    <xs:sequence>
      <xs:element name="RegionCode" type="xs:string" />
      <xs:element name="Description" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ApplicableRegionsType">
    <xs:sequence>
      <xs:element name="Region" type="RegionType" minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>
