I2R Web Creation - еженедельный сетевой журнал для вебмастеров

   
Правила формирования XML-документов

Рассмотрим принципы построения XML-документов и представления в них описаний объектов бизнес-приложений по технологии Dynamic XML:

Общие правила оформления

XML-документы формируются по правилам разметки, определенным в языке XML v.1.0 (Second Edition). Согласно эти правилам первой строкой любого XML-документа должна быть следующая:

<?xml version="1.0" encoding="windows-1251"?>

Здесь windows-1251 означает, что все буквы в тегах XML-документа будут либо латинскими, либо русскими в кодировке ANSI.

Далее могут быть еще несколько управляющих инструкций, в частности, задающих систему и конфигурацию, из \ или для которой сформирован XML-документ. А затем следует один корневой тег с набором вложенных тегов, составляющих собственно содержание документа.

Объектный подход

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

Пространство имен объектов - тегов в XML-документе определяется в словаре метаданных Хранилища системы "Контур Корпорация". Интерфейс между представлением объекта в XML-документе и Хранилищем данных обеспечивается библиотекой прикладных классов.

Пример:

<Счет Номер="407028105000000000001">
    <БалансовыйСчет>40702</БалансовыйСчет>
</Счет>


В приведенном примере <Счет> - название класса прикладных объектов, <Номер> и <Балансовый счет> - данные объекта. Причем, для того чтобы сразу было понятно, какой именно счет передается, "Номер" оформлен как атрибут открывающего тега.

Сложные данные

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

При формировании XML-документа должен соблюдаться принцип чередования объектов этих групп. Т.е. данными объекта-списка кроме простых данных, могут быть только прикладные объекты, но не объекты-списки. И наоборот данными прикладного объекта могут быть только объекты-списки.

Пример:

<Документ Номер="12345">
  <Плательщик>ТОО Рога и копыта</Плательщик>
  <Получатель>ООО Интерсофт Лаб</Получатель>
  <Основание>Оплата по договору №1</Основание>
  <Проводки Количество="2">
    <Проводка>
      <СчетДебета>407028105000000000001</СчетДебета>
      <СчетКредита>407028107000000000002</СчетКредита>
      <Сумма>100000.00</Сумма>
    </Проводка>
    <Проводка>
      <СчетДебета>407028105000000000001</СчетДебета>
      <СчетКредита>701078103000000000001</СчетКредита>
      <Сумма>1000.00</Сумма>
    </Проводка>
  </Проводки>
</Документ>


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

Бинарные данные

Некоторые объекты могут содержать бинарные данные. Примерами могут служить графические образцы подписей клиентов, ключи электронных подписей, документы в формате MS Word и т.п.

Эти данные не выводятся непосредственно в XML-документ. Они формируются как отдельные файлы в специально отведенном каталоге, а в XML-документ помещаются ссылки на них. При разборке XML-документа все происходит в обратном порядке - по ссылке находится файл и данные из него помещаются в атрибут объекта.

Правила формирования и разборки XML-документов

В XML-документе должен присутствовать только один корневой тег. Он может быть фиктивным, если в документ необходимо положить несколько отдельных объектов. При разборке XML-документа такой тег игнорируется. Соответственно имя фиктивного тега не должно совпадать с именами классов объектов.

Разборка XML-документа осуществляется одним из стандартных XML-парсеров. Обработка данных осуществляется в следующем порядке:

  • при отсутствии фиктивного тега обрабатывается ровно один объект - тот, чей тег является корневым, и только после закрытия его тега;
  • при наличии фиктивного тега объект считается полностью сформированным и подлежащим обработке только после закрытия тега второго уровня;
  • при наличии фиктивного тега на втором уровне не должно быть иных тегов, чем открывающие теги объектов.

Пример:

<Сеанс>
  <Документ Номер="12345">
  …
    <Проводки Количество="2">
      <Проводка>
      …
      </Проводка>
      <Проводка>
      …
      </Проводка>
    <Проводки>
  </Документ>
   …
   <Документ Номер="12345">
   …
   </Документ>
   <Номер>1</Номер>
</Сеанс>


Тег <Сеанс> является фиктивным и игнорируется при разборке XML-документа.

Закрывающие теги </Проводка>, также как и закрывающие теги простых данных, не приводят ни к какой обработке, так как закрывают теги третьего и более уровней.

Закрывающие теги </Документ> завершают формирование объектов класса "Документ" со всеми его данными и вызывают соответствующую обработку. Например, создание объекта в БД и выполнение проводок по нему. Тега <Номер> в правильном документе быть не должно, т.к. в системе отсутствует класс объектов "Номер".

Корректным является также XML-документ содержащий эту и только эту информацию:

<Документ Номер="12345">
  …
  <Проводки Количество="2">
     <Проводка>
     …
     </Проводка>
     <Проводка>
     …
     </Проводка>
  <Проводки>
</Документ>

Проект "Dynamic XML

 

© журнал принадлежит I2R Web Creation
по всем вопросам обращаться А. Кузьмин