SDXF - SDXF

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

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

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

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

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

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

Пример

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

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 ... ├─ УСЛОВИЯ ...


Структура

Базовый элемент - кусок. Сериализация SDXF сама по себе является фрагментом. Блок может состоять из набора небольших блоков. Блоки состоят из префикса заголовка из шести байтов, за которым следуют данные. Заголовок содержит идентификатор блока в виде двухбайтового двоичного числа (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, CONDITIONS. Некоторые блоки уровня 2 структурированы по очереди, как для двух адресов и SINGLE_ITEMS.

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

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

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

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

  в этом (SDX, размер буфера=1000);   // инициализируем структуру параметров SDXF sdx  Создайте (SDX, Я БЫ=ВЫСТАВЛЕННЫЙ СЧЕТ, тип данных=СТРУКТУРИРОВАННЫЙ); // начало основной структуры  Создайте (SDX, Я БЫ=INVOICE_NO, тип данных=ЧИСЛОВЫЙ, ценить=123456); // создаем элементарный чанк  Создайте (SDX, Я БЫ=ДАТА, тип данных=СИМВОЛ, ценить="2005-06-17"); // еще раз  Создайте (SDX, Я БЫ=ADDRESS_SENDER, тип данных=СТРУКТУРИРОВАННЫЙ); // Подструктура  Создайте (SDX, Я БЫ=ИМЯ, тип данных=СИМВОЛ, ценить="Кто-то Питер"); // элемент. Фрагмент внутри этой подструктуры  ...  Создайте (SDX, Я БЫ= СТРАНА, тип данных=СИМВОЛ, ценить="Франция"); // последний внутри этой подструктуры  покинуть; // закрываем подструктуру ADDRESS_SENDER  ...  покинуть; // закрываем подструктуру INVOICE

[3]

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

  в этом (SDX, контейнер=указатель к ан SDXF-структура);   // инициализируем структуру параметров SDXF sdx  войти (SDX); // присоединяемся к структуре INVOICE.               //  пока (SDX.rc == SDX_RC_ok)  {      выключатель (SDX. Chunk_ID)     {         дело INVOICE_NO:           извлекать (SDX);               invno = SDX.ценить;  // функция извлечения помещает целые значения в поле параметра value           перемена;           //         дело ДАТА:           извлекать (SDX);               strcpy (invdate, SDX.данные); // sdx.data - указатель на извлеченную символьную строку           перемена;           //         дело ADDRESS_SENDER:           войти (SDX);  // мы используем ввод, потому что АДРЕС - это структурированный чанк           делать пока (SDX.rc == SDX_RC_ok) // внутренний цикл            ...           перемена;        ...     }    }

SDXF не предназначен для удобства чтения или изменения текстовыми редакторами. Связанная редактируемая структура SDEF.

Смотрите также

Рекомендации

  1. ^ Можно возразить, что «структурированный» здесь используется в том же смысле, что и в структурное программирование - вроде нет перейти к с в (строго) структурированной программе нет указатели /Рекомендации в SDXF. Однако это не должно быть причиной возникновения названия.
  2. ^ «SDXF - 2. Описание формата SDXF». Pinpi.com. Получено 2013-09-10.
  3. ^ «6.3 Проект PRNT: полный пример». PINPI. Получено 2013-09-10.

внешняя ссылка