Автор:
Александр Васильевич Беспрозванных
Язык MeteoXML

Общее описание MeteoXML

            Язык представления гидрометеорологических данных (MeteoXML) разработан как средство описания и представления гидрометеорологических данных, передаваемых и обрабатываемых с использованием Web-технологий. Большое разнообразие видов информации и гидрометеорологических характеристик, которые необходимо обрабатывать, в противном случае потребовали бы создание большого количества форматов представления данных как это, например, имеет место в Глобальной сети телесвязи при передаче оперативной гидрометеорологической информации. Другой важной особенностью является то, что данные должны быть самодокументированны. Это поможет свести к минимуму объем передаваемых данных, поскольку позволит в каждом случае генерировать формат наиболее соответствующий порции передаваемых данных. Основное назначение MeteoXML – формализованное представление порции гидрометеорологических данных для обеспечения обмена гидрометеорологической информации между технологическими узлами распределенной системы сбора, обработки и представления, реализованной на основе Web-технологий. При этом данные в формате MeteoXML появляются в результате выборки данных из баз, проведения расчетов и обобщений. В качестве базового языка выбран язык XML (Extensible Markup Language) /1/, который является стандартом для передачи данных по сетям Интернет и по своей сути является языком разметки передаваемого документа. В настоящее время имеется большое количество специализированных языков, которые разработаны по данному принципу. Одной из важнейших особенностей языка XML является наличие у него соответствующей модели Document Object Model (DOM) представления данных в памяти ЭВМ /2/. Наличие DOM-модели позволяет создавать и использовать общее программное обеспечение, как для распознавания текста, так и для обработки данных представленных этой моделью. При обработке информации и ее хранении в базах данных наиболее часто используется табличный способ представления данных, но поскольку с одной стороны язык XML является иерархическим, а также для уменьшения объема порций данных передаваемых по сетям в основу языка MeteoXML также положен принцип иерархического представления данных. В настоящее время язык MeteoXML может быть применен только для представления данных в точках наблюдения характеризуемых временными и пространственными координатами. Пространственные координаты могут быть заданы только наименованием объекта, если его координаты фиксированы и известны. По сути дела язык MeteoXML включает в себя правила применения языка XML при формировании документа с описанием передаваемых данных и данными. Второй частью языка MeteoXML является расширенная DOM-модель, в которую включены специфичные методы работы с гидрометеорологическими данными. При этом последовательный вид представления данных в формате XML используется только для передачи информации по сетям Интернет и Интранет, а также при записи на диск в виде текстового файла.

Физическая структура данных

            В основу языка представления гидрометеорологических данных положен принцип, при котором как данные, так и их описание объединяются в один документ. Каждый гидрометеорологический параметр в документе получает временное обозначение в виде строки символов произвольного вида и его полное определение. Первая строка каждого документа имеет следующий вид и определяет, что используется язык XML версии 1.0 и кодировка windows-1251, поддерживающая кириллицу. Допускается применение различных видов кодировок, определяемых синтаксисом языка XML, но при этом сам документ должен быть представлен в этой кодировке.

<?xml version="1.0" encoding="windows-1251"?>
Основным блоком, представляющим весь документ в целом, является блок <DataTransmit>.

            Блок DataTransmit

            Блок служит для представления документа в целом. Имеет обязательный параметр: xmlns=http://cliware.meteo.ru, который определяет принадлежность документа к языку MeteoXML. Объединяет блоки <TransmitDescr>, <Error>, <Message>, <TransData>.

            Пример:

     <?xml version="1.0" encoding="windows-1251"?>
     <DataTransmit xmlns="http://cliware.meteo.ru">
       <TransmitDescr>Meteorological Data</TransmitDescr>
       <Error/>
       <Message/>
       <TransData TdN="Persona">
          . . . . .
       </TransData>
     </DataTransmit>

            Блок TransmitDescr

            Блок служит для свободного описания передаваемого документа. Параметров не имеет. Вложенных блоков не имеет.

            Блок Error

            Блок служит для сообщения об ошибках, возникших при формировании документа. Параметров не имеет. Вложенных блоков не имеет.

            Блок Message

            Блок служит для сообщения об особенностях, возникших при формировании документа. Параметров не имеет. Вложенных блоков не имеет.

            Блок TransData

            Блок служит для передачи порции данных. Блок имеет обязательный параметр TdN для определения его имени. Значение параметра является уникальным в пределах блока TransData. Блок является обязательным и может быть представлен одним или несколькими экземплярами, при определении нескольких порций данных. В блок входят блоки DateDescr, TranDescr, Elements, DataBlock.

            Пример:

     <TransData TdN="Persona">
      <DateDescr BYObs="1998" EYObs="1999" BDObs="12-31 00:00" EDObs="01-31 18:00" />
      <TranDescr>Meteorological Data produced by new Persona</TranDescr>
      <Elements>
        . . . . . . .
      </Elements>
      <DataBlock dbI="MeteoData">
       . . . . . . .
      </DataBlock>
     </TransData>

            Блок DateDescr

            Служит для описания временного периода порции передаваемых данных. Имеет четыре обязательных параметра: BYObs, EYObs, BDObs, EDObs. Параметры BYObs, EYObs определяют начальный и конечный год периода и имеют формат YYYY. Параметры BDObs, EDObs определяют дату и время начала и конца периода в пределах каждого года и имеют формат MM-DD HH:mm. Вложенных блоков не имеет.

            Пример:

     <DateDescr BYObs="1998" EYObs="1999" BDObs="12-31 00:00" EDObs="01-31 18:00" />

            Блок TranDescr

            Блок служит для свободного описания передаваемой порции данных. Параметров не имеет. Вложенных блоков не имеет.

            Блок Elements

            Блок служит для описания гидрометеорологических параметров передаваемых в XML документе типа <DataTransmit> или запрашиваемых данных в документе типа <Request> . Содержание и синтаксис блока Element одинаково в обоих случаях. Блок Elements дополнительных параметров не имеет. Служит для объединения блоков типа <ElTb> и является вложенным в блоки <TransData> или <SubQuery>. Блок является обязательным и может быть представлен только одним экземпляром.

            Пример:

    <Elements>
      <ElTb Table="TMCC">
        . . . . . . . . .
      </ElTb>
    </Elements>

            Блок <ElTb>

            Блок служит для объединения отдельных гидрометеорологических параметров в таблицы, которые используются в зависимости от типа обработки XML документа для представления данных в виде таблиц, записи данных в СУБД реляционного типа. Гидрометеорологические параметры, передаваемые в XML-документе, организуются также в соответствии с их описанием в блоках <ElTb>. Блок имеет обязательный параметр Table для определения имени таблицы. Значение параметра является уникальным в пределах блока <Elements>. Блок является обязательным и может быть представлен одним или несколькими экземплярами, при определении нескольких таблиц.

            Пример:

    <ElTb Table="Marine.Coastal" >
      <El TmN="StI">
        . . . . . . . . .
      </El">
    </ElTb>

            Блок <El>

            Блок служит для описания запрашиваемых или передаваемых гидрометеорологических параметров и имеет обязательный параметр TmN, который служит для назначения временного имени гидрометеорологическому параметру при представлении его в XML-документе. Временные имена должны быть уникальными в пределах одной таблицы, где представлен данный блок. Следующие временные имена являются зарезервированными и служат для:

  • StI – индекс платформы наблюдения;
  • T – дата и время наблюдения;
  • Lat – широта места наблюдения;
  • Lon – долгота места наблюдения;
  • Lev – глубина или высота наблюдения;
  • K – дополнительный ключевой параметр.

                Временные имена должны использоваться только для определения соответствующих параметров. Набор применяемых параметров должен обеспечить уникальный ключ для определения наблюдений. Для описания параметров служат блоки ElO, ElT, ElC, ElD, ElF, ElDis, которые являются подчиненными блока <El>.

                Пример:

    <El TmN="StI"><ElT TbN="Buoy_Lv" ClN="Station_ID"/></El">
    

                Блок <ElO>

                Блок служит для определения таблицы и колонки в реляционной СУБД при записи XML-документа в базу данных и является в этом случае обязательным. При использовании XML-документа в других целях блок может быть опущен. Блок имеет два параметра ClN и TbN, определяющих колонку и таблицу в реляционной СУБД соответственно. При отсутствии параметра TbN в качестве имени таблицы используется параметр Table охватывающего блока ElTb. При включении блока ElO параметр ClN является обязательным. Для определения гидрометеорологического параметра используется одна из четырех форм. Первая форма позволяет определить параметр через его размещение в базе данных путем указания наименований таблицы и колонки, где этот параметр хранится. Например: <ElT TbN="Buoy_Lv" ClN="TEMPWAT"/>, где ElT указатель на определение параметра через таблицу базы данных, TbN – наименование таблицы, ClN – наименование колонки. Вторая форма позволяет определить параметр посредством указания его кодового обозначения, для чего используется словарь кодовых обозначений. Например: <ElC Cd="2102"/>, где ElC указатель на определение параметра через его кодовое обозначение, Cd – кодовое обозначение параметра. Третья форма позволяет определить параметр через указание имени процедуры, в результате выполнения которой этот параметр был получен. Например: <ElF FnN="Midl()"/>, где ElF указатель на определение параметра через имя процедуры, FnN – имя процедуры. Четвертая форма позволяет определять сложные параметры, полученные путем обработки исходных данных, и основана на систематизации гидрометеорологических величин.

                Блок <ElT>

                Определяет параметр как значение колонки в таблице из реляционной СУБД. При запросе данных используется при обращении к СУБД. Блок имеет два параметра ClN и TbN, определяющих колонку и таблицу в реляционной СУБД соответственно. При отсутствии параметра TbN в качестве имени таблицы используется параметр Table охватывающего блока ElTb. При включении блока ElT параметр ClN является обязательным.

                Блок <ElC>

                Определяет параметр через его кодовое обозначение. Блок имеет один параметр Cd. При включении блока ElC параметр Cd является обязательным.

                Блок <ElD>

                Блок определяет точность величин через параметр DtVlPr и имеет формат F(x,y), где x общая размерность, а y размерность дробной части.

                Блок <ElF>

                Блок определяет параметр как функцию. Блок имеет один параметр FnN.

                Блок <ElDis>

                Блок описывает параметр при его отображении. Параметр ElN присваивает наименование параметру, ElA – обозначение, Q и D необходимость отображать признак качества и дополнительный определитель. Значение n указывает на запрет включения этих значений в выходной документ.

                Пример:

    <Elements>
     <ElTb Table="CountDays">
      <El TmN="StI"><ElT TbN="Buoy_Lv" ClN="Station_ID"/><ElDis ElN="Станция" ElA="Станция" Q="n" D="n"/></El>
      <El TmN="T">  <ElT TbN="Buoy_Lv" ClN="Date_obs"/><ElDis ElN="Дата наблюдения" ElA="Дата" Q="n" D="n"/></El>
      <El TmN="TWT"><ElT TbN="Buoy_Lv" ClN="TEMPWAT"/> <ElD
      DtVlPr="#0" />   <ElDis ElN="Тем.воды" ElA="Tw" D="n"/></El>
     </ElTb>
    </Elements>
    

                Непосредственно данные объединяются в блок DataBlock. Внутри DataBlock данные подразделяются на таблицы (блок Table) и далее состоят из блоков Data. Каждый блок Data соответствует станции, на которой производились измерения. Станция определяется номером и координатами места положения, которые являются ключевыми параметрами. При измерениях на станциях с фиксированным местом расположения допускается опускать координаты места. При судовых наблюдениях номером станции является кодовое обозначение судна. Следующий узел D соответствует измерениям в конкретное время и на указанном горизонте. Если указатель горизонта опущен, то считается, что измерения произведены на уровне станции. Каждая гидрометеорологическая характеристика представляется узлом P, где N временное имя, V значение параметра, Q признак качества, D дополнительный определитель параметра.

    <DataBlock dbI="dbOcean">
     <Table TbN="Buoy_Lv">
      <Data StI="21533" Lat="36.2" Lon="130.47">
        <D T="1999-12-06 22:22:00.0" Lev="0.0">
         <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" />
        </D>
        <D T="1999-12-06 22:22:00.0" Lev="3.0">
         <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.68" Q="0" />
        </D>
       </Data>
     </Table>
    </DataBlock>
    

                Приведенные примеры представляют собой последовательный способ представления XML-документа, который используется только для представления его в виде удобном для записи на носитель с последовательной организацией или отображения. Реально в системе используется DOM-модель представления XML- документа /2/, представляющая собой программный объект с методами доступа и управления, расширенный специализированными методами для гидрометеорологии. Пример XML-документа для представления данных буйковых станций с использованием языка описания данных представлен ниже:

    <?xml version="1.0" encoding="windows-1251"?>
    <?xml:stylesheet type="text/xsl" href="cruise1.xsl"?>
    <DataTransmit xmlns="http://cliware.meteo.ru">
      <TransmitDescr>Buoy Data</TransmitDescr>
      <TransData TdN="CDBMS">
        <TranDescr>Selected Data from Data Base</TranDescr>
        <DateDescr BYObs="1999" EYObs="1999" BDObs="11-01 00:00" EDObs="12-12 23:59" />
        <Elements>
         <ElTb Table=" Buoy_Lv ">
          <El TmN="StI"> <ElT TbN="Buoy_Lv" ClN="Station_ID" /><ElDis ElN="Станция" /></El>
          <El TmN="T"> <ElT TbN="Buoy_Lv" ClN="Date_obs" /> <ElDis ElN="Дата" /> </El>
          <El TmN="TYPE_OBS"><ElT TbN="Buoy_Lv" ClN="TYPE_OBS" /> <ElDis ElN="Тип" /></El>
          <El TmN="LAT"><ElT TbN="Buoy_Lv" ClN="LAT" /> <ElDis ElN="Шир." /> </El>
          <El TmN="LON"><ElT TbN="Buoy_Lv" ClN="LON" /> <ElDis ElN="Дол." /> </El>
          <El TmN="MARS10"><ElT TbN="Buoy_Lv" ClN="MARS10" /> <ElDis ElN="Кв.Мар." /> </El>
          <El TmN="CENTR"><ElT TbN="Buoy_Lv" ClN="CENTR" /> <ElDis ElN="Центр" /> </El>
          <El TmN="LEVEL"><ElT TbN="Buoy_Lv" ClN="LEVDEEP" /> <ElDis ElN="Уровень" /></El>
          <El TmN="LEVTYPE"><ElT TbN="Buoy_Lv" ClN="LEVTYPE" /> <ElDis ElN="Тип ур." /></El>
          <El TmN="TEMPWAT"><ElT TbN="Buoy_Lv" ClN="TEMPWAT"/><ElDis ElN="Темп."/> </El>
         </ElTb>
        </Elements>
        <DataBlock dbI="dbOcean">
          <Table TbN="Buoy_Lv">
      <Data StI="N21533   " Lat="36.2" Lon="130.47">
        <D T="1999-12-06 22:22:00.0" Lev="0.0">
          <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" />
        </D>
        <D T="1999-12-06 22:22:00.0" Lev="3.0">
          <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.68" Q="0" />
        </D>
        <D T="1999-12-06 22:22:00.0" Lev="10.0">
          <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.6" Q="0" />
        </D>
        <D T="1999-12-06 22:22:00.0" Lev="8.0">
          <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.68" Q="0" />
        </D>
        <D T="1999-12-06 22:22:00.0" Lev="13.0">
          <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.68" Q="0" />
        </D>
        <D T="1999-12-06 22:22:00.0" Lev="20.0">
          <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.6" Q="0" />
        </D>
        <D T="1999-12-07 00:02:00.0" Lev="18.0">
          <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.6" Q="0" />
        </D>
        <D T="1999-12-07 00:02:00.0" Lev="25.0">
          <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.6" Q="0" />
        </D>
           </Data>
          </Table>
        </DataBlock>
      </TransData>
    </DataTransmit>
    

    Copyright © 1999-2002 - ВНИИГМИ-МЦД

    Rambler's Top100