Tipos de dados de modelo XML nativos
O tipo de dados XML nativo é definido como XML_TYPE.
A sintaxe é definida por XML. Qualquer tipo de dados reconhecido pelo esquema XML pode ser definido. O filtro do analisador não depende dos tipos de dados XML para que o analisador atual possa dar suporte a tipos de dados XML futuros sem nenhuma alteração.
*DataType: XML_TYPE associa um modelo a um tipo de dados simples interno para uma linguagem de definição de esquema XML específica. O valor de dados da instância será gerado como o conteúdo de um elemento XML cujo xsi:type é derivado do constructo *XMLDataType especificado por este modelo.
As seguintes diretivas são usadas para definir o tipo de dados XML_TYPE:
*XMLDataType (Obrigatório). Qualquer tipo simples interno de esquema XSD. A recomendação do W3C (World Wide Web Consortium) para o esquema XML reconhece os seguintes tipos de dados simples internos: string, normalizedString, token, byte, unsignedByte, base64Binary, hexBinary, integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double, boolean, time, dateTime, duration, date, gMonth, gYear, gYearMonth, gDay, gMonthDay, Name, QName, NCName, anyURI, language, ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN e NMTOKENS. Observe que o analisador GDL não está limitado a esses tipos de dados e foi projetado para lidar com tipos de dados XML futuros sem nenhuma alteração.
*ArrayLabel (opcional). Se você especificar essa diretiva, o filtro de analisador espera que o valor seja colocado entre parênteses, precedido pelo rótulo de matriz especificado.
A sintaxe do valor deve seguir a sintaxe que o padrão XML W3C define para esse tipo de dados específico. Se a sintaxe XML entrar em conflito com as regras básicas de sintaxe GDL, o valor (ou apenas a parte conflitante) deverá ser colocado entre <constructos Begin/EndValue:> . Valores XML com tais sintaxes incompatíveis ou cuja sintaxe é incompatível com a sintaxe usada por tipos de dados compostos, não podem aparecer como membros de um tipo de dados composto. Observe também que o analisador GDL não escapará de caracteres XML especiais, como abrir ou fechar colchetes (< ou >) ou um e comercial (&). O criador do valor é responsável por estar em conformidade com a sintaxe XML para dados de caracteres.
Por exemplo, considere o modelo a seguir.
*Template: XML_STRING
{
*Type: DATATYPE
*DataType: XML_TYPE
*XMLDataType: "string"
}
Se você usar o modelo anterior, a seguinte entrada de esquema XML será criada. Essa entrada define um novo tipo de dados derivado do tipo especificado originalmente pela diretiva *XMLDataType, mas esse novo tipo de dados tem atributos XML adicionais que podem aparecer no instantâneo. Se você usou o tipo de dados original, receberá erros de validação de esquema porque os tipos predefinidos originais não permitem que atributos XML apareçam.
<complexType name = "GDLW_string">
<simpleContent>
<extension base="string">
<attribute name="Name" type="string" use="optional"/>
<attribute name="Personality" type="string" use="optional"/>
</extension>
</simpleContent>
</complexType>
Considere a seguinte entrada GDL.
*Text: Hello World
Considere o modelo PHRASE, que declara o atributo GDL *Text como um *ValueType definido pelo modelo XML_STRING, como mostra o exemplo de código a seguir.
*Template: PHRASE
{
*Name: "*Text"
*Type: ATTRIBUTE
*ValueType: XML_STRING
}
Se a entrada GDL anterior for interpretada usando o modelo PHRASE, a saída XML a seguir ocorrerá.
<GDL_ATTRIBUTE Name="*Text" xsi:type="GDLW_string" >Hello World</GDL_ATTRIBUTE>
O atributo XML xsi:type é usado para especificar o tipo de dados que é mantido por esse elemento de atributo porque o esquema não contém nenhuma declaração para esse elemento.