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
Псевдокод для извлечения структуры 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]
См. также
[ редактировать ]- Представление внешних данных
- Буферы протоколов
- Обозначение абстрактного синтаксиса один
- Апач бережливый
- Травление (протокол)
- Механизм интернет-коммуникаций
- Сравнение форматов сериализации данных
Ссылки
[ редактировать ]- ^ Вильдгрубе, Макс (март 2001 г.). «RFC-3072» .
- ^ Можно возразить, что слово «структурированный» используется здесь в том же смысле, что и в структурированном программировании — как в (строго) структурированной программе нет переходов , так и в SDXF нет указателей / ссылок . Однако это не обязательно должно быть причиной возникновения названия.
- ^ «SDXF — 2. Описание формата SDXF» . Pinpi.com . Проверено 10 сентября 2013 г.
- ^ «6.3 Проект PRNT: полный пример» . ПИНПИ . Проверено 10 сентября 2013 г.
- ^ «Сайт SDEF (из Archive.org)» . Архивировано из оригинала 7 марта 2016 г.