Формат данных Описание Язык

Язык описания формата данных ( DFDL , часто произносится как daff-o-dil ) — это язык моделирования для описания общих текстовых и двоичных данных стандартным способом. Он был опубликован как Рекомендация форума Open Grid [1] в феврале 2021 года, а в апреле 2024 года был опубликован как стандарт ISO . [2]

Модель или схема DFDL позволяет считывать (или «анализировать») любые текстовые или двоичные данные из их собственного формата и представлять их как экземпляр информационного набора . (Информационный набор — это логическое представление содержимого данных, независимое от физического формата. Например, две записи могут быть в разных форматах, поскольку одна имеет поля фиксированной длины, а другая использует разделители, но они могут содержать абсолютно одинаковые данные и обе будут представлены одним и тем же информационным набором). Та же схема DFDL также позволяет извлекать данные из экземпляра информационного набора и записывать (или «сериализовать») в его собственный формат.

DFDL является описательным , а не предписывающим . DFDL не является форматом данных и не навязывает использование какого-либо конкретного формата данных. Вместо этого он предоставляет стандартный способ описания множества различных видов форматов данных. Такой подход имеет несколько преимуществ. [3] Он позволяет автору приложения разрабатывать соответствующее представление данных в соответствии со своими требованиями, описывая его стандартным способом, который может быть общим, позволяя нескольким программам напрямую обмениваться данными.

DFDL достигает этого, опираясь на возможности W3C XML Schema 1.0 . Используется подмножество XML Schema, достаточное для моделирования не-XML-данных. Мотивация такого подхода заключается в том, чтобы избежать изобретения совершенно нового языка схемы и упростить преобразование общих текстовых и двоичных данных с помощью информационного набора DFDL в соответствующий XML-документ.

Образовательные материалы доступны в виде учебных пособий по DFDL, видеороликов и нескольких практических лабораторных работ по DFDL.

История

DFDL был создан в ответ на потребность в API-интерфейсах Grid понимать данные независимо от источника. Нужен был язык, способный моделировать широкий спектр существующих текстовых и двоичных форматов данных. В 2003 году на Глобальном форуме Grid (позже ставшим Форумом Open Grid ) была создана рабочая группа для создания спецификации для такого языка.

На раннем этапе было принято решение основывать язык на подмножестве W3C XML Schema , используя аннотации <xs:appinfo> для переноса дополнительной информации, необходимой для описания физических представлений, отличных от XML. Это устоявшийся подход, который уже использовался к 2003 году в коммерческих системах. DFDL использует этот подход и развивает его в открытый стандарт, способный описывать множество текстовых или двоичных форматов данных.

Работа над языком продолжилась, что привело к публикации спецификации DFDL 1.0 в качестве предлагаемой рекомендации OGF GFD.174 в январе 2011 года.

Официальная рекомендация OGF теперь GFD.240, опубликованная в феврале 2021 года, которая отменяет все предыдущие версии и включает все проблемы, отмеченные на сегодняшний день (также доступна в формате html). Краткое изложение DFDL и его функций доступно на сайте OGF. Любые проблемы со спецификацией отслеживаются с помощью трекеров ошибок GitHub.

В апреле 2024 года DFDL был опубликован как ISO/IEC 23415:2024 посредством процесса ISO Publicly Available Standards (PAS). Стандарт доступен в ISO, но также останется общедоступным на Open Grid Forum.

Реализации

Доступны реализации процессоров DFDL, которые могут анализировать и сериализовать данные с использованием схем DFDL.

  • У IBM есть несколько реализаций DFDL.
    • готовый к производству потоковый анализатор, моделер и визуальный тестер DFDL 1.0. [4] Он доступен в нескольких продуктах IBM, включая IBM App Connect Enterprise (ранее известный как IBM Integration Bus). Доступна бесплатная версия для разработчиков.
    • IBM z/TPF DFDL, являющийся частью IBM Mainframe z/Transaction Processing Facility.
  • Apache Daffodil — это процессор DFDL с открытым исходным кодом, имеющий как парсер, так и депарсер, IDE, являющийся расширением VSCode, а также интеграции в Apache NiFi , XML Calabash XProc pipeline engine и Smooks. Он продолжает активно разрабатываться.
  • Проект Европейского космического агентства S2G Data Viewer включает в себя анализатор DFDL4S [5] , который реализует подмножество спецификации DFDL 1.0.

На GitHub создан публичный репозиторий схем DFDL, описывающих коммерческие и научные форматы данных. Схемы DFDL для таких форматов, как UN/EDIFACT, NACHA, MIL-STD-2045, NITF и ISO8583, доступны для бесплатной загрузки.

Пример

Возьмем в качестве примера следующий поток текстовых данных, который содержит имя, возраст и местонахождение человека:

Логическую модель для этих данных можно описать следующим фрагментом документа XML-схемы. Порядок, имена, типы и кардинальность полей выражаются моделью XML-схемы.

<xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" ... >  <xs:complexType name= "person_type" > <xs:sequence> <xs:element name= "name" type= "xs:string" /> <xs:element name= "age" type= "xs:short" /> <xs:element name= "county" type= "xs:string" /> <xs:element name= "country" type= "xs:string" /> </xs:sequence> </xs:complexType>               </xs:схема>

Для дополнительного моделирования физического представления потока данных DFDL дополняет фрагмент схемы XML аннотациями к объектам xs:element и xs:sequence следующим образом:

<xs:schema xmlns:dfdl= "http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:xs= "http://www.w3.org/2001/XMLSchema" ... >   <xs:complexType name= "person_type" > <xs:sequence> <xs:annotation><xs:appinfo source= "http://www.ogf.org/dfdl/" > <dfdl:sequence encoding= "ASCII" sequenceKind= "ordered" partition= "," partitionType= "infix" partitionPolicy= "required" /> </xs:appinfo></xs:annotation> <xs:element name= "name" type= "xs:string" > <xs:annotation><xs:appinfo source= "http://www.ogf.org/dfdl/" > <dfdl:element lengthKind= "delimited" encoding= "ASCII" /> </xs:appinfo></xs:annotation> </xs:element> <xs:element name= "age" type= "xs:short" > <xs:annotation><xs:appinfo source= "http://www.ogf.org/dfdl/" > <dfdl:element representation= "text" lengthKind= "delimited" encoding= "ASCII" textNumberRep= "standard" textNumberPattern= "#0" textNumberBase= "10" /> </xs:appinfo></xs:annotation> </xs:element> <xs:element name= "county" type= "xs:string" > <xs:annotation><xs:appinfo source= "http://www.ogf.org/dfdl/" > <dfdl:element lengthKind= "delimited" encoding= "ASCII" /> </xs:appinfo></xs:annotation> </xs:element> <xs:element name= "country" type= "xs:string" > <xs:annotation><xs:appinfo source= "http://www.ogf.org/dfdl/" > <dfdl:element lengthKind= "delimited" encoding= "ASCII" /> </xs:appinfo></xs:annotation> </xs:element> </xs:sequence> </xs:complexType>                                                              </xs:схема>

Атрибуты свойств в этих аннотациях DFDL выражают, что данные представлены в текстовом формате ASCII с полями переменной длины, разделенными запятыми.

Также предусмотрен альтернативный, более компактный синтаксис, в котором свойства DFDL переносятся как неродные атрибуты самих объектов XML-схемы.

<xs:schema xmlns:dfdl= "http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:xs= "http://www.w3.org/2001/XMLSchema" ... >   <xs:complexType name= "person_type" > <xs:sequence dfdl:encoding= "ASCII" dfdl:sequenceKind= "ordered" dfdl:separator= "," dfdl:separatorType= "infix" dfdl:separatorPolicy= "required" > <xs:element name= "name" type= "xs:string" dfdl:lengthKind= "delimited" dfdl:encoding= "ASCII" /> <xs:element name= "age" type= "xs:short" dfdl:representation= "text" dfdl:lengthKind= "delimited" dfdl:encoding= "ASCII" dfdl:textNumberRep= "standard" dfdl:textNumberPattern= "##0" dfdl:textNumberBase= "10" /> <xs:element name= "county" type= "xs:string" dfdl:lengthKind= "с разделителями" dfdl:encoding= "ASCII" /> <xs:element name= "country" type= "xs:string" dfdl:lengthKind= "с разделителями" dfdl:encoding= "ASCII" /> </xs:sequence> </xs:complexType>                                     </xs:схема>

Функции

Цель DFDL — предоставить богатый язык моделирования, способный представлять любой текстовый или двоичный формат данных. Выпуск 1.0 — важный шаг к этой цели. Возможность включает поддержку:

  • Текстовые типы данных, такие как строки, числа, зонные десятичные дроби, календари и логические значения
  • Двоичные типы данных, такие как целые числа в дополнительном коде, BCD, упакованные десятичные числа, числа с плавающей точкой, календари и логические значения
  • Данные фиксированной длины и данные, разделенные текстом или двоичной разметкой
  • Структуры языковых данных, встречающиеся в таких языках, как COBOL , C и PL/1
  • Отраслевые стандарты, такие как CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
  • Любая кодировка и порядок байтов
  • Битовые данные произвольной длины
  • Языки шаблонов для текстовых чисел и календарей
  • Упорядоченный, неупорядоченный и плавающий контент
  • Значения по умолчанию при разборе и сериализации
  • Возможность нулевых значений для обработки внеполосных данных
  • Фиксированные и переменные массивы
  • Язык выражений XPath 2.0, включающий переменные для моделирования динамических данных
  • Спекулятивный анализ и другие механизмы для разрешения вопросов выбора и опциональности
  • Проверка на соответствие правилам XML Schema 1.0
  • Механизм определения области действия, позволяющий применять общие значения свойств в нескольких точках аннотации.
  • Скрытие элементов в данных из информационного набора
  • Расчет значений элементов для информационного набора

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

Ссылки

  1. ^ ОГФ ГФД.240
  2. ^ ИСО/МЭК 23415:2024
  3. ^ Синтаксис данных, блог Майка Беккерла
  4. ^ IBM DFDL 1.0
  5. ^ ДФДЛ4С
  • Форум Open Grid
  • Домашняя страница OGF DFDL
  • Спецификация OGF DFDL 1.0 GFD.240 (pdf)
  • Спецификация OGF DFDL 1.0 GFD.240 (html)
  • W3C XML-схема 1.0
  • Документы рабочей группы DFDL
  • Начало работы с DFDL, включая видео
  • DFDLSchemas на GitHub
  • XML-калебаш
Получено с "https://en.wikipedia.org/w/index.php?title=Data_Format_Description_Language&oldid=1262113675"