Definindo tipos de dados usando modelos
Todos os tipos de dados, tanto os tipos primitivos quanto os compostos, devem ser definidos usando um modelo. Depois que um tipo de dados é definido, qualquer modelo de atributo pode declarar seu valor como sendo de um tipo de dados específico usando a diretiva *ValueType . O valor dessa diretiva é o nome de um modelo de tipo de dados.
Quando o filtro do analisador encontra uma entrada de dados GDL que é uma instância de um atributo, ele tentará analisar a parte do valor dessa entrada de acordo com as regras de sintaxe definidas para esse tipo de dados. Se for bem-sucedido, o filtro do analisador decomporá o tipo de dados em seus tipos de dados XML equivalentes primitivos e produzirá esses valores no XML apropriado. O XML gerado que representa um tipo de dados composto retém a estrutura lógica da definição de tipo de dados original. Os elementos filho de um tipo de dados composto recebem nomes definidos por marcas definidas no modelo de tipo de dados. Essa nomenclatura permite que um leitor humano ou cliente de software do instantâneo XML localize e identifique facilmente cada valor em um tipo de dados composto.
Um modelo é designado como um modelo de tipo de dados (que define um tipo de dados) definindo a diretiva *Type: DATATYPE. As diretivas reconhecidas em um modelo de tipo de dados são:
*ValueType: [Nome do modelo de tipo de dados]. Essa diretiva declara que o valor de um atributo é de um tipo de dados específico. A diretiva *ValueType só pode aparecer em modelos de atributo. (Modelos de atributo são modelos com a diretiva *Type: ATTRIBUTE ).
*DataType: símbolo. Essa diretiva tem um dos seguintes valores: PASSTHROUGH, XML_TYPE, XSD_DEFINED, ENUMERATOR, FILTER_TYPE, ARRAY, COMPOSITE ou MULTIPLE_PERSONALITY.
*ElementType: lista. Essa diretiva define uma lista de nomes de tipo de dados TEMPLATE.
*RequiredDelimiter: delimitador. Essa diretiva define um delimitador com uma cadeia de caracteres entre aspas.
*OptionalDelimiter: delimitador. Essa diretiva define um delimitador opcional com uma cadeia de caracteres entre aspas.
*ArrayLabel: símbolo. Essa diretiva define um rótulo de matriz com uma cadeia de caracteres entre aspas.
*ElementTags: lista. Esta diretiva define uma lista de símbolos a serem usados para tags de elemento.
*EnumeratorList: lista. Essa diretiva define uma lista de símbolos a serem usados para uma lista de enumeradores.
*XSDTypeDefinition: símbolo. Essa diretiva define um valor arbitrário, entre <elementos Begin/EndValue> , a ser usado para uma definição de tipo XSD.
*ComplexType?: booleano. Essa diretiva define se um tipo é complexo ou não. Se o valor for TRUE, o tipo será complexo; caso contrário, o tipo será simples.
*ArraySize: inteiro. Essa diretiva define o intervalo de uma matriz. Você pode usar até dois inteiros para especificar um intervalo de matriz.
*XMLDataType: cadeia de caracteres. Essa diretiva define um tipo de dados XML com uma cadeia de caracteres entre aspas.
FilterTypeName: cadeia de caracteres. Essa diretiva define um nome de tipo de filtro usando uma cadeia de caracteres entre aspas.
*MaxValue: inteiro. Essa diretiva define o tamanho máximo de um valor usando um inteiro GDL.
*MinLength: inteiro. Essa diretiva define o comprimento mínimo de um valor usando um inteiro GDL não negativo.
*MaxLength: inteiro. Essa diretiva define o comprimento máximo de um valor usando um inteiro GDL não negativo.
Observação Nem todas as diretivas são reconhecidas em todos os modelos de tipo de dados.
Em geral, se nenhum modelo puder ser vinculado à entrada do atributo GDL, o valor desse atributo será emitido no instantâneo sem qualquer alteração em uma seção CDATA. O CDATA deve residir como conteúdo de elemento (ou seja, o elemento filho) do elemento ATTRIBUTE.
Por exemplo, suponha que o analisador não possa encontrar um modelo que descreva a seguinte entrada de atributo GDL.
*ModelName: "OEMName LaserJet "
Em seguida, a entrada aparecerá no instantâneo da seguinte maneira.
<GDL_ATTRIBUTE Name="*ModelName"
<![CDATA["OEMName LaserJet "]]></GDL_ATTRIBUTE>