﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="poly">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" name="pt">
        <xs:complexType>
          <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:attribute name="stroke" type="xs:string" use="required" />
    <xs:attribute name="thickness" type="xs:decimal" use="required" />
    <xs:attribute name="opacity" type="xs:decimal" use="required" />
    <xs:attribute name="fill" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="textblock">
    <xs:attribute name="left" type="xs:decimal" use="required" />
    <xs:attribute name="top" type="xs:decimal" use="required" />
    <xs:attribute name="fontsize" type="xs:unsignedByte" use="required" />
    <xs:attribute name="opacity" type="xs:decimal" use="required" />
    <xs:attribute name="content" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="region">
    <xs:sequence>
      <xs:element minOccurs="0" name="poly" type="poly" />
      <xs:element minOccurs="0" name="textblock" type="textblock" />
    </xs:sequence>
    <xs:attribute name="kind" type="xs:string" use="required" />
    <xs:attribute name="name" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="data">
    <xs:attribute name="pop" type="xs:unsignedInt" use="required" />
    <xs:attribute name="popWh" type="xs:unsignedInt" use="required" />
    <xs:attribute name="popBl" type="xs:unsignedInt" use="required" />
    <xs:attribute name="popNa" type="xs:unsignedInt" use="required" />
    <xs:attribute name="popAs" type="xs:unsignedInt" use="required" />
    <xs:attribute name="popOt" type="xs:unsignedInt" use="required" />
    <xs:attribute name="popHi" type="xs:unsignedInt" use="required" />
    <xs:attribute name="medinc" type="xs:unsignedInt" use="required" />
  </xs:complexType>

  <xs:complexType name="cd">
    <xs:sequence>
      <xs:element name="data" type ="data" />
      <xs:element name="poly" type="poly" />
      <xs:element minOccurs="0" name="textblock" type="textblock" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:unsignedByte" use="required" />
  </xs:complexType>

  <xs:element name="redistrictingmaps">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="canvas">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="poly" type="poly"/>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="cd" type="cd" />
              <xs:element minOccurs="0" maxOccurs="unbounded" name="region" type="region" />
            </xs:sequence>
            <xs:attribute name="height" type="xs:decimal" use="required" />
            <xs:attribute name="width" type="xs:decimal" use="required" />
            <xs:attribute name="background" type="xs:string" use="required" />
            <xs:attribute name="origX" type="xs:decimal" use="required" />
            <xs:attribute name="origY" type="xs:decimal" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element name="maps">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="map">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="area">
                      <xs:complexType>
                        <xs:attribute name="scale" type="xs:decimal" use="required" />
                        <xs:attribute name="centerX" type="xs:decimal" use="required" />
                        <xs:attribute name="centerY" type="xs:decimal" use="required" />
                        <xs:attribute name="rectwidth" type="xs:decimal" use="required" />
                        <xs:attribute name="rectheight" type="xs:decimal" use="required" />
                        <xs:attribute name="rectX" type="xs:decimal" use="required" />
                        <xs:attribute name="rectY" type="xs:decimal" use="required" />
                        <xs:attribute name="singleCD" type="xs:byte" use="required" />
                        <xs:attribute name="showCounties" type="xs:boolean" use="required" />
                        <xs:attribute name="showCities" type="xs:boolean" use="required" />
                        <xs:attribute name="showOldCDs" type="xs:boolean" use="required" />
                        <xs:attribute name="showNewCDLabels" type="xs:boolean" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="state">
                      <xs:complexType>
                        <xs:attribute name="showCounties" type="xs:boolean" use="required" />
                        <xs:attribute name="showCities" type="xs:boolean" use="required" />
                        <xs:attribute name="showOldCDs" type="xs:boolean" use="required" />
                        <xs:attribute name="showNewCDLabels" type="xs:boolean" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:choice>
                  <xs:attribute name="kind" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>