<?xml version="1.0"?>

<!--   **********************************************************************   
                                                                           
       location.xsd   

       John L. Schattel          MDL                4 August 2004  
       Red Hat Linux                                Apache Server  

    <xsd:include schemaLocation="http://graphical.weather.gov/xml/DWMLgen/schema/summarizationType.xsd" />

      *************************************************************************   -->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:include schemaLocation="http://graphical.weather.gov/xml/DWMLgen/schema/summarizationType.xsd" />

    <xsd:complexType name="locationType">
        <xsd:sequence>
           <xsd:element name="location-key" type="xsd:string" minOccurs="1" maxOccurs="1" />
           <xsd:element name="description" type="xsd:string" minOccurs="0" maxOccurs="1" />
           <xsd:choice>
              <xsd:element name="point" type="pointType" minOccurs="0" maxOccurs="1" />
              <xsd:element name="nws-zone" type="nws-zoneType" minOccurs="0" maxOccurs="1" />
              <xsd:element name="area" type="areaType" minOccurs="0" maxOccurs="1" />
           </xsd:choice>
           <xsd:element name="city" type="cityType" minOccurs="0" maxOccurs="1" />
           <xsd:element name="area-description" type="xsd:string" minOccurs="0" maxOccurs="1" />
           <xsd:choice>
              <xsd:element name="height" type="heightType" minOccurs="0" maxOccurs="1" />
              <xsd:element name="level" type="levelType" minOccurs="0" maxOccurs="1" />
              <xsd:element name="layer" type="layerType" minOccurs="0" maxOccurs="1" />
           </xsd:choice>
        </xsd:sequence>
     </xsd:complexType>

     <xsd:complexType name="pointType">
         <xsd:attribute name="latitude" type="xsd:decimal" use="required"  />
         <xsd:attribute name="longitude" type="xsd:decimal" use="required"  />
         <xsd:attribute name="summarization" type="summarizationType" use="optional" />
     </xsd:complexType>

     <xsd:complexType name="cityType">
         <xsd:simpleContent>
             <xsd:extension base="xsd:string">
                 <xsd:attribute name="state" type="xsd:string" use="required" />
                 <xsd:attribute name="summarization" type="summarizationType" use="optional" />
             </xsd:extension>
         </xsd:simpleContent>
     </xsd:complexType>

     <xsd:complexType name="nws-zoneType">
         <xsd:simpleContent>
             <xsd:extension base="xsd:string">
                 <xsd:attribute name="state" type="xsd:string" use="required" />
                 <xsd:attribute name="summarization" type="summarizationType" use="optional" />
             </xsd:extension>
         </xsd:simpleContent>
     </xsd:complexType>

     <xsd:complexType name="areaType">
         <xsd:choice>
             <xsd:element name="circle" type="circleType" minOccurs="1" maxOccurs="1" />
             <xsd:element name="rectangle" type="rectangleType" minOccurs="1" maxOccurs="1" />
         </xsd:choice>
         <xsd:attribute name="area-type" use="optional">
            <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="circle" />
                  <xsd:enumeration value="rectangle" />
               </xsd:restriction>
            </xsd:simpleType>
         </xsd:attribute>
     </xsd:complexType>

     <xsd:complexType name="circleType">
         <xsd:sequence>
             <xsd:element name="point" type="pointType" minOccurs="1" maxOccurs="1" />
             <xsd:element name="radius" type="radiusType" minOccurs="1" maxOccurs="1">
             </xsd:element>
         </xsd:sequence>
         <xsd:attribute name="summarization" type="summarizationType" use="optional" />
     </xsd:complexType>

     <xsd:complexType name="radiusType">
        <xsd:attribute name="radius-units" use="required">
           <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                 <xsd:enumeration value="statute miles" />
                 <xsd:enumeration value="kilometers" />
              </xsd:restriction>
           </xsd:simpleType>
        </xsd:attribute>
     </xsd:complexType>

     <xsd:complexType name="rectangleType">
         <xsd:sequence>
             <xsd:element name="point" type="pointType" minOccurs="4" maxOccurs="4" />
         </xsd:sequence>
         <xsd:attribute name="summarization" type="summarizationType" use="optional" />
     </xsd:complexType>

     <xsd:complexType name="heightType">
         <xsd:simpleContent>
             <xsd:extension base="xsd:nonNegativeInteger">
                 <xsd:attribute name="datum" type="datumType" use="required" />
                 <xsd:attribute name="height-units" type="height-unitsType" use="optional" />
             </xsd:extension>
         </xsd:simpleContent>
     </xsd:complexType>

     <xsd:complexType name="levelType">
         <xsd:simpleContent>
             <xsd:extension base="xsd:nonNegativeInteger">
                 <xsd:attribute name="vertical-coordinate" type="xsd:string" use="optional" />
             </xsd:extension>
         </xsd:simpleContent>
     </xsd:complexType>

     <xsd:complexType name="layerType">
         <xsd:simpleContent>
             <xsd:extension base="xsd:nonNegativeInteger">
                 <xsd:attribute name="vertical-coordinate" type="xsd:string" use="optional" />
             </xsd:extension>
         </xsd:simpleContent>
     </xsd:complexType>

     <xsd:simpleType name="datumType">
         <xsd:restriction base="xsd:string">
            <xsd:enumeration value="surface" />
            <xsd:enumeration value="mean sea level" />
         </xsd:restriction>
     </xsd:simpleType>

     <xsd:simpleType name="height-unitsType">
         <xsd:restriction base="xsd:string">
            <xsd:enumeration value="feet" />
            <xsd:enumeration value="meters" />
         </xsd:restriction>
     </xsd:simpleType>

</xsd:schema>
