<?xml version="1.0" encoding="utf-8"?>
<!--
	This file was generated from CWMS Databse Schema Version 99.99.99 at 2023-10-04T19:59:22Z.

	To modify this file, edit the file named "hec-datatypes-template.xsd" used in building the database.
-->
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
           targetNamespace = "https://www.hec.usace.army.mil/xmlSchema/cwms/hec-datatypes"
           xmlns = "https://www.hec.usace.army.mil/xmlSchema/cwms/hec-datatypes"
           elementFormDefault = "unqualified">

    <!--
        #==============#
        # SIMPLE TYPES #
        #==============#
    -->

    <!--
        Empty type to be able to union in to allow optionally empty elements
    -->
  <xs:simpleType name="empty">
    <xs:restriction base="xs:string">
      <xs:length value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="empty" type="empty" -->
    <!--
        Optionally empty double (allows element tag without data)
    -->
  <xs:simpleType name="opt-double">
    <xs:union memberTypes="xs:double empty"/>
  </xs:simpleType>
  <!-- xs:element name="opt-double" type="opt-double" -->
    <!--
        Start of time window
    -->
  <xs:simpleType name="starttimespec">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(-?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}([.]\d+)?)?([-+]\d{2}:\d{2}|Z)?|$(lookback|start|forecast|simulation)-time)\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="starttimespec" type="starttimespec" -->
  <!--
        End of time window
    -->
  <xs:simpleType name="endtimespec">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(-?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}([.]\d+)?)?([-+]\d{2}:\d{2}|Z)?|$(start|forecast|simulation|end)-time)\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="endtimespec" type="endtimespec" -->
  <!--
        Internet host address = IP (V4 or V6) address or DNS name
    -->
  <xs:simpleType name="inet-host-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(\d{1,3}[.]){3}\d{1,3}|([a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}|([a-fA-F0-9]{1,4}:){1,7}:|:(:[a-fA-F0-9]{1,4}){1,7}|([a-fA-F0-9]{1,4}:){1,6}(:[a-fA-F0-9]{1,4}){1}|([a-fA-F0-9]{1,4}:){1,5}(:[a-fA-F0-9]{1,4}){1,2}|([a-fA-F0-9]{1,4}:){1,4}(:[a-fA-F0-9]{1,4}){1,3}|([a-fA-F0-9]{1,4}:){1,3}(:[a-fA-F0-9]{1,4}){1,4}|([a-fA-F0-9]{1,4}:){1,2}(:[a-fA-F0-9]{1,4}){1,5}|([a-fA-F0-9]{1,4}:){1}(:[a-fA-F0-9]{1,4}){1,6}|([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z-][a-zA-Z0-9-]*[a-zA-Z0-9][.])*[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z-][a-zA-Z0-9-]*[a-zA-Z0-9]"/>
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="inet-host" type="inet-host-type" -->
  <!--
        Internet port address = 1 - 65535
    -->
  <xs:simpleType name="inet-port-type">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="65535"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="inet-port" type="inet-port-type" -->
  <!--
        16-character id
    -->
  <xs:simpleType name="id16-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="16"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="id16" type="id16-type" -->
  <!--
        32-character id
    -->
  <xs:simpleType name="id32-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="32"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="id32" type="id32-type" -->
  <!--
        40-character text
    -->
  <xs:simpleType name="text40-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="40"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="text40" type="text40-type" -->
  <!--
        49-character text
    -->
  <xs:simpleType name="text49-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="49"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="text49" type="text49-type" -->
  <!--
        80-character text
    -->
  <xs:simpleType name="text80-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="80"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="text80" type="text80-type" -->
  <!--
        256-character text
    -->
  <xs:simpleType name="text256-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="256"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="text256" type="text256-type" -->
  <!--
        512-character text
    -->
  <xs:simpleType name="text512-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="512"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="text512" type="text512-type" -->
  <!--
        office name
    -->
  <xs:simpleType name="office-name-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="80"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="office-name" type="office-name-type" -->
  <!--
        time zone name
    -->
  <xs:simpleType name="time-zone-name-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="28"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="time-zone-name" type="time-zone-name-type" -->
  <!--
        time zone usage
    -->
  <xs:simpleType name="time-zone-usage-type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Standard"/>
      <xs:enumeration value="Daylight"/>
      <xs:enumeration value="Local"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="time-zone-usage" type="time-zone-usage-type" -->
  <!--
        file pathname
    -->
  <xs:simpleType name="file-pathname-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="([a-zA-Z]:|(//|\\\\)([^/\\]+|[$][a-zA-Z0-9_]+))?[/\\]?([^/\\]+|[$][a-zA-Z0-9_]+)([/\\]([^/\\]+|[$][a-zA-Z0-9_]+))*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="file-pathname" type="file-pathname-type" -->
  <!--
        hec-dss pathname
    -->
  <xs:simpleType name="dss-pathname-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*/([^/]{0,64}/){6}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-pathname" type="dss-pathname-type" -->
  <!--
        hec-dss time-series pathname
    -->
  <xs:simpleType name="dss-ts-pathname-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*/[^/]{0,64}(/[^/]{1,64}){2}/(\d{2}(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|)\d{4})?/(~?(([123456]|1[025]|[23]0)MIN|([123468]|12)HOUR|1(DAY|WEEK|MON|YEAR)|(SEMI-|TRI-)MONTH)|IR-(DAY|MONTH|YEAR|DECADE|CENTURY))/[^/]{0,64}/\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-ts-pathname" type="dss-ts-pathname-type" -->
  <!--
        hec-dss rating pathname
    -->
  <xs:simpleType name="dss-rating-pathname-type">
    <xs:annotation>
      <xs:documentation>
        Normal paired-data pathname = //location/ind_param-dep_param/date//version/
        Normal CWMS rating pathname = /office/location/ind_param(,ind_param)*;dep_param//template_ver/spec_ver/
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*/[^/]{0,64}/[^/]{1,64}/([^/]*[^/-]+-[^/-]+[^/]*|[^/,;]+(,[^/,;]+)*;[^/,;]+)(/[^/]{0,64}){3}/\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-rating-pathname" type="dss-rating-pathname-type" -->
  <!--
        hec-dss grid pathname
    -->
  <xs:simpleType name="dss-grid-pathname-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(/[^/]{1,64}){3}(/(\d{2}(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|)\d{4}:([01]\d|2[0-4])[0-5]\d)?){2}/[^/\\]{1,64}/\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-grid-pathname" type="dss-grid-pathname-type" -->
  <!--
        hec-dss location level pathname
    -->
  <xs:simpleType name="dss-location-level-pathname-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*/[^/]{0,64}(/[^/]{1,64}){4}/[^/]{0,64}/\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-location-level-pathname" type="dss-location-level-pathname-type" -->
  <!--
        hec-dss units
    -->
  <xs:simpleType name="dss-units-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="16"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-units" type="dss-units-type" -->
  <!--
        hec-dss timeseries data types
    -->
  <xs:simpleType name="dss-parameter-type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="INST-VAL"/>
      <xs:enumeration value="INST-CUM"/>
      <xs:enumeration value="PER-CUM"/>
      <xs:enumeration value="PER-AVER"/>
      <xs:enumeration value="PER-MIN"/>
      <xs:enumeration value="PER-MAX"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-parameter" type="dss-parameter-type" -->
  <!--
        horizontal datum type
    -->
  <xs:simpleType name="horizontal-datum-type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NAD-27"/>
      <xs:enumeration value="WGS-84/NAD-83"/>
      <xs:enumeration value="OTHER"/>
      <xs:enumeration value="UNKNOWN"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="horizontal-datum" type="horizontal-datum-type" -->
  <!--
        vertical datum type
    -->
  <xs:simpleType name="vertical-datum-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="NGVD[ -]?29|NAVD[ -]?88|OTHER|UNKNOWN"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="vertical-datum" type="vertical-datum-type" -->
  <!--
        latitude (decimal)
    -->
  <xs:simpleType name="latitude-decimal-type">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="-90.0"/>
      <xs:maxInclusive value="90.0"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="latitude-decimal" type="latitude-decimal-type" -->
  <!--
        latitude (integer)
    -->
  <xs:simpleType name="latitude-integer-type">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="-90"/>
      <xs:maxInclusive value="90"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="latitude-integer" type="latitude-integer-type" -->
  <!--
        longitude (decimal)
    -->
  <xs:simpleType name="longitude-decimal-type">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="-180.0"/>
      <xs:maxInclusive value="180.0"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="longitude-decimal" type="longitude-decimal-type" -->
  <!--
        longitude (integer)
    -->
  <xs:simpleType name="longitude-integer-type">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="-180"/>
      <xs:maxInclusive value="180"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="longitude-integer" type="longitude-integer-type" -->
  <!--
        dms/hms integer
    -->
  <xs:simpleType name="dms-integer-type">
    <xs:restriction base="xs:nonNegativeInteger">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="59"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dms-integer" type="dms-integer-type" -->
  <!--
        dms/hms float
    -->
  <xs:simpleType name="dms-float-type">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0."/>
      <xs:maxExclusive value="60."/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dms-float" type="dms-float-type" -->
  <!--
        day-of-year
    -->
  <xs:simpleType name="day-of-year-type">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="365"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="day-of-year" type="day-of-year-type" -->
  <!--
        cwms unit
    -->
  <xs:simpleType name="cwms-unit-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="($|$/KAF|$/kaf|$/mcm|%|1/ft|1/m|1000 ac-ft|1000 ac-ft/mon|1000 cfs|1000 cfs-day|1000 cms|1000 cu m|1000 cu-ft/sec|1000 dsf|1000 ft3/sec|1000 gallon|1000 gallons|1000 M2|1000 m2|1000 m3|1000 M3|1000 sfd|1000 sq m|1000 sq meters|1000000 m3|AC-FT|ac-ft|ACFT|acft|ACRE|acre|acre-feet|acre-ft|ACRES|acres|AMP|amp|Amp|Ampere|AMPERE|ampere|Amperes|AMPERES|amperes|AMPS|amps|Amps|ATM|atm|atmosphere|ATMOSPHERE|atmospheres|ATMOSPHERES|B|b|b-unit|B-UNIT|bar|BAR|BARS|bars|b_unit|B_UNIT|C|C-day|cal|calorie|calories|CELSIUS|celsius|Celsius|Centigrade|CENTIGRADE|centimeter|centimeters|cfs|CFS|cfs-day|cfs/mi2|cm|cm/day|cm2|cms|CMS|cms/km2|cu ft|cu km|cu m|cu meter|cu meters|cu mile|cu miles|cu-ft/sec|cu-meters/sec|cubic feet|cubic meters|cuft/sec|cusecs|cycles/s|cycles/sec|day|DAY|days|DAYS|deg|DEG C|deg c|deg C|deg f|DEG F|deg F|DEG-C|Deg-C|Deg-F|DEG-F|DegC|degC|DEGC-D|degC-day|degF|DegF|DEGF|DEGF-D|degF-day|dsf|DSF|F|F-day|FAHRENHEIT|fahrenheit|Fahrenheit|FEET|feet|Feet|FNU|fnu|foot|fps|FT|ft|ft/hr|FT/S|ft/s|ft/sec|ft2|ft2/s|ft3|ft3/s|FT3/S|ft3/sec|FT3/SEC|ftUS|ft^3/s|g|g/cm3|g/l|g/m3|gal|GAL|Gal/min|gallon|gallons|gallons per minute|gm|gm/cm3|gm/l|gm/m3|gpm|GPM|grams per liter|grams/liter|GW|GWH|GWh|ha|hectare|hectares|HOUR|hour|HOURS|hours|HR|hr|hz|HZ|Hz|IN|in|in-hg|in/day|in/deg-d|in/deg-day|in/hr|inch|Inch|INCHES|inches|J|J/m2|JOULE|joule|JOULES|joules|JTU|jtu|K|k|k$|K$|KAF|kaf|KAF/mon|kcfs|KCFS|kcfs-day|KCMS|kcms|KDSF|kdsf|kelvin|KELVIN|kelvins|KELVINS|kg|kgal|KGAL|khz|KHz|kHz|KHZ|kilometer|kilometers|km|km2|km3|kN/m2|knot|knots|kPa|kph|ksecond-foot-day|KSFD|ksfd|kt|KW|kW|KWH|kWh|langley|langley/min|lb|lb/ft3|lbf|lbm|lbm/ft3|lbs|lbs/ft3|lbs/sqin|m|m/hr|m/s|M/S|m2|M2|m2/s|M3|m3|m3/s|M3/S|m3/sec|M3/SEC|mb|mbar|mbars|mcm|mcm/mon|megajoule|MEGAJOULE|MEGAJOULES|megajoules|METER|meter|meters|METERS|meters per second|METERS PER SECOND|metre|METRE|METRES|metres|mg|mg/L|MG/L|mg/l|MGAL|mgal|mgd|MGD|mho|mhz|mHz|MHZ|MHz|mi|mi2|micrograms|micrograms/L|micrograms/l|mile|Mile|mile2|mile3|miles|miles per hour|MILES PER HOUR|millgrams/liter|millibar|millibars|milligrams per liter|millimeter|millimeters|million gallon|million gallons/day|millon gallons|MIN|min|MINUTE|minute|MINUTES|minutes|MJ|mm|MM|mm-hg|mm/day|mm/deg-d|mm/deg-day|mm/hr|MPH|mph|mps|MPS|MW|MWH|MWh|N|n/a|newton|newtons|ntu|NTU|PERCENT|percent|POUNDS|pounds|ppm|psi|rad|rev|rev/min|revolutions per minute|rpm|S|SEC|sec|second|SECOND|second-foot-day|SECONDS|seconds|SFD|sfd|sq ft|sq km|sq m|sq meter|sq meters|sq mi|sq mile|sq miles|sq.km|sqkm|square feet|square meters|square miles|su|survey feet|SURVEY FEET|survey foot|SURVEY FOOT|TGAL|tgal|ton|ton/day|tonne|tonne/day|TW|TWH|TWh|ug|ug/l|umho|UMHO/CM|umho/cm|UMHOS/CM|umhos/cm|unit|uS|VOLT|Volt|volt|Volts|volts|VOLTS|W|W/m2|Wh|WH)"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-unit" type="cwms-unit-type" -->
  <!--
        cwms grid type
    -->
  <xs:simpleType name="cwms-gridtype-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(HRAP|SHG)"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-gridtype" type="cwms-gridtype-type" -->
  <!--
        cwms location
    -->
  <xs:simpleType name="cwms-location-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="[^.-]{1,16}(-[^.]{1,40})?"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-location" type="cwms-location-type" -->
  <!--
        cwms base parameter
    -->
  <xs:simpleType name="cwms-base-parameter-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-base-parameter" type="cwms-base-parameter-type" -->
  <!--
        cwms parameter
    -->
  <xs:simpleType name="cwms-parameter-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-parameter" type="cwms-parameter-type" -->
  <!--
        cwms parameter type
    -->
  <xs:simpleType name="cwms-paramtype-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(Total|Max|Min|Const|Ave|Inst)"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-paramtype" type="cwms-paramtype-type" -->
  <!--
        cwms interval
    -->
  <xs:simpleType name="cwms-interval-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|10Minutes|~1Minute|~2Minutes|~3Minutes|~4Minutes|~5Minutes|~6Minutes|~8Minutes|~10Minutes|~12Minutes|~15Minutes|~20Minutes|~30Minutes|~1Hour|~2Hours|~3Hours|~4Hours|~6Hours|~8Hours|~12Hours|~1Day|~2Days|~3Days|~4Days|~5Days|~6Days|~1Week|~1Month|~1Year|~1Decade)"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-interval" type="cwms-interval-type" -->
  <!--
        cwms duration
    -->
  <xs:simpleType name="cwms-duration-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-duration" type="cwms-duration-type" -->
  <!--
        cwms time series id
    -->
  <xs:simpleType name="cwms-tsid-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.(Total|Max|Min|Const|Ave|Inst)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|10Minutes|~1Minute|~2Minutes|~3Minutes|~4Minutes|~5Minutes|~6Minutes|~8Minutes|~10Minutes|~12Minutes|~15Minutes|~20Minutes|~30Minutes|~1Hour|~2Hours|~3Hours|~4Hours|~6Hours|~8Hours|~12Hours|~1Day|~2Days|~3Days|~4Days|~5Days|~6Days|~1Week|~1Month|~1Year|~1Decade)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)\.[^.]{1,32}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-tsid" type="cwms-tsid-type" -->
  <!--
        cwms math expression (formula)
    -->
  <xs:simpleType name="cwms-math-expression">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*([Aa][Rr][Gg]\d+|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])([Aa][Rr][Gg]\d+|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])*\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-math-expression" type="cwms-math-expression" -->
  <!--
        cwms math expression (formula) with units
    -->
  <xs:simpleType name="cwms-math-expression-with-units">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*([Aa][Rr][Gg]\d+|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])([Aa][Rr][Gg]\d+|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])*\s*\{\s*.{1,32}(\s*,\s*.{1,32})*\s*;\s*.{1,32}\s*\}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-math-expression-with-units" type="cwms-math-expression-with-units" -->
  <!--
        cwms rating parameters
    -->
  <xs:simpleType name="cwms-rating-parameters-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?(,(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?)*;(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-parameters" type="cwms-rating-parameters-type" -->
  <!--
        cwms rating units
    -->
  <xs:simpleType name="cwms-rating-units-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*\{\s*.{1,32}(\s*,\s*.{1,32})*\s*;\s*.{1,32}\s*\}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-units" type="cwms-rating-units-type" -->
  <!--
        cwms rating template
    -->
  <xs:simpleType name="cwms-rating-template-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?(,(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?)*;(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.[^.]{1,32}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-template" type="cwms-rating-template-type" -->
  <!--
        cwms rating spec
    -->
  <xs:simpleType name="cwms-rating-spec-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?(,(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?)*;(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.[^.]{1,32}\.[^.]{1,32}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-spec" type="cwms-rating-spec-type" -->
  <!--
        cwms rating id
    -->
  <xs:simpleType name="cwms-rating-id-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?(,(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?)*;(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.[^.]{1,32}\.[^.]{1,32}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-id" type="cwms-rating-id-type" -->
  <!--
        cwms rating formula
    -->
  <xs:simpleType name="cwms-rating-formula-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(([Ii]\d+)|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])(([Ii]\d+)|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])*\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-formula" type="cwms-rating-formula-type" -->
  <!--
        cwms rating spec with units (for virtual ratings)
    -->
  <xs:simpleType name="cwms-rating-spec-with-units-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?(,(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?)*;(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.[^.]{1,32}\.[^.]{1,32}\s*\{\s*\{\s*.{1,32}(\s*,\s*.{1,32})*\s*;\s*.{1,32}\s*\}\s*\}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-spec-with-units" type="cwms-rating-spec-with-units-type" -->
  <!--
        cwms rating expression with units (for virtual ratings)
    -->
  <xs:simpleType name="cwms-rating-expression-with-units-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(([Ii]\d+)|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])(([Ii]\d+)|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])*\s*\{\s*\{\s*.{1,32}(\s*,\s*.{1,32})*\s*;\s*.{1,32}\s*\}\s*\}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-rating-expression-with-units" type="cwms-rating-expression-with-units-type" -->
  <!--
        cwms grid id
    -->
  <xs:simpleType name="cwms-grid-id-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.-]{1,16}(-[^.]{1,40})?\.(HRAP|SHG)\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.(Total|Max|Min|Const|Ave|Inst)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|10Minutes|~1Minute|~2Minutes|~3Minutes|~4Minutes|~5Minutes|~6Minutes|~8Minutes|~10Minutes|~12Minutes|~15Minutes|~20Minutes|~30Minutes|~1Hour|~2Hours|~3Hours|~4Hours|~6Hours|~8Hours|~12Hours|~1Day|~2Days|~3Days|~4Days|~5Days|~6Days|~1Week|~1Month|~1Year|~1Decade)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)\.[^.]{1,32}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-grid-id" type="cwms-grid-id-type" -->
  <!--
        cwms location level
    -->
  <xs:simpleType name="cwms-location-level-id-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.(Total|Max|Min|Const|Ave|Inst)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)\.[^.]{1,256}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-location-level-id" type="cwms-location-level-id-type" -->
  <!--
        cwms location level attribute
    -->
  <xs:simpleType name="cwms-location-level-attr-id-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.(Total|Max|Min|Const|Ave|Inst)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-location-level-attr-id" type="cwms-location-level-attr-id-type" -->
  <!--
        cwms specified level
    -->
  <xs:simpleType name="cwms-specified-level-id-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*[^.]{1,256}\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-specified-level-id" type="cwms-specified-level-id-type" -->
  <!--
        cwms virtual location level constituent name
    -->
  <xs:simpleType name="cwms-virt-loc-level-constituent-name-type">
    <xs:restriction base="xs:string">
      <xs:pattern value="\s*([^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.(Total|Max|Min|Const|Ave|Inst)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)\.[^.]{1,256}|[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.(Total|Max|Min|Const|Ave|Inst)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|10Minutes|~1Minute|~2Minutes|~3Minutes|~4Minutes|~5Minutes|~6Minutes|~8Minutes|~10Minutes|~12Minutes|~15Minutes|~20Minutes|~30Minutes|~1Hour|~2Hours|~3Hours|~4Hours|~6Hours|~8Hours|~12Hours|~1Day|~2Days|~3Days|~4Days|~5Days|~6Days|~1Week|~1Month|~1Year|~1Decade)\.(1Minute|2Minutes|3Minutes|4Minutes|5Minutes|6Minutes|8Minutes|12Minutes|15Minutes|20Minutes|30Minutes|1Hour|2Hours|3Hours|4Hours|6Hours|8Hours|12Hours|1Day|2Days|3Days|4Days|5Days|6Days|1Week|1Month|1Year|1Decade|0|1MinuteBOP|2MinutesBOP|3MinutesBOP|4MinutesBOP|5MinutesBOP|6MinutesBOP|8MinutesBOP|12MinutesBOP|15MinutesBOP|20MinutesBOP|30MinutesBOP|1HourBOP|2HoursBOP|3HoursBOP|4HoursBOP|6HoursBOP|8HoursBOP|12HoursBOP|1DayBOP|2DaysBOP|3DaysBOP|4DaysBOP|5DaysBOP|6DaysBOP|1WeekBOP|1MonthBOP|1YearBOP|1DecadeBOP|10Minutes|10MinutesBOP|0BOP)\.[^.]{1,32}|[^.-]{1,16}(-[^.]{1,40})?\.(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?(,(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?)*;(%|Area|Binary|Code|Coeff|Conc|Cond|Count|Currency|Current|Depth|DepthVelocity|Dir|Dist|Elev|Energy|Evap|EvapRate|Fish|Flow|Freq|Frost|Head|Height|Irrad|Length|Opening|pH|Power|Precip|Pres|Probability|Rad|Ratio|Rotation|Speed|SpinRate|Stage|Stor|Temp|Text|Thick|Timing|Travel|Turb|TurbF|TurbJ|TurbN|Volt|Volume|Width)(-[^.]{1,32})?\.[^.]{1,32}\.[^.]{1,32}|([Aa][Rr][Gg]\d+|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])([Aa][Rr][Gg]\d+|(\+|-|\*|/|//|%|^)|([Ee]|[Pp][Ii])|([Aa][Bb][Ss]|[Aa][Cc][Oo][Ss]|[Aa][Ss][Ii][Nn]|[Aa][Tt][Aa][Nn]|[Aa][Vv][Gg]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Ee][Xx][Pp]|[Ff][Ll][Oo][Oo][Rr]|[Ff][Mm][Oo][Dd]|[Ii][Nn][Vv]|[Ll][Nn]|[Ll][Oo][Gg]|[Ll][Oo][Gg]10|[Ll][Oo][Gg][Nn]|[Mm][Aa][Xx]|[Mm][Ii][Nn]|[Mm][Ee][Aa][Nn]|[Nn][Ee][Gg]|[Pp][Rr][Oo][Dd]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Ii][Gg][Nn]|[Ss][Ii][Nn]|[Ss][Qq][Rr][Tt]|[Ss][Uu][Mm]|[Tt][Aa][Nn]|[Tt][Rr][Uu][Nn][Cc])|[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?|[() ])*\s*\{\s*.{1,32}(\s*,\s*.{1,32})*\s*;\s*.{1,32}\s*\})\s*"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="cwms-virt-loc-level-constituent-name" type="cwms-virt-loc-level-constituent-name-type" -->
  <!--
        Oracle SID
    -->
  <xs:simpleType name="oracle-sid-type">
    <xs:restriction base="xs:string">
      <xs:maxLength value="64"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="oracle-sid" type="oracle-sid-type" -->
  <!--
        time series store rules
    -->
  <xs:simpleType name="oracle-ts-store-rule-type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="replace-with-non-missing">
      <xs:annotation>
        <xs:documentation>
          Insert values at new times and replace any values at existing times, unless the incoming values are specified as missing
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="replace-all">
      <xs:annotation>
        <xs:documentation>
          Insert values at new times and replace any values at existing times, even if incoming values are specified as missing
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="replace-missing-values-only">
      <xs:annotation>
        <xs:documentation>
          Insert values at new times but do not replace any values at existing times unless the existing values are specified as missing
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="do-not-replace">
      <xs:annotation>
        <xs:documentation>
          Insert values at new times but do not replace any values at existing times
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="delete-insert">
      <xs:annotation>
        <xs:documentation>
          Delete all existing values in time window of incoming data and then insert incoming data
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="oracle-ts-store-rule" type="oracle-ts-store-rule-type" -->

  <xs:simpleType name="dss-regular-ts-store-rule-type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="0-replace-all">
      <xs:annotation>
        <xs:documentation>
          Overwrite every value in the existing data
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="1-replace-missing-values-only">
      <xs:annotation>
        <xs:documentation>
          Don���t overwrite non-missing values in the existing data
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2-replace-all-create">
      <xs:annotation>
        <xs:documentation>
          replace-all + if new data has entire records of missing data, create empty records in existing data
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3-replace-all-delete">
      <xs:annotation>
        <xs:documentation>
          replace-all + if new data has entire records of missing data, delete records from existing data
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4-replace-with-non-missing">
      <xs:annotation>
        <xs:documentation>
          Overwrite every value in the existing data only if replacement is non-missing
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-regular-ts-store-rule" type="dss-regular-ts-store-rule-type" -->

  <xs:simpleType name="dss-irregular-ts-store-rule-type">
    <xs:restriction base="xs:string">
      <xs:enumeration value="0-delete-insert">
      <xs:annotation>
        <xs:documentation>
          Result for time window will be combination of existing and specified data
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="1-merge">
      <xs:annotation>
        <xs:documentation>
          Result for time window will be specified data only
        </xs:documentation>
      </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <!-- xs:element name="dss-irregular-ts-store-rule" type="dss-irregular-ts-store-rule-type" -->
  <!--
        #===============#
        # COMPLEX TYPES #
        #===============#
    -->

    <!--
        Interpolation
    -->
  <xs:complexType name = "interpolate-type">
    <xs:simpleContent>
      <xs:extension base = "xs:nonNegativeInteger">
        <xs:attribute name = "units" use = "required">
          <xs:simpleType>
            <xs:restriction base = "id16-type">
              <xs:enumeration value = "minutes"/>
              <xs:enumeration value = "intervals"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        Office
    -->
  <xs:complexType name="office-type">
    <xs:sequence>
      <xs:element name="name" type="office-name-type"/>
      <xs:element maxOccurs="1" minOccurs="0" name="description" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="id16-type" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="office" type="office-type" -->
  <!--
        id (16 chars) with description
    -->
  <xs:complexType name="id16-with-description-type">
    <xs:sequence>
      <xs:element name="name" type="id16-type"/>
      <xs:element minOccurs="0" name="description" type="text256-type"/>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="id16-with-description" type="id16-with-description-type" -->
  <!--
        annual schedule for id16-type (with units)
    -->
  <xs:complexType name="id16-annual-values-type">
    <xs:sequence>
      <xs:element name="name" type="id16-type"/>
      <xs:sequence maxOccurs="365">
        <xs:element name="value">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:decimal">
                <xs:attribute name="units" type="id16-type" use="required"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="day-of-year" type="day-of-year-type"/>
      </xs:sequence>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="id16-annual-values" type="id16-annual-values-type" -->
  <!--
        annual schedule for id16-type (without units)
    -->
  <xs:complexType name="id16-annual-values-no-units-type">
    <xs:sequence>
      <xs:element name="name" type="id16-type"/>
      <xs:sequence maxOccurs="365">
        <xs:element name="value" type="xs:decimal"/>
        <xs:element name="day-of-year" type="day-of-year-type"/>
      </xs:sequence>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="id16-annual-values-no-units" type="id16-annual-values-no-units-type" -->
  <!--
        latitude DMS
    -->
  <xs:complexType name="latitude-dms-type">
    <xs:sequence>
      <xs:element name="degrees" type="latitude-integer-type"/>
      <xs:element name="minutes" type="dms-integer-type"/>
      <xs:element name="seconds" type="dms-float-type"/>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="latitude-dms" type="latitude-dms-type" -->
  <!--
        longitude DMS
    -->
  <xs:complexType name="longitude-dms-type">
    <xs:sequence>
      <xs:element name="degrees" type="longitude-integer-type"/>
      <xs:element name="minutes" type="dms-integer-type"/>
      <xs:element name="seconds" type="dms-float-type"/>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="longitude-dms" type="longitude-dms-type" -->
  <!--
        physical location
    -->
  <xs:complexType name="geographic-location-type">
    <xs:sequence>
      <xs:element name="name" type="cwms-location-type"/>
      <xs:element name="active" type="xs:boolean"/>
      <xs:sequence minOccurs="0">
        <xs:choice>
          <xs:element name="latitude" type="latitude-decimal-type"/>
          <xs:element name="latitude-dms" type="latitude-dms-type"/>
        </xs:choice>
        <xs:choice>
          <xs:element name="longitude" type="longitude-decimal-type"/>
          <xs:element name="longitude-dms" type="longitude-dms-type"/>
        </xs:choice>
        <xs:element name="horizontal-datum" type="horizontal-datum-type"/>
      </xs:sequence>
      <xs:sequence minOccurs="0">
        <xs:element name="elevation">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:decimal">
                <xs:attribute name="units" type="id16-type" use="required"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="vertical-datum" type="vertical-datum-type"/>
      </xs:sequence>
      <xs:element minOccurs="0" name="county" type="text40-type"/>
      <xs:element minOccurs="0" name="time-zone" type="time-zone-name-type"/>
      <xs:element minOccurs="0" name="public-name" type="id32-type"/>
      <xs:element minOccurs="0" name="long-name" type="text80-type"/>
      <xs:element minOccurs="0" name="description" type="text512-type"/>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="geographic-location" type="geographic-location-type" -->
  <!--
        stream
    -->
  <xs:complexType name="stream-type">
    <xs:sequence>
      <xs:element name="name" type="id16-type"/>
      <xs:element minOccurs="0" name="description" type="text256-type"/>
      <xs:sequence minOccurs="0">
        <xs:element name="mainstem" type="id16-type"/>
        <xs:element name="confluence-station">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:decimal">
                <xs:attribute name="units" type="id16-type" use="required"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="stream" type="stream-type" -->
  <!--
        stream location
    -->
  <xs:complexType name="stream-location-type">
    <xs:sequence>
      <xs:element name="location" type="cwms-location-type"/>
      <xs:element name="stream" type="id16-type"/>
      <xs:element name="station">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:decimal">
              <xs:attribute name="units" type="id16-type" use="required"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="drainage-area">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="total" type="xs:decimal"/>
            <xs:element minOccurs="0" name="contributing" type="xs:decimal"/>
            <xs:element minOccurs="0" name="unregulated" type="xs:decimal"/>
            <xs:element minOccurs="0" name="ungaged" type="xs:decimal"/>
          </xs:sequence>
          <xs:attribute name="units" type="id16-type" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="stream-location" type="stream-location-type" -->
  <!--
        File type
    -->
  <xs:complexType name="file-type">
    <xs:sequence>
      <xs:element name="filepath" type="file-pathname-type"/>
      <xs:element name="description" type="xs:string" maxOccurs="1" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="owner"       type="xs:string" use="optional"/>
    <xs:attribute name="group"       type="xs:string" use="optional"/>
    <xs:attribute name="permissions" type="xs:string" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="file" type="file-type" -->
  <!--
        File manager
    -->
  <xs:complexType name="filemanager-type">
    <xs:sequence>
      <xs:element name="host" type="inet-host-type"/>
      <xs:element name="port" type="inet-port-type"/>
      <xs:element maxOccurs="1" minOccurs="0" name="description" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <!-- xs:element name="filemanager" type="filemanager-type" -->
  <!--
        Local DSS file type
    -->
  <xs:complexType name="dssfile-type">
    <xs:sequence>
      <xs:element name="filepath" type="file-pathname-type"/>
      <xs:element name="description" type="xs:string" maxOccurs="1" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="text80-type" use="optional"/>
    <xs:attribute name="office-id" type="id16-type" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="dssfile" type="dssfile-type" -->
  <!--
        DSS file manager
    -->
  <xs:complexType name="dssfilemanager-type">
    <xs:sequence>
      <xs:element name="host" type="inet-host-type"/>
      <xs:element name="port" type="inet-port-type"/>
      <xs:element name="filepath" type="file-pathname-type"/>
      <xs:element name="description" type="xs:string" maxOccurs="1" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="text80-type" use="optional"/>
    <xs:attribute name="office-id" type="id16-type" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="dssfilemanager" type="dssfilemanager-type" -->
  <!--
        Oracle database
    -->
  <xs:complexType name="oracle-type">
    <xs:sequence>
      <xs:element name="host" type="inet-host-type"/>
      <xs:element maxOccurs="1" minOccurs="0" name="port" type="inet-port-type"/>
      <xs:element name="sid" type="oracle-sid-type"/>
      <xs:element maxOccurs="1" minOccurs="0" name="description" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="text80-type" use="optional"/>
    <xs:attribute name="office-id" type="id16-type" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="oracle" type="oracle-type" -->
  <!--
        DSS local grid file set
    -->
  <xs:complexType name="dss-local-gridfiles-type">
    <xs:sequence>
      <xs:element name="directory" type="file-pathname-type"/>
      <xs:element name="parameter" type="xs:string"/>
      <xs:element name="param-type" type="dss-parameter-type"/>
      <xs:element name="duration"  type="xs:positiveInteger"/>
      <xs:element maxOccurs="1" minOccurs="0" name="description" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="text80-type" use="optional"/>
    <xs:attribute name="office-id" type="id16-type" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="dss-local-gridfiles" type="dss-local-gridfiles-type" -->
  <!--
        DSS remote grid file set
    -->
  <xs:complexType name="dss-remote-gridfiles-type">
    <xs:sequence>
      <xs:element name="host" type="inet-host-type"/>
      <xs:element name="port" type="inet-port-type"/>
      <xs:element name="directory" type="file-pathname-type"/>
      <xs:element name="parameter" type="xs:string"/>
      <xs:element name="param-type" type="dss-parameter-type"/>
      <xs:element name="duration"  type="xs:positiveInteger"/>
      <xs:element maxOccurs="1" minOccurs="0" name="description" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="text80-type" use="optional"/>
    <xs:attribute name="office-id" type="id16-type" use="optional"/>
  </xs:complexType>
  <!-- xs:element name="dss-remote-gridfiles" type="dss-remote-gridfiles-type" -->
  <!--
        Email
    -->
  <xs:complexType name="email-type">
    <xs:sequence>
      <xs:element name="host"        type="inet-host-type"/>
      <xs:element name="port"        type="inet-port-type" minOccurs="0"/>
      <xs:element name="user"        type="xs:string" minOccurs="0"/>
      <xs:element name="pass"        type="xs:string" minOccurs="0"/>
      <xs:element name="description" type="xs:string" minOccurs="0"/>
      <xs:element name="from"        type="xs:string"/>
      <xs:element name="to"          type="xs:string" maxOccurs="unbounded"/>
      <xs:element name="cc"          type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="bcc"         type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="subject"     type="xs:string"/>
      <xs:element name="body"        type="xs:string"/>
      <xs:element name="attachment"  type="file-type" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="office-id" use="optional" type="id16-type"/>
    <xs:attribute name="datastore-id" use="required" type="text80-type"/>
  </xs:complexType>
  <!-- xs:element name="email" type="email-type" -->
  <!--
        vertical datum offset
    -->
  <xs:complexType name="vertical-datum-offset-type">
    <xs:sequence>
      <xs:element name="to-datum" type="vertical-datum-type"/>
      <xs:element name="value"    type="xs:double"/>
    </xs:sequence>
    <xs:attribute name="estimate" type="xs:boolean"/>
  </xs:complexType>
  <!-- xs:element name="vertical-datum-offset" type="vertical-datum-offset-type" -->
  <!--
        vertical datum info
    -->
  <xs:complexType name="vertical-datum-info-type">
    <xs:sequence>
      <xs:element name="location"         type="cwms-location-type" minOccurs="0"/> <!-- should be used only with "office" attribute -->
      <xs:element name="native-datum"     type="vertical-datum-type"/>
      <xs:element name="local-datum-name" type="id16-type" minOccurs="0"/>
      <xs:element name="elevation"        type="opt-double" minOccurs="0"/>
      <xs:element name="offset"           type="vertical-datum-offset-type" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="office" type="id16-type" use="optional"/> <!-- should be used only wth <location> element -->
    <xs:attribute name="unit"   type="id16-type"/>
  </xs:complexType>
  <!-- xs:element name="vertical-datum-info" type="vertical-datum-info-type" -->
</xs:schema>

