Gegevensformaat Beschrijving Taal - Data Format Description Language

Data Format Description Language (DFDL, vaak uitgesproken als daff-o-dil ), gepubliceerd als een Open Grid Forum Proposed Recommendation in januari 2011, is een modelleertaal voor het op een standaard manier beschrijven van algemene tekst en binaire gegevens. Met een DFDL-model of -schema kunnen alle tekst of binaire gegevens worden gelezen (of "geparseerd") vanuit het oorspronkelijke formaat en worden gepresenteerd als een instantie van een informatieset . (Een informatieset is een logische weergave van de gegevensinhoud, onafhankelijk van het fysieke formaat. Twee records kunnen bijvoorbeeld in verschillende formaten zijn, omdat de ene velden met een vaste lengte heeft en de andere scheidingstekens gebruikt, maar ze kunnen exact dezelfde gegevens, en zouden beide worden vertegenwoordigd door dezelfde informatieset). Hetzelfde DFDL-schema maakt het ook mogelijk om gegevens uit een instantie van een informatieset te halen en uit te schrijven (of "geserialiseerd") naar het oorspronkelijke formaat.

DFDL is beschrijvend en niet prescriptief . DFDL is geen gegevensformaat en legt ook niet het gebruik van een bepaald gegevensformaat op. In plaats daarvan biedt het een standaardmanier om veel verschillende soorten gegevensformaten te beschrijven. Deze aanpak heeft verschillende voordelen. Het stelt een applicatie-auteur in staat om een ​​geschikte gegevensrepresentatie te ontwerpen volgens hun vereisten, terwijl deze op een standaard manier wordt beschreven die kan worden gedeeld, waardoor meerdere programma's de gegevens rechtstreeks kunnen uitwisselen.

DFDL bereikt dit door voort te bouwen op de faciliteiten van W3C XML Schema 1.0 . Er wordt een subset van XML Schema gebruikt, voldoende om het modelleren van niet-XML-gegevens mogelijk te maken. De motivatie voor deze aanpak is om te voorkomen dat er een geheel nieuwe schemataal wordt uitgevonden en om het gemakkelijk te maken om algemene tekst en binaire gegevens, via een DFDL-informatieset, om te zetten in een bijbehorend XML-document.

Educatief materiaal is beschikbaar in de vorm van DFDL-zelfstudies, video's en verschillende praktische DFDL-labs.

Geschiedenis

DFDL is gemaakt als antwoord op de behoefte aan raster-API's om gegevens te kunnen begrijpen, ongeacht de bron. Er was een taal nodig die een grote verscheidenheid aan bestaande tekst- en binaire gegevensformaten kon modelleren. Op het Global Grid Forum (later het Open Grid Forum ) werd in 2003 een werkgroep opgericht om een ​​specificatie voor een dergelijke taal te creëren.

Er werd al vroeg besloten om de taal te baseren op een subset van W3C XML Schema , met behulp van <xs:appinfo> annotaties om de extra informatie te bevatten die nodig is om niet-XML fysieke representaties te beschrijven. Dit is een gevestigde aanpak die vandaag al wordt gebruikt in commerciële systemen. DFDL volgt deze benadering en ontwikkelt deze tot een open standaard die in staat is veel tekst- of binaire gegevensformaten te beschrijven.

Het werk aan de taal werd voortgezet, wat resulteerde in de publicatie van een DFDL 1.0-specificatie als OGF Proposed Recommendation GFD.174 in januari 2011.

De officiële OGF-aanbeveling is GFD.240, gepubliceerd in februari 2021, die alle eerdere versies overbodig maakt en alle tot nu toe geconstateerde problemen bevat (ook beschikbaar als html ). Een samenvatting van DFDL en zijn functies is beschikbaar op de OGF. Eventuele problemen met de specificatie worden bijgehouden met behulp van GitHub- probleemtrackers .

Implementaties

Er zijn implementaties beschikbaar van DFDL-processors die gegevens kunnen ontleden en serialiseren met behulp van DFDL-schema's.

Op GitHub is een openbare opslagplaats voor DFDL-schema's die commerciële en wetenschappelijke gegevensindelingen beschrijven . DFDL-schema's voor formaten zoals UN/EDIFACT, NACHA, MIL-STD-2045, NITF en ISO8583 kunnen gratis worden gedownload.

Voorbeeld

Neem als voorbeeld de volgende tekstgegevensstroom die de naam, leeftijd en locatie van een persoon geeft:

Het logische model voor deze gegevens kan worden beschreven door het volgende fragment van een XML Schema-document. De volgorde, namen, typen en kardinaliteit van de velden worden uitgedrukt door het XML-schemamodel.

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

Om de fysieke representatie van de datastroom aanvullend te modelleren, vult DFDL het XML-schemafragment als volgt aan met annotaties op de xs:element- en xs:sequence-objecten:

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

De eigenschapsattributen op deze DFDL-annotaties geven aan dat de gegevens worden weergegeven in een ASCII-tekstindeling met velden van variabele lengte en gescheiden door komma's

Er wordt ook een alternatieve, compactere syntaxis geboden, waarbij DFDL-eigenschappen als niet-native attributen op de XML Schema-objecten zelf worden gedragen.

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

Functies

Het doel van DFDL is om een ​​rijke modelleertaal te bieden die elk tekst- of binair gegevensformaat kan weergeven. De 1.0 release is een grote stap in de richting van dit doel. De mogelijkheid omvat ondersteuning voor:

  • Tekstgegevenstypen zoals tekenreeksen, getallen, gezoneerde decimalen, kalenders en Booleans
  • Binaire datatypes zoals two's complement integers, BCD, ingepakte decimalen, floats, kalenders en Booleans
  • Gegevens met vaste lengte en gegevens gescheiden door tekst of binaire opmaak
  • Taaldatastructuren gevonden in talen zoals COBOL , C en PL/1
  • Industriestandaarden zoals CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
  • Elke codering en endian-heid
  • Bitgegevens van willekeurige lengte
  • Patroontalen voor tekstnummers en kalenders
  • Geordende, ongeordende en zwevende inhoud
  • Standaardwaarden voor parseren en serialiseren
  • Mogelijkheid tot nulwaarden voor het verwerken van out-of-band data
  • Vaste en variabele arrays
  • XPath 2.0-expressietaal inclusief variabelen om dynamische gegevens te modelleren
  • Speculatieve parsing en andere mechanismen om keuzes en optionaliteit op te lossen
  • Validatie naar XML Schema 1.0-regels
  • Een scopingmechanisme waarmee gemeenschappelijke eigenschapswaarden kunnen worden toegepast op meerdere annotatiepunten
  • Elementen in de gegevens verbergen voor de informatieset
  • Elementwaarden voor de informatieset berekenen

Zie ook

Referenties

Externe links