Limbă de descriere a formatului de date - Data Format Description Language
Limbajul de descriere a formatului de date (DFDL, adesea pronunțat daff-o-dil ), publicat ca o recomandare propusă în cadrul forumului Open Grid în ianuarie 2011, este un limbaj de modelare pentru descrierea textului general și a datelor binare într-un mod standard. Un model sau schemă DFDL permite citirea (sau „analizarea”) oricărui text sau date binare din formatul său nativ și prezentarea ca instanță a unui set de informații . (Un set de informații este o reprezentare logică a conținutului datelor, independent de formatul fizic. De exemplu, două înregistrări ar putea fi în formate diferite, deoarece una are câmpuri cu lungime fixă, iar cealaltă folosește delimitatori, dar acestea ar putea conține exact aceleași date și ar fi reprezentate ambele de același set de informații). Aceeași schemă DFDL permite, de asemenea, preluarea datelor dintr-o instanță a unui set de informații și scrierea (sau „serializarea”) în formatul său nativ.
DFDL este descriptiv și nu prescriptiv . DFDL nu este un format de date și nici nu impune utilizarea unui anumit format de date. În schimb, oferă un mod standard de a descrie multe tipuri diferite de formate de date. Această abordare are mai multe avantaje. Acesta permite unui autor de aplicație să proiecteze o reprezentare adecvată a datelor în funcție de cerințele acestora, descriind-o în același timp într-un mod standard care poate fi partajat, permițând mai multor programe să schimbe direct datele.
DFDL realizează acest lucru bazându-se pe facilitățile W3C XML Schema 1.0 . Se folosește un subset de schemă XML, suficient pentru a permite modelarea datelor non-XML. Motivațiile pentru această abordare sunt de a evita inventarea unui limbaj de schemă complet nou și de a face mai ușoară conversia textului general și a datelor binare, printr-un set de informații DFDL, într-un document XML corespunzător.
Materialul educațional este disponibil sub formă de tutoriale DFDL, videoclipuri și mai multe laboratoare practice DFDL.
Istorie
DFDL a fost creat ca răspuns la necesitatea ca API-urile de rețea să poată înțelege datele indiferent de sursă. Era nevoie de un limbaj capabil să modeleze o mare varietate de formate de date binare și text existente. Un grup de lucru a fost înființat la Global Grid Forum (care a devenit ulterior Open Grid Forum ) în 2003 pentru a crea o specificație pentru un astfel de limbaj.
S-a luat de la început o decizie de a baza limbajul pe un subset de schemă W3C XML , folosind adnotări <xs: appinfo> pentru a transporta informațiile suplimentare necesare pentru a descrie reprezentări fizice non-XML. Aceasta este o abordare stabilită care este deja utilizată astăzi în sistemele comerciale. DFDL adoptă această abordare și o transformă într-un standard deschis capabil să descrie multe formate de date binare sau de text.
Lucrările au continuat asupra limbajului, rezultând în publicarea unei specificații DFDL 1.0 ca recomandare propusă de OGF GFD.174 în ianuarie 2011.
Recomandarea oficială OGF este GFD.240 publicată în februarie 2021, care depășește toate versiunile anterioare și încorporează toate problemele menționate până în prezent (disponibile și ca html ). Un rezumat al DFDL și al caracteristicilor sale este disponibil la OGF. Orice problemă cu specificația este urmărită folosind trackere de probleme GitHub .
Implementări
Sunt disponibile implementări de procesoare DFDL care pot analiza și serializa date folosind scheme DFDL.
- IBM are un parser, un modeler și un tester vizual de streaming DFDL 1.0 gata de producție. Aceasta este disponibilă în mai multe produse IBM, inclusiv IBM Integration Bus (cunoscut anterior ca IBM WebSphere Message Broker ). Este disponibilă o ediție gratuită pentru dezvoltatori .
- Apache Daffodil este un procesor DFDL open-source care are atât parser, cât și unparser, precum și integrări în Apache NiFi și în motorul de conducte XML Calabash XProc . Continuă să fie în dezvoltare activă.
- Proiectul Agenției Spațiale Europene S2G Data Viewer include un parser DFDL4S care implementează un subset al specificației DFDL 1.0.
Pe GitHub a fost creat un depozit public pentru schemele DFDL care descriu formate de date comerciale și științifice . Schemele DFDL pentru formate precum UN / EDIFACT, NACHA, MIL-STD-2045, NITF și ISO8583 sunt disponibile pentru descărcare gratuită.
Exemplu
Luați ca exemplu următorul flux de date text care oferă numele, vârsta și locația unei persoane:
Modelul logic pentru aceste date poate fi descris de următorul fragment al unui document XML Schema. Ordinea, numele, tipurile și cardinalitatea câmpurilor sunt exprimate prin modelul schemei 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>
Pentru a modela suplimentar reprezentarea fizică a fluxului de date, DFDL mărește fragmentul de schemă XML cu adnotări pe obiectele xs: element și xs: secvență, după cum urmează:
<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>
Atributele de proprietate de pe aceste adnotări DFDL exprimă faptul că datele sunt reprezentate într-un format de text ASCII cu câmpuri de lungime variabilă și delimitate prin virgulă
Este oferită și o sintaxă alternativă, mai compactă, în care proprietățile DFDL sunt purtate ca atribute non-native pe obiectele XML Schema în sine.
<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>
Caracteristici
Scopul DFDL este de a oferi un limbaj bogat de modelare capabil să reprezinte orice format de text sau de date binare. Versiunea 1.0 este un pas major către acest obiectiv. Capacitatea include suport pentru:
- Tipuri de date text precum șiruri, numere, zecimale zonate, calendare și booleeni
- Tipuri de date binare, cum ar fi numere întregi complementare a două, BCD, zecimale împachetate, flotante, calendare și booleeni
- Date de lungime fixă și date delimitate prin marcare text sau binară
- Structuri de date lingvistice găsite în limbi precum COBOL , C și PL / 1
- Standarde industriale precum CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
- Orice codificare și endianitate
- Date bit de lungime arbitrară
- Limbaje tipare pentru numere de text și calendare
- Conținut comandat, neordonat și plutitor
- Valori implicite la analiză și serializare
- Capacitatea valorilor nule pentru gestionarea datelor în afara benzii
- Matrice fixe și variabile
- Limbajul de expresie XPath 2.0, inclusiv variabile pentru modelarea datelor dinamice
- Analiza speculativă și alte mecanisme pentru rezolvarea alegerilor și opționalității
- Validare la regulile XML Schema 1.0
- Un mecanism de amplasare care permite aplicarea valorilor proprietăților comune la mai multe puncte de adnotare
- Ascunderea elementelor din date din setul de informații
- Calculul valorilor elementului pentru setul de informații