El lenguaje de descripción de formato de datos ( DFDL , que suele pronunciarse como daff-o-dil ) es un lenguaje de modelado para describir texto general y datos binarios de forma estándar. Se publicó como una recomendación del Open Grid Forum [1] en febrero de 2021 y en abril de 2024 se publicó como un estándar ISO . [2]
Un modelo o esquema DFDL permite leer (o "analizar") cualquier texto o dato binario desde su formato nativo y presentarlo como una instancia de un conjunto de información . (Un conjunto de información es una representación lógica del contenido de los datos, independientemente del formato físico. Por ejemplo, dos registros podrían estar en formatos diferentes, porque uno tiene campos de longitud fija y el otro utiliza delimitadores, pero podrían contener exactamente los mismos datos y ambos estarían representados por el mismo conjunto de información). El mismo esquema DFDL también permite tomar datos de una instancia de un conjunto de información y escribirlos (o "serializarlos") en su formato nativo.
DFDL es descriptivo y no prescriptivo . DFDL no es un formato de datos ni impone el uso de ningún formato de datos en particular. En cambio, proporciona una forma estándar de describir muchos tipos diferentes de formatos de datos. Este enfoque tiene varias ventajas. [3] Permite que un autor de aplicaciones diseñe una representación de datos adecuada según sus requisitos y, al mismo tiempo, la describa de una manera estándar que se pueda compartir, lo que permite que varios programas intercambien los datos directamente.
DFDL logra esto basándose en las funciones del esquema XML 1.0 del W3C . Se utiliza un subconjunto del esquema XML, suficiente para permitir el modelado de datos no XML. Las motivaciones de este enfoque son evitar la invención de un lenguaje de esquema completamente nuevo y facilitar la conversión de texto general y datos binarios, a través de un conjunto de información DFDL, en un documento XML correspondiente.
El material educativo está disponible en forma de tutoriales DFDL, vídeos y varios laboratorios prácticos DFDL.
El DFDL se creó en respuesta a la necesidad de que las API de cuadrícula pudieran comprender los datos independientemente de su origen. Se necesitaba un lenguaje capaz de modelar una amplia variedad de formatos de datos binarios y de texto existentes. En 2003, se creó un grupo de trabajo en el Global Grid Forum (que luego se convirtió en el Open Grid Forum ) para crear una especificación para dicho lenguaje.
Desde el principio se tomó la decisión de basar el lenguaje en un subconjunto del esquema XML del W3C , utilizando anotaciones <xs:appinfo> para incluir la información adicional necesaria para describir representaciones físicas que no sean XML. Se trata de un enfoque establecido que ya se utilizaba en 2003 en sistemas comerciales. DFDL adopta este enfoque y lo convierte en un estándar abierto capaz de describir muchos formatos de datos de texto o binarios.
Se continuó trabajando en el lenguaje, lo que dio como resultado la publicación de una especificación DFDL 1.0 como Recomendación propuesta OGF GFD.174 en enero de 2011.
La recomendación oficial de OGF es ahora GFD.240, publicada en febrero de 2021, que deja obsoletas todas las versiones anteriores e incorpora todos los problemas detectados hasta la fecha (también disponible en formato html). Hay un resumen de DFDL y sus características disponible en OGF. Se está haciendo un seguimiento de cualquier problema con la especificación mediante los rastreadores de problemas de GitHub.
En abril de 2024, DFDL se publicó como ISO/IEC 23415:2024 a través del proceso de Normas Públicamente Disponibles (PAS) de ISO. La norma está disponible en ISO, pero también seguirá estando disponible públicamente en el Open Grid Forum.
Hay disponibles implementaciones de procesadores DFDL que pueden analizar y serializar datos utilizando esquemas DFDL.
Se ha creado en GitHub un repositorio público de esquemas DFDL que describen formatos de datos comerciales y científicos. Los esquemas DFDL para formatos como UN/EDIFACT, NACHA, MIL-STD-2045, NITF e ISO8583 están disponibles para descarga gratuita.
Tomemos como ejemplo el siguiente flujo de datos de texto que proporciona el nombre, la edad y la ubicación de una persona:
El modelo lógico de estos datos se puede describir mediante el siguiente fragmento de un documento de esquema XML. El orden, los nombres, los tipos y la cardinalidad de los campos se expresan mediante el modelo de esquema XML.
<xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" ... > <xs:complexType name= "tipo_persona" > <xs:sequence> <xs:element name= "nombre" type= "xs:string" /> <xs:element name= "edad" type= "xs:short" /> <xs:element name= "condado" type= "xs:string" /> <xs:element name= "país" type= "xs:string" /> </xs:sequence> </xs:complexType> </xs:esquema>
Para modelar adicionalmente la representación física del flujo de datos, DFDL aumenta el fragmento de esquema XML con anotaciones en los objetos xs:element y xs:sequence, de la siguiente manera:
<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:esquema>
Los atributos de propiedad en estas anotaciones DFDL expresan que los datos están representados en un formato de texto ASCII con campos de longitud variable y delimitados por comas.
También se proporciona una sintaxis alternativa, más compacta, donde las propiedades DFDL se transportan como atributos no nativos en los propios objetos del esquema 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= "condado" type= "xs:cadena" dfdl:lengthKind= "delimitado" dfdl:encoding= "ASCII" /> <xs:element name= "país" type= "xs:cadena" dfdl:lengthKind= "delimitado" dfdl:encoding= "ASCII" /> </xs:sequence> </xs:complexType> </xs:esquema>
El objetivo de DFDL es proporcionar un lenguaje de modelado completo capaz de representar cualquier formato de texto o datos binarios. La versión 1.0 es un gran paso hacia este objetivo. La capacidad incluye compatibilidad con: