A module defines a namespace. Modules can be spread over more than one file. A module file can contain one or more classes. All classes in the same module, can access each other's exported interface without the need for an import statement. Modules have a time stamp and a file name that is generated when the application is changed. The time stamp and file name used to ensure consistancy with a binary cache. Note that a particular version of Rapid may not implement all the features defined by this schema. In order for onemodule to acess elements in other module, that other module must be specified in an import statement or element. If a module and a class is specified in the import element, then just that class is imported. More than one import element may be provided. If just a module is specified without a class, then all classes in that module are imported. Of course only exported elements in a class are visible. An interface is like a class but without an implementation. Classes can only extend a single superclass, but a class can implement any number of interfaces. If a holder is defined to hold a particular interface. Then the holder can hold any class that implements that interface. In an Interface, a block can only be defined on a constant function and the block itself must contain only constant values. Such a function is useful for dealing with derived constant values and configuration issues. Details about the class The superclass for this class or interface. An interface that this class implements. The designated version for this class definition, if it is different from the module version. Classes can be associated with aspects of the application. This corresponds to the concept of application and subapplication from Envy. Class is used to define new types of objects. Currently classes derived from UDO and classes derived from RPDataStore are supported. Class derived from UDO normally have a state machine. Otherwise they would not do anything interesting. A class, other than a dataStore, that does not have a stateMachine is essentially an object type as understood in most Object-Oriented languages: that is, a encapsulated package of private data with the exposed functionality to manipulate that data. In future, many of the RapidPLUS objects will be be abl;e to be written in RapidPLUS and extended by RapidPLUS developers. DataStore schema are defined as classes rather than being defined within the dataStore instance as is the case in RapidPLUS today. Defining a dataStore as a class has several important advantages. 1. The dataStore schema can be reused in multiple dataStore instances without having to be defined anew each time. 2. The datatStore schema can be seen and accessed within functions. That is functions can access fields and records of dataStore arguments. 3. The dataStore instance can be passed to other UDOs and these UDOs will be able to access the fields and records. 4. Once inheritance is implemented in RapidPLUS, new dataStores can be extensions of existing ones. Note that classes within a module can be specified to be private within that module. This is done with the "private" attribute. A class can be either an object or UDO class or a dataStore. The order of the elements is important. The order of the elements is important. All exported properties (variables) and functions are contained within the export tags. Like most features in XML there are many ways to express the same concepts. An alternative way to deal with exported elements is to add the "exported" attribute to them. This has the advantage over the export tag in that changing the export status of an object only requires changing the value of an attribute. This is in contrast to here where, in order to change the export status of an an object, the object must be dragged or copy and pasted into the relevant section. However, since readability, rather than editability was the overriding motivation here, having all the exported elements concentrated in one section makes it easy to see the whole UDO exported interface in one glance. The order of the exported elements is maintained as follows: Classes and Structure defs Events Unions and Structures Variables and objects Functions Unions and structures All non exported variables and functions must be contained in the private section. The order of the private elements is not important. This specifies the fields in a record for instances of the dataStore subclass Common attributes for all data variables. In order to simplify, the amount of tags necessary, notes for data objects are attributes rather than elements. All variable types for a class A named note. This is a note associated with a variable with the same name. All field types for a dataStroe class Attributes common to all properties These are the types that are valid properties for objects. These are the types that can be exported by an interface. These must have the constant attribute set. Common attributes for all numeric valued data variables RapidPLUS Integer Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation Primitve string type for code generation RapidPLUS boolean. Can also be return value from subroutine Primitive numeric type for code generation Primitive numeric type for code generation Primitive numeric type for code generation RapidPLUS Number RapidPLUS String RapidPLUS point Private type Multiple float values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple double values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple long double values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple Integer values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple Number values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple long values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple unsigned long values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple int values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple unsigned int values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple short values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple unsigned short values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple character values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple unsigned character values listed within a single tag. This format is used instead of CSV since this way a XML parser can validate the data. Private type Multiple String values listed within a single tag. The String values can only be strings without whitespaces Attributes common to all object variables. Version is optional but recommended to avoid incompatibilities between applications. Object type definition that can appear as the type of array element or holder type Object instance value that can appear as array element or held element Generic object. Any variable that is not a built-in data variable or one of the pre-defined object types such as Font. The order that graphics objects are declared is the order that they appear in the application display list, that is, determines their z-ordering. An object must have a type and a name. Objects have an optional parent attribute. This only needs to be used if the object has a graphic parent different from TopPanel, for example a group. Specifies events produced by UDOs A dataStore record in cvs format. This represents a single record. A record with elements from each field Field data for a dataStore record A instance of a dataStore class. Types that an array variable is allowed to hold Element values that can be given to a holder variable Object holder type. The type attribute specifies the class of object held. The value is the name of the default object held. Instance of a holder Element values that can be given toan array variable Single character value within a tag. Single int value within a tag. Single long value within a tag. Single String value within a tag. Single short value within a tag. Single unsigned character value within a tag. Single unsigned int value within a tag. Single unsigned long value within a tag. Single unsigned short value within a tag. Single Integer value within a tag. Single Number value within a tag. Attributes that arrayValueTaypes can have Types that an array that is a variable in a class is allowed to hold An array variable or an array that is an object attribute. The dimension of the array is specified in the "dim" attribute as a list of integers. Used to hold object references in an object array. The value should be the name of private or exported object. Block of logic. In future that may or may not be recursive. List of children in a mode. The default child can be specified if there is one. Transition condition A local scope The logic held by a block. Entry activity Transition event Exit activity Common attributes for function arguments These are the argument types that can be passed to a function. Each field must have a name, and can be flagged as a pointer (holder). The types that this array can hold are defined by the group arrayTypes. Attributes that return data values can have These are the array types that an array that is a function argument or return value can hold. Specifies object class A reference to an existing structure definition These are the array types that an array can hold. Subroutine that returns boolean can be used as a condition subroutine. This is the signiture of a function Definition of a function Function or subroutine Specifies the name of an attached object Lists of attachments for RapidPLUSXpress applications Definition of mode element type. Mode elements themselves can be either exclusive Mode or concurrent Mode An exclusive mode A concurrent mode Mode activity This appears as a note in RapidPLUS. If the name attribute is used, the note will be associated with a variable type element of the same name. Since most elements have notes as an optional nested element, the use of the name attribute for a note only will be usefull for associating notes with built-in data types such as Integer, String etc. Any class except a dataStore class can have a stateMachine specified. If a stateMachine is not defined then the class describes an traditional Object-Oriented object type: that is data packaged together with the interface to manipulate that data. Enumeration of transition types A state machine transition. The destination is always required. It may be "" for internal transitions. type must be one of: internal default history deep history Color constants are: black blue brown cyan darkBlue darkCyan darkGray darkPink darkRed gray green pink red white yellow Color constant as a list of bytes in the form r g b Color type. Value can be a named constant (one of colorList) or a rgb attribute. Color constants are: black blue brown cyan darkBlue darkCyan darkGray darkPink darkRed gray green pink red white yellow. rgb values are expressed as a list of integers: e.g. 255:255:255 Color object. Represents a named object whose value is a color type Font face type used to describe fonts Font type element that is the value of a Font object The building block for structures Structures, unions and structure fields must have a name and can be a pointer These are thefields that can be held by a structure. Each field must have a name, and can be flagged as a pointer. The types that this array can hold are defined by the group structureArrayData. A top level union definition. It does not generate a variable. A top level structure definition. It does not generate a variable. A structure instance and local definition. The name specifies the instance name and if the def attribute is not present, a local structure definition. If a structure has the def attribute, this specifies that this structure is an instance of the structure definition specified in value of the def attribute. This def value can be either the name of a structureDef or the name of a local structure instance. A union. Resource data. This can be either an external URL or file or embedded data Resource as raw data. The data is specified as a MIME encoded string. External resource . This may be a file or an URL. This defines the attributes that metadata elements can have This is used to supply code generation and default metadata Line primitive compatible with SVG except that values are integer Point primitive. This does not exist in SVG. Rectangle primitive compatible with SVG except that values are integer Circle primitive compatible with SVG except that values are integer Array definition for arguments, return values and holders Definition of user defined enumeration type or constant set. Symbolic values that define the enumeration type. These amy or may not have numeric values. If the enumeration represaents a constant set, then all the symbols are expected to have values. Symbolic values that define the enumeration type. These amy or may not have numeric values. If the enumeration represaents a constant set, then all the symbols are expected to have values. Instance of an enumeration. The type is specified by the value of the def attribute