<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
   targetNamespace="http://www.fgdc.gov/framework/073004/hydro"
   xmlns:hyd="http://www.fgdc.gov/framework/073004/hydro"
   xmlns:lrs="http://www.fgdc.gov/framework/073004/lrs"
   xmlns:fw="http://www.fgdc.gov/framework/073004"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:gml="http://www.opengis.net/gml"
   xmlns:gmlsf="http://www.opengis.net/gmlsf"
   elementFormDefault="qualified"
   version="0.0.4">

   <xs:annotation>
      <xs:appinfo source="http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsfLevels.xsd">
         <gmlsf:ConformanceLevel>1</gmlsf:ConformanceLevel>
         <gmlsf:GMLProfileSchema>http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd</gmlsf:GMLProfileSchema>
      </xs:appinfo>
   </xs:annotation>

   <xs:import namespace="http://www.opengis.net/gml"
       schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
   <xs:import namespace="http://www.opengis.net/gmlsf"
       schemaLocation="http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsfLevels.xsd"/>
   <xs:import namespace="http://www.fgdc.gov/framework/073004"
       schemaLocation="Framework.xsd"/>
   <xs:import namespace="http://www.fgdc.gov/framework/073004/lrs"
       schemaLocation="LinearReferenceSystems.xsd"/>

   <xs:include schemaLocation="HydroTypes.xsd"/>

   <!-- ================================================================= -->
   <!-- HYDRO COLLECTION                                                  -->
   <!-- ================================================================= -->
   <xs:element name="HydroCollection"
               type="hyd:HydroCollectionType"
               substitutionGroup="gml:_Feature"/>
   <xs:complexType name="HydroCollectionType">
      <xs:complexContent>
         <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
               <xs:element name="metadata"
                           type="xs:anyURI"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="member"
                           type="gml:ReferenceType"
                           minOccurs="1" maxOccurs="unbounded">
                  <xs:annotation>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroComplex/@gml:id</xs:appinfo>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroElement/@gml:id</xs:appinfo>
                  </xs:annotation>
               </xs:element>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <!-- ================================================================= -->
   <!-- HYDRO COMPLEX                                                     -->
   <!-- ================================================================= -->
   <xs:element name="HydroComplex"
               type="hyd:HydroComplexType"
               substitutionGroup="gml:_Feature"/>
   <xs:complexType name="HydroComplexType">
      <xs:complexContent>
         <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
               <xs:element name="featureId"
                           type="fw:IdentifierPropertyType"/>
               <xs:element name="linkedResource"
                           type="fw:ExternalResourcePropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="metadata"
                           type="xs:anyURI"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="featureDate" type="xs:date"/>
               <xs:element name="name"
                           type="hyd:NamePropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="measure"
                           type="hyd:MeasurementPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="representation"
                           type="hyd:RepresentationPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="attribute"
                           type="fw:ExtendedAttributePropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="relatedTo"
                           type="hyd:FeatureRelationshipPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="event"
                           type="gml:ReferenceType"
                           minOccurs="0" maxOccurs="unbounded">
                  <xs:annotation>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:UnmeasuredEvent/@gml:id</xs:appinfo>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:MeasuredEvent/@gml:id</xs:appinfo>
                  </xs:annotation>
               </xs:element>
               <!-- ======================================================= -->
               <xs:element name="compositeType"
                           minOccurs="1" maxOccurs="1">
                  <xs:annotation>
                  <xs:appinfo
                      source="./Dictionaries/CompositeTypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="element"
                           type="gml:ReferenceType"
                           minOccurs="1" maxOccurs="unbounded">
                  <xs:annotation>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroElement/@gml:id</xs:appinfo>
                  </xs:annotation>
               </xs:element>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <!-- ================================================================= -->
   <!-- HYDRO ELEMENT                                                     -->
   <!-- ================================================================= -->
   <xs:element name="HydroElement"
               type="hyd:HydroElementType"
               substitutionGroup="gml:_Feature"/>
   <xs:complexType name="HydroElementType">
      <xs:complexContent>
         <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
               <xs:element name="featureId"
                           type="fw:IdentifierPropertyType"/>
               <xs:element name="linkedResource"
                           type="fw:ExternalResourcePropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="metadata"
                           type="xs:anyURI"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="featureDate" type="xs:date"/>
               <xs:element name="name"
                           type="hyd:NamePropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="measure"
                           type="hyd:MeasurementPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="representation"
                           type="hyd:RepresentationPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="attribute"
                           type="fw:ExtendedAttributePropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="relatedTo"
                           type="hyd:FeatureRelationshipPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="event"
                           type="gml:ReferenceType"
                           minOccurs="0" maxOccurs="unbounded">
                  <xs:annotation>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:UnmeasuredEvent/@gml:id</xs:appinfo>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:MeasuredEvent/@gml:id</xs:appinfo>
                  </xs:annotation>
               </xs:element>
               <!-- ====================================================== -->
               <xs:element name="featureType">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/HydroFeatureTypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="featureCode" minOccurs="0" maxOccurs="1">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/HydroFeatureCodeTypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="geometry"
                           type="gml:GeometryPropertyType"
                           minOccurs="1" maxOccurs="1"/>
               <xs:element name="flowDirection"
                           minOccurs="0" maxOccurs="1">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/FlowCodeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <!-- ====================================================== -->
               <xs:element name="computedNetworkValues"
                           type="hyd:ComputedNetworkValuesPropertyType"
                           minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <!-- ================================================================= -->
   <!-- UNMEASUREDEVENT                                                   -->
   <!-- ================================================================= -->
   <xs:element name="UnmeasuredEvent"
               type="hyd:UnmeasuredEventType"
               substitutionGroup="gml:_Feature"/>
   <xs:complexType name="UnmeasuredEventType">
      <xs:complexContent>
         <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
               <xs:element name="date" type="xs:date"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="eventID"
                           type="fw:IdentifierPropertyType"/>
               <xs:element name="relatedURL"
                           type="fw:ExternalResourcePropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="metadata"
                           type="xs:anyURI"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="eventType">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/EventTypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="dataType">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/DatatypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="eventValue" type="xs:string"/>
               <xs:element name="location" type="gml:GeometryPropertyType"
                           minOccurs="1" maxOccurs="1"/>
               <xs:element name="measure"
                           type="hyd:MeasurementPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="attribute"
                           type="fw:ExtendedAttributePropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="feature"
                           type="gml:ReferenceType"
                           minOccurs="1" maxOccurs="unbounded">
                  <xs:annotation>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroComplex/@gml:id</xs:appinfo>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroElement/@gml:id</xs:appinfo>
                  </xs:annotation>
               </xs:element>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <!-- ================================================================= -->
   <!-- MEASUREDEVENT                                                     -->
   <!-- ================================================================= -->
   <xs:element name="MeasuredEvent"
               type="hyd:MeasuredEventType"
               substitutionGroup="gml:_Feature"/>
   <xs:complexType name="MeasuredEventType">
      <xs:complexContent>
         <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
               <xs:element name="date" type="xs:date"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="eventID"
                           type="fw:IdentifierPropertyType"/>
               <xs:element name="relatedURL"
                           type="fw:ExternalResourcePropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="metadata"
                           type="xs:anyURI"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="eventType">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/EventTypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="dataType">
                  <xs:annotation>
                     <xs:appinfo source="./Dictionaries/DatatypeDictionary.xml"/>
                  </xs:annotation>
                  <xs:complexType>
                     <xs:simpleContent>
                        <xs:restriction base="gml:CodeType">
                           <xs:attribute name="codeSpace"
                                         type="xs:anyURI" use="required"/>
                        </xs:restriction>
                     </xs:simpleContent>
                  </xs:complexType>
               </xs:element>
               <xs:element name="eventValue" type="xs:string"/>
               <xs:element name="location" type="gml:GeometryPropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="measure"
                           type="hyd:MeasurementPropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="attribute"
                           type="fw:ExtendedAttributePropertyType"
                           minOccurs="0" maxOccurs="unbounded"/>
               <xs:element name="feature"
                           type="gml:ReferenceType"
                           minOccurs="1" maxOccurs="unbounded">
                  <xs:annotation>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroComplex/@gml:id</xs:appinfo>
                     <xs:appinfo source="urn:x-gml:targetElement">hyd:HydroElement/@gml:id</xs:appinfo>
                  </xs:annotation>
               </xs:element>
               <!-- ===================================================== -->
               <xs:element name="startPosition"
                           type="lrs:LR_PositionExpressionPropertyType"/>
               <xs:element name="endPosition"
                           type="lrs:LR_PositionExpressionPropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="startOffset"
                           type="lrs:LR_OffsetExpressionPropertyType"
                           minOccurs="0" maxOccurs="1"/>
               <xs:element name="endOffset"
                           type="lrs:LR_OffsetExpressionPropertyType"
                           minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>
</xs:schema>
