O segundo estágio de uma abordagem para modelagem de dados usando DFDL envolve incluir anotações DFDL
na estrutura lógica estabelecida por você. As anotações DFDL descrevem o formato físico dos componentes.
Determine as características de seus componentes.
- Todos os elementos (simples e complexos)
- O elemento possui algum delimitador, isso é, um inicializador ou um terminador? Se possuir, qual é a codificação e eles estão presentes quando o elemento está vazio ou é inexistente? Essa característica determina as propriedades dfdl:initiator, dfdl:terminator, dfdl:encoding e propriedades associadas.
- Como o conteúdo do elemento é estabelecido? Essa característica determina a propriedade dfdl:lengthKind e as propriedades associadas:
- explicit para um comprimento fixo.
- prefixed se houver um prefixo de comprimento.
- delimited se limitado por um delimitador.
- pattern para usar uma expressão regular.
- implicit se o comprimento for determinado por seu tipo.
- endOfParent, se limitado por seu pai.
- Se o elemento for opcional ou for uma matriz, como o número de ocorrências será estabelecido? Essa característica determina a propriedade dfdl:occursCountKind e as propriedades associadas.
- Existem regras de alinhamento para aplicar? Essa característica geralmente ocorre somente para dados binários e determina as propriedades dfdl:alignment, dfdl:fillByte e propriedades associadas.
- Como qualquer valor inexistente é descrito? Essa característica determina as propriedades dfdl:nilKind, dfdl:nilValue e propriedades associadas.
- Uma asserção ou um discriminador é necessário para estabelecer se o elemento existe?
- Elementos simples
- O elemento é uma representação de texto ou binária? A representação e o tipo simples determinam quais outras propriedades precisam ser configuradas.
- Para texto, as propriedades são dfdl:encoding e as várias propriedades relacionadas ao texto de DFDL.
- Para binário, as propriedades são dfdl:byteOrder e as várias propriedades relacionadas ao binário de DFDL.
- Para formatos de texto, um esquema de escape é necessário? Essa característica determina se uma anotação dfdl:defineEscapeScheme é necessária. Se for, dfdl:escapeSchemaRef irá referenciá-la.
- Se tipos simples globais forem identificados, decida se o tipo simples pode ter algumas das propriedades em vez do elemento, criando assim tipos físicos reutilizáveis.
- Sequências
- A sequência está ordenada ou desordenada? Essa característica determina a propriedade dfdl:sequenceKind.
- Ela possui um separador que é utilizado para delimitar seus elementos filhos e, se sim, a posição do separador é infix, prefix ou postfix?
Os separadores são, às vezes, suprimidos (por exemplo, quando elementos opcionais estão ausentes)? Essas características determinam as propriedades dfdl:codificação, dfdl:separador, dfdl:separatorPosition e
dfdl:separatorSuppressionPolicy.
- Todos os elementos filhos da sequência possuem inicializadores exclusivos que podem identificar que eles existem? Essa característica determina a propriedade dfdl:initiatedContent.
- A própria sequência tem um iniciador ou um terminador? Essa característica determina as propriedades dfdl:initiator, dfdl:terminator, dfdl:encoding e propriedades associadas.
- Opções
- Existe ou não uma opção onde todas as ramificações devem ocupar o mesmo comprimento? Essa característica determina a propriedade dfdl:choiceLengthKind e propriedades associadas.
- Todas as ramificações da opção possuem inicializadores exclusivos que podem identificar qual deles aparece? Essa característica determina a propriedade dfdl:initiatedContent.
- Há discriminadores necessários nas ramificações para estabelecer qual deles aparece?
- A opção tem um iniciador ou um terminador? Essa característica determina as propriedades dfdl:initiator, dfdl:terminator, dfdl:encoding e propriedades associadas.

Para continuar com o exemplo de um arquivo de registros de funcionários, no qual todos os dados são de texto, com dfdl:encoding de ASCII.
- O elemento employees não possui um inicializador ou um terminador, portanto,
dfdl:initiator e dfdl:terminator são configurados para a sequência vazia ''. Seu comprimento é determinado por seus elementos filhos, portanto, dfdl:lengthKind é implicit.
- A sequência para employees possui dfdl:sequenceKind ordered, porque seus componentes filhos sempre aparecem na ordem especificada.
- O elemento employeeRecords inicia com {, portanto, possui dfdl:initiator {{. (As duas chaves de abertura ({{) são necessárias para evitar que o inicializador
de DFDL seja mal interpretado como uma expressão DFDL.) O elemento termina com } e CR/LF e, portanto, possui dfdl:terminator }%CR;%LF;. (Uma alternativa é modelar } e CR/LF como o separador da sequência pai.) Novamente, seu comprimento é determinado pelos seus elementos filhos, portanto dfdl:lengthKind é implicit.
- Sua sequência possui dfdl:sequenceKind ordered.
- Cada elemento simples possui dfdl:representation text. Cada um possui uma tag de início exclusiva que é utilizada como dfdl:initiator. Cada um possui um valor de comprimento variável que é delimitados por ',' ou, se o elemento for o último no registro, por } e CR/LF. Consequentemente, dfdl:lengthKind é delimited.
- O delimitador ',' é melhor modelado como dfdl:separator da sequência pai,
e não como dfdl:terminator do elemento. dfdl:separatorPosition é infix,
o que significa que ',' ocorre somente entre os elementos filhos na sequência.
- Como cada elemento simples possui um inicializador, dfdl:initiatedContent yes deve ser configurado na sequência pai. Isso significa que o analisador utiliza o inicializador para identificar positivamente cada elemento.
- Embora o elemento salary seja opcional, nenhum discriminador de DFDL é necessário porque o analisador de DFDL deduz que ele esteja ausente quando localiza o terminador employeeRecord. Quando salary está ausente, observe que o delimitador ',' antes dele é suprimido. Ou seja, ele é modelado utilizando dfdl:separatorSuppressionPolicy trailingEmpty na sequência pai.
- Várias outras propriedades relacionadas ao texto devem ser configuradas para cada elemento simples. Essas propriedades controlam se
algum preenchimento ou corte ocorre e se um esquema de escape está em uso para evitar que caracteres de dados sejam interpretados como delimitadores.
- Diversas outras propriedades específicas de tipo devem ser configuradas para cada elemento simples, para controlar a interpretação do valor dos dados. Por exemplo, o elemento permanent é do tipo
xs:boolean e por isso necessita de dfdl:textBooleanTrueRep Y e dfdl:textBooleanFalseRep
N.
O estágio a seguir é para organizar o modelo DFDL:
Organizando o modelo DFDL.