Jump to content

SDXF

SDXF ( формат обмена структурированными данными ) — это формат сериализации данных, определенный RFC 3072. [1] Он позволяет собирать произвольные структурированные данные разных типов в один файл для обмена между произвольными компьютерами.

Возможность произвольной сериализации данных в формат с самоописанием напоминает XML , но SDXF не является текстовым форматом (как XML) — SDXF несовместим с текстовыми редакторами. Максимальная длина данных (как составных, так и элементарных), закодированных с использованием SDXF, составляет 16777215 байт (один меньше 16 МБ ).

Формат технической структуры

[ редактировать ]

Данные SDXF могут выражать произвольные уровни структурной глубины. Элементы данных являются самодокументируемыми , что означает, что метаданные (числовые, символьные строки или структуры) закодированы в элементах данных. Структура этого формата проста и прозрачна: компьютерные программы получают доступ к данным SDXF с помощью четко определенных функций, освобождая программистов от необходимости изучать точное расположение данных.

Слово «обмен» в названии отражает другой вид прозрачности: функции SDXF обеспечивают преобразование данных, независимое от компьютерной архитектуры. Сериализацией можно обмениваться между компьютерами (через прямую сеть, передачу файлов или компакт-диск) без каких-либо дополнительных мер. Функции SDXF на принимающей стороне обеспечивают архитектурную адаптацию.

Структурированные данные — это данные с предсказуемыми шаблонами, более сложными, чем текстовые строки. [2]

Коммерческий пример: две компании хотят обменяться цифровыми счетами. Счета-фактуры имеют следующую иерархическую вложенную структуру:

INVOICE
│
├─ INVOICE_NO  
├─ DATE
├─ ADDRESS_SENDER
│    ├─ NAME
│    ├─ NAME
│    ├─ STREET
│    ├─ ZIP
│    ├─ CITY
│    └─ COUNTRY
├─ ADDRESS_RECIPIENT
│    ├─ NAME
│    ├─ NAME
│    ├─ STREET
│    ├─ ZIP
│    ├─ CITY
│    └─ COUNTRY
├─ INVOICE_SUM
├─ SINGLE_ITEMS
│    ├─ SINGLE_ITEM
│    │    ├─ QUANTITY
│    │    ├─ ITEM_NUMBER
│    │    ├─ ITEM_TEXT
│    │    ├─ CHARGE
│    │    └─ SUM
│    └─ ...           
├─ CONDITIONS
...

Структура

[ редактировать ]

Базовый элемент — чанк. Сериализация SDXF сама по себе является чаном. Чанк может состоять из набора более мелких блоков. Чанки состоят из шестибайтового префикса заголовка, за которым следуют данные. Заголовок содержит идентификатор фрагмента в виде 2-байтового двоичного числа (Chunk_ID), длину и тип фрагмента. Он может содержать дополнительную информацию о сжатии, шифровании и многом другом.

Тип фрагмента указывает, состоят ли данные из текста (строка символов), двоичного числа (целого числа или с плавающей запятой) или фрагмент состоит из других фрагментов.

Структурированные фрагменты позволяют программисту упаковывать иерархические конструкции, такие как INVOICE выше, в структуру SDXF следующим образом: Каждому именованному термину (INVOICE, INVOICE_NO, DATE, ADDRESS_SENDER и т. д.) присваивается уникальный номер в диапазоне от 1 до 65535 (2-байтовое беззнаковое двоичное целое число без знака). Верхний/самый внешний чанк создается с идентификатором INVOICE (то есть с соответствующим числовым идентификатором chunk_ID) как структурированный чанк на уровне 1. Этот чанк INVOICE заполняется другими частями на уровне 2 и выше: INVOICE_NO, DATE, ADDRESS_SENDER, ADDRESS_RECIPIENT, INVOICE_SUM, SINGLE_ITEMS, УСЛОВИЯ. Некоторые фрагменты уровня 2 структурированы поочередно как для двух адресов, так и для SINGLE_ITEMS.

Точное описание см. на странице 2 RFC или здесь. [3]

SDXF позволяет программисту работать со структурами SDXF с компактным набором функций. Их всего несколько:

Для чтения чанков необходимо использовать следующие функции:
нагревать
Для инициализации структуры параметров и привязки к существующему чану.
входить
Чтобы войти в структурированный чанк, первый чанк этой структуры готов к обработке.
оставлять
Покинуть текущую структуру. Эта структура уже существует.
следующий
Переходит к следующему чану, если он существует (в противном случае он покидает текущую структуру).
извлекать
Для переноса (и адаптации) данных из текущего чанка в программную переменную.
выбирать
Чтобы найти следующий чанк с заданным идентификатором чанка и сделать его текущим.
Для построения чанков необходимо использовать следующие функции:
нагревать
Инициализация структуры параметров и привязка к пустому выходному буферу для создания нового чанка.
создавать
Создайте новый чанк и добавьте его к текущей существующей структуре (если она существует).
добавить
Добавьте полный чанк в структуру SDXF.
оставлять
Покинуть текущую структуру. Эта структура уже существует.

Следующий псевдокод создает счета:

  init (sdx, buffersize=1000);   // initialize the SDXF parameter structure sdx
  create (sdx, ID=INVOICE, datatype=STRUCTURED); // start of the main structure
  create (sdx, ID=INVOICE_NO, datatype=NUMERIC, value=123456); // create an elementary Chunk
  create (sdx, ID=DATE, datatype=CHAR, value="2005-06-17"); // once more
  create (sdx, ID=ADDRESS_SENDER, datatype=STRUCTURED); // Substructure
  create (sdx, ID=NAME, datatype=CHAR, value="Peter Somebody"); // element. Chunk inside this substructure
  ...
  create (sdx, ID= COUNTRY, datatype=CHAR, value="France"); // the last one inside this substructure
  leave; // closing the substructure ADDRESS_SENDER
  ...
  leave; // closing the substructure INVOICE

[4]

Псевдокод для извлечения структуры INVOICE может выглядеть так:

  init (sdx, container=pointer to an SDXF-structure);   // initialize the SDXF parameter structure sdx
  enter (sdx); // join into the INVOICE structure.
               //
  while (sdx.rc == SDX_RC_ok)
  {
      switch (sdx. Chunk_ID)
     {
         case INVOICE_NO:
           extract (sdx);    
           invno = sdx.value;  // the extract function put integer values into the parameter field 'value'
           break;
           //
         case DATE:
           extract (sdx);    
           strcpy (invdate, sdx.data); // sdx.data is a pointer to the extracted character string
           break;
           //
         case ADDRESS_SENDER:
           enter (sdx);  // we use 'enter' because ADDRESS is a structured Chunk
           do while (sdx.rc == SDX_RC_ok) // inner loop
            ...
           break;
        ...
     }  
  }

SDXF не предназначен для удобства чтения и не предназначен для изменения текстовыми редакторами. Связанная редактируемая структура — SDEF — редактируемый формат структурированных данных. [5]

См. также

[ редактировать ]
  1. ^ Вильдгрубе, Макс (март 2001 г.). «RFC-3072» .
  2. ^ Можно возразить, что слово «структурированный» используется здесь в том же смысле, что и в структурированном программировании — как в (строго) структурированной программе нет переходов , так и в SDXF нет указателей / ссылок . Однако это не обязательно должно быть причиной возникновения названия.
  3. ^ «SDXF — 2. Описание формата SDXF» . Pinpi.com . Проверено 10 сентября 2013 г.
  4. ^ «6.3 Проект PRNT: полный пример» . ПИНПИ . Проверено 10 сентября 2013 г.
  5. ^ «Сайт SDEF (из Archive.org)» . Архивировано из оригинала 7 марта 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6d568e487e971547130edbcbc280482d__1709064180
URL1:https://arc.ask3.ru/arc/aa/6d/2d/6d568e487e971547130edbcbc280482d.html
Заголовок, (Title) документа по адресу, URL1:
SDXF - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)