Язык описания формата данных - 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
  • Механизм определения области действия, который позволяет применять общие значения свойств в нескольких точках аннотации.
  • Скрытие элементов данных из набора информации
  • Расчет значений элементов для набора информации

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

использованная литература

внешние ссылки