Tipos de dados de modelo de matriz
Os tipos de dados ARRAY consistem em um ou mais valores que têm o mesmo tipo de dados. As matrizes podem ser definidas para ter comprimento fixo, variável ou indefinido.
*DataType: ARRAY direciona um modelo para definir um tipo de dados composto cujos membros são todos do mesmo tipo de dados (também conhecido como o tipo de dados dos membros). Os membros do tipo de dados de matriz serão gerados como elementos filho XML individuais que pertencem ao elemento que representa o contexto delimitador.
Se cada elemento filho representar um tipo de dados primitivo, o tipo de dados será definido pelo atributo XML xsi:type em cada elemento. Se um atributo GDL for definido como do tipo de dados ARRAY, o contexto delimitador será o <elemento GDL_ATTRIBUTE> . O nome do elemento de cada elemento filho XML será a marca correspondente definida pela diretiva *ElementTags . Se o COMPOSITE for um membro de outro tipo de dados composto, um elemento será criado para representar esse contexto delimitador. O nome desse elemento pai será a marca correspondente atribuída pelo modelo que definiu o tipo de dados composto delimitador.
As seguintes diretivas são usadas para definir o tipo de dados ARRAY:
*ElementType (Obrigatório). O nome do modelo que define o tipo de dados de todos os elementos. Você pode especificar apenas um tipo de dados.
*RequiredDelimiter (Obrigatório). Uma cadeia de caracteres que separará sintaticamente cada elemento de matriz do próximo. Dois delimitadores consecutivos serão interpretados como um elemento omitido. Delimitadores não são necessários para indicar a omissão de elementos à direita. Tenha muito cuidado se o espaço em branco for usado como delimitador ou como parte da cadeia de caracteres delimitador. Por exemplo, caracteres de espaço desnecessários serão interpretados pelo analisador como indicando elementos omitidos; e, como talvez você não consiga ver esses caracteres de espaço em branco extras, poderá encontrar erros de análise inesperados.
Além disso, o espaço em branco em excesso é rotineiramente removido do arquivo de origem e o espaço em branco geralmente é adicionado ao fluxo de entrada como resultado do pré-processador, da macro e do processamento de comentários. Portanto, a cadeia de caracteres real analisada pode ter um número completamente diferente de caracteres de espaço do que o especificado originalmente.
Você não deve usar caracteres de tabulação como parte da cadeia de caracteres delimitador necessária porque eles são convertidos rotineiramente em caracteres de espaço durante o processamento de entrada.
*OptionalDelimiter (opcional). Qualquer cadeia de caracteres que consiste em caracteres especificados em *OptionalDelimiter e que aparecem adjacentes à cadeia de caracteres *RequiredDelimiter será considerada parte do delimitador. O primeiro caractere definido na cadeia de caracteres *RequiredDelimiter não deve aparecer dentro de *OptionalDelimiter.
*ElementTags (Obrigatório). Se você quiser atribuir a cada elemento na matriz o mesmo nome de elemento (ou se a matriz puder ser de tamanho ilimitado), forneça apenas uma marca. Caso contrário, forneça um número igual ao valor máximo especificado por *ArraySize .
Cada membro da matriz será nomeado com a marca correspondente. Essa nomenclatura será útil se um ou mais elementos de matriz forem omitidos. Quando elementos de matriz são omitidos, a marca que corresponde ao elemento omitido não é usada. Para evitar confundir o cliente, não use GDL instantâneo nomes de elemento reservados (ou seja, CONSTRUCT, ATTRIBUTE e Personality) como nomes de marca.
*ArraySize (Obrigatório). Use um inteiro para especificar o tamanho de uma matriz de tamanho fixo ou use dois inteiros para especificar o tamanho mínimo e máximo permitido para uma matriz de tamanho variável. Observe que zero é permitido para o tamanho mínimo e o caractere curinga GPD (*) pode ser usado para especificar o tamanho ou o tamanho máximo. Indique valores omitidos nos dados da instância com vírgulas consecutivas (por exemplo,
*DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,
).*ArrayLabel (opcional). Se essa diretiva for especificada, a lista de elementos de matriz deverá ser colocada entre parênteses e ser precedida pelo rótulo *ArrayLabel . Se nenhum rótulo for especificado nessa diretiva, os parênteses serão opcionais e nenhum rótulo de pré-fabricado será permitido.
Considere o modelo a seguir.
*Template: RECTANGLE
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INTEGER
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ArrayLabel: "rect"
*ElementTags: (left, top, right, bottom)
*ArraySize: 4
}
Este modelo define uma matriz de tamanho fixo de quatro inteiros. A matriz recebe um rótulo (rect
) e cada elemento na matriz recebe uma marca de elemento exclusiva. Essas marcas rotularão cada elemento na saída XML para ajudar o cliente. Cada elemento é separado do próximo por uma vírgula ou uma vírgula, além de qualquer combinação de caracteres de espaço e tabulação. Como o tamanho da matriz é fixo, nenhuma omissão de elemento é permitida.
*DataType: os modelos ARRAY não geram um esquema correspondente. Em vez disso, o esquema do modelo nomeado na diretiva *ElementType é usado.
Considere a entrada GDL a seguir.
*ImageableArea: rect( - 10, 20 , +30, 0x40 )
E considere o modelo IMAGERECT.
*Template: IMAGERECT
{
*Name: "*ImageableArea"
*Type: ATTRIBUTE
*ValueType: RECTANGLE
}
Se a entrada GDL for interpretada pelo modelo IMAGERECT, a saída XML resultante será.
<GDL_ATTRIBUTE Name="*ImageableArea" >
<left xsi:type="GDLW_int">-10</left>
<top xsi:type="GDLW_int">20</top>
<right xsi:type="GDLW_int">30</right>
<bottom xsi:type="GDLW_int">64</bottom>
</GDL_ATTRIBUTE>
Observe que a referência é para o tipo encapsulado GDLW_int em vez do int original.