Linguaggio di descrizione del formato dei dati - Data Format Description Language

Il linguaggio di descrizione del formato dei dati (DFDL, spesso pronunciato daff-o-dil ), pubblicato come raccomandazione proposta dall'Open Grid Forum nel gennaio 2011, è un linguaggio di modellazione per descrivere testo generale e dati binari in modo standard. Un modello o schema DFDL consente di leggere (o "analizzare") qualsiasi testo o dato binario dal suo formato nativo e di essere presentato come un'istanza di un set di informazioni . (Un set di informazioni è una rappresentazione logica del contenuto dei dati, indipendente dal formato fisico. Ad esempio, due record potrebbero essere in formati diversi, perché uno ha campi a lunghezza fissa e l'altro utilizza delimitatori, ma potrebbero contenere esattamente lo stesso dati e sarebbero entrambi rappresentati dallo stesso set di informazioni). Lo stesso schema DFDL consente inoltre di prelevare dati da un'istanza di un set di informazioni e di scriverli (o "serializzati") nel suo formato nativo.

DFDL è descrittivo e non prescrittivo . DFDL non è un formato di dati, né impone l'uso di un particolare formato di dati. Fornisce invece un modo standard per descrivere molti tipi diversi di formati di dati. Questo approccio ha diversi vantaggi. Consente all'autore di un'applicazione di progettare una rappresentazione dei dati appropriata in base alle proprie esigenze descrivendola in un modo standard che può essere condiviso, consentendo a più programmi di scambiare direttamente i dati.

DFDL raggiunge questo obiettivo basandosi sulle strutture del W3C XML Schema 1.0 . Viene utilizzato un sottoinsieme di XML Schema, sufficiente per consentire la modellazione di dati non XML. Le motivazioni per questo approccio sono evitare di inventare un linguaggio di schema completamente nuovo e facilitare la conversione di testo generale e dati binari, tramite un set di informazioni DFDL, in un documento XML corrispondente.

Il materiale didattico è disponibile sotto forma di tutorial DFDL, video e diversi laboratori DFDL pratici.

Storia

DFDL è stato creato in risposta alla necessità che le API della griglia siano in grado di comprendere i dati indipendentemente dall'origine. Era necessario un linguaggio in grado di modellare un'ampia varietà di formati di dati binari e di testo esistenti. Un gruppo di lavoro è stato istituito presso il Global Grid Forum (che in seguito è diventato l' Open Grid Forum ) nel 2003 per creare una specifica per tale linguaggio.

All'inizio è stata presa la decisione di basare il linguaggio su un sottoinsieme dello schema XML W3C , utilizzando le annotazioni <xs:appinfo> per trasportare le informazioni aggiuntive necessarie per descrivere rappresentazioni fisiche non XML. Questo è un approccio consolidato che viene già utilizzato oggi nei sistemi commerciali. DFDL adotta questo approccio e lo evolve in uno standard aperto in grado di descrivere molti formati di dati di testo o binari.

Il lavoro è continuato sul linguaggio, portando alla pubblicazione di una specifica DFDL 1.0 come Raccomandazione proposta dall'OGF GFD.174 nel gennaio 2011.

La raccomandazione ufficiale dell'OGF è la GFD.240 pubblicata nel febbraio 2021 che rende obsolete tutte le versioni precedenti e incorpora tutti i problemi rilevati fino ad oggi (disponibile anche come html ). Un riepilogo di DFDL e delle sue caratteristiche è disponibile presso l'OGF. Eventuali problemi con le specifiche vengono monitorati utilizzando i tracker dei problemi di GitHub .

implementazioni

Sono disponibili implementazioni di processori DFDL in grado di analizzare e serializzare i dati utilizzando schemi DFDL.

Su GitHub è stato creato un repository pubblico per gli schemi DFDL che descrivono formati di dati commerciali e scientifici . Gli schemi DFDL per formati come UN/EDIFACT, NACHA, MIL-STD-2045, NITF e ISO8583 sono disponibili per il download gratuito.

Esempio

Prendiamo come esempio il seguente flusso di dati di testo che fornisce il nome, l'età e la posizione di una persona:

Il modello logico per questi dati può essere descritto dal seguente frammento di un documento XML Schema. L'ordine, i nomi, i tipi e la cardinalità dei campi sono espressi dal modello dello schema 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>

Per modellare ulteriormente la rappresentazione fisica del flusso di dati, DFDL integra il frammento dello schema XML con annotazioni sugli oggetti xs:element e xs:sequence, come segue:

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

Gli attributi di proprietà su queste annotazioni DFDL esprimono che i dati sono rappresentati in un formato di testo ASCII con campi di lunghezza variabile e delimitati da virgole

Viene fornita anche una sintassi alternativa e più compatta, in cui le proprietà DFDL vengono trasportate come attributi non nativi sugli stessi oggetti dello schema 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>

Caratteristiche

L'obiettivo di DFDL è fornire un linguaggio di modellazione ricco in grado di rappresentare qualsiasi formato di dati di testo o binario. La versione 1.0 è un passo importante verso questo obiettivo. La funzionalità include il supporto per:

  • Tipi di dati di testo come stringhe, numeri, decimali suddivisi in zone, calendari e booleani
  • Tipi di dati binari come interi in complemento a due, BCD, decimali compressi, float, calendari e booleani
  • Dati a lunghezza fissa e dati delimitati da testo o markup binario
  • Strutture dati linguistiche presenti in linguaggi come COBOL , C e PL/1
  • Standard di settore come CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
  • Qualsiasi codifica e endian-ness
  • Dati in bit di lunghezza arbitraria
  • Lingue dei modelli per numeri di testo e calendari
  • Contenuti ordinati, non ordinati e fluttuanti
  • Valori predefiniti per l'analisi e la serializzazione
  • Capacità di valori nulli per la gestione dei dati fuori banda
  • Array fissi e variabili
  • Linguaggio di espressione XPath 2.0 che include variabili per modellare dati dinamici
  • Analisi speculativa e altri meccanismi per risolvere scelte e opzionalità
  • Convalida alle regole XML Schema 1.0
  • Un meccanismo di ambito che consente l'applicazione di valori di proprietà comuni in più punti di annotazione
  • Nascondere elementi nei dati dal set di informazioni
  • Calcolo dei valori degli elementi per il set di informazioni

Guarda anche

Riferimenti

link esterno