Freigeben über


GDL-Übung 2: Erben von virtuellen Vorlagen

Übung

Definieren Sie einen Datentyp, der eine Unicode-Zeichenfolge akzeptiert, die mit 2 Byte codiert ist, um 1 Unicode-Zeichen darzustellen. Definieren Sie dann nicht virtuelle Vorlagen, die von den zuvor definierten virtuellen Vorlagen erben. Ändern Sie nicht das Schema, das Sie in Übung 1 erstellt haben. Erstellen Sie eine GDL-Beispieldatendatei, und überprüfen Sie, ob das Schema ordnungsgemäß angewendet wurde. Erstellen Sie eine GDL-Beispieldatendatei, die nicht dem Schema entspricht, und überprüfen Sie, ob die Fehler erkannt wurden.

-Projektmappe

Die folgenden beiden Vorlagen definieren den Unicode-Datentyp.

*Include: MasterTemplate.gdl
 
*Template:  XML_STRING
{
    *Type:  DATATYPE
    *DataType:   XML_TYPE
    *XMLDataType: "string"
}
*Template:  NORMAL_STRING
{
    *Type:  DATATYPE
    *DataType:   FILTER_TYPE
    *ElementType:  XML_STRING
    *FilterTypeName: "NORMAL_STRING"
}

Die folgende Vorlage erbt von den Vorlagen, die in Übung 1 definiert sind. Es gibt ein Konstrukt mit dem Namen *Command und drei Typen von Attributen: *Name (der auf Der Stammebene angezeigt wird), *CommandName (der innerhalb eines *Command-Konstrukts angezeigt werden kann) und *UniName (der in beiden Kontexten angezeigt werden kann).

*Template:  COMMAND
{
    *Name:  "*Command"
    *Inherits: CONSTRUCTS
    *Instances:  <ANY>
}
*Template:  ROOT_NAME
{
    *Name:  "*Name"
    *Inherits: ROOT_ATTRIB
    *ValueType:  NORMAL_STRING
}
*Template:  CMD_NAME
{
    *Name:  "*CommandName"
    *Inherits: CONSTRUCT_ATTRIB
    *ValueType:  NORMAL_STRING
}
*Template:  UNIVERSAL_NAME
{
    *Name:  "*UniName"
    *Inherits: FREEFLOAT
    *ValueType:  NORMAL_STRING
}

Die folgende GDL-Datei entspricht dem angegebenen Schema.

*Name: "can only appear at root level"
*UniName:  "can appear anywhere"
*Command: X
{
    *CommandName:  "May only appear within a command"
    *UniName:  "can appear anywhere, even in a command"
    *Command: nested
    {
        *CommandName:  "nested commands are ok."
        *UniName:  "template defined a recursive nesting" 100 %
    }
}

Die folgende GDL-Datei entspricht nicht dem angegebenen Schema.

*CommandName:  "Error! May only appear within a command"
*Command: X
{
    *Name: "Error! can only appear at root level"
}