Format danych Opis Język — Data Format Description Language

Język opisu formatu danych (DFDL, często wymawiany daff-o-dil ), opublikowany jako propozycja rekomendacji forum Open Grid w styczniu 2011 r., jest językiem modelowania służącym do opisywania ogólnych tekstów i danych binarnych w standardowy sposób. Model lub schemat DFDL umożliwia odczytanie (lub „przeanalizowanie”) dowolnych danych tekstowych lub binarnych z ich rodzimego formatu i przedstawienie ich jako instancji zbioru informacji . (Zbiór informacji jest logiczną reprezentacją zawartości danych, niezależnie od formatu fizycznego. Na przykład dwa rekordy mogą mieć różne formaty, ponieważ jeden ma pola o stałej długości, a drugi używa ograniczników, ale mogą one zawierać dokładnie takie same dane i oba byłyby reprezentowane przez ten sam zestaw informacji). Ten sam schemat DFDL umożliwia również pobranie danych z instancji zbioru informacji i zapisanie (lub „serializowanie”) do jego formatu natywnego.

DFDL ma charakter opisowy, a nie nakazowy . DFDL nie jest formatem danych ani nie narzuca używania żadnego konkretnego formatu danych. Zamiast tego zapewnia standardowy sposób opisywania wielu różnych rodzajów formatów danych. Takie podejście ma kilka zalet. Pozwala autorowi aplikacji zaprojektować odpowiednią reprezentację danych zgodnie z jego wymaganiami, jednocześnie opisując ją w standardowy sposób, który może być współdzielony, umożliwiając wielu programom bezpośrednią wymianę danych.

DFDL osiąga to poprzez budowanie na udogodnieniach W3C XML Schema 1.0 . Używany jest podzbiór schematu XML, wystarczający do umożliwienia modelowania danych innych niż XML. Motywacją dla tego podejścia jest uniknięcie wymyślenia zupełnie nowego języka schematów i ułatwienie konwersji ogólnych danych tekstowych i binarnych, poprzez zestaw informacji DFDL, do odpowiedniego dokumentu XML.

Materiały edukacyjne są dostępne w formie samouczków DFDL, filmów i kilku praktycznych ćwiczeń DFDL.

Historia

DFDL został stworzony w odpowiedzi na zapotrzebowanie na Grid API, aby móc zrozumieć dane niezależnie od źródła. Potrzebny był język zdolny do modelowania szerokiej gamy istniejących formatów danych tekstowych i binarnych. Grupa robocza została powołana na Global Grid Forum (które później przekształciło się w Open Grid Forum ) w 2003 roku, aby stworzyć specyfikację dla takiego języka.

Wcześnie podjęto decyzję, aby oprzeć język na podzbiorze schematu XML W3C , używając adnotacji <xs:appinfo> do przenoszenia dodatkowych informacji niezbędnych do opisania fizycznych reprezentacji innych niż XML. Jest to ugruntowane podejście, które jest już dziś stosowane w systemach komercyjnych. DFDL przyjmuje to podejście i przekształca je w otwarty standard zdolny do opisywania wielu formatów danych tekstowych lub binarnych.

Kontynuowano prace nad językiem, co zaowocowało opublikowaniem specyfikacji DFDL 1.0 jako proponowanej rekomendacji OGF GFD.174 w styczniu 2011 roku.

Oficjalna rekomendacja OGF to GFD.240 opublikowana w lutym 2021 r., która przestarzała wszystkie wcześniejsze wersje i zawiera wszystkie odnotowane do tej pory problemy (dostępne również jako html ). Podsumowanie z DFDL i jego funkcji jest dostępna w OGF. Wszelkie problemy ze specyfikacją są śledzone za pomocą narzędzi do śledzenia problemów w serwisie GitHub .

Realizacje

Dostępne są implementacje procesorów DFDL, które mogą analizować i serializować dane przy użyciu schematów DFDL.

W serwisie GitHub utworzono publiczne repozytorium schematów DFDL, które opisują komercyjne i naukowe formaty danych . Schematy DFDL dla formatów takich jak UN/EDIFACT, NACHA, MIL-STD-2045, NITF i ISO8583 są dostępne do bezpłatnego pobrania.

Przykład

Weźmy jako przykład następujący strumień danych tekstowych, który podaje imię i nazwisko, wiek i lokalizację osoby:

Model logiczny dla tych danych można opisać w poniższym fragmencie dokumentu XML Schema. Kolejność, nazwy, typy i liczność pól są wyrażone przez model schematu 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>

Aby dodatkowo modelować fizyczną reprezentację strumienia danych, DFDL rozszerza fragment schematu XML o adnotacje dotyczące obiektów xs:element i xs:sequence w następujący sposób:

<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>

Atrybuty właściwości w tych adnotacjach DFDL wyrażają, że dane są reprezentowane w formacie tekstowym ASCII z polami o zmiennej długości i oddzielonymi przecinkami

Dostępna jest również alternatywna, bardziej zwarta składnia, w której właściwości DFDL są przenoszone jako atrybuty nienatywne w samych obiektach schematu 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>

Cechy

Celem DFDL jest zapewnienie bogatego języka modelowania zdolnego do reprezentowania dowolnego formatu danych tekstowych lub binarnych. Wydanie 1.0 to ważny krok w tym kierunku. Możliwość obejmuje wsparcie dla:

  • Typy danych tekstowych, takie jak ciągi, liczby, dziesiętne strefy, kalendarze i wartości logiczne
  • Binarne typy danych, takie jak liczby całkowite dopełniające do dwóch, BCD, upakowane ułamki dziesiętne, zmiennoprzecinkowe, kalendarze i wartości logiczne
  • Dane o stałej długości i dane oddzielone znacznikami tekstowymi lub binarnymi
  • Struktury danych językowych występujące w językach takich jak COBOL , C i PL/1
  • Standardy branżowe, takie jak CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
  • Dowolne kodowanie i endianowość
  • Dane bitowe o dowolnej długości
  • Języki wzorców numerów tekstowych i kalendarzy
  • Treść uporządkowana, nieuporządkowana i pływająca
  • Domyślne wartości podczas analizowania i serializacji
  • Zdolność wartości zerowych do obsługi danych poza pasmem
  • Tablice stałe i zmienne
  • Język wyrażeń XPath 2.0, w tym zmienne do modelowania danych dynamicznych
  • Analiza spekulatywna i inne mechanizmy rozstrzygania wyborów i opcjonalności
  • Walidacja zgodnie z regułami XML Schema 1.0
  • Mechanizm określania zakresu, który umożliwia stosowanie wspólnych wartości właściwości w wielu punktach adnotacji
  • Ukrywanie elementów w danych ze zbioru informacji
  • Obliczanie wartości elementów dla zbioru informacji

Zobacz też

Bibliografia

Zewnętrzne linki