Tipos de datos de plantilla de matriz
Los tipos de datos ARRAY constan de uno o más valores que todos tienen el mismo tipo de datos. Las matrices se pueden definir para que sean fijas, variables o longitud indefinida.
*DataType: ARRAY dirige una plantilla para definir un tipo de datos compuesto cuyos miembros son todos del mismo tipo de datos (también conocido como el tipo de datos de los miembros). Los miembros del tipo de datos de matriz se generarán como elementos secundarios XML individuales que pertenecen al elemento que representa el contexto envolvente.
Si cada elemento secundario representa un primitivo de tipo de datos, el tipo de datos se definirá mediante el atributo XML xsi:type en cada elemento. Si se define un atributo GDL para que sea de tipo de datos ARRAY, el contexto envolvente será el <elemento GDL_ATTRIBUTE> . El nombre del elemento de cada elemento secundario XML será la etiqueta correspondiente que define la directiva *ElementTags . Si composite es un miembro de otro tipo de datos compuesto, se creará un elemento para representar ese contexto envolvente. El nombre de este elemento primario será la etiqueta correspondiente asignada por la plantilla que definió el tipo de datos compuesto envolvente.
Las directivas siguientes se usan para definir el tipo de datos ARRAY:
*ElementType (obligatorio). Nombre de la plantilla que define el tipo de datos de todos los elementos. Solo puede especificar un tipo de datos.
*RequiredDelimiter (obligatorio). Cadena que separará sintácticamente cada elemento de matriz de la siguiente. Dos delimitadores consecutivos se interpretarán como un elemento omitido. Los delimitadores no son necesarios para indicar la omisión de los elementos finales. Tenga mucho cuidado si el espacio en blanco se usa como delimitador o como parte de la cadena delimitador. Por ejemplo, el analizador interpretará los caracteres de espacio extraños como indica los elementos omitidos; y como es posible que no pueda ver estos caracteres de espacio en blanco adicionales, es posible que encuentre errores inesperados de análisis.
Además, el exceso de espacios en blanco se quita rutinariamente del archivo de origen y el espacio en blanco se agrega a menudo al flujo de entrada como resultado del procesamiento de preprocesador, macro y comentario. Por lo tanto, la cadena real que se analiza podría tener un número completamente diferente de caracteres de espacio de los especificados originalmente.
No debe usar caracteres de tabulación como parte de la cadena de delimitador necesaria porque se convierten rutinariamente en caracteres de espacio durante el procesamiento de entrada.
*OptionalDelimiter (Opcional). Cualquier cadena que consta de caracteres especificados en *OptionalDelimiter y que aparecen adyacentes a la cadena *RequiredDelimiter se considerará parte del delimitador. El primer carácter que se define en la cadena *RequiredDelimiter no debe aparecer dentro del *OptionalDelimiter.
*ElementTags (obligatorio). Si desea asignar todos los elementos de la matriz con el mismo nombre de elemento (o si la matriz puede tener un tamaño ilimitado), proporcione solo una etiqueta. De lo contrario, proporcione un número igual al valor máximo que especifica *ArraySize .
Cada miembro de la matriz se denominará con la etiqueta correspondiente. Esta nomenclatura es útil si se omiten uno o varios elementos de matriz. Cuando se omiten los elementos de matriz, no se usa la etiqueta que corresponde al elemento omitido. Para evitar confundir al cliente, no use nombres de elementos reservados de instantánea de GDL (es decir, CONSTRUCT, ATTRIBUTE y Personalidad), como nombres de etiqueta.
*ArraySize (obligatorio). Use un entero para especificar el tamaño de una matriz de tamaño fijo o use dos enteros para especificar el tamaño mínimo y máximo permitido para una matriz de tamaño variable. Tenga en cuenta que se permite cero para el tamaño mínimo y el carácter comodín GPD (*) se puede usar para especificar el tamaño o el tamaño máximo. Indique valores omitidos en los datos de instancia con comas consecutivas (por ejemplo,
*DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,
).*ArrayLabel (opcional). Si se especifica esta directiva, la lista de elementos de matriz debe ir entre paréntesis y estar precedida por la etiqueta *ArrayLabel . Si no se especifica ninguna etiqueta en esta directiva, los paréntesis son opcionales y no se permite ninguna etiqueta de prefijo.
Tenga en cuenta la siguiente plantilla.
*Template: RECTANGLE
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INTEGER
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ArrayLabel: "rect"
*ElementTags: (left, top, right, bottom)
*ArraySize: 4
}
Esta plantilla define una matriz de cuatro enteros de tamaño fijo. A la matriz se le asigna una etiqueta (rect
) y a cada elemento de la matriz se le asigna una etiqueta de elemento único. Estas etiquetas etiquetarán cada elemento de la salida XML para ayudar al cliente. Cada elemento está separado del siguiente por una coma o una coma más cualquier combinación de caracteres de espacio y tabulación. Dado que el tamaño de la matriz es fijo, no se permite ninguna omisión de elementos.
*DataType: las plantillas ARRAY no generan un esquema correspondiente. En su lugar, se usa el esquema de la plantilla denominada en la directiva *ElementType .
Tenga en cuenta la siguiente entrada GDL.
*ImageableArea: rect( - 10, 20 , +30, 0x40 )
Y considere la plantilla IMAGERECT.
*Template: IMAGERECT
{
*Name: "*ImageableArea"
*Type: ATTRIBUTE
*ValueType: RECTANGLE
}
Si la plantilla IMAGERECT interpreta la entrada GDL, la salida 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>
Tenga en cuenta que la referencia es al tipo ajustado GDLW_int en lugar del int original.