Definición de tipos de datos mediante plantillas
Todos los tipos de datos, tanto primitivos como compuestos, deben definirse mediante una plantilla. Una vez definido un tipo de datos, cualquier plantilla de atributo puede declarar su valor para que sea de un tipo de datos específico mediante la directiva *ValueType . El valor de esta directiva es el nombre de una plantilla de tipo de datos.
Cuando el filtro del analizador encuentra una entrada de datos GDL que es una instancia de un atributo, intentará analizar la parte del valor de esa entrada de acuerdo con las reglas de sintaxis definidas para ese tipo de datos. Si se ejecuta correctamente, el filtro del analizador descompone el tipo de datos en sus tipos de datos xml equivalentes primitivos y generará esos valores en el XML adecuado. El XML generado que representa un tipo de datos compuesto conserva la estructura lógica de la definición del tipo de datos original. Los elementos secundarios de un tipo de datos compuesto reciben nombres definidos por etiquetas definidas en la plantilla de tipo de datos. Esta nomenclatura permite a un lector humano o cliente de software de la instantánea XML localizar e identificar fácilmente cada valor en un tipo de datos compuesto.
Una plantilla se designa como una plantilla de tipo de datos (una que define un tipo de datos) estableciendo la directiva *Type: DATATYPE . Las directivas que se reconocen dentro de una plantilla de tipo de datos son:
*ValueType: [Nombre de plantilla de tipo de datos]. Esta directiva declara el valor de un atributo para que sea de un tipo de datos determinado. La directiva *ValueType solo puede aparecer dentro de las plantillas de atributo. (Las plantillas de atributo son plantillas con la directiva *Type: ATTRIBUTE ).
*DataType: símbolo. Esta directiva tiene uno de los siguientes valores: PASSTHROUGH, XML_TYPE, XSD_DEFINED, ENUMERATOR, FILTER_TYPE, ARRAY, COMPOSITE o MULTIPLE_PERSONALITY.
*ElementType: list. Esta directiva define una lista de nombres de tipo de datos TEMPLATE.
*RequiredDelimiter: delimitador. Esta directiva define un delimitador con una cadena entre comillas.
*OptionalDelimiter: delimitador. Esta directiva define un delimitador opcional con una cadena entre comillas.
*ArrayLabel: símbolo. Esta directiva define una etiqueta de matriz con una cadena entre comillas.
*ElementTags: list. Esta directiva define una lista de símbolos que se usarán para las etiquetas de elemento.
*EnumeratorList: list. Esta directiva define una lista de símbolos que se van a usar para una lista de enumeradores.
*XSDTypeDefinition: símbolo. Esta directiva define un valor arbitrario, entre los <elementos Begin/EndValue> , que se usarán para una definición de tipo XSD.
*ComplexType?: booleano. Esta directiva define si un tipo es complejo o no. Si el valor es TRUE, el tipo es complejo; de lo contrario, el tipo es simple.
*ArraySize: entero. Esta directiva define el intervalo de una matriz. Puede usar hasta dos enteros para especificar un intervalo de matriz.
*XMLDataType: cadena. Esta directiva define un tipo de datos XML con una cadena entre comillas.
FilterTypeName: cadena. Esta directiva define un nombre de tipo de filtro mediante una cadena entre comillas.
*MaxValue: entero. Esta directiva define el tamaño máximo de un valor mediante un entero GDL.
*MinLength: entero. Esta directiva define la longitud mínima de un valor mediante un entero GDL no negativo.
*MaxLength: entero. Esta directiva define la longitud máxima de un valor mediante un entero GDL no negativo.
Nota No todas las directivas se reconocen en todas las plantillas de tipo de datos.
En general, si no se puede enlazar ninguna plantilla a la entrada del atributo GDL, el valor de ese atributo se emitirá en la instantánea sin ningún cambio dentro de una sección de CDATA. El CDATA residirá como contenido de elemento (es decir, el elemento secundario) del elemento ATTRIBUTE.
Por ejemplo, supongamos que el analizador no puede encontrar una plantilla que describa la siguiente entrada de atributo GDL.
*ModelName: "OEMName LaserJet "
A continuación, la entrada aparecerá en la instantánea como se indica a continuación.
<GDL_ATTRIBUTE Name="*ModelName"
<![CDATA["OEMName LaserJet "]]></GDL_ATTRIBUTE>