Язык описания формата данных - Data Format Description Language
Язык описания формата данных (DFDL, часто произносится как daff-o-dil ), опубликованный как Предлагаемая рекомендация форума Open Grid в январе 2011 года, представляет собой язык моделирования для описания общего текста и двоичных данных стандартным способом. Модель или схема DFDL позволяет читать (или «анализировать») любые текстовые или двоичные данные из их собственного формата и представлять как экземпляр набора информации . (Информационный набор - это логическое представление содержимого данных, не зависящее от физического формата. Например, две записи могут быть в разных форматах, потому что одна имеет поля фиксированной длины, а другая использует разделители, но они могут содержать точно такие же data, и оба будут представлены одним и тем же набором информации). Та же самая схема DFDL также позволяет брать данные из экземпляра набора информации и записывать (или «сериализовать») в их собственный формат.
DFDL носит описательный, а не предписывающий характер . DFDL не является форматом данных и не требует использования какого-либо конкретного формата данных. Вместо этого он предоставляет стандартный способ описания множества различных форматов данных. У этого подхода есть несколько преимуществ. Это позволяет автору приложения спроектировать соответствующее представление данных в соответствии со своими требованиями, описывая его стандартным способом, который может совместно использоваться, что позволяет нескольким программам напрямую обмениваться данными.
DFDL достигает этого, опираясь на возможности W3C XML Schema 1.0 . Используется подмножество XML-схемы, достаточное для моделирования не-XML-данных. Мотивация для этого подхода состоит в том, чтобы избежать изобретения совершенно нового языка схем и упростить преобразование общих текстовых и двоичных данных через набор информации DFDL в соответствующий XML-документ.
Учебные материалы доступны в виде учебных пособий по DFDL, видео и нескольких практических лабораторных работ по DFDL.
История
DFDL был создан в ответ на потребность в API-интерфейсах grid для понимания данных независимо от источника. Требовался язык, способный моделировать широкий спектр существующих текстовых и двоичных форматов данных. В 2003 году на форуме Global Grid Forum (который позже стал Open Grid Forum ) была создана рабочая группа для создания спецификации для такого языка.
На раннем этапе было принято решение основать язык на подмножестве W3C XML Schema , используя аннотации <xs: appinfo> для переноса дополнительной информации, необходимой для описания физических представлений, отличных от XML. Это устоявшийся подход, который уже используется сегодня в коммерческих системах. DFDL использует этот подход и развивает его в открытый стандарт, способный описывать многие текстовые или двоичные форматы данных.
Работа над языком продолжалась, в результате чего в январе 2011 года была опубликована спецификация DFDL 1.0 в виде предложенной рекомендации OGF GFD.174.
Официальная рекомендация OGF - GFD.240, опубликованная в феврале 2021 года, которая отменяет все предыдущие версии и включает все проблемы, отмеченные на сегодняшний день (также доступны в формате html ). Краткое описание DFDL и его функций доступно на OGF. Любые проблемы со спецификацией отслеживаются с помощью трекеров проблем GitHub .
Реализации
Доступны реализации процессоров DFDL, которые могут анализировать и сериализовать данные с помощью схем DFDL.
- У IBM есть готовый к работе анализатор потоковой передачи DFDL 1.0, средство моделирования и визуальный тестер. Это доступно в нескольких продуктах IBM, включая IBM Integration Bus (ранее известный как IBM WebSphere Message Broker ). Бесплатно разработчик издание доступно.
- Apache Daffodil - это процессор DFDL с открытым исходным кодом, имеющий как синтаксический анализатор, так и средство анализа, а также интеграцию с Apache NiFi и конвейерным механизмом XML Calabash XProc . Он продолжает активно развиваться.
- Проект Европейского космического агентства S2G Data Viewer включает парсер DFDL4S, который реализует подмножество спецификации 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:schema>
Чтобы дополнительно смоделировать физическое представление потока данных, 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"
separator="," separatorType="infix" separatorPolicy="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:schema>
Атрибуты свойств в этих аннотациях 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="delimited" dfdl:encoding="ASCII"/>
<xs:element name="country" type="xs:string"
dfdl:lengthKind="delimited" dfdl:encoding="ASCII"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Функции
Цель DFDL - предоставить богатый язык моделирования, способный представлять любой текстовый или двоичный формат данных. Выпуск 1.0 - важный шаг к этой цели. Эта возможность включает поддержку:
- Типы текстовых данных, такие как строки, числа, зональные десятичные дроби, календари и логические значения.
- Типы двоичных данных, такие как целые числа с дополнением до двух, BCD, упакованные десятичные дроби, числа с плавающей запятой, календари и логические значения
- Данные фиксированной длины и данные, разделенные текстом или двоичной разметкой
- Структуры языковых данных, встречающиеся в таких языках, как COBOL , C и PL / 1
- Отраслевые стандарты, такие как CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
- Любая кодировка и порядок байтов
- Битовые данные произвольной длины
- Языки шаблонов для текстовых номеров и календарей
- Упорядоченный, неупорядоченный и плавающий контент
- Значения по умолчанию при синтаксическом анализе и сериализации
- Возможность нулевых значений для обработки внеполосных данных
- Фиксированные и переменные массивы
- Язык выражений XPath 2.0, включая переменные для моделирования динамических данных
- Спекулятивный синтаксический анализ и другие механизмы для разрешения выбора и необязательности
- Проверка на соответствие правилам XML Schema 1.0
- Механизм определения области действия, который позволяет применять общие значения свойств в нескольких точках аннотации.
- Скрытие элементов данных из набора информации
- Расчет значений элементов для набора информации