Tipo de dados de modelo de enumerador
O tipo de dados ENUMERATOR permitiu valores limitados a um conjunto de tokens.
*DataType: ENUMERATOR direciona um modelo para definir um tipo de dados de enumeração. Esse tipo de dados será gerado como uma declaração simpleType de esquema XML derivada do tipo de cadeia de caracteres com restrições para especificar cada enumerador permitido. As seguintes diretivas são usadas para definir completamente o tipo de dados ENUMERATOR:
*XMLDataType (Obrigatório). O NCName a ser atribuído ao tipo de dados XML que será usado para definir essa enumeração no esquema XML gerado. Cada tipo de enumeração deve ter um NCName exclusivo. Esse nome deve ser exclusivo para todos os tipos XSD_DEFINED e ENUMERATOR. Para evitar conflitos com tipos de dados definidos pelo analisador de GDL, você deve evitar NCNames que começam com "GDL_" e "GDLW_".
*EnumeratorList (Obrigatório). A lista de tokens de enumerador. Cada token deve ser um símbolo de GDL válido e deve estar em conformidade com quaisquer requisitos adicionais que o esquema XSD impõe para o valor do componente de esquema: <enumeração>.
*ArrayLabel (opcional). Se essa diretiva for especificada, o filtro de analisador espera que o valor seja colocado entre parênteses, precedido pelo rótulo de matriz especificado.
O valor a ser analisado como um tipo de dados ENUMERATOR deve corresponder a um dos tokens definidos pela diretiva *ElementTags.
Considere o modelo a seguir.
*Template: COLORS
{
*Type: DATATYPE
*DataType: ENUMERATOR
*XMLDataType: "colors"
*EnumeratorList: (YELLOW, MAGENTA, CYAN, BLACK, RED, GREEN, BLUE)
}
O modelo anterior fará com que o filtro do analisador crie a seguinte entrada de esquema XML.
<simpleType name = "colors">
<restriction base="string">
<enumeration value="YELLOW"/>
<enumeration value="MAGENTA"/>
<enumeration value="CYAN"/>
<enumeration value="BLACK"/>
<enumeration value="RED"/>
<enumeration value="GREEN"/>
<enumeration value="BLUE"/>
</restriction>
</simpleType>
O filtro do analisador também criará o tipo de dados encapsulado correspondente.
<complexType name = "GDLW_colors">
<simpleContent>
<extension base="gdl:colors">
<attribute name="Name" type="string" use="optional"/>
<attribute name="Personality" type="string" use="optional"/>
</extension>
</simpleContent>
</complexType>
Considere a entrada GDL a seguir.
*Color: GREEN
E considere o modelo ACOLOR, que declara que o atributo *Color GDL tem um *ValueType definido pelo modelo COLORS, como mostra o exemplo de código a seguir.
*Template: ACOLOR
{
*Name: "*Color"
*Type: ATTRIBUTE
*ValueType: COLORS
*Additive: LEAST_TO_MOST_RECENT
}
Se a entrada GDL anterior for interpretada usando o modelo ACOLOR, a saída XML resultante ocorrerá.
<GDL_ATTRIBUTE Name="*Color" xsi:type="GDLW_colors" >GREEN</GDL_ATTRIBUTE>
O atributo XML xsi:type define essa instância do elemento GDL_ATTRIBUTE para manter um tipo de valor definido pelo modelo que representa uma enumeração definida no namespace padrão XML.