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