Modular design is desirable as each module is constructed with artifacts that have a strong affinity for each other. Each artifact name can be made unique by incorporating the module name in it's identity. A module in TAQ is a scope and templates are sub-modules, each with it's own namespace distinct from that of the scope that encloses it,
Beyond defining a namespace, a scope can can be assigned a locale and hold properties set as key-value pairs. The built-in default scope is named "global" and it is implied when scope name is omitted from a reference to an artifact or template.
Identifiers
Identifiers in TAQ follow the Java naming syntax: identifiers begin with an alpha character which is followed by any number of alpha or numeric characters or "_" underscore. You see in all the TAQ examples a naming convention different from Java's camelCase. The convention is intended to make TAQ look different from Java and uses all lower-case names, with underscore character used to separate words eg. surface_area.
An identifier may refer to a scope, template, a term or a declared artifact such as an axiom list. Two and sometimes three identifiers may be combined to form a name using a period "." as a separator. Hence a name can be referred to as being 1-part, 2-part or 3-part according to the number of identifiers it contains.
Addresses
An address is a name containing two identifiers and an at '@' symbol to signify the scope part. A template address leads with the @ followed by scope and template identifiers, for example, "@Asia.megacities" for a template named "megacities" in a scope named "Asia". An artifact address has the scope as the last name preceded by an @, for example, "city_listy@Asia" for an axiom list named "city_list" in a scope named "Asia".The global scope is a special case in that the "global" identifier can be dropped leaving just the @ symbol, for example, "mega_city_list@"
Namespace Scheme
Addresses are not ambiguous while names other than 3-part ones potentially are. The compiler has a strategy for resolving 1 or 2 part names. A 1-part name search starts with the current namespace. If the referenced item is not found, a search is performed in the global scope.
A 2-part name search starts by assuming the first part identifies a template in the current scope. If the referenced item is not found, first part is assumed to be a scope and a search is performed in that scope. From this it follows that good practice is to avoid placing items in the global scope unless it is intentional and preferring to use addresses to reference items belong ing to a different namespace than the current one.