Формат данных Описание Язык
Язык описания формата данных ( DFDL , часто произносится как daff-o-dil ) — это язык моделирования для описания общих текстовых и двоичных данных стандартным способом. Он был опубликован как форума Open Grid. рекомендация [1] в феврале 2021 г. и в апреле 2024 г. был опубликован как стандарт ISO . [2]
Модель или схема DFDL позволяет считывать (или «анализировать») любые текстовые или двоичные данные из их собственного формата и представлять их как экземпляр набора информации . (Набор информации — это логическое представление содержимого данных, независимое от физического формата. Например, две записи могут быть в разных форматах, поскольку одна имеет поля фиксированной длины, а другая использует разделители, но они могут содержать абсолютно одинаковые данные, и оба будут представлены одним и тем же набором информации). Та же схема DFDL также позволяет брать данные из экземпляра набора информации и записывать (или «сериализовать») в их собственный формат.
DFDL носит описательный , а не предписывающий характер . DFDL не является форматом данных и не требует использования какого-либо конкретного формата данных. Вместо этого он предоставляет стандартный способ описания множества различных форматов данных. Этот подход имеет несколько преимуществ. [3] Это позволяет автору приложения разработать подходящее представление данных в соответствии со своими требованиями, описывая его стандартным способом, который может использоваться совместно, что позволяет нескольким программам напрямую обмениваться данными.
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. Это устоявшийся подход, который к 2003 году уже использовался в коммерческих системах. DFDL использует этот подход и развивает его в открытый стандарт, способный описывать многие форматы текстовых или двоичных данных.
Работа над языком продолжалась, в результате чего в январе 2011 года была опубликована спецификация DFDL 1.0 как предложенная рекомендация OGF GFD.174.
Официальная рекомендация OGF теперь называется GFD.240 , опубликованная в феврале 2021 года, которая устарела для всех предыдущих версий и включает в себя все отмеченные на сегодняшний день проблемы (также доступна в формате html ). Краткое описание DFDL и его функций доступно на OGF. Любые проблемы со спецификацией отслеживаются с помощью трекеров проблем GitHub .
В апреле 2024 года DFDL был опубликован как ISO/IEC 23415:2024 в рамках процесса общедоступных стандартов ISO (PAS) . Стандарт доступен в ISO, но он также останется общедоступным на форуме Open Grid.
Реализации
[ редактировать ]Доступны реализации процессоров 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 с открытым исходным кодом, имеющий как парсер, так и депарсер, интегрированную среду разработки, которая является расширением VSCode, а также интеграцию с Apache NiFi и механизмом конвейера XML Calabash XProc . Он продолжает находиться в стадии активной разработки.
- Проект Европейского космического агентства S2G Data Viewer включает парсер DFDL4S. [5] который реализует подмножество спецификации DFDL 1.0.
создан публичный репозиторий схем DFDL, описывающих форматы коммерческих и научных данных На GitHub . Схемы 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
- Механизм области видимости, который позволяет применять значения общих свойств в нескольких точках аннотации.
- Скрытие элементов данных из набора информации
- Вычисление значений элементов для набора информации