El lenguaje de descripción de formato de datos ( DFDL , a menudo pronunciado daff-o-dil ) es un lenguaje de modelado para describir texto general y datos binarios de forma estandarizada. Fue publicado como recomendación del Open Grid Forum [ 1 ] en febrero de 2021 y en abril de 2024 como estándar ISO . [ 2 ]
Un modelo o esquema DFDL permite leer (o analizar) cualquier dato de texto o 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, independiente del formato físico. Por ejemplo, dos registros podrían estar en formatos diferentes, porque uno tiene campos de longitud fija y el otro usa 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 extraer 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 al autor de una aplicación diseñar una representación de datos apropiada según sus requisitos, describiéndola de una manera estándar que se puede compartir, lo que permite que múltiples programas intercambien datos directamente.
DFDL logra esto aprovechando las funcionalidades de W3C XML Schema 1.0 . Se utiliza un subconjunto de XML Schema, suficiente para permitir el modelado de datos que no son XML. El objetivo de este enfoque es evitar la creación de un lenguaje de esquema completamente nuevo y facilitar la conversión de texto y datos binarios generales, mediante un conjunto de información DFDL, en un documento XML correspondiente.
El material educativo está disponible en forma de tutoriales de DFDL, vídeos y varios laboratorios prácticos de DFDL.
Historia
DFDL se creó en respuesta a la necesidad de que las API de la red 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 Foro Global de la Red (que más tarde se convirtió en el Foro Abierto de la Red ) para elaborar una especificación para dicho lenguaje.
Desde el principio se decidió 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 son XML. Este es un enfoque consolidado que ya se utilizaba en sistemas comerciales en 2003. DFDL adopta este enfoque y lo desarrolla hasta convertirlo en un estándar abierto capaz de describir numerosos formatos de datos, tanto de texto como 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 GFD.174 de la OGF en enero de 2011.
La recomendación oficial de la OGF es ahora GFD.240, publicada en febrero de 2021, que reemplaza todas las versiones anteriores e incorpora todos los problemas detectados hasta la fecha (también disponible en formato HTML ). Un resumen de DFDL y sus características está disponible en la OGF. Cualquier problema con la especificación se está gestionando mediante el sistema de seguimiento de incidencias de GitHub .
En abril de 2024, DFDL se publicó como ISO/IEC 23415:2024 mediante el proceso de Normas Públicas Disponibles (PAS) de ISO . La norma está disponible en ISO, pero también seguirá estando disponible públicamente en el Open Grid Forum.
Implementaciones
Existen implementaciones de procesadores DFDL que pueden analizar y serializar datos utilizando esquemas DFDL.
- IBM cuenta con múltiples implementaciones de DFDL.
- Un analizador, modelador y probador visual de flujos DFDL 1.0 listo para producción. [ 4 ] Está disponible en varios productos de IBM, incluido IBM App Connect Enterprise (anteriormente conocido como IBM Integration Bus ). Hay disponible una edición gratuita para desarrolladores .
- IBM z/TPF DFDL, que forma parte de la plataforma de procesamiento de transacciones z/Transaction Processing Facility de IBM Mainframe .
- Apache Daffodil es un procesador DFDL de código abierto que incluye analizador sintáctico y desanalizador, un entorno de desarrollo integrado (IDE) que es una extensión de VSCode, así como integraciones con Apache NiFi , el motor de procesamiento XML Calabash XProc y Smooks . Su desarrollo continúa activo.
- El proyecto S2G Data Viewer de la Agencia Espacial Europea incluye un analizador sintáctico DFDL4S [ 5 ] que implementa un subconjunto de la especificación DFDL 1.0.
Se ha creado un repositorio público en GitHub para 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 su descarga gratuita.
Ejemplo
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 para 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= "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>Para modelar adicionalmente la representación física del flujo de datos, DFDL amplía el fragmento del esquema XML con anotaciones en los objetos xs:element y xs:sequence, como sigue:
<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>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, en la que las propiedades DFDL se incluyen 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= "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>Características
El objetivo de DFDL es proporcionar un lenguaje de modelado completo capaz de representar cualquier formato de datos binarios o de texto. La versión 1.0 supone un gran avance hacia este objetivo. Entre sus funcionalidades se incluye la compatibilidad con:
- Tipos de datos de texto como cadenas, números, decimales zonificados, calendarios y booleanos
- Tipos de datos binarios como enteros en complemento a dos, BCD , decimales empaquetados, números de coma flotante, calendarios y booleanos.
- Datos de longitud fija y datos delimitados por texto o marcado binario.
- Estructuras de datos de lenguaje que se encuentran en lenguajes como COBOL , C y PL/1.
- Estándares de la industria como CSV , SWIFT, FIX, HL7 , X12, HIPAA , EDIFACT , ISO 8583
- Cualquier codificación y orden de bytes
- Datos de bits de longitud arbitraria
- Lenguajes de patrones para números de texto y calendarios
- Contenido ordenado, desordenado y flotante
- Valores predeterminados para el análisis y la serialización
- Nil valora la capacidad de manejar datos fuera de banda
- Matrices fijas y variables
- Lenguaje de expresiones XPath 2.0 que incluye variables para modelar datos dinámicos.
- Análisis especulativo y otros mecanismos para resolver elecciones y opciones.
- Reglas de validación según el esquema XML 1.0
- Un mecanismo de alcance que permite aplicar valores de propiedades comunes en múltiples puntos de anotación.
- Ocultar elementos en los datos del conjunto de información
- Cálculo de los valores de los elementos para el conjunto de información
Véase también
Referencias
Enlaces externos
- Foro de Red Abierta
- Página principal de OGF DFDL
- Especificación OGF DFDL 1.0 GFD.240 (pdf)
- Especificación OGF DFDL 1.0 GFD.240 (html)
- Esquema XML 1.0 del W3C
- Documentos del Grupo de Trabajo DFDL
- Introducción a DFDL, incluyendo vídeos
- Esquemas DFDLS en GitHub
- Calabaza XML
- Lenguajes de modelado de datos
- computación en malla