Partilhar via


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.