MeteoXml language

Alexander V. Besprozvannykh

      1.Motivation

      XML as markup language is very useful for data exchange in Web technology. The main advantage of XML is possibility to create sub languages based on XML. We have a lot of such type of languages now: Scalable Vector Graphics (SVG http://www.w3.org/Graphics/SVG/), Mathematical Markup Language (MathML http://www.w3.org/Math/), The Extensible HyperText Markup Language (XHTML http://www.w3.org/TR/xhtml1/), Resource Description Framework (RDF http://www.w3.org/RDF/), and other. A special language, based on XML, allows using one data format for exchange different type of data. In addition we can develop common software to process all of this data.

      2.Hydrometeorological XML language goals

      Hydrometeorological data exchange.
      Data exchange between applications where required serialization of data. Some protocols of data exchange require serialized form of data. For example: http, ftp, Corba, RMI, POP3 and other. In this case XML document must be present in serialized form like text file.
      Distribution hydrometeorological data from server to user can be done with using serialized form of XML document. Using common format for all data allows to reduce efforts for data processing and visualization.
      Data exchange between applications where DOM model can be used. In this case XML document can be present as object in DOM model.
      Data processing.
DOM model of XML document has standard Application Program Interface (API) for processing included data. Hydrometeorological XML can have expanded DOM model and expanded API for special hydrometeorological data processing.

      3.Hydrometeorological XML basic concepts

      Hydrometeorological XML must:
be XML based language but not set of predefined formats for some data.
This allows developing common applications to process, store, retrieve, and display all data.
be used for all hydrometeorological data.
It is possible to have one language for all data. You can see examples bellow.
be self described.
Definition of data included in XML document or reference to definition allow to process data without knowing of data format.
be independent from code of hydrometeorological element definition (multi code definition).
This allows using national and international code definition. Like namespace in XML Document.
allows temporal definition of elements;
Temporal definition elements allow using different code namespaces in data source and in data recipient.
be neutral from used environment;
The language mast not includes specific definition for some program language or platforms.
allows to contain different type of data in the same document;
In this case it will be possible to create complex documents with data from different sources.
be multi language.
This allows preparing Multilanguage documents.

      4.MeteoXml common description

      Hydrometeorological data description language (MeteoXml) developed as facility of describing and presentation hydrometeorological data for transmit, exchange, and processing in Web technologies. The big variety of kinds of the information and hydrometeorological characteristics which is necessary for processing, otherwise would demand creation of a plenty of formats of data presentation as it, for example, takes place in the GTS. Basic purpose MeteoXml - the formalized representation of a portion of the hydrometeorological data for maintenance of an exchange of the hydrometeorological information between technological units of the distributed system of gathering, processing and the representation, realized on basis Web of technologies. Thus the data in format MeteoXml appear as a result of selecting data from database, realization of calculations and generalizations. MeteoXml based on language XML (Extensible Markup Language), which is the Internet standard for data transmission on networks. XML standard define corresponding Document Object Model (DOM) to process data. The DOM model allows to create the general software, both for recognition of the text, and for data processing. At processing the information and its storage in databases the tabulated way of data presentation most is frequently used. As language XML is hierarchical, and also for reduction of volume of portions of the data transmitted on networks in a basis of language MeteoXml the principle of hierarchical data presentation also is put. MeteoXml language tested with next list of data:
  • GTS SYNOP data;
  • GTS SHIP data;
  • GTS Upper air data;
  • GTS SHIP Upper air data;
  • GTS Buoy data;
  • GTS Bathy data;
  • GTS Tesak data;
  • GTS CLIMATE data;
  • Climate synoptic data;
  • Climate daily summary data;
  • Climate 10 daily summary data;
  • Climate monthly summary data;
  • Climate long term summary data;
  • Climate norms and extremes.
          MeteoXml language has expanded DOM model and API for Java language, set of useful utilities for data processing. This language is using as core data format by CliWare system. (See example on http://www.meteo.ru/cliware). This system allows exporting data in XML format. MeteoXml document has default namespace http://cliware.meteo.ru.
          All tags named in English character set. MeteoXml document has two main parts: element definition (<Elements>) and data block (<DataBlock>). Each element has temporary name, its definition. The temporary name is using to access data in data block. The application modules usually process some temporary names, but not predefined element codes. In MeteoXml predefined some key temporary manes as StI for station index, T for date, Lat for latitude, Lon for longitude, Lev for level of observation, K as additional key. The data block contains tables. Table contains element with data quality flag and additional descriptor D. The MeteoXml Document can be produced by system using user request that can define own temporary names.

          5.Physical structure of MeteoXml document

          Hydrometeorological parameters definitions and data included in the same document. Each hydrometeorological parameter has temporary name and its full definition.
          First line defines data as XML document and used encoding. It is possible to use any allowed encoding.
    <?xml version="1.0" encoding="windows-1251"?> The main tag of MeteoXml is <DataTransmit>.

          Tag <DataTransmit>
    Tag presents all document and has namespace xmlns=http://cliware.meteo.ru, which define it as MeteoXml document. Contain tags <TransmitDescr>, <Error>, <Message>, <TransData>.
    Example:
    <?xml version="1.0" encoding="windows-1251"?>
    <DataTransmit xmlns="http://cliware.meteo.ru">
      <TransmitDescr>Meteorological Data</TransmitDescr>
      <Error/>
      <Message/>
      <TransData TdN="Persona">
       . . . . .
      </TransData>
    </DataTransmit>
    

          Tag <TransmitDescr>
    Free description of document.

          Tag <Error>
    Error message if document was produced with errors.

          Tag <Message>
    Note message if document produced with some limitation.

          Tag <TransData>
    Subset of document and has unique name defined in attribute TdN. Contain tags DateDescr, TranDescr, Elements, DataBlock.
    Example:
    <TransData TdN="Persona">
     <DateDescr BYObs="1998" EYObs="1999" BDObs="12-31 00:00" EDObs="01-31 18:00" />
     <TranDescr>Meteorological Data produced by Persona</TranDescr>
     <Elements>
       . . . . . . .
     </Elements>
     <DataBlock dbI="MeteoData">
      . . . . . . .
     </DataBlock>
    </TransData>
    

          Tag <DateDescr>
    Defines list of periods and has four attributes: BYObs, EYObs, BDObs, EDObs. Attributes BYObs, EYObs define begin and end years of data presentation (YYYY). Attributes BDObs, EDObs define date and time of periods in each year.Format: MM-DD HH:mm.
    Example:
    <DateDescr BYObs="1998" EYObs="1999" BDObs="12-31 00:00" EDObs="01-31 18:00" />
    

          Tag <TranDescr>
    Free description of document subset.

          Tag <Elements>
    Tag describes hydrometeorological parameters. Contain tags <ElTb>.
    Example:
    <Elements>
     <ElTb Table="TMCC">
     . . . . . . . . .
     </ElTb>
    </Elements>
    

          Tag <ElTb>
    Tag defines virtual tables to present data as tabulated. Contain tags <El>. Attribute Table define name of table. Table name must be unique in tag <Elements>.
    Example:
    <ElTb Table="Marine.Coastal" >
     <El TmN="StI">
     . . . . . . . . .
     </El">
    </ElTb>
    

          Tag <El>
    Tag defines one hydrometeorological parameter and attribute TmN defines temporary name of it. Temporary name must be unique in one table. List of predefined temporary names: StI - platform observation index; T - date and time of observation; Lat - Latitude of observation point; Lon - Longitude of observation point; Lev - level of observation; K - additional key. Contains tags: ElO, ElT, ElC, ElD, ElF, ElDis.
    Example:
    <El TmN="StI"><ElT TbN="Buoy_Lv" ClN="Station_ID"/></El">

          Tag <ElO>
    Tag defines database table name and column name to use to write data into database. Attributes ClN and TbN define column name and table name. If TbN attribute will be omit Table attribute value of ElTb tag will be use.
    Example:
    <ElO TbN="Buoy_Lv" ClN="Tw"/>
    Three forms element definition can be used:
  • Definition as place in database - tag ElT;
  • Definition as element code - tag ElC;
  • Definition as function result - tag ElF.

          Tag <ElT>
    Tag defines parameter as database table name and column name where data was stored. Attributes ClN and TbN define column name and table name. If TbN attribute will be omit Table attribute value of ElTb tag will be use.
    Example:
    <ElT TbN="Buoy_Lv" ClN="Tw"/>


          Tag <ElC>
    Tag defines parameter as element code using attribute Cd.
    Example:
    <ElT Cd="cw:456"/>


          Tag <ElF>
    Tag defines parameter as function result. Attribute FnN defines function name.
    Example:
    <ElF FnN="TdlyMin()"/>


          Tag <ElD>
    Tag defines value precision and format in this document. Attribute VlF can be: - F(m,n) - digital value; - A(k) - string value; - D(YYYY-MM-DD HH24:MI:SS) - date value. Default format F(,2).
    Example:
    <ElD VlF="D(YYYY-MM-DD)"/>


          Tag <ElDis>
    Tag defines parameter names to display it. Attribute ElN - full name of parameter, ElA - abbreviation name of parameter, Q and D display or no quality control flag and additional determinate.
    Example:
    <ElDis ElN="Water temperature" ElA="Tw" D="n"/>


          Tag <DataBlock>
    Tag present transmitted data. Attribute dbI defines DataBlock name.
    Example:
    <DataBlock dbI="dbOcean">
     <Table TbN="Buoy_Lv">
        .  .  .  .
     </Table>
    </DataBlock>
    


          Tag <Table>
    Tag defines virtual table of data. Attribute TbN defines table name, that must be equals one of table name in ElTb tag.
    Example:
    <Table TbN="Buoy_Lv">
      <Data StI="21533" Lat="36.2" Lon="130.47">
        . . . . .
      </Data>
    </Table>
    


          Tag <Data>
    Tag presents point of observation. Attributes StI - index of observation platform, Lat - Latitude of observation, Lot - Longitude of observation.
    Example:
    <Data StI="21533" Lat="36.2" Lon="130.47">
     <D T="1999-12-06 22:22:00.0" Lev="0.0">
      . . . . . .
     </D>
    </Data>
    


          Tag <D>
    Tag presents date and level of observation. Attributes T - time of observation in format YYYY-MM-DD HH24:MI:SS.N, Lev - level of observation.
    Example:
    <D T="1999-12-06 22:22:00.0" Lev="0.0">
     <P N="TYPE_OBS" V="74" />
      . . . . . .
     <P N="TEMPWAT" V="16.36" Q="0" />
    </D>
    


          Tag <P>
    Tag presents value of observation. Attributes N - Temporary name of parameter, V - value of observation, Q - quality control flag, D - additional determinate.
    Example:
    <P N="TYPE_OBS" V="74" />
    <P N="MARS10" V="131" />
    <P N="CENTR" V="WKARS" />
    <P N="LEVTYPE" V="100" />
    <P N="TEMPWAT" V="16.36" Q="0" />
    

          6.MeteoXML examples.

    SYNOP data.
    <?xml version="1.0" encoding="windows-1251"?>
    
    <DataTransmit xmlns="http://cliware.meteo.ru">
      <TransmitDescr>Data selected from Database
    Period: 2003-2003   01-11 15:00 - 01-11 16:59
    Tables: SynopI
    Parameters:
    Station_ID  Date_obs  StationName  WndSp  TempDb  PresSl
    </TransmitDescr>
      <TransData TdN="TransData_1">
        <TranDescr>Generated query from SQL</TranDescr>
        <DateDescr BYObs="2003" EYObs="2003" BDObs="01-11 15:00" EDObs="01-11 16:59" />
        <Elements>
          <ElTb Table="SynopI">
            <El TmN="StI">
              <ElO ClN="Station_ID" TbN="SynopI" />
              <ElT ClN="Station_ID" />
              <ElDis ElN="Station" ElA="Station" />
            </El>
            <El TmN="T">
              <ElO ClN="Date_obs" TbN="SynopI" />
              <ElT ClN="Date_obs" />
              <ElDis ElN="Date" ElA="Date" />
            </El>
            <El TmN="StN">
              <ElO ClN="StationName" TbN="SynopI" />
              <ElT ClN="StationName" TbN="SynopI" />
              <ElDis ElN="Station name" ElA="Name" Q="n" D="n" />
            </El>
            <El TmN="T11">
              <ElO ClN="WndSp" TbN="SynopI" />
              <ElT ClN="WndSp" TbN="SynopI" />
              <ElDis ElN="Wind speed" ElA="ff" D="n" />
            </El>
            <El TmN="T12">
              <ElO ClN="TempDb" TbN="SynopI" />
              <ElT ClN="TempDb" TbN="SynopI" />
              <ElDis ElN="Air temperature" ElA="TTT" D="n" />
            </El>
            <El TmN="T16">
              <ElO ClN="PresSl" TbN="SynopI" />
              <ElT ClN="PresSl" TbN="SynopI" />
              <ElDis ElN="Pressure on sea level" ElA="PPPP" D="n" />
            </El>
          </ElTb>
        </Elements>
        <DataBlock dbI="TransData_1">
          <Table TbN="SynopI">
            <Data StI="94300">
              <D T="2003-01-11 16:00:00.0">
                <P N="StN" V="CARNARVON AIRPORT" />
                <P N="T11" V="6" Q="1" />
                <P N="T12" V="22.6" Q="1" />
                <P N="T16" V="1011.8" Q="1" />
              </D>
            </Data>
            <Data StI="94402">
              <D T="2003-01-11 16:00:00.0">
                <P N="StN" V="SHARK BAY (DENHAM)" />
                <P N="T11" V="6" Q="1" />
                <P N="T12" V="23" Q="1" />
                <P N="T16" V="1011.6" Q="1" />
              </D>
            </Data>
            <Data StI="95402">
              <D T="2003-01-11 16:00:00.0">
                <P N="StN" V="SHARK BAY AIRPORT" />
                <P N="T11" V="3" Q="1" />
                <P N="T12" V="20.9" Q="1" />
                <P N="T16" V="1011.9" Q="1" />
              </D>
            </Data>
          </Table>
        </DataBlock>
      </TransData>
    </DataTransmit>
    
    Upper Air data
    <?xml version="1.0" encoding="windows-1251"?>
    
    <DataTransmit xmlns="http://cliware.meteo.ru">
      <TransmitDescr>Data selected from DataBase
    Period: 2002-2002   01-30 00:00 - 01-31 23:59
    Tables: GTS.V_AIR_LEVEL
    Parameters:
    Station_ID  Date_obs  K  Lev  TypeLev  PressLev  HighLev  TempDb  DefTempDp  WndDir  WndSp  SubstWndB  SubstWndA
    </TransmitDescr>
      <TransData TdN="TransData_1">
        <TranDescr>Generated query from SQL</TranDescr>
        <DateDescr BYObs="2002" EYObs="2002" BDObs="01-30 00:00" EDObs="01-31 23:59" />
        <Elements>
          <ElTb Table="Table">
            <El TmN="StI">
              <ElT ClN="Station_ID" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Station" ElA="Station" />
            </El>
            <El TmN="T">
              <ElT ClN="Date_obs" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Date" ElA="Date" />
            </El>
            <El TmN="K">
              <ElT ClN="K" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Type observation" ElA="Type_Obs" Q="n" D="n" />
            </El>
            <El TmN="Lev">
              <ElT ClN="Lev" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Type part" ElA="TypePart" Q="n" D="n" />
            </El>
            <El TmN="T3">
              <ElT ClN="TypeLev" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Type level" ElA="TypeLev " Q="n" D="n" />
            </El>
            <El TmN="T4">
              <ElT ClN="PressLev" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Pressure on level, gPA" ElA="PPP" D="n" />
            </El>
            <El TmN="T5">
              <ElT ClN="HighLev" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Height of a surface, m" ElA="hhh" D="n" />
            </El>
            <El TmN="T6">
              <ElT ClN="TempDb" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Temperature of air,C" ElA="TTT " D="n" />
            </El>
            <El TmN="T7">
              <ElT ClN="DefTempDp" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Deficiency of  dew  point ,C" ElA="DD " D="n" />
            </El>
            <El TmN="T8">
              <ElT ClN="WndDir" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Wind dir., degrees" ElA="dd " D="n" />
            </El>
            <El TmN="T9">
              <ElT ClN="WndSp" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Wind speed" ElA="fff" D="n" />
            </El>
            <El TmN="T10">
              <ElT ClN="SubstWndB" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Shift of a wind" ElA="VbVb" D="n" />
            </El>
            <El TmN="T11">
              <ElT ClN="SubstWndA" TbN="GTS.V_AIR_LEVEL" />
              <ElDis ElN="Shift of  a wind " ElA="VaVa" D="n" />
            </El>
          </ElTb>
        </Elements>
        <DataBlock dbI="TransData_1">
          <Table TbN="Table">
            <Data StI="27459">
              <D T="2002-01-30 00:00:00.0" Lev="1.0" K="11">
                <P N="T3" V="1" />
                <P N="T4" V="969" Q="1" />
                <P N="T5" V="161" Q="0" />
                <P N="T6" V="-2.5" Q="1" />
                <P N="T7" V="2.2" Q="1" />
                <P N="T8" V="180" Q="1" />
                <P N="T9" V="1" Q="1" />
              </D>
              <D T="2002-01-30 00:00:00.0" Lev="2.0" K="11">
                <P N="T3" V="10" />
                <P N="T4" V="1000" Q="1" />
                <P N="T5" V="-95" Q="0" />
              </D>
              <D T="2002-01-30 00:00:00.0" Lev="3.0" K="11">
                <P N="T3" V="10" />
                <P N="T4" V="925" Q="1" />
                <P N="T5" V="520" Q="0" />
                <P N="T6" V="-2.9" Q="1" />
                <P N="T7" V="0.7" Q="1" />
                <P N="T8" V="235" Q="1" />
                <P N="T9" V="8" Q="1" />
              </D>
              <D T="2002-01-30 00:00:00.0" Lev="4.0" K="11">
                <P N="T3" V="10" />
                <P N="T4" V="850" Q="1" />
                <P N="T5" V="1190" Q="0" />
                <P N="T6" V="-5.5" Q="1" />
                <P N="T7" V="1.2" Q="1" />
                <P N="T8" V="235" Q="1" />
                <P N="T9" V="9" Q="1" />
              </D>
              <D T="2002-01-30 00:00:00.0" Lev="5.0" K="11">
                <P N="T3" V="10" />
                <P N="T4" V="700" Q="1" />
                <P N="T5" V="2690" Q="0" />
                <P N="T6" V="-13.3" Q="1" />
                <P N="T7" V="4.7" Q="1" />
                <P N="T8" V="240" Q="1" />
                <P N="T9" V="11" Q="1" />
              </D>
              <D T="2002-01-30 00:00:00.0" Lev="6.0" K="11">
                <P N="T3" V="10" />
                <P N="T4" V="500" Q="1" />
                <P N="T5" V="5160" Q="0" />
                <P N="T6" V="-31.7" Q="1" />
                <P N="T7" V="3.8" Q="1" />
                <P N="T8" V="245" Q="1" />
                <P N="T9" V="15" Q="1" />
              </D>
            </Data>
          </Table>
        </DataBlock>
      </TransData>
    </DataTransmit>
    
    Tesak
    <?xml version="1.0" encoding="windows-1251"?>
    
    <DataTransmit xmlns="http://cliware.meteo.ru">
      <TransmitDescr>Data selected from DataBase
    Period: 2000-2000   10-01 00:00 - 10-31 23:59
    Tables: Marine.Tes_Level
    Parameters:
    Station_ID  Date_obs  Lat  Lon  Lev  Type_Obs  TEMPWAT  SaltWat
    </TransmitDescr>
      <TransData TdN="TransData_1">
        <TranDescr>Generated query from SQL</TranDescr>
        <DateDescr BYObs="2000" EYObs="2000" BDObs="10-01 00:00" EDObs="10-31 23:59" />
        <Elements>
          <ElTb Table="Table">
            <El TmN="StI">
              <ElT ClN="Station_ID" TbN="Marine.Tes_Level" />
              <ElDis ElN="Station" ElA="Station" />
            </El>
            <El TmN="T">
              <ElT ClN="DATE_OBS" TbN="Marine.Tes_Level" />
              <ElDis ElN="Date" ElA="Date" />
            </El>
            <El TmN="Lat">
              <ElT ClN="LAT" TbN="Marine.Tes_Level" />
              <ElDis ElN="Lat" ElA="Lat" />
            </El>
            <El TmN="Lon">
              <ElT ClN="LON" TbN="Marine.Tes_Level" />
              <ElDis ElN="Lon" ElA="Lon" />
            </El>
            <El TmN="Lev">
              <ElT ClN="LEV" TbN="Marine.Tes_Level" />
              <ElDis ElN="Lev" ElA="Lev" />
            </El>
            <El TmN="Type">
              <ElT ClN="Type_Obs" TbN="Marine.Tes_Level" />
              <ElDis ElN="TypeObs" ElA="Type" Q="n" D="n" />
            </El>
            <El TmN="Tw">
              <ElT ClN="TEMPWAT" TbN="Marine.Tes_Level" />
              <ElDis ElN="Tw" ElA="Tw" D="n" />
            </El>
            <El TmN="S">
              <ElT ClN="SaltWat" TbN="Marine.Tes_Level" />
              <ElDis ElN="S" ElA="S" D="n" />
            </El>
          </ElTb>
        </Elements>
        <DataBlock dbI="TransData_1">
          <Table TbN="Table">
            <Data StI="69016" Lat="44.200" Lon="-23.860">
              <D T="2000-10-12 23:57:00.0" Lev="6.0">
                <P N="Type" V="72" />
                <P N="Tw" V="16.81" Q="1" />
                <P N="S" V="36.27" Q="1" />
              </D>
              <D T="2000-10-12 23:57:00.0" Lev="9.0">
                <P N="Type" V="72" />
                <P N="Tw" V="16.82" Q="1" />
                <P N="S" V="36.26" Q="1" />
              </D>
              <D T="2000-10-12 23:57:00.0" Lev="19.0">
                <P N="Type" V="72" />
                <P N="Tw" V="16.83" Q="1" />
                <P N="S" V="36.26" Q="1" />
              </D>
              <D T="2000-10-12 23:57:00.0" Lev="29.0">
                <P N="Type" V="72" />
                <P N="Tw" V="16.84" Q="1" />
                <P N="S" V="36.26" Q="1" />
              </D>
              <D T="2000-10-12 23:57:00.0" Lev="39.0">
                <P N="Type" V="72" />
                <P N="Tw" V="16.84" Q="1" />
                <P N="S" V="36.26" Q="1" />
              </D>
             </Data>
          </Table>
        </DataBlock>
      </TransData>
    </DataTransmit>
    

          7.MeteoXML schema.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <xs:schema targetNamespace="http://cliware.meteo.ru"
                  xmlns="http://cliware.meteo.ru"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="DataTransmit" type="DataTransmitEl">
        <xs:annotation>
          <xs:documentation>Root element of MeteoXML</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:complexType name="DataTransmitEl">
        <xs:annotation>
          <xs:documentation>Root element of MeteoXML</xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="TransmitDescr" type="xs:string" minOccurs="0">
            <xs:annotation>
              <xs:documentation>
              Free text to describe data transmition
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="Error" type="xs:string" minOccurs="0">
            <xs:annotation>
              <xs:documentation>
              Free text to describe error in data processing
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="Message" type="xs:string" minOccurs="0">
            <xs:annotation>
              <xs:documentation>Free text for note in data processing</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="TransData" type="TransDataEl" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>
              Hydrometeorological data with definitions
              </xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="TransDataEl">
        <xs:annotation>
          <xs:documentation>
          Hydrometeorological data with definitions
          </xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="TranDescr" type="xs:string" minOccurs="0">
            <xs:annotation>
              <xs:documentation>
              Free text to describethis part of data transmition
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="DateDescr" type="DateDescrEl">
            <xs:annotation>
              <xs:documentation>
              Defines list of periods for wich data present
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="Elements" type="ElementsEl">
            <xs:annotation>
              <xs:documentation>
              Defines list of Parameters, that can be included in this document
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="DataBlock" type="DataBlockEl" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Contain transmitted data</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="TdN" type="xs:ID" use="required">
          <xs:annotation>
            <xs:documentation>
            Unique ID of transmition data block. Any legal string
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="DateDescrEl">
        <xs:annotation>
          <xs:documentation>
          Defines list of periods for wich data present
          </xs:documentation>
        </xs:annotation>
        <xs:attribute name="BYObs" type="xs:gYear" use="required">
          <xs:annotation>
            <xs:documentation>
            Begin year of data presented in  transmition data block
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="EYObs" type="xs:gYear" use="required">
          <xs:annotation>
            <xs:documentation>
            End year of data presented in  transmition data block
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="BDObs" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>
            Begin date of period of data presented in  transmition data block as mm-dd hh:mm
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="EDObs" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>
            End date of period of data presented in  transmition data block as mm-dd hh:mm
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElementsEl">
        <xs:annotation>
          <xs:documentation>
          Defines list of Parameters, that can be included in this document
          </xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="ElTb" type="ElTbEl" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Logical table definition</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="DataBlockEl">
        <xs:annotation>
          <xs:documentation>Contain transmitted data</xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="Table" type="TableEl" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Defines logical table with data</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="dbI" type="xs:ID" use="required">
          <xs:annotation>
            <xs:documentation>
            Unique ID of data block. Any legal string
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElTbEl">
        <xs:annotation>
          <xs:documentation>
          Logical table definition to present data as tables
          </xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="El" type="ElEl" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>
              Parameter definition that can be included in this document
              </xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="Table" type="xs:ID" use="required">
          <xs:annotation>
            <xs:documentation>
            Unique ID of virtual table. Any legal string
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElEl">
        <xs:annotation>
          <xs:documentation>Parameter definition</xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="ElO" type="ElOEl" minOccurs="0">
            <xs:annotation>
              <xs:documentation>
              Column definition for database output table
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="ElT" type="ElTEl" minOccurs="0">
            <xs:annotation>
              <xs:documentation>
              Parameter definition as database table and column
              </xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="ElC" type="ElCEl" minOccurs="0">
            <xs:annotation>
              <xs:documentation>Parameter definition as code</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="ElF" type="ElFEl" minOccurs="0">
            <xs:annotation>
              <xs:documentation>Parameter definition as function output</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="ElD" type="ElDEl" minOccurs="0">
            <xs:annotation>
              <xs:documentation>Parameter format definition</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="ElDis" type="ElDisEl">
            <xs:annotation>
              <xs:documentation>Parameter description</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="TmN" type="xs:ID" use="required">
          <xs:annotation>
            <xs:documentation>
            Unique (within virtual table) temporary name of hydrometeorological parameter.
            Any legal string
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElOEl">
        <xs:annotation>
          <xs:documentation>Column definition for database output table</xs:documentation>
        </xs:annotation>
        <xs:attribute name="TbN" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>DataBase table name.</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="ClN" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Column name</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElTEl">
        <xs:annotation>
          <xs:documentation>
          Parameter definition as database table and column
          </xs:documentation>
        </xs:annotation>
        <xs:attribute name="ClN" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>
            Table name. If omit Table attribute form ElTb will be used
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="TbN" type="xs:string">
          <xs:annotation>
            <xs:documentation>Column name</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElCEl">
        <xs:annotation>
          <xs:documentation>Parameter definition as code</xs:documentation>
        </xs:annotation>
        <xs:attribute name="Cd" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Parameter code</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElFEl">
        <xs:annotation>
          <xs:documentation>Parameter definition as function output</xs:documentation>
        </xs:annotation>
        <xs:attribute name="FnN" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Function name</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElDEl">
        <xs:annotation>
          <xs:documentation>Parameter format definition</xs:documentation>
        </xs:annotation>
        <xs:attribute name="VlF" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>
            Value format: F(m,n) - digital value;
                          A(k) - string value;
                          D(YYYY-MM-DD HH24:MI:SS) - date value
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="ElDisEl">
        <xs:annotation>
          <xs:documentation>Parameter description</xs:documentation>
        </xs:annotation>
        <xs:attribute name="ElN" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Full name of Parameter</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="ElA" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Abbreviated name of Parameter</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Q" type="YN" default="y">
          <xs:annotation>
            <xs:documentation>
            Request to include or not quality control flag in data block
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="D" type="YN" default="y">
          <xs:annotation>
            <xs:documentation>
            Request to include or not additional determination flag in data block
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:simpleType name="YN">
        <xs:annotation>
          <xs:documentation>Provide or no control flag</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
          <xs:enumeration value="y"/>
          <xs:enumeration value="n"/>
        </xs:restriction>
      </xs:simpleType>
      <xs:complexType name="TableEl">
        <xs:annotation>
          <xs:documentation>Defines virtual table with data</xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="Data" type="DataEl" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Station level of tree.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="TbN" type="xs:ID" use="required">
          <xs:annotation>
            <xs:documentation>
            Name of the virtual table. Must be equals to one of defined tables in Elements tag
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="DataEl">
        <xs:annotation>
          <xs:documentation>Station level of tree</xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="D" type="DEl" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Date level of tree</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="StI" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Index of observation platform</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Lat" type="xs:double" use="optional">
          <xs:annotation>
            <xs:documentation>Latitude of point of observation</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Lon" type="xs:double" use="optional">
          <xs:annotation>
            <xs:documentation>Longitude of point of observation</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="DEl">
        <xs:annotation>
          <xs:documentation>
          Date level of tree. Can be detailed by level of observation and some key value
          </xs:documentation>
        </xs:annotation>
        <xs:sequence>
          <xs:element name="P" type="PEl" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>
              Data for one parameter defined as N atribute
              </xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="T" type="xs:dateTime" use="required">
          <xs:annotation>
            <xs:documentation>
            Date and time of observation in format yyyy-mm-dd hh24:mm:ss.n
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Lev" type="xs:double" use="optional">
          <xs:annotation>
            <xs:documentation>
            Level of observation if data presented on differen levels
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="K" type="xs:string" use="optional">
          <xs:annotation>
            <xs:documentation>
            Additional key to provide unique value of combination of T, Lev, and K
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
      <xs:complexType name="PEl">
        <xs:annotation>
          <xs:documentation>Data for one parameter defined as N atribute</xs:documentation>
        </xs:annotation>
        <xs:attribute name="N" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>
            Temporary name of parameter. Must be equals to one of defined in El tag
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="V" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>Value of hydrometeorological parameter</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Q" type="xs:string">
          <xs:annotation>
            <xs:documentation>Quality control flag</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="D" type="xs:string">
          <xs:annotation>
            <xs:documentation>
            Additional determinator of the value of the hydrometeorological parameter
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:complexType>
    </xs:schema>