Condividi tramite


Tipi di dati dei modelli XML nativi

Il tipo di dati XML nativo è definito come XML_TYPE.

La sintassi è definita da XML. È possibile definire qualsiasi tipo di dati riconosciuto dallo schema XML. Il filtro del parser non dipende dai tipi di dati XML in modo che il parser corrente possa supportare i tipi di dati XML futuri senza modifiche.

*DataType: XML_TYPE associa un modello a un tipo di dati semplice predefinito per un linguaggio di definizione dello schema XML specifico. Il valore dei dati dell'istanza verrà restituito come contenuto di un elemento XML il cui tipo xsi:type è derivato dal costrutto *XMLDataType specificato da questo modello.

Le direttive seguenti vengono usate per definire il tipo di dati XML_TYPE:

  • *XMLDataType (obbligatorio). Qualsiasi tipo semplice di schema XSD predefinito. La raccomandazione World Wide Web Consortium (W3C) per lo schema XML riconosce i tipi di dati semplici seguenti: string, normalizzatoString, token, byte, unsignedByte, base64Binary, hexBinary, integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double, boolean, time, date, date, gMonth, gYearMonth, gYearMonth, gDay, gMonthDay, Nome, QName, NCName, anyURI, language ID, IDREF, IDREFS, ENTITY, ENTITY, NOTATION, NMTOKEN e NMTOKENS. Si noti che il parser GDL non è limitato a questi tipi di dati ed è progettato per gestire i tipi di dati XML futuri senza modifiche.

  • *ArrayLabel (facoltativo). Se si specifica questa direttiva, il filtro del parser prevede che il valore venga racchiuso tra parentesi, preceduto dall'etichetta di matrice specificata.

La sintassi del valore deve rispettare la sintassi definita dallo standard XML W3C per tale tipo di dati specifico. Se la sintassi XML è in conflitto con le regole di sintassi GDL di base, il valore (o solo la parte in conflitto) deve essere racchiuso in <Begin/EndValue:> costrutti. I valori XML con tali sintassi incompatibili o la cui sintassi non è compatibile con la sintassi usata dai tipi di dati composti, non può essere visualizzata come membro di un tipo di dati composto. Si noti anche che il parser GDL non esegherà caratteri XML speciali come l'apertura o la chiusura di parentesi quadre (< o ) o >un amperand (&). L'autore del valore è responsabile della conformità alla sintassi XML per i dati dei caratteri.

Si consideri ad esempio il modello seguente.

*Template:  XML_STRING
{
    *Type:  DATATYPE
    *DataType:   XML_TYPE
    *XMLDataType: "string"
}

Se si usa il modello precedente, verrà creata la voce dello schema XML seguente. Questa voce definisce un nuovo tipo di dati derivato dal tipo originariamente specificato dalla direttiva *XMLDataType , ma questo nuovo tipo di dati include attributi XML aggiuntivi che possono essere visualizzati nello snapshot. Se è stato usato il tipo di dati originale, si riceveranno errori di convalida dello schema perché i tipi predefiniti originali non consentono la visualizzazione degli attributi XML.

    <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>

Prendere in considerazione la voce GDL seguente.

*Text: Hello World

Considerare il modello PHRASE, che dichiara l'attributo GDL *Text per avere un valore *ValueType definito dal modello XML_STRING, come illustrato nell'esempio di codice seguente.

*Template:  PHRASE
{
    *Name:  "*Text"
    *Type:  ATTRIBUTE
    *ValueType:  XML_STRING
}

Se la voce GDL precedente viene interpretata usando il modello PHRASE, si verificherà l'output XML seguente.

<GDL_ATTRIBUTE Name="*Text"  xsi:type="GDLW_string" >Hello World</GDL_ATTRIBUTE>

L'attributo XML xsi:type viene usato per specificare il tipo di dati mantenuto da questo elemento attributo perché lo schema non contiene alcuna dichiarazione per questo elemento.