Partilhar via


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.