Язык описания формата данных ( 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.
На 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 — важный шаг к этой цели. Возможность включает поддержку: