Linguagem de descrição do formato de dados - Data Format Description Language
A linguagem de descrição de formato de dados (DFDL, muitas vezes pronunciada daff-o-dil ), publicada como uma recomendação proposta do Open Grid Forum em janeiro de 2011, é uma linguagem de modelagem para descrever texto geral e dados binários de uma forma padrão. Um modelo ou esquema DFDL permite que qualquer texto ou dado binário seja lido (ou "analisado") de seu formato nativo e seja apresentado como uma instância de um conjunto de informações . (Um conjunto de informações é uma representação lógica do conteúdo dos dados, independente do formato físico. Por exemplo, dois registros podem estar em formatos diferentes, porque um tem campos de comprimento fixo e o outro usa delimitadores, mas eles podem conter exatamente os mesmos dados, e ambos seriam representados pelo mesmo conjunto de informações). O mesmo esquema DFDL também permite que os dados sejam obtidos de uma instância de um conjunto de informações e gravados (ou "serializados") em seu formato nativo.
DFDL é descritivo e não prescritivo . DFDL não é um formato de dados, nem impõe o uso de qualquer formato de dados específico. Em vez disso, fornece uma maneira padrão de descrever muitos tipos diferentes de formatos de dados. Esta abordagem tem várias vantagens. Ele permite que um autor de aplicativo projete uma representação de dados apropriada de acordo com seus requisitos enquanto a descreve de uma maneira padrão que pode ser compartilhada, permitindo que vários programas troquem diretamente os dados.
O DFDL consegue isso com base nos recursos do W3C XML Schema 1.0 . Um subconjunto do XML Schema é usado, o suficiente para permitir a modelagem de dados não XML. As motivações para essa abordagem são evitar a invenção de uma linguagem de esquema completamente nova e facilitar a conversão de texto geral e dados binários, por meio de um conjunto de informações DFDL, em um documento XML correspondente.
O material educacional está disponível na forma de tutoriais DFDL, vídeos e vários laboratórios práticos DFDL.
História
O DFDL foi criado em resposta a uma necessidade de APIs de grade serem capazes de entender os dados, independentemente da origem. Era necessária uma linguagem capaz de modelar uma ampla variedade de textos existentes e formatos de dados binários. Um grupo de trabalho foi estabelecido no Global Grid Forum (que mais tarde se tornou o Open Grid Forum ) em 2003 para criar uma especificação para tal linguagem.
Uma decisão foi tomada no início para basear a linguagem em um subconjunto do Esquema W3C XML , usando anotações <xs: appinfo> para transportar as informações extras necessárias para descrever representações físicas não XML. Esta é uma abordagem estabelecida que já está sendo usada hoje em sistemas comerciais. DFDL adota essa abordagem e a evolui para um padrão aberto capaz de descrever muitos formatos de texto ou dados binários.
O trabalho continuou no idioma, resultando na publicação de uma especificação DFDL 1.0 como a Recomendação Proposta GFD.174 da OGF em janeiro de 2011.
A recomendação oficial do OGF é GFD.240 publicada em fevereiro de 2021, que torna obsoletas todas as versões anteriores e incorpora todos os problemas observados até o momento (também disponível como html ). Um resumo do DFDL e seus recursos está disponível no OGF. Quaisquer problemas com a especificação estão sendo rastreados usando rastreadores de problemas do GitHub .
Implementações
Implementações de processadores DFDL que podem analisar e serializar dados usando esquemas DFDL estão disponíveis.
- A IBM tem um analisador de streaming DFDL 1.0 pronto para produção, modelador e testador visual. Isso está disponível em vários produtos IBM, incluindo IBM Integration Bus (anteriormente conhecido como IBM WebSphere Message Broker ). Uma edição gratuita para desenvolvedores está disponível.
- Apache Daffodil é um processador DFDL de código aberto com analisador e não analisador, bem como integrações com Apache NiFi e o mecanismo de pipeline XML Calabash XProc . Continua em desenvolvimento ativo.
- O projeto S2G Data Viewer da Agência Espacial Europeia inclui um analisador DFDL4S que implementa um subconjunto da especificação DFDL 1.0.
Um repositório público para esquemas DFDL que descrevem formatos de dados comerciais e científicos foi estabelecido no GitHub . Esquemas DFDL para formatos como UN / EDIFACT, NACHA, MIL-STD-2045, NITF e ISO8583 estão disponíveis para download gratuito.
Exemplo
Tome como exemplo o seguinte fluxo de dados de texto que fornece o nome, idade e localização de uma pessoa:
O modelo lógico para esses dados pode ser descrito pelo seguinte fragmento de um documento XML Schema. A ordem, nomes, tipos e cardinalidade dos campos são expressos pelo 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 a representação física do fluxo de dados, o DFDL aumenta o fragmento do esquema XML com anotações nos objetos xs: element e xs: sequence, da seguinte maneira:
<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>
Os atributos de propriedade nessas anotações DFDL expressam que os dados são representados em um formato de texto ASCII com campos de comprimento variável e delimitados por vírgulas
Uma sintaxe alternativa, mais compacta, também é fornecida, em que as propriedades DFDL são transportadas como atributos não nativos nos próprios objetos do 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>
Recursos
O objetivo do DFDL é fornecer uma linguagem de modelagem rica capaz de representar qualquer texto ou formato de dados binários. A versão 1.0 é um passo importante em direção a esse objetivo. O recurso inclui suporte para:
- Tipos de dados de texto, como strings, números, decimais zoneados, calendários e booleanos
- Tipos de dados binários, como inteiros de complemento de dois, BCD, decimais compactados, flutuantes, calendários e booleanos
- Dados de comprimento fixo e dados delimitados por texto ou marcação binária
- Estruturas de dados de linguagem encontradas em linguagens como COBOL , C e PL / 1
- Padrões da indústria, como CSV , SWIFT, FIX, HL7 , X12, HIPAA, EDIFACT , ISO 8583
- Qualquer codificação e endian-ness
- Dados de bits de comprimento arbitrário
- Linguagens de padrões para números de texto e calendários
- Conteúdo ordenado, não ordenado e flutuante
- Valores padrão na análise e serialização
- Capacidade de valores nulos para lidar com dados fora de banda
- Matrizes fixas e variáveis
- Linguagem de expressão XPath 2.0 incluindo variáveis para modelar dados dinâmicos
- Análise especulativa e outros mecanismos para resolver escolhas e opcionalidades
- Validação para regras de esquema XML 1.0
- Um mecanismo de escopo que permite que valores de propriedade comuns sejam aplicados em vários pontos de anotação
- Escondendo elementos nos dados do conjunto de informações
- Calculando valores de elemento para o conjunto de informações