Distributed Management Task Force, Inc.

Common Information Model (CIM) Specification

Version 2.2

June 14, 1999

Technical inquiries and editorial comments should be directed in writing to:

Distributed Management Task Force, Inc. (DMTF)

c/o MacKenzie Kesselring, Inc.
200 SW Market Street, Suite 450
Portland, OR 97201
(503) 294-0739
(503) 225-0765 (fax)

email: dmtf-info@dmtf.org

Additional electronic copies of this specification can be obtained free of charge from the Internet at:

ftp://ftp.dmtf.org

or

from the World Wide Web at:

http://www.dmtf.org

Additional hardcopies can be obtained for a fee by contacting the DMTF at the address listed above.

IMPORTANT INFORMATION AND DISCLAIMERS

1. THIS SPECIFICATION (WHICH SHALL INCORPORATE ANY REVISIONS, UPDATES, AND MODIFICATIONS HERETO) IS FURNISHED FOR INFORMATIONAL PURPOSES ONLY. INTEL CORPORATION, MICROSOFT CORPORATION, DIGITAL EQUIPMENT CORPORATION, HEWLETT-PACKARD COMPANY, INTERNATIONAL BUSINESS MACHINES CORPORATION, NOVELL INC., SUN MICROSYSTEMS, INC., COMPAQ COMPUTER CORPORATION, DELL COMPUTER CORP., SYMANTEC, THE SANTA CRUZ OPERATION, NEC TECHNOLOGIES, INC., OR ANY OTHER DMTF MEMBER MAKE NO WARRANTIES WITH REGARD THERETO, AND IN PARTICULAR DO NOT WARRANT OR REPRESENT THAT THIS SPECIFICATION OR ANY PRODUCTS MADE IN CONFORMANCE WITH IT WILL WORK IN THE INTENDED MANNER OR BE COMPATIBLE WITH OTHER PRODUCTS IN NETWORK SYSTEMS. NOR DO THEY ASSUME RESPONSIBILITY FOR ANY ERRORS THAT THE SPECIFICATION MAY CONTAIN OR HAVE ANY LIABILITIES OR OBLIGATIONS FOR DAMAGES INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL, INDIRECT, PUNITIVE, OR CONSEQUENTIAL DAMAGES WHETHER ARISING FROM OR IN CONNECTION WITH THE USE OF THIS SPECIFICATION IN ANY WAY. CORPORATIONS MAY FOLLOW OR DEVIATE FROM THIS SPECIFICATION AT ANY TIME.

2. NO REPRESENTATIONS OR WARRANTIES ARE MADE THAT ANY PRODUCT BASED IN WHOLE OR IN PART ON THE ABOVE SPECIFICATION WILL BE FREE FROM DEFECTS OR SAFE FOR USE FOR ITS INTENDED PURPOSE. ANY PERSON MAKING, USING OR SELLING SUCH PRODUCT DOES SO AT HIS OWN RISK.

3. THE USER OF THIS SPECIFICATION HEREBY EXPRESSLY ACKNOWLEDGES THAT THE SPECIFICATION IS PROVIDED AS IS, AND THAT THE DMTF, NEITHER INDIVIDUALLY NOR COLLECTIVELY, MAKE ANY REPRESENTATIONS, EXTEND ANY WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, ORAL OR WRITTEN, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR WARRANTY OR REPRESENTATION THAT THE SPECIFICATION OR ANY PRODUCT OR TECHNOLOGY UTILIZING ANY ASPECT OF THE SPECIFICATION WILL BE FREE FROM ANY CLAIMS OF INFRINGEMENT OF INTELLECTUAL PROPERTY, INCLUDING PATENTS, COPYRIGHT AND TRADE SECRETS OF ANY THIRD PARTY, OR ASSUMES ANY OTHER RESPONSIBILITIES WHATSOEVER WITH RESPECT TO THE SPECIFICATION OR SUCH PRODUCTS. IN NO EVENT WILL DMTF MEMBERS BE LIABLE FOR ANY LOSSES, DAMAGES INCLUDING, WITHOUT LIMITATION, THOSE DAMAGES DESCRIBED IN SECTION 1 ABOVE, COSTS, JUDGMENTS, OR EXPENSES ARISING FROM THE USE OR LICENSING OF THE SPECIFICATION HEREUNDER.

Abstract

The DMTF Common Information Model (CIM) is an approach to the management of systems and networks that applies the basic structuring and conceptualization techniques of the object-oriented paradigm. The approach uses a uniform modeling formalism that—together with the basic repertoire of object-oriented constructs—supports the cooperative development of an object-oriented schema across multiple organizations.

A management schema is provided to establish a common conceptual framework at the level of a fundamental typology—both with respect to classification and association, and with respect to a basic set of classes intended to establish a common framework for a description of the managed environment. The management schema is divided into these conceptual layers:

Participants

This list shows the names of the companies that participated in the Distributed Management Task Force - CIM Sub-Committee whose contributions made this document possible.

 

Change History

Version 1

Wednesday, April 09, 1997

First Public Release

Version 1.1

Thursday, October 23, 1997

Output after Working Groups input

Version 1.2a

Monday, November 03, 1997

Naming

Version 1.2b

Monday, November 17, 1997

Remove reference qualifier

Version 2.0a

Thursday, December 11, 1997

Apply pending changes and new metaschema

Version 2.0d

Thursday, December 11, 1997

Output of 12/9/1997 TDC, Dallas

Version 2.0f

Monday, February 16, 1998

Output of 2/3/1998 TDC, Austin

Version 2.0g

Thursday, February 26, 1998

Apply approved change requests and final edits submitted through 2/26/1998.

Version 2.2

Tuesday, June 14, 1999

Incorporate Errata and approved change requests through 1999-06-08

 

Contents

1 Introduction and Overview *

1.1 CIM Management Schema *

1.1.1 Core Model *

1.1.2 Common Model *

1.1.3 Extension Schema *

1.2 CIM Implementations *

1.2.1 CIM Implementation Conformance *

2 Meta Schema *

2.1 Definition of the Meta Schema *

2.2 Property Data Types *

2.2.1 Date, Time, and Interval Types *

2.2.2 Indicating Additional Type Semantics with Qualifiers *

2.3 Supported Schema Modifications *

2.3.1 Schema Versions *

2.4 Class Names *

2.5 Qualifiers *

2.5.1 Meta Qualifiers *

2.5.2 Standard Qualifiers *

2.5.3 Optional Qualifiers *

2.5.4 User-defined Qualifiers *

2.5.5 Mapping MIF Attributes *

2.5.6 Mapping Generic Data to CIM Properties *

3 Managed Object Format *

3.1 MOF usage *

3.2 Class Declarations *

3.3 Instance Declarations *

4 MOF Components *

4.1 Keywords *

4.2 Comments *

4.3 Validation Context *

4.4 Naming of Schema Elements *

4.5 Class Declarations *

4.5.1 Declaring a Class *

4.5.2 Subclasses *

4.5.3 Default Property Values *

4.5.4 Class and Property Qualifiers *

4.5.5 Key Properties *

4.6 Association Declarations *

4.6.1 Declaring an Association *

4.6.2 Subassociations *

4.6.3 Key References and Properties *

4.6.4 Object References *

4.7 Qualifier Declarations *

4.8 Instance Declarations *

4.8.1 Instance Aliasing *

4.8.2 Arrays *

4.9 Method Declarations *

4.10 Compiler Directives *

4.11 Value Constants *

4.11.1 String Constants *

4.11.2 Character Constants *

4.11.3 Integral Constants *

4.11.4 Floating-Point Constants *

4.11.5 Object Ref Constants *

4.11.6 NULL *

4.12 Initializers *

4.12.1 Initializing Arrays *

4.12.2 Initializing References Using Aliases *

5 Naming *

5.1 Background *

5.1.1 Management Tool Responsibility for an Export Operation *

5.1.2 Management Tool Responsibility for an Import Operation *

5.2 Weak Associations: Supporting Key Propagation *

5.2.1 Referencing Weak Objects *

5.3 Naming CIM Objects *

5.3.1 Namespace Path *

5.3.2 Model Path *

5.3.3 Specifying the Object Name *

5.4 Specifying Object Names in MOF Files *

5.4.1 Synchronizing Namespaces *

5.4.2 Building References Between Management Systems *

6 Mapping Existing Models Into CIM *

6.1 Technique Mapping *

6.2 Recast Mapping *

6.3 Domain Mapping *

6.4 Mapping Scratch Pads *

7 Repository Perspective *

7.1 DMTF MIF Mapping Strategies *

7.2 Recording Mapping Decisions *

Appendix A MOF Syntax Grammar Description *

Appendix B CIM META SCHEMA *

Appendix C Values for UNITS Qualifier *

Appendix D UML Notation *

Appendix E Glossary *

Appendix F Unicode Usage *

F.1 MOF Text *

F.2 Quoted Strings *

Appendix G Guidelines *

G.1 Mapping of Octet Strings *

G.2 SQL Reserved Words *

Appendix H References *

 

Table of Figures

Figure 1-1 Four Ways to Use CIM *

Figure 2-1 Meta Schema Structure *

Figure 2-2 Reference Naming *

Figure 2-3 References, Ranges, and Domains *

Figure 2-4 References, Ranges, Domains and Inheritance *

Figure 5-1 Definitions of instances and classes *

Figure 5-2 Exporting to MOF *

Figure 5-3 Information Exchange *

Figure 5-4 Example of Weak Association *

Figure 5-5 Object Naming *

Figure 5-6 Namespaces *

Figure 5-7 Namespace Path *

Figure 5-8 Pragma Example *

Figure 5-9 Namespace Path Example *

Figure 5-10 References Between Management Systems *

Figure 5-11 Example of Nonlocal Qualifier *

Figure 6-1 Technique Mapping Example *

Figure 6-2 MIF Technique Mapping Example *

Figure 6-3 Recast mapping *

Figure 7-1 Repository Partitions *

Figure 7-2 Homogeneous and Heterogeneous Export *

Figure 7-3 Scratch Pads and Mapping *

  1. Introduction and Overview
  2. This section describes the many ways in which the Common Information Model (CIM) can be used. It provides a context in which the details described in the later chapters can be understood.

    Ideally, information used to perform tasks is organized or structured to allow disparate groups of people to use it. This can be accomplished by developing a model or representation of the details required by people working within a particular domain. Such an approach can be referred to as an information model. An information model requires a set of legal statement types or syntax to capture the representation, and a collection of actual expressions necessary to manage common aspects of the domain (in this case, complex computer systems). Because of the focus on common aspects, the DMTF refers to this information model as CIM, the Common Information Model.

    This document describes an object-oriented meta model based on the Unified Modeling Language (UML). This model includes expressions for common elements that must be clearly presented to management applications (for example, object classes, properties, methods and associations). This document does not describe specific CIM implementations, APIs, or communication protocols – those topics will be addressed in a future version of the specification. For information on the current core and common schemas developed using this meta model, contact the Distributed Management Task Force.

    1. CIM Management Schema

Management schemas are the building blocks for management platforms and management applications, such as device configuration, performance management, and change management. CIM is structured in such a way that the managed environment can be seen as a collection of interrelated systems, each of which is composed of a number of discrete elements.

CIM supplies a set of classes with properties and associations that provide a well-understood conceptual framework within which it is possible to organize the available information about the managed environment. It is assumed that CIM will be clearly understood by any programmer required to write code that will operate against the object schema, or by any schema designer intending to make new information available within the managed environment.

CIM itself is structured into these distinct layers:

      1. Core Model
      2. The Core model is a small set of classes, associations and properties that provide a basic vocabulary for analyzing and describing managed systems. The Core model represents a starting point for the analyst in determining how to extend the common schema. While it is possible that additional classes will be added to the Core model over time, major re-interpretations of the Core model classes are not anticipated.

      3. Common Model
      4. The Common model is a basic set of classes that define various technology-independent areas. The areas are systems, applications, networks and devices. The classes, properties, associations and methods in the Common model are intended to provide a view of the area that is detailed enough to use as a basis for program design and, in some cases, implementation. Extensions are added below the Common model in platform-specific additions that supply concrete classes and implementations of the Common model classes. As the Common model is extended, it will offer a broader range of information.

      5. Extension Schema

The Extension schemas are technology-specific extensions to the Common model. It is expected that the Common model will evolve as a result of the promotion of objects and properties defined in the Extension schemas.

    1. CIM Implementations
    2. CIM is a conceptual model that is not bound to a particular implementation. This allows it to be used to exchange management information in a variety of ways; four of these ways are illustrated in Figure 1-1. It is possible to use these ways in combination within a management application.

      Figure -1 Four Ways to Use CIM

      As a repository (see the Repository Perspective section for more detail), the constructs defined in the model are stored in a database. These constructs are not instances of the object, relationship, and so on; but rather are definitions for someone to use in establishing objects and relationships. The meta model used by CIM is stored in a repository that becomes a representation of the meta model. This is accomplished by mapping the meta-model constructs into the physical schema of the targeted repository, then populating the repository with the classes and properties expressed in the Core model, Common model and Extension schemas.

      For an application DBMS, the CIM is mapped into the physical schema of a targeted DBMS (for example, relational). The information stored in the database consists of actual instances of the constructs. Applications can exchange information when they have access to a common DBMS and the mapping occurs in a predictable way.

      For application objects, the CIM is used to create a set of application objects in a particular language. Applications can exchange information when they can bind to the application objects.

      For exchange parameters, the CIM—expressed in some agreed-to syntax—is a neutral form used to exchange management information by way of a standard set of object APIs. The exchange can be accomplished via a direct set of API calls, or it can be accomplished by exchange-oriented APIs which can create the appropriate object in the local implementation technology.

       

      1. CIM Implementation Conformance

The ability to exchange information between management applications is fundamental to CIM. The current mechanism for exchanging management information is the Management Object Format (MOF). At the present time, no programming interfaces or protocols are defined by (and hence cannot be considered as) an exchange mechanism. Therefore, a CIM-capable system must be able to import and export properly formed MOF constructs. How the import and export operations are performed is an implementation detail for the CIM-capable system.

Objects instantiated in the MOF must, at a minimum, include all key properties and all properties marked as required. Required properties have the REQUIRED qualifier present and set to TRUE.

 

  1. Meta Schema
  2. The Meta Schema is a formal definition of the model. It defines the terms used to express the model and its usage and semantics (see Appendix B).

    The Unified Modeling Language (UML) is used to define the structure of the meta schema. In the discussion that follows, italicized words refer to objects in the figure. The reader is expected to be familiar with UML notation (see http://www.rational.com/uml) and with basic object-oriented concepts in the form of classes, properties, methods, operations, inheritance, associations, objects, cardinality and polymorphism.

    1. Definition of the Meta Schema

The elements of the model are Schemas, Classes, Properties and Methods. The model also supports Indications and Associations as types of Classes and References as types of Properties.

A Schema is a group of classes with a single owner. Schemas are used for administration and class naming. Class names must be unique within their owning schemas.

A Class is a collection of instances that support the same type: that is, the same properties and methods.

Classes can be arranged in a generalization hierarchy that represents subtype relationships between Classes. The generalization hierarchy is a rooted, directed graph and does not support multiple inheritance.

Classes can have Methods, which represent the behavior relevant for that Class. A Class may participate in Associations by being the target of one of the References owned by the Association. Classes also have instances (not represented in Figure 2-1).

A Property is a value used to characterize instances of a Class. A Property can be thought of as a pair of Get and Set functions that, when applied to an object, return state and set state, respectively.

A Method is a declaration of a signature (that is, the method name, return type and parameters), and, in the case of a concrete Class, may imply an implementation.

A Trigger is a recognition of a state change (such as create, delete, update, or access) of a Class instance, and update or access of a Property.

An Indication is an object created as a result of a Trigger. Because Indications are subtypes of Class, they can have Properties and Methods, and be arranged in a type hierarchy.

An Association is a class that contains two or more References. It represents a relationship between two or more objects. Because of the way Associations are defined, it is possible to establish a relationship between Classes without affecting any of the related Classes. That is, addition of an Association does not affect the interface of the related Classes. Associations have no other significance. Only Associations can have References. An Association cannot be a subclass of a non-association Class. Any subclass of an Association is an Association.

References define the role each object plays in an Association. The Reference represents the role name of a Class in the context of an Association. Associations support the provision of multiple relationship instances for a given object. For example, a system can be related to many system components.

Properties and Methods have reflexive associations that represent Property and Method overriding. A Method can override an inherited Method, which implies that any access to the inherited Method will result in the invocation of the implementation of the overriding Method. A similar interpretation implies the overriding of Properties.

Qualifiers are used to characterize Named Elements (for example, there are Qualifiers that define the characteristics of a Property or the key of a Class). Qualifiers provide a mechanism that makes the meta schema extensible in a limited and controlled fashion. It is possible to add new types of Qualifiers by the introduction of a new Qualifier name, thereby providing new types of meta data to processes that manage and manipulate classes, properties and other elements of the meta schema. See below for details on the qualifiers provided.

Figure -1 Meta Schema Structure

Figure 2-1 provides an overview of the structure of the meta schema. The complete meta schema is defined by the MOF found in Appendix B. The rules defining the meta schema are:

1. Every meta construct is expressed as a descendent of a Named Element.

2. A Named Element has zero or more Characteristics. A Characteristic is a Qualifier that characterizes a Named Element.

3. A Named Element can trigger zero or more Indications.

4. A Schema is a Named Element and can contain zero or more classes. A Class must belong to only one schema.

5. A Qualifier Type (not shown in Figure 2-1) is a Named Element and must be used to supply a type for a Qualifier (that is, a Qualifier must have a Qualifier Type). A Qualifier Type can be used to type zero or more Qualifiers.

6. A Qualifier is a Named Element and has a Name, a Type (intrinsic data type), a Value of this type, a Scope, a Flavor and a default Value. The type of the Qualifier Value must agree with the type of the Qualifier Type.

7. A Property is a Named Element and has only one Domain: the Class that owns the Property.

8. A Property can have an Override relationship with another Property from a different class. The Domain of the overridden Property must be a supertype of the Domain of the overriding Property.

9. The Class referenced by the Range association (Figure 2-5) of an overriding Reference must be the same as, or a subtype of, the Class referenced by the Range associations of the Reference being overridden.

10. The Domain of a Reference must be an Association.

11. A Class is a type of Named Element. A Class can have instances (not shown on the diagram) and is the Domain for zero or more Properties. A Class is the Domain for zero or more Methods.

12. A Class can have zero or one supertype, and zero or more subtypes.

13. An Association is a type of Class. Associations are classes with an Association qualifier.

14. An Association must have two or more References.

15. An Association cannot inherit from a non-association Class.

16. Any subclass of an Association is an association.

17. A Method is a Named Element and has only one Domain: the Class that owns the Method.

18. A Method can have an Override relationship with another Method from a different Class. The Domain of the overridden Method must be a superclass of the Domain of the overriding Method.

19. A Trigger is an operation that is invoked on any state change, such as object creation, deletion, modification or access, or on property modification or access. Qualifiers, Qualifier Types and Schemas may not have triggers. The changes that invoke a trigger are specified as a Qualifier.

20. An Indication is a type of Class and has an association with zero or more Named Triggers that can create instances of the Indication.

21. Every meta-schema object is a descendent of a Named Element and, as such, has a Name. All names are case-insensitive. The rules applicable to Name vary, depending on the creation type of the object.

A Fully-qualified Class Names (that is, the Class name prefixed by the schema name) are unique within the schema. (See the discussion of schemas later in this section).

B Fully-qualified Association and Indication Names are unique within the schema (implied by the fact that Associations and Indications are subtypes of Class).

C Implicitly-defined Qualifier Names are unique within the scope of the characterized object (that is, a Named Element may not have two Characteristics with the same Name). Explicitly-defined Qualifier Names are unique within the defining Schema. An implicitly-defined Qualifier must agree in type, scope and flavor with any explicitly-defined Qualifier of the same name.

D Trigger names must be unique within the Property, Class or Method to which the Trigger applies.

E Method and Property names must be unique within the Domain Class. A Class can inherit more than one Property or Method with the same name. Property and Method names can be qualified using the name of the declaring Class.

F Reference Names must be unique within the scope of their defining Association. Reference Names obey the same rules as Property Names. Note that Reference names are not required to be unique within the scope of the related Class. In such a scope, the Reference provides the name of the Class within the context defined by the Association.

 

Figure -2 Reference Naming

It is legal for the class System to be related to Service by two independent Associations (Dependency and Hosted Services, each with roles System and Service). It would not be legal for Hosted Services to define another Reference Service to the Service class, since a single association would then contain two references called Service.

22. Qualifiers are Characteristics of Named Elements. A Qualifier has a Name (inherited from Named Element) and a Value. The Value is used to define the characteristics of the Named Element. For example, a Class might have a Qualifier with the Name "Description," the Value of which is the description for the Class. A Property might have a Qualifier with the Name "Units," which has Values such as "Bytes" or "KiloBytes." The Value can be thought of as a variant (that is, a value plus a type).

    1. Association and Indication are types of Class; as such, they can be the Domain for Methods, Properties and References (that is, Associations and Indications can have Properties and Methods in the same way as a Class does). Associations and Indications can have instances. The instance of an Association has a set of references that relate one or more objects. An instance of an Indication represents the occurrence of an event, and is created because of that occurrence—usually a Trigger. Indications are not required to have keys. Typically, Indications are very short-lived objects used to communicate information to an event consumer.
    2. A Reference has a range that represents the type of the Reference. For example, in the model of PhysicalElements and PhysicalPackages, there are two References: ContainedElement, which has PhysicalElement as its range and Container as its domain, and ContainingElement, which has PhysicalPackage as its range and Container as its domain.

Figure -3 References, Ranges, and Domains

25. A Class has a subtype-supertype association that represents substitutability relationships between the Named Elements involved in the relationship. The association implies that any instance of a subtype can be substituted for any instance of the supertype in an expression, without invalidating the expression.

Revisiting the Container example: Card is a Subtype of PhysicalPackage. Therefore, Card can be used as a value for the Reference ContainingElement (that is, an instance of Card can be used as a substitute for an instance of PhysicalPackage).

Figure -5 References, Ranges, Domains and Inheritance

A similar relationship can exist between Properties. For example, given that PhysicalPackage has a Name property (which is a simple alphanumeric string), Card Overrides Name to a name of alpha-only characters.

The same idea applies to Methods. A Method that overrides another Method must support the same signature as the original Method and, most importantly, must be substitutable for the original Method in all cases.

26. The Override relationship is used to indicate the substitution relationship between a property or method of a subclass and the overridden property or method inherited from the superclass. This is the opposite of the C++ convention in which the superclass property or method is specified as virtual, with overriding occurring thereafter as a side effect of declaring a feature with the same signature as the inherited virtual feature.

27. The number of references in an Association class defines the arity of the Association. An Association containing two references is a binary Association. An Association containing three references is a ternary association. Unary Associations (Associations containing one reference) are not meaningful. Arrays of references are not allowed. When an association is sub-classed, its arity cannot change.

28. Schemas provide a mechanism that allows ownership of portions of the overall model by individuals and organizations who are responsible for managing the evolution of the schema. In any given installation, all classes are mutually visible, regardless of schema ownership. Schemas have a universally unique name. The schema name is considered part of the class name. The full class name (that is, class name plus owning schema name) is unique within the namespace and is referred to as the fully-qualified name (see Section 2.4).

    1. Property Data Types
    2. Property data types are limited to the intrinsic data types, or arrays of such. Structured types are constructed by designing new classes. If the Property is an array property, the corresponding variant type is simply the array equivalent (fixed or variable length) of the variant for the underlying intrinsic type.

      This table contains the intrinsic data types and their interpretation:

      INTRINSIC DATA TYPE

      INTERPRETATION

      uint8

      Unsigned 8-bit integer

      sint8

      Signed 8-bit integer

      uint16

      Unsigned 16-bit integer

      sint16

      Signed 16-bit integer

      uint32

      Unsigned 32-bit integer

      sint32

      Signed 32-bit integer

      uint64

      Unsigned 64-bit integer

      sint64

      Signed 64-bit integer

      string

      UCS-2 string

      boolean

      Boolean

      real32

      IEEE 4-byte floating-point

      real64

      IEEE 8-byte floating-point

      datetime

      A string containing a date-time

      <classname> ref

      Strongly typed reference

      char16

      16-bit UCS-2 character

      1. Date, Time, and Interval Types

Date, datetime, interval and time property types are aliases for each other and use the same fixed string-based format:

yyyymmddhhmmss.mmmmmmsutc

where

For example, Monday, May 25, 1998, at 1:30:15 PM EST would be represented as:

19980525133015.0000000-300

Values must be zero-padded so that the entire string is always the same 25-character length. Fields which are not significant must be replaced with asterisk characters.

Similarly, intervals use the same format, except that the interpretation of the fields is based on elapsed time. For example, an elapsed time of 1 day, 13 hours, 23 minutes, and 12 seconds would be:

00000001132312.000000:000

A UTC offset of zero is always used for interval properties.

The string-based interval format is:

ddddddddhhmmss.mmmmmm:000

      1. Indicating Additional Type Semantics with Qualifiers

Since "counter" and "gauge" types (as well as many others) are actually simple integers with specific semantics, they are not treated as separate intrinsic types. Instead, qualifiers must be used to indicate such semantics when properties are being declared (note the example below merely suggests how this may be done; the qualifier names chosen are not part of this standard):

class Acme_Example
{
[counter]
uint32 NumberOfCycles;
[gauge]
uint32 MaxTemperature;

[octetstring, ArrayType("Indexed")]
uint8 IPAddress[10];

};

Implementers are permitted, for documentation purposes, to introduce arbitrary qualifiers in this manner. The semantics are not enforced.

    1. Supported Schema Modifications

This is a list of supported schema modifications, some of which, when used, will result in changes in application behavior. Changes are all subject to security restrictions; in particular, only the owner of the schema, or someone authorized by the owner, can make modifications to the schema.

    1. A class can be added to or deleted from a schema.
    2. A property can be added to or deleted from a class.
    3. A class can be added as a subtype or supertype of an existing class.
    4. A class can become an association as a result of the addition of an Association qualifier, plus two or more references.
    5. A qualifier can be added to or deleted from any Named Element.
    6. The Override qualifier can be added to or removed from a property or reference.
    7. A class can alias a property (or reference, if the class is a descendent of an association), using the Alias qualifier. Both inherited and immediate properties of the class may be aliased.
    8. A method can be added to a class.
    9. A method can override an inherited method.
    10. Methods can be deleted, and the signature of a method can be changed.
    11. A trigger may be added to or deleted from a class.

In defining an extension to a schema, the schema designer is expected to operate within the constraints of the classes defined in the Core model. With respect to classification, it is recommended that any added component of a system be defined as a subclass of an appropriate Core model class. It is expected that the schema designer will address the following question to each of the Core model classes: "Is the class being added a subtype of this class?" Having identified the Core model class to be extended, the same question should be addressed with respect to each of the subclasses of the identified class. This process, which defines the superclasses of the class to be defined, should be continued until the most detailed class is identified. The Core model is not a part of the meta schema, but is an important device for introducing uniformity across schemas intended to represent aspects of the managed environment.

      1. Schema Versions

Certain modifications to a schema can cause failure in applications that operated against the schema prior to the modification. These modifications are:

    1. Deletion of classes, properties, or methods.
    2. Movements of a class anywhere other than down a hierarchy.
    3. Alteration of property type or method signature.
    4. Altering a reference range to anything other than the original specification.

Other alterations are considered to be interface-preserving. Any use of the schema changes listed above implies the generation of a new major version of the schema (as defined by the VERSION qualifier described in Section 2.5.2).

    1. Class Names

Fully-qualified class names are in the form <schema name>_<class name>. An underscore is used as a delimiter between the <schema name> and the <class name>. The delimiter is not allowed to appear in the <schema name> although it is permitted in the <class name>.

The format of the fully-qualified name is intended to allow the scope of class names to be limited to a schema: that is, the schema name is assumed to be unique, and the class name is only required to be unique within the schema. The isolation of the schema name using the underscore character allows user interfaces to conveniently strip off the schema when the schema is implied by the context.

Examples of fully-qualified class names:

    1. Qualifiers
    2. Qualifiers are values that provide additional information about classes, associations, indications, methods, method parameters, triggers, instances, properties or references. All qualifiers have a name, type, value, scope, flavor and default value. Qualifiers cannot be duplicated; there cannot be more than one qualifier of the same name for any given class, instance, or property.

      The following sections describe meta, standard, optional and user-defined qualifiers. When any of these qualifiers are used in a model, they must be declared in the MOF file before being used. These declarations must abide by the details (name, applied to, type) specified in the tables below. It is not valid to change any of this information for the meta, standard and optional qualifiers. It is possible to change the default values. A default value is the assumed value for a qualifier when it is not explicitly specified for particular model elements.

      1. Meta Qualifiers
      2. This table lists the qualifiers that are used to refine the definition of the meta constructs in the model. These qualifiers are used to refine the actual usage of an object class or property declaration within the MOF syntax. These qualifiers are all mutually exclusive.

        QUALIFIER

        DEFAULT

        TYPE

        MEANING

        ASSOCIATION

        FALSE

        BOOLEAN

        The object class is defining an association.

        INDICATION

        FALSE

        BOOLEAN

        The object class is defining an indication.

      3. Standard Qualifiers
      4. This table is a list of standard qualifiers that all CIM-compliant implementations are required to handle. Any given object will not have all of the qualifiers listed. It is expected that additional qualifiers will be supplied by extension classes to facilitate the provision of instances of the class and other operations on the class.

        It is also important to recognize that not all of these qualifiers can be used together. First, as indicated in the table, not all qualifiers can be applied to all meta-model constructs. These limitations are identified in the "Applies To" column. Second, for a particular meta-model construct like associations, the use of the legal qualifiers may be further constrained because some qualifiers are mutually exclusive or the use of one qualifier implies some restrictions on the value of another qualifier, and so on. These usage rules are documented in the "Meaning" column of the table. Third, legal qualifiers are not inherited by meta-model constructs. For example, the MAXLEN qualifier that applies to properties is not inherited by references.

        The "Applies To" column in the table identifies the meta-model construct(s) that can use a particular qualifier. For qualifiers like ASSOCIATION (discussed in the previous section), there is an implied usage rule that the meta qualifier must also be present. For example, the implicit usage rule for the AGGREGATION qualifiers is that the ASSOCIATION qualifier must also be present.

        QUALIFIER

        DEFAULT

        APPLIES TO

        TYPE

        MEANING

        ABSTRACT

        FALSE

        Class, Association, Indication

        BOOLEAN

        Indicates that the class is abstract and serves only as a base for new classes. It is not possible to create instances of such classes.

        AGGREGATE

        FALSE

        Reference

        BOOLEAN

        Defines the "parent" component of an Aggregation association.Usage Rule: The Aggregation and Aggregate qualifiers are used together – Aggregation qualifying the association, and Aggregate specifying the "parent" reference.

        AGGREGATION

        FALSE

        Association

        BOOLEAN

        Indicates that the association is an aggregation.

        ALIAS

        NULL

        Property, Reference, Method

        STRING

        Establishes an alternate name for a property or method in the schema.

        ARRAYTYPE

        "Bag"

        Property, Parameter

        STRING

        Indicates the type of the qualified array. Valid values are "Bag", "Indexed" and "Ordered".Usage rule: The ArrayType qualifier should only be applied to properties and method parameters that are arrays (defined using the square bracket syntax specified in Appendix A).

        BITMAP

        NULL

        Property, Method, Parameter

        STRING ARRAY

        Indicates which bit positions are significant in a bit map. The position of a specific value in the BitMap array defines an index that is used in selecting a string literal from the BitValues array.

        BITVALUES

        NULL

        Property, Method, Parameter

        STRING ARRAY

        Provides translation between a bit position value and an associated string. See the description for the BitMap qualifier.

        COUNTER

        FALSE

        Property, Method, Parameter

        BOOLEAN

        Applicable only to unsigned integer types.Represents a non-negative integer which monotonically increases until it reaches a maximum value of 2^n-1, when it wraps around and starts increasing again from zero. N can be 8, 16, 32 or 64 depending on the datatype of the object to which the qualifier is applied.Counters have no defined "initial" value, and thus, a single value of a Counter has (in general) no information content

        DESCRIPTION

        NULL

        Any

        STRING

        Provides a description of a Named Element.

        DISPLAYNAME

        NULL

        Any

        STRING

        Defines a name that will be displayed on UI instead of the actual name of the element.

        GAUGE

        FALSE

        Property, Method, Parameter

        BOOLEAN

        Applicable only to unsigned integer types.Represents a non-negative integer, which may increase or decrease, but shall never exceed a maximum value. The maximum value can not be greater than 2^n - 1. N can be 8, 16, 32 or 64 depending on the datatype of the object to which the qualifier is applied.The value of a Gauge has its maximum value whenever the information being modeled is greater or equal to that maximum value; if the information being modeled subsequently decreases below the maximum value, the Gauge also decreases.

        IN

        TRUE

        Parameter

        BOOLEAN

        Indicates that the associated parameter is used to pass values to a method.

        KEY

        FALSE

        Property, Reference

        BOOLEAN

        Indicates that the property is part of the namespace handle (see Section 5.3.1.2 for information about namespace handles). If more than one property has the KEY qualifier, then all such properties collectively form the key (a compound key).

        Usage Rule: Keys are written once at object instantiation and must not be modified thereafter. It does not make sense to apply a default value to a KEY-qualified property.

        MAPPINGSTRINGS

        NULL

        Class, Property,
        Association,
        Indication,
        Reference

        STRING ARRAY

        Mapping strings for one or more management data providers or agents. See Section 2.5.5 and 2.5.6 for more details.

        MAX

        NULL

        Reference

        INT

        Indicates the maximum cardinality of the reference (i.e. the maximum number of values a given reference can have for each set of other reference values in the association). For example, if an association relates A instances to B instances, and there must be at most one A instance for each B instance, then the reference to A should have a Max(1) qualifier.

        MAXLEN

        NULL

        Property, Method, Parameter

        INT

        Indicates the maximum length, in characters, of a string data item. When overriding the default value, any unsigned integer value (uint32) can be specified. A value of NULL implies unlimited length.

        MAXVALUE

        NULL

        Property, Method, Parameter

        INT

        Maximum value of this object.

        MIN

        0

        Reference

        INT

        Indicates the minimum cardinality of the reference (i.e. the minimum number of values a given reference can have for each set of other reference values in the association). For example, if an association relates A instances to B instances, and there must be at least one A instance for each B instance, then the reference to A should have a Min(1) qualifier.

        MINVALUE

        NULL

        Property, Method, Parameter

        INT

        Minimum value of this object.

        MODEL CORRESPONDENCE

        NULL

        Property

        STRING ARRAY

        Indicates a correspondence between an object’s property and other properties in the CIM Schema. Object properties are identified using the following syntax:

        <schema name> "_" <class or association name> "." <property name>

        NONLOCAL

        NULL

        Reference

        STRING

        Indicates the location of an instance. Its value is <namespacetype>://<namespacehandle> Usage Rule: Cannot be used with the NonLocalType qualifier.

        NONLOCALTYPE

        NULL

         Reference

        STRING

        Indicates the type of location of an instance. Its value is <namespacetype>  Usage Rule: Cannot be used with the NonLocal qualifier.  

        NULLVALUE

        NULL

        Property

        STRING

        Defines a value the presence of which indicates that the associated property is NULL – that is that the property cannot be considered as having a valid or meaningful value.
        The conventions and restrictions used for defining null values are the same as those applicable to the ValueMap qualifier.
        Note this qualifier cannot be overridden as it seems unreasonable to permit a subclass to return a different null value to that of the superclass.

        OUT

        FALSE

        Parameter

        BOOLEAN

        Indicates that the associated parameter is used to return values from a method.

        OVERRIDE

        NULL

        Property, Method,
        Reference

        STRING

        Indicates that the property, method, or reference in the derived class overrides the similar construct (of the same name) in the parent class in the inheritance tree, or in the specified parent class. The value of this qualifier MAY identify the parent class whose subordinate construct (property, method, or reference) is overridden. The format of the string to accomplish this is:[<class>.]<subordinate construct>If the class name is omitted, the Override applies to the subordinate construct in the parent class in the inheritance tree.Usage Rule: The Override qualifier can only refer to constructs based on the same meta model. Also, it is not allowed to change a construct's name or signature when overriding.

        PROPAGATED

        NULL

        Property

        STRING

        The propagated qualifier is a string-valued qualifier that contains the name of the key that is being propagated. Its use assumes the existence of only one weak qualifier on a reference that has the containing class as its target. The associated property must have the same value as the property named by the qualifier in the class on the other side of the weak association. The format of the string to accomplish this is:

        [<class>.]<subordinate construct>

        Usage Rule: When the PROPAGATED qualifier is used, the KEY qualifier must be specified with a value of TRUE.

        READ

        TRUE

        Property

        BOOLEAN

        Indicates that the property is readable.

        REQUIRED

        FALSE

        Property

        BOOLEAN

        Indicates that a non-NULL value is required for the property.

        REVISION

        NULL

        Class,
        Association,
        Indication, Schema

        STRING

        Provides the minor revision number of the schema object.

        Usage Rule: The VERSION qualifier must be present to supply the major version number when the REVISION qualifier is used.

        SCHEMA

        NULL

        Property, Method

        STRING

        The name of the schema in which the feature is defined.

        SOURCE

        NULL

        Class, Association, Indication, Reference

        STRING

        Indicates the location of an instance. Its value is <namespacetype>://<namespacehandle>
        Usage Rule: Cannot be used with the SourceType  qualifier.

        SOURCETYPE

        NULL

        Class, Association, Indication, Reference

        STRING

        Indicates the type of location of an instance. Its value is <namespacetype>  Usage Rule: Cannot be used with the Source qualifier.  

        STATIC

        FALSE

        Property, Method

        BOOLEAN

        For methods indicates that the method is a class method that does not depend on any per-instance data.For properties, indicates that the property is a class variable rather than an instance variable.

        TERMINAL

        FALSE

        Class

        BOOLEAN

        Indicate that the class can have no subclasses. If such a subclass is declared the compiler will generate an error.
        Note this qualifier cannot coexist with the Abstract qualifier. If both are specified the compiler generates an error.

        UNITS

        NULL

        Property, Method, Parameter

        STRING

        Provides units in which the associated data item is expressed. For example, a Size data item might have Units ("bytes"). The complete set of standard units is defined in Appendix C.

        VALUEMAP

        NULL

        Property, Method, Parameter

        STRING ARRAY

        Defines the set of permissible values for this property, method return type or method parameter. The ValueMap can be used alone, or in combination with the Values qualifier. When used in combination with the Values qualifier, the location of the value in the ValueMap array provides the location of the corresponding entry in the Values array.ValueMap may only be used with string and integer values. The syntax for representing an integer value in the ValueMap array is:[+|-]digit[*digit]The content, maximum number of digits and represented value are constrained by the type of the associated property. For example, uint8 may not be signed, must be less than four digits, and must represent a value less than 256.

        VALUES

        NULL

        Property, Method, Parameter

        STRING ARRAY

        Provides translation between an integer value and an associated string. If a ValueMap qualifier is not present, the Values array is indexed (zero relative) using the value in the associated property, method return type or method parameter. If a ValueMap qualifier is present, the Values index is defined by the location of the property value in the ValueMap.

        VERSION

        NULL

        Class, Schema,
        Association,
        Indication

        STRING

        Provides the major version number of the schema object. This is incremented when changes are made to the schema that alter the interface.

        WEAK

        FALSE

        Reference

        BOOLEAN

        Indicates that the keys of the referenced class include the keys of the other participants in the association. This qualifier is used when the identity of the referenced class depends on the identity of the other participants in the association. No more than one reference to any given class can be weak. The other classes in the association must define a key. The keys of the other classes in the association are repeated in the referenced class and tagged with a propagated qualifier.

        WRITE

        FALSE

        Property

        BOOLEAN

        Indicates whether write access is allowed for a property by any "consumers" of that property's data. This qualifier does not address the initial assignment of a property value, nor its maintenance by its "provider". It describes the maximal level of access that is allowed, and does not address whether security and authorization restrictions may actually prevent writing of the data. A value of true indicates that the property is readable and writable by "consumers", given appropriate administrative authorization. A value of false indicates that the property is only readable by "consumers", regardless of authorization.

      5. Optional Qualifiers
      6. The optional qualifiers listed in this table address situations that are not common to all CIM-compliant implementations. Thus, CIM-compliant implementations can ignore optional qualifiers since they are not required to interpret or understand these qualifiers. These are provided in the specification to avoid random user-defined qualifiers for these recurring situations.

         

         

        Qualifer

        Default

        Applies To

        Type

        Meaning

        DELETE

        FALSE

        Association, Reference

        BOOLEAN

        For associations: Indicates that the qualified association must be deleted if any of the objects referenced in the association are deleted, AND the respective object referenced in the association is qualified with IFDELETED.

        For references: Indicates that the referenced object must be deleted if the association containing the reference is deleted, AND qualified with IFDELETED, or if any of the objects referenced in the association are deleted AND the respective object referenced in the association is qualified with IFDELETED.

        Usage Rule: Applications must to chase associations according to the modeled semantic and delete objects appropriately. Note: This usage rule must be verified when the CIM security model is defined.

        EXPENSIVE

        FALSE

        Property, Reference, Class, Association, Method

        BOOLEAN

        Indicates the property or class is expensive to compute.

        IFDELETED

        FALSE

        Association, Reference

        BOOLEAN

        Indicates that all objects qualified by DELETE within the association must be deleted if the referenced object or the association, respectively, is deleted.

        INVISIBLE

        FALSE

        Association, Property, Method, Reference, Class

        BOOLEAN

        Indicates that the association is defined only for internal purposes (for example, for definition of dependency semantics) and should not be displayed (for example, in maps).

        LARGE

        FALSE

        Property, Class

        BOOLEAN

        Indicates the property or class requires a large amount of storage space.

        PROVIDER

        NULL

        Any

        STRING

        An implementation specific handle to the instrumentation that populates those elements in the schemas which refer to dynamic data.

        SYNTAX

        NULL

        Property, Reference, Method, Parameter

        STRING

        Specific type assigned to a data item. Usage Rule: Must be used with the SyntaxType qualifier.

        SYNTAXTYPE

        NULL

        Property, Reference, Method, Parameter

        STRING

        Defines the format of the SYNTAX qualifier.

        Usage Rule: Must be used with the SYNTAX qualifier.

        TRIGGERTYPE

        NULL

        Class, Property, Method, Association,
        Indication,
        Reference

        STRING

        Indicates the circumstances under which a trigger is fired.

        Usage Rule: The trigger types vary by meta-model construct. For classes and associations, the legal values are CREATE, DELETE, UPDATE and ACCESS. For properties and references, the legal values are: UPDATE and ACCESS. For methods, the legal values are BEFORE and AFTER. For indications, the legal values are THROWN.

        UNKNOWN
        VALUES

        NULL

        Property

        STRING ARRAY

        Defines a set of values the presence of which indicates that the value of the associated property is unknown – that is that the property cannot be considered as having a valid or meaningful value.
        The conventions and restrictions used for defining unknown values are the same as those applicable to the ValueMap qualifier.
        Note this qualifier cannot be overridden as it seems unreasonable to permit a subclass to treat as a known value a value that is treated as unknown by some superclass.

        UNSUPPORTEDVALUES

        NULL

        Property

        STRING ARRAY

        Defines a set of values the presence of which indicates that the value of the associated property is unsupported – that is that the property cannot be considered as having a valid or meaningful value.
        The conventions and restrictions used for defining unsupported values are the same as those applicable to the ValueMap qualifier.
        Note this qualifier cannot be overridden as it seems unreasonable to permit a subclass to treat as a supported value a value that is treated as unknown by some superclass.

      7. User-defined Qualifiers
      8. The user can define any additional arbitrary named qualifiers. However, it is recommended that only defined qualifiers be used, and that the list of qualifiers be extended only if there is no other way to accomplish a particular objective.

      9. Mapping MIF Attributes
      10. Mapping Management Information Format (MIF) attributes to CIM Properties can be accomplished using the MAPPINGSTRINGS qualifier. This qualifier provides a mechanism to specify the mapping from DMTF and vendor-defined MIF groups to specific properties. This allows for mapping using either Domain or Recast Mapping.

        Every MIF group contains a unique identification that is defined using the class string, which is defined as follows:

        defining body|specific name|version

        where defining body is the creator and owner of the group, specific name is the unique name of the group and version is a three-digit number that identifies the version of the group definition. In addition, each attribute has a unique numeric identifier, starting with the number one.

        Therefore, the mapping qualifier can be represented as a string that is formatted as follows:

        MIF.defining body|specific name|version.attributeid

        where MIF is a constant defining this as a MIF mapping followed by a dot. This is then followed by the class string for the group this defines, and optionally followed by a dot and the identifier of a unique attribute.

        In the case of a Domain Mapping, all of the above information is required, and provides a way to map an individual MIF attribute to a particular CIM Property. In the case of the recast mapping, a CIM class can be recast from a MIF group and only the MIF constant, followed by the dot separator followed by the class string, is required.

        For example, a Domain Mapping of a DMTF MIF attribute to a CIM property would be as follows:

        [MAPPINGSTRINGS{"MIF.DMTF|ComponentID|001.4"},READ]
        SerialNumber = "";

        The above declaration defines a mapping to the SerialNumber property from the DMTF Standard Component ID group's serial number attribute. Because the qualifiers of CIM are a superset of those found in MIF syntax, any qualifier may be overridden in the CIM definition.

        To recast an entire MIF group into a CIM Object, the mapping string can be used to define an entire Class. For example:

        [MAPPINGSTRINGS {"MIF.DMTF|Software Signature|002"}]
        class MicroSoftWord : SoftwareSignature
        {
        ...
        }

      11. Mapping Generic Data to CIM Properties

In addition to mapping MIF attributes, the MAPPINGSTRINGS qualifier can be used to map SNMP variables to CIM properties. Every standard SNMP variable has associated with it a variable name and a unique object identifier (OID) that is defined by a unique naming authority. This naming authority is a string. This string can either be a name

standards body (e.g., "IETF"), a company name (e.g., "Acme") for defining the mappings to a company?s private MIB, and/or an appropriate management protocol (e.g., "SNMP"). For the IETF case, the ASN.1 module name, not the RFC number, should be used as the MIB name (e.g., instead of saying RFC1493, the string "BRIDGE-MIB" should be used). This is also true for the case of a company name being used as the naming authority. For the case of using a management protocol like SNMP, the SNMP OID can be used to identify the appropriate SNMP variable. This latter is especially important for mapping variables in private MIBs.

It should be noted that the concept of a naming authority for mapping data other than SNMP data into CIM properties could be derived from this requirement. As an example, this can be used to map attributes of other data stores (e.g., directories) using an application-specific protocol (e.g., LDAP).

The syntax for mapping MIF attributes as defined in Section 2.5.5 is as follows:

" MIF.<defining_body | specific_name | version>.attributeid"


The above MIF format can be reconciled with the more general syntax needed to map generic data to CIM properties by realizing that both forms can be represented as follows:

" <Format>.<Scoping_Name>.<Content> "

where:

"Format" defines the format of the entry. It has the following values:

"MIF" means that the rest of the string is interpreted as MIF data

"MIB" means that the rest of the string is interpreted as a variable name of a MIB

"OID" means that the rest of the string is interpreted as an OID that is defined by a particular protocol to represent a variable name

"Scoping_Name" defines the format used to uniquely identify the entry. It has the following values:

"defining_body | specific_name | version" is used for MIF mappings

"Naming_Authority | MIB_Name" is used for MIB mappings

"Naming_Authority | Protocol_Name" is used for protocol mappings that use OIDs to represent a variable name

"Content" defines the value of the entry. It has the following values:

"attributeid" is used for MIF mappings

"Variable_Name" is used for MIB mappings

"OID" is used for protocol mappings

Here are two examples of the syntax. The first uses the MIB format and looks as follows:

[Description( "OperatingSystem's notion of the local date and time of day"), MappingStrings {"MIB.IETF | HOST-RESOURCES-MIB.hrSystemDate"}]datetime LocalDateTime;

The second example uses the OID format and looks as follows:

[Description( "OperatingSystem's notion of the local date and time of day"), MappingStrings {"OID.IETF | SNMP.1.3.6.1.2.1.25.1.2"}]datetime LocalDateTime;

  1. Managed Object Format
  2. The management information is described in a language based on Interface Definition Language (IDL) [3] called the Managed Object Format (MOF). This document uses the term MOF specification to refer to a collection of management information described in a manner conformant to the MOF syntax.

    Elements of MOF syntax are introduced on a case-by-case basis with examples. In addition, a complete description of the MOF syntax is provided in Appendix A.

    Note: All grammars defined in this specification use the notation defined in [7]; any exceptions are stated with the grammar.

    The MOF syntax is a way to describe object definitions in textual form. It establishes the syntax for writing definitions. The main components of a MOF specification are textual descriptions of classes, associations, properties, references, methods and instance declarations and their associated qualifiers. Comments are permitted.

    In addition to serving the need for specifying the managed objects, a MOF specification can be processed using a compiler. To assist the process of compilation, a MOF specification consists of a series of compiler directives.

    A MOF file can be encoded in either Unicode or UTF-8.

    1. MOF usage
    2. The managed object descriptions in a MOF specification can be validated against an active namespace (See Section 5). Such validation is typically implemented in an entity acting in the role of a Server. This section describes the behavior of an implementation when introducing a MOF specification into a namespace. Typically, such a process validates both the syntactic correctness of a MOF specification, as well as the semantic correctness of such a specification against a particular Implementation. A MOF specification can be validated for the syntactic correctness alone, in a component such as a MOF compiler.

    3. Class Declarations
    4. A class declaration is treated as an instruction to create a new class. It is a local matter as to whether the process of introducing a MOF specification into a namespace is allowed to add classes or modify classes.

      Any class referenced in the specification of a class or reference specification must exist at the time of the specification (that is, forward references are not allowed).

    5. Instance Declarations

    Classes must be defined before they are used to declare instances. However, if a class definition is already resident within the namespace, that class declaration need not appear in a MOF specification that introduces the instances of that class.

    Any instance declaration is treated as an instruction to create a new instance where the object's key values do not already exist, or an instruction to modify an existing instance where an object with identical key values already exists.

  3. MOF Components
    1. Keywords
    2. All keywords in the MOF syntax are case-insensitive.

    3. Comments
    4. Comments can appear anywhere in MOF syntax and are indicated by either a leading double slash "//", or a pair of matching "/*" and "*/" sequences.

      A "//" comment is terminated by carriage return, line feed or by the end of the MOF specification (whichever comes first).

      For example:

      // This is a comment

      A "/*" comment is terminated by the next "*/" sequence or by the end of the MOF specification (whichever comes first). Comments are not recognized by the meta model and as such, will not be preserved across compilations. In other words, the output of a MOF compilation is not required to include any comments.

    5. Validation Context
    6. Semantic validation of a MOF specification involves an explicit or implied namespace context. This is defined as the namespace against which the objects in the MOF specification are validated and the namespace in which they are created. Multiple namespaces typically indicate the presence of multiple management spaces or multiple devices.

    7. Naming of Schema Elements
    8. This section describes the rules for naming of schema elements; this applies to classes, properties, qualifiers, methods and namespaces.

      CIM is a conceptual model that is not bound to a particular implementation. This allows it to be used to exchange management information in a variety of ways, examples of which are described in Section 1. Some implementations may use case-sensitive technologies, while others may use case-insensitive technologies. The naming rules defined in this section are chosen to allow efficient implementation in either environment, and to enable the effective exchange of management information between all compliant implementations.

      All names are case-insensitive, in that two schema item names are identical if they differ only in case. This is mandated so that scripting technologies that are case-insensitive can leverage CIM technology. (Note, however, that string values assigned to properties and qualifiers are not covered by this rule, and must be treated in a case-sensitive manner).

      The case of a name is set by its defining occurrence and must be preserved by all implementations. This is mandated so that implementations can be built using case-sensitive technologies such as Java and object databases. (This also allows names to be consistently displayed using the same user-friendly mixed-case format).

      For example, an implementation, if asked to create class 'Disk', must reject the request if there is already a class 'DISK' in the current schema. Otherwise, when returning the name of the class 'Disk', it must return the name in mixed case as it was originally specified.

      CIM does not currently require support for any particular query language. It is assumed that implementations will specify which query languages are supported by the implementation and will adhere to the case conventions that prevail in the specified language. That is, if the query language is case-insensitive, statements in the language will behave in a case-insensitive manner.

      For the full rules for schema names see Appendix F, Unicode Usage.

    9. Class Declarations
    10. A class is an object describing a grouping of data items that are conceptually related and thought of as modeling an object. Class definitions provide a type system for instance construction.

      1. Declaring a Class

A class is declared by specifying these components:

    1. The qualifiers of the class. This may be empty, or a list of qualifier name/value bindings separated by commas "," and enclosed with square brackets ("[" and "]").
    2. The class name.
    3. The name of the class from which this class is derived (if any).
    4. The class properties, which define the data members of the class. A property may also have an optional qualifier list, expressed in the same way as the class qualifier list. In addition, a property has a data type, and (optionally) a default (initializer) value.
    5. The methods supported by the class. A method may have an optional qualifier list. A method has a signature consisting of its return type, plus its parameters and their type and usage.

This sample shows how to declare a class:

[abstract]
class Win32_LogicalDisk
{
[read]
string DriveLetter;
[read, Units("KiloBytes")]
sint32 RawCapacity = 0;
[write]
string VolumeLabel;

[Dangerous]
boolean Format([in] boolean FastFormat);
};

      1. Subclasses
      2. To indicate that a class is a subclass of another class, the derived class is declared by using a colon followed by the superclass name.

        For example, if the class Acme_Disk_v1 is derived from the class CIM_Media:

        class Acme_Disk_v1 : CIM_Media
        {
        // Body of class definition here ...
        };

        The terms Base class, superclass and supertype are used interchangeably, as are Derived class, subclass and subtype.

        The superclass declaration must appear at a prior point in the MOF specification or already be a registered class definition in the namespace in which the derived class is defined.

      3. Default Property Values
      4. Any properties in a class definition can have default initializers. For example:

        class Acme_Disk_v1 : CIM_Media
        {
        string Manufacturer = "Acme";
        string ModelNumber = "123-AAL";
        };

        When new instances of the class are declared, then any such property is automatically assigned its default value unless the instance declaration explicitly assigns a value to the property.

      5. Class and Property Qualifiers
      6. Qualifiers are meta data about a property, method, method parameter, class, or instance and are not part of the definition itself. For example, a qualifier is used to indicate whether a property value is modifiable (using the WRITE qualifier). Qualifiers always precede the declaration to which they apply.

        Certain qualifiers are well known and cannot be redefined (see the description of the meta schema). Apart from these, arbitrary qualifiers may be used.

        Qualifier declarations include an explicit type indicator, which must be one of the intrinsic types. A qualifier with an array-based parameter is assumed to have a type, which is a variable-length homogeneous array of one of the intrinsic types. Note that in the case of boolean arrays, each element in the array is either TRUE or FALSE.

        Examples:

        Write(true) // boolean

        profile { true, false, true } // boolean []

        description("A string") // string

        info { "this", "a", "bag", "is" } // string []

        id(12) // uint32

        idlist { 21, 22, 40, 43 } // uint32 []

        apple(3.14) // real32

        oranges { -1.23E+02, 2.1 } // real32 []

        Qualifiers are applied to a class by preceding the class declaration with a qualifier list, comma-separated, and enclosed within square brackets. Qualifiers are applied to a property or method in a similar fashion.

        For example:

        class CIM_Process:CIM_LogicalElement
        {
        uint32 Priority;
        [Write(true)]
        string Handle;
        };

        When specifying a boolean qualifier in a class or property declaration, the name of the qualifier can be used without also specifying a value. From the previous example:

        class CIM_Process:CIM_LogicalElement
        {
        uint32 Priority;
        [Write] // Equivalent declaration to Write (True)
        string Handle;
        };

        If only the qualifier name is listed for a boolean qualifier, it is implicitly set to TRUE. In contrast, when a qualifier is not specified at all for a class or property, the default value for the qualifier is assumed. Using another example:

        [Association,
        Aggregation] // Specifies the Aggregation qualifier to be True
        class CIM_SystemDevice: CIM_SystemComponent
        {
        [Override ("GroupComponent"),
        Aggregate] // Specifies the Aggregate qualifier to be True
        CIM_ComputerSystem Ref GroupComponent;
        [Override ("PartComponent"),
        Weak] // Defines the Weak qualifier to be True
        CIM_LogicalDevice Ref PartComponent;
        };
        [Association] // Since the Aggregation qualifier is not specified,
        // its default value, False, is set
        class Acme_Dependency: CIM_Dependency
        {
        [Override ("Antecedent")] // Since the Aggregate and Weak
        // qualifiers are not used, their
        // default values, False, are assumed
        Acme_SpecialSoftware Ref Antecedent;
        [Override ("Dependent")]
        Acme_Device Ref Dependent;
        };

        Qualifiers can be transmitted automatically from classes to derived classes, or from classes to instances, subject to certain rules. The rules behind how the transmission occurs are attached to each qualifier and encapsulated in the concept of the qualifier flavor. For example, a qualifier may be designated in the base class as automatically transmitted to all of its derived classes, or it may be designated as belonging specifically to that class and not transmittable. In addition, the qualifier flavor can be used to control whether or not derived classes can override the qualifier value, or whether it must be fixed for an entire class hierarchy. This aspect of qualifier flavor is referred to as override permissions.

        Qualifier flavors are indicated by an optional clause after the qualifier and preceded by a colon. They consist of some combination of the key words EnableOverride, DisableOverride, ToSubclass and Restricted, indicating the applicable propagation and override rules. For example:

        class CIM_Process:CIM_LogicalElement
        {
        uint32 Priority;
        [Write(true):DisableOverride ToSubclass]
        string Handle;
        };

        In this example, Handle is designated as writable for the Process class and for every subclass of this class.

        The recognized flavor types are:

        PARAMETER

        Interpretation

        Default

        EnableOverride

        The qualifier is overridable.

        yes

        DisableOverride

        The qualifier cannot be overriden.

        no

        ToSubclass

        The qualifier is inherited by any subclass.

        yes

        Restricted

        The qualifier applies only to the class in which it is declared.

        no

        Translatable

        Indicates the value of the qualifier can be specified in multiple locales (language and country combination). When Translatable(yes) is specified for a qualifier, it is legal to create implicit qualifiers of the form :

        label_ll_cc

        where " label" is the name of the qualifier with Translatable(yes), and ll and cc are the language code and country code designation, respectively, for the translated string. In other words, a label_ll_cc qualifier is a clone, or derivative, of the "label" qualifier with a postfix to capture the translated value's locale. The locale of the original value (that is, the value specified using the qualifier with a name of "label") is determined by the locale pragma.

        When a label_ll_cc qualifier is implicitly defined, the values for the other flavor parameters are assumed to be the same as for the "label" qualifier. When a label_ll_cc qualifier is defined explicitly, the values for the other flavor parameters must also be the same. A "yes" for this parameter is only valid for string-type qualifiers.

        Example: if an English description is translated into Mexican Spanish the actual name of the qualifier is: DESCRIPTION_es_MX.

        no

      7. Key Properties

Instances of a class require some mechanism through which the instances can be distinguished within a single namespace. Designating one or more properties with the reserved qualifier "key" provides instance identification.

For example, this class has one property (Volume) which serves as its' key:

class Acme_Drive
{
[key]
string Volume;
string FileSystem;
sint32 Capacity;
};

In this example, instances of Drive are distinguished using the Volume property, which acts as the key for the class.

Compound keys are supported and are designated by marking each of the required properties with the key qualifier.

If a new subclass is defined from a superclass, and the superclass has key properties (including those inherited from other classes), the new subclass cannot define any additional key properties. New key properties in the subclass can be introduced only if all classes in the inheritance chain of the new subclass are keyless.

If any reference to the class has the Weak qualifier, the properties that are qualified as Key in the other classes in the association are propagated to the referenced class. The key properties are duplicated in the referenced class using the name of the property, prefixed by the name of the original declaring class. For example:

class CIM_System:CIM_LogicalElement
{
[Key]
string Name;
};

class CIM_LogicalDevice: CIM_LogicalElement
{
[Key]
string DeviceID;
[Key, Propagated("CIM_System.Name")]
string SystemName;
};
[Association]
class CIM_SystemDevice: CIM_SystemComponent
{
[Override ("GroupComponent"), Aggregate, Min(1), Max(1)]
CIM_System Ref GroupComponent;
[Override ("PartComponent"), Weak]
CIM_LogicalDevice Ref PartComponent;
};

    1. Association Declarations
    2. An association is a special kind of a class describing a link between other classes. As such, they also provide a type system for instance constructions. Associations are just like other classes with a few additional semantics explained below.

      1. Declaring an Association

An association is declared by specifying these components:

    1. The qualifiers of the association (at least the ASSOCIATION qualifier, if it doesn't have a supertype). Further qualifiers may be specified as a list of qualifier/name bindings separated by commas ",". The entire qualifier list is enclosed in square brackets ("[" and "]").
    2. . The association name.
    3. The name of the association from which this association is derived (if any).
    4. The association references which define pointers to other objects linked by this association. References may also have qualifier lists, expressed in the same way as the association qualifier list. Especially the qualifiers to specify cardinalities of references are important to be mentioned (see2.5.2. "Standard Qualifiers"). In addition, a reference has a data type, and (optionally) a default (initializer) value.
    5. Additional association properties which define further data members of this association. They are defined in the same way as for ordinary classes.
    6. The methods supported by the association. They are defined in the same way as for ordinary classes.

The following example shows how to declare an association (assuming given classes CIM_A and CIM_B):

    [Association]
class CIM_LinkBetweenAandB : CIM_Dependency
{
        [Override ("Antecedent")]
    CIM_A Ref Antecedent;
        [Override ("Dependent")]
    CIM_B Ref Dependent;
};

      1. Subassociations
      2. To indicate that an association is a subassociation of another association, the same notation as for ordinary classes is used, i.e. the derived association is declared by using a colon followed by the superassociation name. (An example is provided above.)

      3. Key References and Properties
      4. Instances of an association also require some mechanism through which the instances can be distinguished, implied by the fact that they are just a special kind of a class. Designating one ore more references/properties with the reserved KEY qualifier provides instance identification.

        A reference/property of an association is (part of) the association key if the KEY qualifier is applied.

            [Association, Aggregation]
        class CIM_Component
        {
                [Aggregate, Key]
            CIM_ManagedSystemElement Ref GroupComponent;
                [Key]
            CIM_ManagedSystemElement Ref PartComponent;
        };

        In principle, the key definition of association follows the same rules as for ordinary classes. Compound keys are supported in the same way. Also a new subassociation cannot define any additional key properties/references.

        If any reference to a class has the WEAK qualifier, the KEY-qualified properties of the other class, whose reference is not WEAK-qualified are propagated to the class. (see subchapter 4.5.5 "Key Properties").

      5. Object References

Object references are properties which are links or pointers to other objects (classes or instances). The value of an object reference is a string, which represents a path to another object. The path includes:

    1. The namespace in which the object resides.
    2. The class name of the object.
    3. If the object represents an instance, the values of all key properties for that instance.

Object reference properties are declared by "XXX ref", indicating a strongly typed reference to objects of the class with name "XXX" (or a derived class thereof). For example:

    [Association]
class Acme_ExampleAssoc
{
    Acme_AnotherClass ref Inst1;
    Acme_Aclass       ref Inst2;
};

In the above declaration, Inst1 can only be set to point to objects of type Acme_AnotherClass. Also see Section 4.12.2on Initializing References Using Aliases.

In associations, object references have cardinalities - denoted using Min and Max qualifiers. Here are examples of UML cardinality notations and their respective combinations of Min and Max values:

UML

MIN

MAX

Required MOF Text*

Description

*

0

NULL

 

Many

1..*

1

NULL

Min(1)

At least one

1

1

1

Min(1), Max(1)

One

0,1 (or 0..1)

0

1

Max(1)

At most one

 

    1. Qualifier Declarations
    2. Qualifiers may be declared using the keyword "qualifier". The declaration of a qualifier allows the definition of types, default values, propagation rules (also known as Flavors), and restrictions on use.

      The default value for a declared qualifier is used when the qualifier is not explicitly specified for a given schema element (explicit specification includes when the qualifier specification is inherited).

      The MOF syntax allows specifying a qualifier without an explicit value. In this case, the assumed value depends on the qualifier type: booleans are true, numeric types are null, strings are null and arrays are empty.

      For example, the alias qualifier is declared as follows:

      qualifier alias :string = null, scope (property, reference, method);

      This declaration establishes a qualifier called alias. The type of the qualifier is string. It has a default value of null and may only be used with properties, references and methods.

      The meta qualifiers are declared as:

      Qualifier Association : boolean = false,

      Scope(class, association), Flavor(DisableOverride);

      Qualifier Indication : boolean = false,

      Scope( class, indication), Flavor(DisableOverride);

      See Appendix B for the complete list of standard qualifiers.

    3. Instance Declarations

Instances are declared using the keyword sequence "instance of" and the class name. The properties of the instance may be initialized within an initialization block.

Property initialization consists of an optional list of preceding qualifiers (which must be compatible with the qualifiers declared in the class definition), the name of the property and an optional value. Any properties not initialized will have default values as specified in the class definition, or (if no default value has been specified) the special value NULL to indicate "absence of value". For example, given the class definition:

class Acme_LogicalDisk: CIM_Partition
{
[key]
string DriveLetter;
[Units("kilo bytes")]
sint32 RawCapacity = 128000;
[write]

string VolumeLabel;
[Units("kilo bytes")]
sint32 FreeSpace;
};

an instance of the above class might be declared as:

instance of Acme_LogicalDisk
{
DriveLetter = "C";
VolumeLabel = "myvol";
};

The resulting instance would take these property values:

    1. DriveLetter would be assigned the value "C".
    2. RawCapacity would be assigned the default value 128000.
    3. VolumeLabel would be assigned the value "myvol".
    4. FreeSpace would be assigned the value NULL.

For subclasses, all of the properties in the superclass must be initialized along with the properties in the subclass. Any properties not specifically assigned in the instance block will have either the default value for the property (if there is one), or else the value NULL (if there is not one).

The values of all key properties must be specified in order for an instance to be identified and created. There is no requirement to explicitly initialize other properties. See Section 4.11.6 on behavior when there is no property initialization.

Instances of Associations may also be defined. For example:

instance of CIM_ServiceSAPDependency
{
Dependent = "CIM_Service.Name = \"mail\"";
Antecedent = "CIM_ServiceAccessPoint.Name = \"PostOffice\"";
};

      1. Instance Aliasing
      2. An alias can be assigned to an instance using this syntax:

        instance of Acme_LogicalDisk as $Disk
        {
        // Body of instance definition here ...
        };

        Such an alias can later be used within the same MOF specification as a value for an object reference property. For more information, see Section4.12.2 Initializing References using Aliases.

      3. Arrays

Arrays of any of the basic data types can be declared in the MOF specification by using square brackets after the property identifier. Fixed-length arrays indicate their length as an unsigned integer constant within the square brackets; otherwise, the array is assumed to be variable length. Arrays can be bags, ordered lists or indexed arrays. An array's type is defined by the ARRAYTYPE qualifier, whose values are "Bag", "Ordered" or "Indexed". The default array type is "Bag". Regarding each of the array types:

Note that for the "Bag" array type, no significance is defined for the array index other than a convenience for accessing the elements of the array. For example, there can be no assumption that the same index will return the same value for every access to the array. The only assumption is that a complete enumeration of the indices will return a complete set of values.

For the "Ordered" array type, the array index is significant as long as no array elements are added, deleted or changed. In this case the same index will return the same value for every access to the array. If an element is added, deleted or changed, the index of the elements might change according to the implementation-specific ordering algorithm.

The "Indexed" array maintains the correspondence between element position and value. Array elements can be overwritten, but not deleted. Indexes start at 0 and have no gaps.

The current release of CIM does not support n-dimensional arrays.

Arrays of any basic data type are legal. Arrays of references are not legal. Arrays must be homogeneous. Arrays of mixed types are not supported. In MOF, the data type of an array precedes the array name. Array size, if fixed length, is declared within square brackets, following the array name. If a variable length array is to be defined, empty square brackets follow the array name.

Arrays are declared using this MOF syntax:

class A

{

[Description("An indexed array of variable length"), ArrayType("Indexed")]

uint8 MyIndexedArray[];

[Description("A bag array of fixed length")]

uint8 MyBagArray[17];

};

If default values are to be provided for the array elements, this syntax is used:

class A

{

[Description("A bag array property of fixed length")]

uint8 MyBagArray[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};

};

This MOF presents further examples of "Bag", "Ordered" and "Indexed" array declarations:

class Acme_Example

{

char16 Prop1[]; // Bag (default) array of chars, Variable length

[ArrayType ("Ordered")] // Ordered array of double-precision reals,

real64 Prop2[]; // Variable length

[ArrayType ("Bag")] // Bag array containing 4 32-bit signed integers

sint32 Prop3[4];

[ArrayType ("Ordered")] // Ordered array of strings, Variable length

string Prop4[] = {"an", "ordered", "list"};

// Prop4 is variable length with default values defined at the

// first three positions in the array

[ArrayType ("Indexed")] // Indexed array of 64-bit unsigned integers

uint64 Prop5[];

};

    1. Method Declarations
    2. A method is defined as an operation together with its signature. The signature consists of a possibly empty list of parameters and a return type. There are no restrictions on the type of parameters other than they must be one of the data types described in Section 2.2, a fixed or variable length array of one of those types, or be an object reference. Return types must be one of the data types described in Section 2.2. Return types cannot be arrays, but otherwise are unrestricted. Syntactically, the only thing that distinguishes a method from a property is the parameter list. The fact that methods are expected to have side-effects is outside the scope of this specification.

      In this example, Start and Stop methods are defined on the Service class. Each method returns an integer value:

      class CIM_Service:CIM_LogicalElement
      {
      [Key]
      string Name;
      string StartMode;
      boolean Started;
      uint32 StartService();
      uint32 StopService();
      };

      In this example, a Configure method is defined on the Physical DiskDrive class. It takes a DiskPartitionConfiguration object reference as a parameter, and returns a boolean value.

      class Acme_DiskDrive:CIM_Media
      {
      sint32 BytesPerSector;
      sint32 Partitions;
      sint32 TracksPerCylinder;
      sint32 SectorsPerTrack;
      string TotalCylinders;
      string TotalTracks;
      string TotalSectors;
      string InterfaceType;

      boolean Configure([IN] DiskPartitionConfiguration REF config);
      };

    3. Compiler Directives
    4. Compiler directives are provided as the keyword "pragma", preceded by a hash ('#') character, and followed by a string parameter.

      The current standard compiler directives are:

      compiler Directive

      Interpretation

      #pragma include()

      Has a file name as a parameter. The file is assumed to be a MOF file. The pragma has the effect of textually inserting the contents of the include file at the point where the include pragma is encountered.

      #pragma instancelocale()

      Declares the locale used for instances described in a MOF file. This pragma specifies the locale when "INSTANCE OF" MOF statements include string or char16 properties, and the locale is not the same as the locale specified by a #pragma locale() statement. The locale is specified as a parameter of the form ll_cc where ll is the language code based on ISO/IEC 639, and cc is the country code based on ISO/IEC 3166.

      #pragma locale()

      Declares the locale used for a particular MOF file. The locale is specified as a parameter of the form ll_cc, where ll is the language code based on ISO/IEC 639, and cc is the country code based on ISO/IEC 3166. When the pragma is not specified, the assumed locale is "en_US".

      It is important to note that this pragma does not apply to the syntax structures of MOF. Keywords, such as "class" and "instance", are always in en_US.

      #pragma namespace( )

      This pragma is used to specify a Namespace path. The syntax needs to conform to the following: <namespacetype>://<namespacehandle>

      #pragma nonlocal()

      See the description of the NonLocal qualifier for an explanation of this pragma.Usage Rule: Cannot be used with NonLocalType pragma.

      #pragma nonlocaltype()

      See the description of the NonLocalType qualifier for an explanation of this pragma. Usage Rule: Cannot be used with NonLocal pragma

      #pragma source()

      See the description of the Source qualifier for an explanation of this pragma. Usage Rule: Cannot be used with sourcetype pragma

      #pragma sourcetype()

      See the description of the SourceType qualifier for an explanation of this pragma.Usage Rule: Cannot be used with source pragma.

      Additional pragma directives may be added as a MOF extension mechanism. Unless standardized in a future CIM specification, such new pragma definitions must be considered vendor-specific. Use of non-standard pragmas will affect interoperability of MOF import and export functions.

      When a qualifier value is derived from either a qualifier or a pragma, the qualifier overrides the pragma.

    5. Value Constants
    6. The constant types supported in the MOF syntax are described in the subsections that follow. These are used in initializers for classes and instances, and in the parameters to named qualifiers.

      A formal specification of the representation is found in Appendix A, MOF Syntax Grammar Description.

      1. String Constants
      2. A string constant is a sequence of zero or more UCS-2 characters enclosed in double-quotes ("). A double-quote is allowed within the value, as long as it is preceded immediately by a backslash (\).

        For example:

        "This is a string"

        Successive quoted strings are concatenated, as long as only white space or a comment intervenes:

        "This" " becomes a long string"

        "This" /* comment */ " becomes a long string"

        The escape sequences such as \n, \t and \r are recognized as legal characters within a string. The complete set is:

        \b // \x0008: backspace BS

        \t // \x0009: horizontal tab HT

        \n // \x000A: linefeed LF

        \f // \x000C: form feed FF

        \r // \x000D: carriage return CR

        \" // \x0022: double quote "

        \' // \x0027: single quote '

        \\ // \x005C: backslash \

        \x<hex> // where <hex> is one to four hex digits

        \X<hex> // where <hex> is one to four hex digits

        The character set of the string depends on the character set supported by the local installation. While the MOF specification may be submitted in UCS-2 form [10], the local implementation may only support ANSI and vice-versa. Therefore, the string type is unspecified and dependent on the character set of the MOF specification itself. If a MOF specification is submitted using UCS-2 characters outside of the normal ASCII range, then the implementation may have to convert these characters to the locally-equivalent character set.

      3. Character Constants
      4. Character and wide-character constants are specified as.

        'a'

        '\n'

        '1'

        '\x32'

        Note: Forms such as octal escape sequences (e.g. ‘\020’) are not supported.

        Integer values can also be used as character constants, as long as they are within the numeric range of the character type. For example, wide-character constants must fall within the range 0 to 0xFFFF.

      5. Integral Constants
      6. Integer constants may be decimal, binary, octal or hexadecimal.

        For example, these are all legal:

        1000

        -12310

        0x100

        01236

        100101B

        Note that binary constants have a series of 1 and 0 digits, with a "b" or "B" suffix to indicate that the value is binary.

        The number of digits permitted depends on the current type of the expression. For example, it is not legal to assign the constant 0xFFFF to a property of type uint8.

      7. Floating-Point Constants
      8. Floating point constants are declared as specified by IEEE in Ref. [6].

        For example, these are legal:

        3.14

        -3.14

        -1.2778E+02

        The range for floating point constants depends on whether float or double properties are used and must fit within the range specified for IEEE 4-byte and 8-byte floating point values, respectively.

      9. Object Ref Constants
      10. Object references are simple URL-style links to other objects (which may be classes or instances). They take the form of a quoted string containing an object path. The object path is a combination of a namespace path and the model path.

        For example:

        "//./root/default:LogicalDisk.SystemName=\"acme\",LogicalDisk.Drive=\"C\""

        "//./root/default:NetworkCard=2"

        An object reference can also be an alias. See Section 4.12.2 for more details.

      11. NULL

      All types can be initialized to the predefined constant NULL, which indicates no value has been provided. The details of the internal implementation of the NULL value are not mandated by this document.

    7. Initializers
    8. Initializers are used both in class declarations for default values and instance declarations to initialize a property to a value. The format of initializer values is specified in Section 2 and its subsections.

      The initializer value must match the property data type. The only exceptions are the NULL value, which may be used for any data type, and integral values, used for characters.

      1. Initializing Arrays
      2. Arrays can be defined to be of type, "Bag", "Ordered" or "Indexed", and can be initialized by specifying their values in a comma-separated list (as in the C programming language). The list of array elements is delimited with curly brackets.

        For example, given this class definition:

        class Acme_ExampleClass

        {

        [ArrayType ("Indexed")]

        string ip_addresses []; // Indexed array of variable length

        sint32 sint32_values [10]; // Bag array of fixed length = 10

        };

        this is a valid instance declaration:

        instance of Acme_ExampleClass

        {

        ip_addresses = { "1.2.3.4", "1.2.3.5", "1.2.3.7" };

        // ip_address is an indexed array of at least 3 elements, where

        // values have been assigned to the first three elements of the

        // array

        sint32_values = { 1, 2, 3, 5, 6 };

        };

        Refer to Section 4.8.2 for additional information on declaring arrays, and the distinctions between bags, ordered arrays and indexed arrays.

      3. Initializing References Using Aliases

Aliases are symbolic references to an object located elsewhere in the MOF specification. They only have significance within the MOF specification in which they are defined, and are only used at compile time to facilitate establishment of references. They are not available outside of the MOF specification.

Classes and instances may be assigned an alias as described in Section 4.8.1. Aliases are identifiers which begin with the $ symbol. When a subsequent reference to that instance is required for an object reference property, the identifier is used in place of an explicit initializer.

Assuming that $Alias1 and $Alias2 have been declared as aliases for instances, and the obref1 and obref2 properties are object references, this example shows how the object references could be assigned to point to the aliased instances:

instance of Acme_AnAssociation
{
strVal = "ABC";
obref1 = $Alias1;

obref2 = $Alias2;
};

Forward-referencing and circular aliases are permitted.

  1. Naming

Because CIM is not bound to a particular technology or implementation, it promises to facilitate sharing management information between a variety of management platforms. The CIM Naming mechanism was defined to address enterprise-wide identification of objects, as well as the sharing of management information.

CIM Naming addresses these requirements:

    1. Ability to locate and uniquely identify any object in an enterprise
    1. Allow sharing of objects and instance data among management platforms
    1. Facilitate move operations between object trees (including within a single management platform)

The Key qualifier is the CIM Meta-Model mechanism used to identify the properties that uniquely identify an instance of a class (and indirectly an instance of an association). CIM Naming enhances this base capability by:

    1. Background

CIM MOF files can contain definitions of instances, classes or both, as illustrated in this diagram:

Figure -1 Definitions of instances and classes

MOF files can be used to populate a technology that understands the semantics and structure of CIM. When a MOF file is consumed by a particular implementation, there are two operations that are actually being performed, depending on the file’s content. First, a compile or definition operation is performed to establish the structure of the model. Second, an import operation is performed to insert instances into the platform or tool.

Once the compile and import are completed, the actual instances are manipulated using the native capabilities of the platform or tool. In other words, in order to manipulate an object (for example, change the value of a property), one must know the type of platform the information was imported into, the APIs or operations used to access the imported information, and the name of the platform instance that was actually imported. For example, the semantics become:

Set the Version property of the Logical Element object with Name="Cool" in the relational database named LastWeeksData to "1.4.0".

The contents of a MOF file are loaded into a namespace that provides a domain (in other words, a container), in which the instances of the classes are guaranteed to be unique per the KEY qualifier definitions. The term namespace is used to refer to an implementation that provides such a domain.

Namespaces can be used to:

Another viable operation is exporting from a particular management platform. Essentially, this operation creates a MOF file for all or some portion of the information content of a platform.

Figure -2 Exporting to MOF

For example, information is exchanged when the source system is of type Mgmt_X and its name is EastCoast. The export produces a MOF file with the circle and triangle definitions and instances 1, 3, 5 of the circle class and instances 2, 4 of the triangle class. This MOF file is then compiled and imported into the management platform of type Mgmt_ABC with the name AllCoasts.

Figure -3 Information Exchange

The import operation involves storing the information in a local or native format of Mgmt_ABC so its native operations can be used to manipulate the instances. The transformation to a native format is shown in the figure by wrapping the five instances in hexagons. The transformation process must maintain the original keys.

      1. Management Tool Responsibility for an Export Operation
      2. The management tool must be able to create unique key values for each distinct object it places in the MOF file.

        For each instance placed in the MOF file, the management tool must maintain a mapping from the MOF file keys to the native key mechanism.

      3. Management Tool Responsibility for an Import Operation

The management tool must be able to map the unique keys found in the MOF file to a set of locally-understood keys.

    1. Weak Associations: Supporting Key Propagation
    2. CIM provides a mechanism to name instances within the context of other object instances. For example, if a management tool is handling a local system, then it can refer to the C drive or the D drive. However, if a management tool is handling multiple machines, it must refer to the C drive on machine X and the C drive on machine Y. In other words, the name of the drive must include the name of the hosting machine. CIM supports the notion of weak associations to specify this type of key propagation.

      A weak association is defined using a qualifier. For example:

      Qualifier Weak: boolean = false, Scope(reference), Flavor(DisableOverride);

      The key(s) of the referenced class includes the key(s) of the other participants in the WEAK association. This situation occurs when the referenced class identity depends on the identity of other participants in the association.

      Usage Rule: This qualifier can only be specified on one of the references defined for an association. The Weak referenced object is the one that depends on the other object for identity.

      This figure shows an example. There are three classes: ComputerSystem, OperatingSystem and Local User. The Operating System class is weak with respect to the Computer System class, since the runs association is marked weak. Similarly, the Local User class is weak with respect to the Operating System class, since the association is marked weak.

      Figure -1 Example of Weak Association

      In the context of a weak association definition, the Computer System class is a scoping class for the Operating System class, since its keys are propagated to the Operating System class. The Computer System and the Operating System classes are both scoping classes for the Local User class, since the Local User class gets keys from both. Finally, the Computer System is referred to as a Top Level Object (TLO) because it is not weak with respect to any other class. The fact that a particular class is a top-level object is inferred because no references to that class are marked with the WEAK qualifier. In addition, Top Level Objects must have the possibility of an enterprise-wide, unique key. An example may be a computer’s IP address in a company’s enterprise-wide IP network. The goal of the TLO concept is to achieve uniqueness of keys in the model path portion of the object name. In order to come as close as possible to this goal, TLO must have relevance in an enterprise context.

      Objects in the scope of another object can in turn be a scope for other objects; hence, all model object instances are arranged in directed graphs with the Top Level Object’s (TLO’s) as peer roots. The structure of this graph – in other words, which classes are in the scope of another given class – is defined as part of CIM by means of associations qualified with the WEAK qualifier.

      1. Referencing Weak Objects

      A reference to an instance of an association includes the propagated keys. The properties must have the propagated qualifier that identifies which class the property originates in and what the name of the property is in that class – for example

      instance of Acme_has
      {
      anOS = "Acme_OS.Name=\"acmeunit\",SystemName=\"UnixHost\"";
      aUser = "Acme_User.uid=33,OSName=\"acmeunit\",SystemName=\"UnixHost\"";
      };

       

      The operating system being weak to system would be declared as:

      Class Acme_OS
      {
      [key]
      String Name;
      [key, Propagated("CIM_System.Name")]
      String SystemName;
      };

      The user class being weak to operating system would be declared as:

      Class Acme_User
      {
      [key]
      String uid;
      [key, Propagated("Acme_OS.Name")]
      String OSName;
      [key, Propagated("Acme_OS.SystemName")]
      String SystemName;
      };

    3. Naming CIM Objects
    4. Since CIM allows for multiple implementations, it is not sufficient to think of the name of an object as just the combination of properties that have the KEY qualifier. The name must also identify the implementation that actually hosts the objects. The object name consists of the Namespace Path, which provides access to a CIM implementation, plus the Model Path, which provides full navigation within the CIM schema. The namespace path is used to locate a particular name space. The details of the namespace path are dependent on a particular implementation. The model path is the concatenation of the properties of a class that are qualified with the KEY qualifier. When the class is weak with respect to another class, the model path includes all key properties from the scoping objects. The following figure shows the various components of an object name. These are described in more details in the following sections.

      Figure -1 Object Naming

      1. Namespace Path
      2. A Namespace path references a namespace within an implementation that is capable of hosting CIM objects.

        A Namespace path resolves to a namespace hosted by a CIM-Capable implementation (in other words, a CIM Object Manager). Unlike the Model Path, the details of the Namespace path are implementation-specific. Therefore, the Namespace path provides two pieces of information: it identifies the type of implementation or namespace type, and it provides a handle that references a particular implementation or namespace handle.

        1. Namespace Type
        2. The namespace type classifies or identifies the type of implementation. The provider of such an implementation is responsible for describing the access protocol for that implementation. This is analogous to specifying http or ftp in a browser.

          Fundamentally, a namespace type implies an access protocol or API set that can be used to manipulate objects. These APIs would typically support: (1) generating a MOF file for a particular scope of classes and associations, (2) importing a MOF file and (3) manipulating instances. A particular management platform may have a variety of ways to access management information. Each of these ways must have a namespace type definition. Given this type, there would be an assumed set of mechanisms for exporting, importing and updating instances.

        3. Namespace Handle

The Namespace handle identifies a particular instance of the type of implementation. This handle must resolve to a namespace within an implementation.

The details of the handle are implementation-specific. It might be a simple string for an implementation that supports one namespace, or it might be a hierarchical structure if an implementation supports multiple namespaces. Either way, it resolves to a namespace.

It is important to note that some implementations can support multiple namespaces. In this case, the implementation-specific reference must resolve to a particular namespace within that implementation.

Figure -1 Namespaces

There are two important observations to make:

    1. Namespaces can overlap with respect to their contents.
    2. An object in one name space, which has the same model path as an object in another name, space does not guarantee that the objects are representing the same reality.
      1. Model Path
      2. The object name constructed as a scoping path through the CIM schema is referred to as a Model Path.A model path is a combination of the key properties values qualified by the class name. It is solely described by CIM elements and is absolutely implementation-independent. It is used to describe the path to a particular object or to identify a particular object within a namespace. The name of any object is a concatenation of named key property values, including all key values of its scoping objects.. When the class is weak with respect to another class, the model path includes all key properties from the scoping objects. 

        The syntax of Model Path is:

        <Qualifyingclass>.<key1>=<value1>[,<keyx>=<valuex>]*

      3. Specifying the Object Name

There are various mechanisms for specifying the object name details for any class instance or any association reference in a MOF file.

The model path is specified for object and association differently. For objects (instances of classes), the model path is the combination of property value pairs that are marked with the KEY qualifier. So the model path for the following is: "ex_sampleClass.label1=9921,label2=8821". Since the order of the key properties is not significant, the model path could also be: "ex_sampleClass.label2=8821,label1=9921".

Class ex_sampleClass
{
[key]
uint32 labe11;
[key]
uint32 label2;
uint32 size;
uint32 weight;
};

instance of ex_sampleClass
{
label1 = 9921;
label2 = 8821;
size = 80;
weight = 45
};

For associations, a model path is used to specify the value of a reference in an INSTANCE OF statement for an association. In the following composedof-association example, the model path "ex_sampleClass.label1=9921,label2=8821" is used to reference an instance of the ex_sampleClass that is playing the role of a composer.

[Association ]
Class ex_composedof
{
composer REF ex_sampleClass;
component REF ex_sampleClass;
};

instance of ex_composedof
{
composer = "ex_sampleClass.label1=9921,label2=8821";
. . .
}

A namespace path can be specified for all the INSTANCE OF statements in a file with one of several pragmas or it can be specified on each INSTANCE OF statement using one of several qualifiers. It is also possible to use a combination of pragmas and qualifiers. If qualifiers are used with a pragma, the qualifier overrides the details specified by the pragma.

There are two reasons there are several pragma or qualifiers for specifying a namespace path. First, the namespace path information can be about the implementation hosting the CIM information (SOURCE qualifier or pragma) or it can be about another implementation (NONLOCAL qualifier or pragma). Second, for association references, the namespace type and namespace handle can be specified together (using the SOURCE or NONLOCAL qualifier/pragma) or separately (using the SOURCETYPE or NONLOCALTYPE qualifier/pragma). When the namespace handle is separated from the namespace type, it is specified as a part of the string for the reference value using the following syntax:

<namespacehandle>:<modelpath>

The following table summarizes these situations.

Qualifier / Pragma

Class Instance

Association Instance

Source(
<namespacetype>://<namespace_handle>)NonLocal(
<namespacetype>://<namespace_handle>)

Allowed.

When this is used, the string value for the references contains the model path.  The complete object name is calculated by concatenating the string specified with the Source qualifier with ":" followed by the value of the model path specified by the reference.

SourceType(<namespacetype>) NonLocalType(<namespacetype>)

Not Permitted. However, when specified as a pragma, any INSTANCE OF statements for classes must have a Source or NonLocal qualifier. 

When SourceType or NonLocalType are used, the string value for a reference is to have the form <namespace_handle>":"<modelpath>

 

    1. Specifying Object Names in MOF Files
    2. The object name can be used as the value for object references and for object queries.

      1. Synchronizing Namespaces
      2. When a MOF is loaded into a system that is able to access and manipulate the source implementation, a higher level of integration is possible between two CIM-based implementations. In particular, the receiving implementation can synchronize changes with the sending implementation. This situation is shown in this figure and requires a way to record information about the namespace path of the source in the MOF. The arrow labeled "Dynamic Access to Loaded Information" implies that Mgmt_ABC has the capability to access information about an instance of Mgmt_X because it understands Mgmt_X's access protocol. All it must know is the handle (namespace path) for the source.

        The following figure is a sample MOF file for the situation illustrated in the previous figure. Notice the various uses of the SOURCE pragma and the SOURCE qualifier.

        Figure -1 Namespace Path

        The namespace path can be provided in one of two ways: 1) a qualifier on each object and association or 2) a pragma. The value for the pragma and the qualifier is exactly the same:

        Source(<namespacetype>:\\<namespace_handle>)

        When the information is provided as a pragma, it is assumed to be the same for all instances in the MOF file. This pragma is shown in this figure for the circle and triangle example:

        #pragma source("Mgmt_X://EastCoast")

        class Figs_Circle

        {
        [key]
        uint32 Name;
        string Color;
        };

        class Figs_Triangle
        {
        [key]
        uint32 Label;
        string Color;
        uint32 Area;
        };

        [Association]
        class Figs_CircleToTriangle
        {
        Figs_Circle REF ACircle;
        Figs_Triangle REF ATriangle;
        };

        [Association]
        class Figs_Covers
        {
        Figs_Triangle REF Over;
        Figs_Triangle REF Under;
        };

        instance of Figs_Triangle {Label=2;Color="Blue";Area=12};
        instance of Figs_Triangle {Label=4;Color="Blue";Area=12};
        instance of Figs_Circle {Name=1;Color="Blue"};
        instance of Figs_Circle {Name=3;Color="Blue"};
        instance of Figs_Circle {Name=5;Color="Blue"};

        instance of Figs_CircleToTriangle
        {
        ACircle="Figs_Circle.Name=1";
        ATriangle="Figs_Triangle.Label=2";
        };

        instance of Figs_CircleToTriangle
        {
        ACircle="Figs_Circle.Name=5";
        ATriangle="Figs_Triangle.Label=2";
        };

        [SourceType("Mgmt_X") ]
        instance of Figs_CircleToTriangle
        {
        ACircle="EastCoast:Figs_Circle.Name=5";
        ATriangle="EastCoast:Figs_Triangle.Label=4";
        };

        instance of Figs_Covers
        {
        [SourceType("Mgmt_X") ]
        Over="EastCoast:Figs_Triangle.Label=2";
        Under="Figs_Triangle.Label=4";
        };

        Figure -2 Pragma Example

        The import operation must preserve namespace path information so if either this platform or another platform understands how to manipulate an implementation of type <namespacetype> and has access to the <namespace_handle>, it can manipulate one or more of the instances in the source.

        The namespace path can also be specified using the instance-based Source qualifier. This qualifier marks a particular object or an association. This is illustrated in Figure 5-3. Note: When a pragma is specified and a qualifier is specified, the qualifier overrides the pragma.

        Class Figs_Circle
        {
        [key]
        uint32 Name;
        string Color;
        };

        class Figs_Triangle
        {
        [key]
        uint32 Label;
        string Color;
        uint32 Area;
        };

        [Association]
        class Figs_CircleToTriangle
        {
        Figs_Circle REF ACircle;
        Figs_Triangle REF ATriangle;
        };

        [Association]
        class Figs_Covers
        {
        Figs_Triangle REF Over;
        Figs_Triangle REF Under;
        };

        [source("Mgmt_X://EastCoast")]
        instance of Figs_Triangle {Label=2;Color="Blue";Area=12};

        [source("Mgmt_X://EastCoast")]
        instance of Figs_Triangle {Label=4;Color="Blue";Area=12};

        [source("Mgmt_X://EastCoast")]
        instance of Figs_Circle {Name=1;Color="Blue"};

        [source("Mgmt_X://EastCoast")]
        instance of Figs_Circle {Name=3;Color="Blue"};

        [source("Mgmt_X://EastCoast")]
        instance of Figs_Circle {Name=5;Color="Blue"};

        [source("Mgmt_X://EastCoast")]
        instance of Figs_CircleToTriangle
        {
        ACircle="Figs_Circle.Name=1";
        ATriangle="Figs_Triangle.Label=2";
        };

        [source("Mgmt_X://EastCoast")]
        instance of Figs_CircleToTriangle
        {
        ACircle="Figs_Circle.Name=5";
        ATriangle="Figs_Triangle.Label=2";
        };

        [source("Mgmt_X://EastCoast")]
        instance of Figs_CircleToTriangle
        {
        ACircle="Figs_Circle.Name=5";
        ATriangle="Figs_Triangle.Label=4";
        };

        [source("Mgmt_X://EastCoast")]
        instance of Figs_Covers
        {
        [nonlocal("Mgmt_X://EastCoast")]
        Over="Figs_Triangle.Label=2";
        Under="Figs_Triangle.Label=4";
        }; 

        Figure -3 Namespace Path Example

      3. Building References Between Management Systems

The Nonlocal instance qualifier for references allows a targeted management system to selectively import instances in a MOF file. This is used when a targeted management system knows how to access a source management platform (in other words, it has verified, using the source pragma or qualifer, that it knows how to access the source platform) and it does not want to store some class instances locally. Using the circle and triangle MOF as an example, the target management system, Mgmt_ABC, only wants to store circle information locally. When a Mgmt_ABC user requests information about a triangle, the Mgmt_ABC implementation contacts the source platform Mgmt_X to get the instance information:

Figure -1 References Between Management Systems

The Nonlocal qualifier is similar to the Source qualifier since its value is a

<namespacetype>:\\<namespacehandle>

string. The content of Mgmt_ABC after importing only circle information looks like this:

Class Figs_Circle
{
[key]
uint32 Name;
string Color;
};

class Figs_Triangle
{
[key]
uint32 Label;
string Color;
uint32 Area;
};

[Association]
class Figs_CircleToTriangle
{
Figs_Circle REF ACircle;
Figs_Triangle REF ATriangle;
};

[Association]
class Figs_Covers
{
Figs_Triangle REF Over;
Figs_Triangle REF Under;
};

instance of Figs_Circle {Name=1; Color="Blue"};
instance of Figs_Circle {Name=3; Color="Blue"};
instance of Figs_Circle {Name=5; Color="Blue"};

instance of Figs_CircleToTriangle
{
ACircle="Figs_Circle.Name=1";
[nonlocal("Mgmt_X://EastCoast")]
ATriangle="Figs_Triangle.Label=2";
};

instance of Figs_CircleToTriangle
{
ACircle="Figs_Circle.Name=5";
[nonlocal("Mgmt_X://EastCoast")]
ATriangle="Figs_Triangle.Label=2";
};

instance of Figs_CircleToTriangle
{
ACircle="Figs_Circle.Name=5";
[nonlocaltype("Mgmt_X")]
ATriangle="EastCoast:Triangle.Label=4";
};

[nonlocal("Mgmt_X://EastCoast")]
Instance of Figs_Covers
{
[nonlocal("Mgmt_X://EastCoast")]
Over="Figs_Triangle.Label=2";

[nonlocal("Mgmt_X://EastCoast")]
Under="Figs_Triangle.Label=4";
};

Figure -2 Example of Nonlocal Qualifier

In particular, the two instances of triangle are not imported, and the references to triangle in the associations are also marked with the nonlocal qualifier.

The above schema also allows intelligent import operations to avoid importing all the objects if there are associations between the objects.

  1. Mapping Existing Models Into CIM
  2. Existing models have their own meta model and model. There are three types of mapping that can occur between meta schemas: technique, recast and domain. Each of these mappings can be applied when converting from MIF syntax to MOF syntax.

    1. Technique Mapping
    2. A technique mapping provides a mapping that uses the CIM meta-model constructs to describe the source modeling technique’s meta constructs (for example, MIF, GDMO and SMI). Essentially, the CIM meta model is a meta meta-model for the source technique.

      Figure -1 Technique Mapping Example

      The DMTF uses the management information format (MIF) as the meta model to describe distributed management information in a common way. Therefore, it is meaningful to describe a technique mapping in which the CIM meta model is used to describe the MIF syntax.

      The mapping presented here takes the important types that can appear in a MIF file and then creates classes for them. Thus, component, group, attribute, table and enum are expressed in the CIM meta model as classes. In addition, associations are defined to document how these are combined. Figure 6-2 illustrates the results:

      Figure -2 MIF Technique Mapping Example

    3. Recast Mapping
    4. A recast mapping provides a mapping of the sources’ meta constructs into the targeted meta constructs, so that a model expressed in the source can be translated into the target. The major design work is to develop a mapping between the sources’ meta model and the CIM meta model. Once this is done, the source expressions are recast.

      Figure -1 Recast mapping

      This is an example of a recast mapping for MIF, assuming:

      DMI attributes -> CIM properties

      DMI key attributes -> CIM key properties

      DMI groups -> CIM classes

      DMI components -> CIM classes

      The standard DMI ComponentID group might be recast into a corresponding CIM class:

      Start Group
      Name = "ComponentID"
      Class = "DMTF|ComponentID|001"
      ID = 1
      Description = "This group defines the attributes common to all "
      "components. This group is required."
      Start Attribute
      Name = "Manufacturer"
      ID = 1
      Description = "Manufacturer of this system."
      Access = Read-Only
      Storage = Common
      Type = DisplayString(64)
      Value = ""
      End Attribute
      Start Attribute
      Name = "Product"
      ID = 2
      Description = "Product name for this system."
      Access = Read-Only
      Storage = Common
      Type = DisplayString(64)
      Value = ""
      End Attribute
      Start Attribute
      Name = "Version"
      ID = 3
      Description = "Version number of this system."
      Access = Read-Only
      Storage = Specific
      Type = DisplayString(64)
      Value = ""
      End Attribute
      Start Attribute
      Name = "Serial Number"
      ID = 4
      Description = "Serial number for this system."
      Access = Read-Only
      Storage = Specific
      Type = DisplayString(64)
      Value = ""
      End Attribute
      Start Attribute
      Name = "Installation"
      ID = 5
      Description = "Component installation time and date."
      Access = Read-Only
      Storage = Specific
      Type = Date
      Value = ""
      End Attribute
      Start Attribute
      Name = "Verify"
      ID = 6
      Description = "A code that provides a level of verification that the "
      "component is still installed and working."
      Access = Read-Only
      Storage = Common
      Type = Start ENUM
      0 = "An error occurred; check status code."
      1 = "This component does not exist."
      2 = "Verification is not supported."
      3 = "Reserved."
      4 = "This component exists, but the functionality is untested."
      5 = "This component exists, but the functionality is unknown."
      6 = "This component exists, and is not functioning correctly."
      7 = "This component exists, and is functioning correctly."
      End ENUM
      Value = 1
      End Attribute
      End Group

      A corresponding CIM class might be the following. Note that properties in the example include an ID qualifier to represent the corresponding DMI attribute’s ID. Here, a user-defined qualifier may be necessary.

      [Name ("ComponentID"), ID (1), Description (
      "This group defines the attributes common to all components. "

      "This group is required.")]


      class DMTF|ComponentID|001 {

      [ID (1), Description ("Manufacturer of this system."), maxlen (64)]
      string Manufacturer;
      [ID (2), Description ("Product name for this system."), maxlen (64)]
      string Product;
      [ID (3), Description ("Version number of this system."), maxlen (64)]
      string Version;
      [ID (4), Description ("Serial number for this system."), maxlen (64)]
      string Serial_Number;
      [ID (5), Description("Component installation time and date.")]
      datetime Installation;
      [ID (6), Description("A code that provides a level of verification "
      "that the component is still installed and working."),

      Value (1)]
      string Verify;
      };

    5. Domain Mapping
    6. A domain mapping takes a source expressed in a particular technique and maps its content into either the core or common models, or extension sub-schemas of the CIM. This mapping does not rely heavily on a meta-to-meta mapping; it is primarily a content-to-content mapping. In one case, the mapping is actually a re-expression of content in a more common way using a more expressive technique.

      This is an example of how CIM properties can be supplied by DMI, using information from the DMI disks group ("DMTF|Disks|002"). For a hypothetical CIM disk class, the CIM properties are expressed as:

      CIM "Disk" property

      Can be sourced from DMI group/attribute

      StorageType

      StorageInterface

      RemovableDrive

      RemovableMedia

      DiskSize

      "MIF.DMTF|Disks|002.1"

      "MIF.DMTF|Disks|002.3"

      "MIF.DMTF|Disks|002.6"

      "MIF.DMTF|Disks|002.7"

      "MIF.DMTF|Disks|002.16"

       

    7. Mapping Scratch Pads

    In general, when the content of models are mapped between different meta schemas, information gets lost or is missing. To fill this gap, "scratch pads" are expressed in the CIM meta model using qualifiers, which are actually extensions to the meta model (for example, see section 2.5.5 Mapping MIF Attributes and section 2.5.6 Mapping Generic Data to CIM Properties). These scratch pads are critical to the exchange of core, common and extension model content with the various technologies used to build management applications.

  3. Repository Perspective

This section provides a basic description of a repository and a complete picture of the potential exploitation of it. A repository stores definitional and/or structural information, and includes the capability to extract the definitions in a form that is useful to application developers. Some repositories allow the definitions to be imported into and exported from the repository in multiple forms. The notions of importing and exporting definition can be refined so that they distinguish between three types of mappings.

Using the mapping definitions in Section 6, the repository can be organized into the four partitions (meta, technique, recast and domain).

Figure -1 Repository Partitions

The repository partitions have the following characteristics:

    1. DMTF MIF Mapping Strategies

Assume the meta-model definition and the baseline for the CIM schema are complete. The next step is to map another source of management information (such as standard groups) into the repository. The primary objective is to do the work required to import one or more of the standard group(s).

The possible import scenarios for a DMTF standard group are:

    1. To Technique Partition: Create a technique mapping for the MIF syntax. This mapping would be the same for all standard groups and would only need to be updated if the MIF syntax changed.
    2. To Recast Partition: Create a recast mapping from a particular standard group into a sub-partition of the recast partition. This mapping would allow the entire contents of the selected group to be loaded into a sub-partition of the recast partition. The same algorithm can be used to map additional standard groups into that same sub-partition.
    3. To Domain Partition: Create a Domain Mapping for the content of a particular standard group that overlaps with the content of the CIM schema.
    4. To Domain Partition: Create a Domain Mapping for the content of a particular standard group that does not overlap with CIM’s schema into an extension sub-schema.
    5. To Domain Partition: Propose extensions to the content of the CIM schema and then perform Steps 3 and/or 4.

Any combination of these five scenarios can be initiated by a team that is responsible for mapping an existing source into the CIM repository. There are many other details that must be addressed as the content of any of the sources changes and/or when the core or common model changes.

Assuming numerous existing sources have been imported using all the import scenarios, now look at the export side. Ignoring the technique partition, the possible scenarios are:

    1. From Recast Partition: Create a recast mapping for a sub-partition in the recast partition to a standard group (that is, inverse of import 2). The desired method would be to use the recast mapping to translate a standard group into a GDMO definition.
    2. From Recast Partition: Create a Domain Mapping for one of the recast sub-partitions to a known management model that was not the original source for the content that overlaps.
    3. From Domain Partition: Create a recast mapping for the complete content of the CIM to a selected technique (for MIF, this results in a non-standard group).
    4. From Domain Partition: Create a Domain Mapping for the content of the CIM schema that overlaps with the content of an existing management model
    5. From Domain Partition: Create a Domain Mapping for the entire content of the CIM schema to an existing management model with the necessary extensions.
    1. Recording Mapping Decisions

In order to understand the role of the scratch pad (see Section 6.4) in the repository, it is necessary to look at the import and export scenarios for the different partitions in the repository (technique, recast and application). These mappings can be organized into two categories: homogeneous and heterogeneous. The homogeneous category includes the mapping where the imported syntax and expressions are the same as the exported (for example, software MIF in and software MIF out). The heterogeneous category addresses the mappings where the imported syntax and expressions are different from the exported (for example, MIF in and GDMO out). For the homogenous category, the information can be recorded by creating qualifiers during an import operation so the content can be exported properly. For the heterogeneous category, the qualifiers must be added after the content is loaded into a partition of the repository. Figure 7-1, shows the X schema imported into the Y schema, and then being homogeneously exported into X or heterogeneously exported into Z. Each of the export arrows works with a different scratch pad.

Figure -1 Homogeneous and Heterogeneous Export

The definition of the heterogeneous category is actually based on knowing how a schema was loaded into the repository. A more general way of looking at this is to think of the export process using one of multiple scratch pads. One of the scratch pads was created when the schema was loaded, and the others were added to handle mappings to schema techniques other than the import source (Figure 7-3).

Figure -3 Scratch Pads and Mapping

Figure 7-3 shows how the scratch pads of qualifiers are used without factoring in the unique aspects of each of the partitions (technique, recast, applications) within the CIM repository. The next step is to put this discussion in the context of these partitions.

For the technique partition, there is no need for a scratch pad since the CIM meta model is used to describe the constructs used in the source meta schema. Therefore, by definition, there is one homogeneous mapping for each meta schema covered by the technique partition. These mappings create CIM objects for the syntactical constructs of the schema and create associations for the ways they can be combined (for example, MIF groups include attributes).

For the recast partition, there are multiple scratch pads for each of the sub-partitions, since one is required for each export target and there can be multiple mapping algorithms for each target. The latter occurs because part of creating a recast mapping involves mapping the constructs of the source into CIM meta-model constructs. Therefore, for the MIF syntax, a mapping must be created for component, group, attribute, and so on, into appropriate CIM meta-model constructs like object, association, property, and so on. These mappings can be arbitrary. As a specific example, one of the decisions that must be made is whether a group or a component maps into an object. It would be possible to have two different recast mapping algorithms, one that mapped groups into objects with qualifiers that preserved the component, and one that mapped components into objects with qualifiers that preserved the group name for the properties. Therefore, the scratch pads in the recast partition are organized by target technique and employed algorithm.

For the domain partitions, there are two types of mappings. The first is similar to the recast partition in that some portion of the domain partition is mapped into the syntax of another meta schema. These mappings can use the same qualifier scratch pads and associated algorithms that are developed for the recast partition. The second type of mapping facilitates documenting the content overlap between the domain partition and some other model (for example, software groups). These mappings cannot be determined in a generic way at import time; therefore, it is best to consider them in the context of exporting. The mapping uses filters to determine the overlaps and then performs the necessary conversions. The filtering can be done using qualifiers that indicate a particular set of domain partition constructs map into some combination of constructs in the target/source model. The conversions would be documented in the repository using a complex set of qualifiers that capture how to write or insert the overlapped content into the target model. The mapping qualifiers for the domain partition would be organized like the recasting partition for the syntax conversions, and there would be scratch pads for each of the models for documenting overlapping content.

In summary, pick the partition, develop a mapping, and identify the qualifiers necessary to capture potentially lost information when developing mapping details for a particular source. On the export side, the mapping algorithm checks to see if the content to be exported includes the necessary qualifiers for the logic to work.

  1. MOF Syntax Grammar Description

This section contains the grammar for MOF syntax. The grammar is described in the notation defined in [7], with this deviation: each token may be separated by an arbitrary number of white space characters, except where stated otherwise (at least one tab, carriage return, line feed, form feed or space).

However, while this notation is convenient for describing the MOF syntax clearly, it should be noted that the MOF syntax has been defined to be expressible in an LL(1)-parseable grammar. This has been done to allow low-footprint implementations of MOF compilers.

In addition, note these points:

    1. An empty property list is equivalent to "*".
    2. All keywords are case-insensitive.
    3. The IDENTIFIER type is used for names of classes, properties, qualifiers, methods and namespaces; the rules governing the naming of classes and properties are to be found in section 1 of Appendix F.
    4. A string Value may contain quote (") characters, provided that each is immediately preceded by a backslash (\) character.

mofSpecification

=

*mofProduction

     

mofProduction

=

compilerDirective |

   

classDeclaration |

   

assocDeclaration |

   

indicDeclaration |

   

qualifierDeclaration |

   

instanceDeclaration

   

compilerDirective

=

PRAGMA pragmaName "(" pragmaParameter ")"

     

pragmaName

=

IDENTIFIER

     

pragmaParameter

=

stringValue

     

classDeclaration

=

[ qualifierList ]

   

CLASS className [ alias ] [ superClass ]

   

"{" *classFeature "}" ";"

   

assocDeclaration

=

"[" ASSOCIATION *( "," qualifier ) "]"

   

CLASS className [ alias ] [ superClass ]

   

"{" *associationFeature "}" ";"

   

   

// Context:

   

// The remaining qualifier list must not include

// the ASSOCIATION qualifier again. If the

// association has no super association, then at

// least two references must be specified! The

// ASSOCIATION qualifier may be omitted in

// sub associations.

     

indicDeclaration

=

"[" INDICATION *( "," qualifier ) "]"

   

CLASS className [ alias ] [ superClass ]

   

"{" *classFeature "}" ";"

     

className

=

schemaName "_" IDENTIFIER // NO whitespace !

     
   

// Context:

   

// Schema name must not include "_" !

     

alias

=

AS aliasIdentifer

     

aliasIdentifer

=

"$" IDENTIFIER // NO whitespace !

     

superClass

=

":" className

   

classFeature

=

propertyDeclaration | methodDeclaration

   

associationFeature

=

classFeature | referenceDeclaration

     

qualifierList

=

"[" qualifier *( "," qualifier ) "]"

     

qualifier

=

qualifierName [ qualifierParameter ] [ ":" 1*flavor ]

     

qualifierParameter

=

"(" constantValue ")" | arrayInitializer

     

flavor

=

ENABLEOVERRIDE | DISABLEOVERRIDE | RESTRICTED |

   

TOSUBCLASS | TRANSLATABLE

     

propertyDeclaration

=

[ qualifierList ] dataType propertyName

   

[ array ] [ defaultValue ] ";"

   

referenceDeclaration

=

[ qualifierList ] objectRef referenceName

   

[ defaultValue ] ";"

   

methodDeclaration

=

[ qualifierList ] dataType methodName

   

"(" [ parameterList ] ")" ";"

   

propertyName

=

IDENTIFIER

     

referenceName

=

IDENTIFIER

     

methodName

=

IDENTIFIER

     

dataType

=

DT_UINT8 | DT_SINT8 | DT_UINT16 | DT_SINT16 |

   

DT_UINT32 | DT_SINT32 | DT_UINT64 | DT_SINT64 |

   

DT_REAL32 | DT_REAL64 | DT_CHAR16 |

   

DT_STR | DT_BOOL | DT_DATETIME

     

objectRef

=

className REF

     

parameterList

=

parameter *( "," parameter )

     

parameter

=

[ qualifierList ] (dataType|objectRef) parameterName

[ array ]

parameterName

=

IDENTIFIER

     

array

=

"[" [positiveDecimalValue] "]"

     

positiveDecimalValue

=

positiveDecimalDigit *decimalDigit

     

defaultValue

=

"=" initializer

     

initializer

=

ConstantValue | arrayInitializer | referenceInitializer

     

arrayInitializer

=

"{" constantValue*( "," constantValue)"}"

     

constantValue

=

integerValue | realValue | charValue | stringValue |

   

booleanValue | nullValue

   

integerValue

=

binaryValue | octalValue | decimalValue | hexValue

     

referenceInitializer

=

objectHandle | aliasIdentifier

     

objectHandle

=

""" [ namespaceHandle ":" ] modelPath """

     

namespaceHandle

=

*ucs2Character
// Note: structure depends on type of namespace

     

modelPath 

=

className "." keyValuePairList

     

keyValuePairList

=

keyValuePair *( "," keyValuePair )

     

keyValuePair

=

( propertyname | referenceName ) "=" initializer

     

qualifierDeclaration

=

QUALIFIER qualifierName qualifierType scope

   

[ defaultFlavor ] ";"

   

qualifierName

=

IDENTIFIER

     

qualifierType

=

":" dataType [ array ] [ defaultValue ]

     

scope

=

"," SCOPE "(" metaElement *( "," metaElement ) ")"

     

metaElement

=

SCHEMA | CLASS | ASSOCIATION | INDICATION | QUALIFIER

   

PROPERTY | REFERENCE | METHOD | PARAMETER | ANY

   

defaultFlavor

=

"," FLAVOR "(" flavor *( "," flavor ) ")"

     

instanceDeclaration

=

[ qualifierList ] INSTANCE OF className [ alias ]

   

"{" 1*valueInitializer "}" ";"

   

valueInitializer

=

[ qualifierList ]

   

( propertyName | referenceName ) "=" initializer ";"

These productions do not allow whitespace between the terms:

schemaName

=

IDENTIFIER

   

// Context:

   

// Schema name must not include "_" !

fileName

=

stringValue

   

binaryValue

=

[ "+" | "-" ] 1*binaryDigit ( "b" | "B" )

     

binaryDigit

=

"0" | "1"

     

octalValue

=

[ "+" | "-" ] "0" 1*octalDigit

     

octalDigit

=

"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"

     

decimalValue

=

[ "+" | "-" ] ( positiveDecimalDigit *decimalDigit | "0" )

     

decimalDigit

=

"0" | positiveDecimalDigit

     

positiveDecimalDigit

=

"1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

     

hexValue

=

[ "+" | "-" ] ( "0x" | "0X" ) 1*hexDigit

     

hexDigit

=

decimalDigit | "a" | "A" | "b" | "B" | "c" | "C" |

   

"d" | "D" | "e" | "E" | "f" | "F"

     

realValue

=

[ "+" | "-" ] *decimalDigit "." 1*decimalDigit

   

[ ( "e" | "E" ) [ "+" | "-" ] 1*decimalDigit ]

     

charValue

=

// any single-quoted Unicode-character, except

// single quotes

     

stringValue

=

1*( """ *ucs2Character """ )

     

ucs2Character

=

// any valid UCS-2-character

     

booleanValue

=

TRUE | FALSE

     

nullValue

=

NULL

The remaining productions are case-insensitive keywords:

ANY

=

"any"

AS

=

"as"

ASSOCIATION

=

"association"

CLASS

=

"class"

DISABLEOVERRIDE

=

"disableOverride"

DT_BOOL

=

"boolean"

DT_CHAR16

=

"char16"

DT_DATETIME

=

"datetime"

DT_REAL32

=

"real32"

DT_REAL64

=

"real64"

DT_SINT16

=

"sint16"

DT_SINT32

=

"sint32"

DT_SINT64

=

"sint64"

DT_SINT8

=

"sint8"

DT_STR

=

"string"

DT_UINT16

=

"uint16"

DT_UINT32

=

"uint32"

DT_UINT64

=

"uint64"

DT_UINT8

=

"uint8"

ENABLEOVERRIDE

=

"enableoverride"

FALSE

=

"false"

FLAVOR

=

"flavor"

INDICATION

=

"indication"

INSTANCE

=

"instance"

METHOD

=

"method"

NULL

=

"null"

OF

=

"of"

PARAMETER

=

"parameter"

PRAGMA

=

"#pragma"

PROPERTY

=

"property"

QUALIFIER

=

"qualifier"

REF

=

"ref"

REFERENCE

=

"reference"

RESTRICTED

=

"restricted"

SCHEMA

=

"schema"

SCOPE

=

"scope"

TOSUBCLASS

=

"tosubclass"

TRANSLATABLE

=

"translatable"

TRUE

=

"true"

  1. CIM META SCHEMA
  2. // version 2.2

    Qualifier Abstract : boolean = false, Scope(class, association, indication),
    Flavor(disableoverride, restricted);

    Qualifier Aggregate : boolean = false, Scope(reference),
    Flavor(disableoverride, tosubclass);

    Qualifier Aggregation : boolean = false, Scope(association),
    Flavor(disableoverride, tosubclass);

    Qualifier Alias : string = null, Scope(property, reference, method),
    Flavor(translatable);

    Qualifier ArrayType : string = "Bag", Scope(property, parameter);

    Qualifier Association : boolean = false, Scope(class, association),
    Flavor(disableoverride);

    Qualifier BitMap : string[], Scope(property, method, parameter);

    Qualifier BitValues : string[], Scope(property, method, parameter),
    Flavor(Translatable);

    Qualifier Counter : boolean = false, Scope(property, method, parameter);

    Qualifier Delete : boolean = false, Scope(association, reference);

    Qualifier Description : string = null, Scope(any), Flavor(translatable);

    Qualifier DisplayName : string = null, Scope(any), Flavor(translatable);

    Qualifier Expensive : boolean = false,
    Scope(property, reference, method, class, association);

    Qualifier Gauge : boolean = false, Scope(property, method, parameter);

    Qualifier Ifdeleted : boolean = false, Scope(association, reference);

    Qualifier In : boolean = true, Scope(parameter), Flavor(disableoverride);

    Qualifier Indication : boolean = false, Scope(class, indication),
    Flavor(disableoverride);

    Qualifier Invisible : boolean = false,
    Scope(reference, association, class,property, method);

    Qualifier Key : boolean = false, Scope(property, reference),
    Flavor(disableoverride);

    Qualifier Large : boolean = false, Scope(property, class);

    Qualifier MappingStrings : string[],
    Scope(class, property, association, indication, reference);

    Qualifier Max : uint32 = null, Scope(reference);

    Qualifier MaxLen : uint32 = null, Scope(property, method, parameter);

    Qualifier MaxValue : sint64 = null, Scope(property, method, parameter);

    Qualifier Min : uint32 = 0, Scope(reference);

    Qualifier MinValue : sint64 = null, Scope(property, method, parameter);

    Qualifier ModelCorrespondence : string[], Scope(property);

    Qualifier NonLocal : string = null, Scope(reference);

    Qualifier NonLocalType : string = null, Scope(reference);

    Qualifier NullValue : string = null, Scope(property),
    Flavor(tosubclass, disableoverride);

    Qualifier Out : boolean = false, Scope(parameter), Flavor(disableoverride);

    Qualifier Override : string = null, Scope(property, method, reference),
    Flavor(disableoverride);

    Qualifier Propagated : string = null, Scope(property, reference),
    Flavor(disableoverride);

    Qualifier Provider : string = null, Scope(any);

    Qualifier Read : boolean = true, Scope(property);

    Qualifier Required : boolean = false, Scope(property);

    Qualifier Revision : string = null, Scope(schema, class, association, indication),
    Flavor(translatable);

    Qualifier Schema : string = null, Scope(property, method),
    Flavor(disableoverride, translatable);

    Qualifier Source : string = null, Scope(class, association, indication);

    Qualifier SourceType : string = null,
    Scope(class, association, indication,reference);

    Qualifier Static : boolean = false, Scope(property, method), Flavor(disableoverride);

    Qualifier Syntax : string = null, Scope(property, reference, method, parameter);

    Qualifier SyntaxType : string = null, Scope(property, reference, method, parameter);

    Qualifier Terminal : boolean = false, Scope(class);

    Qualifier TriggerType : string = null,
    Scope(class, property, reference, method, association, indication);

    Qualifier Units : string = null, Scope(property, method, parameter),
    Flavor(translatable);

    Qualifier UnknownValues : string[], Scope(property),
    Flavor(disableoverride, tosubclass);

    Qualifier UnsupportedValues : string[], Scope(property),
    Flavor(disableoverride, tosubclass);

    Qualifier ValueMap : string[], Scope(property, method, parameter);

    Qualifier Values : string[], Scope(property, method, parameter),
    Flavor(translatable);

    Qualifier Version : string = null,
    Scope(schema, class, association, indication),
    Flavor(translatable);Qualifier Weak : boolean = false, Scope(reference),
    Flavor(disableoverride, tosubclass);

    Qualifier Write : boolean = false, Scope(property);

    // ==================================================================
    // NamedElement
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description(
    "The Meta_NamedElement class represents the root class for the "
    "Metaschema. It has one property: Name, which is inherited by all the "
    "non-association classes in the Metaschema. Every metaconstruct is "
    "expressed as a descendent of the class Meta_Named Element.") ]
    class Meta_NamedElement
    {
    [Description (
    "The Name property indicates the name of the current Metaschema element. "
    "The following rules apply to the Name property, depending on the "
    "creation type of the object:<UL><LI>Fully-qualified class names, such "
    "as those prefixed by the schema name, are unique within the schema."
    "<LI>Fully-qualified association and indication names are unique within "
    "the schema (implied by the fact that association and indication classes "
    "are subtypes of Meta_Class).<LI>Implicitly-defined qualifier names are "
    "unique within the scope of the characterized object; that is, a named "
    "element may not have two characteristics with the same name."
    "<LI>Explicitly-defined qualifier names are unique within the defining "
    "schema. An implicitly-defined qualifier must agree in type, scope and "
    "flavor with any explicitly-defined qualifier of the same name."
    "<LI>Trigger names must be unique within the property, class or method "
    "to which the trigger applies.<LI>Method and property names must be "
    "unique within the domain class. A class can inherit more than one "
    "property or method with the same name. Property and method names can be "
    "qualified using the name of the declaring class.<LI>Reference names "
    "must be unique within the scope of their defining association class. "
    "Reference names obey the same rules as property names.</UL><B>Note:</B> "
    "Reference names are not required to be unique within the scope of the "
    "related class. Within such a scope, the reference provides the name of "
    "the class within the context defined by the association.") ]
    string Name;
    };

    // ==================================================================
    // QualifierFlavor
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_QualifierFlavor class encapsulates extra semantics attached "
    "to a qualifier such as the rules for transmission from superClass "
    "to subClass and whether or not the qualifier value may be translated "
    "into other languages") ]
    class Meta_QualifierFlavor:Meta_NamedElement
    {
    };

    // ==================================================================
    // Schema
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Schema class represents a group of classes with a single owner."
    " Schemas are used for administration and class naming. Class names must "
    "be unique within their owning schemas.") ]
    class Meta_Schema:Meta_NamedElement
    {
    };

    // ==================================================================
    // Trigger
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "A Trigger is a recognition of a state change (such as create, delete, "
    "update, or access) of a Class instance, and update or access of a "
    "Property.") ]
    class Meta_Trigger:Meta_NamedElement
    {
    };

    // ==================================================================
    // Qualifier
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Qualifier class represents characteristics of named elements. "
    "For example, there are qualifiers that define the characteristics of a "
    "property or the key of a class. Qualifiers provide a mechanism that "
    "makes the Metaschema extensible in a limited and controlled fashion."
    "<P>It is possible to add new types of qualifiers by the introduction of "
    "a new qualifier name, thereby providing new types of metadata to "
    "processes that manage and manipulate classes, properties, and other "
    "elements of the Metaschema.") ]
    class Meta_Qualifier:Meta_NamedElement
    {
    [Description ("The Value property indicates the value of the qualifier.")]
    string Value;
    };

    // ==================================================================
    // Method
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Method class represents a declaration of a signature; that is, "
    "the method name, return type and parameters, and (in the case of a "
    "concrete class) may imply an implementation.") ]
    class Meta_Method:Meta_NamedElement
    {
    };

    // ==================================================================
    // Property
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Property class represents a value used to characterize "
    "instances of a class. A property can be thought of as a pair of Get and "
    "Set functions that, when applied to an object, return state and set "
    "state, respectively.") ]
    class Meta_Property:Meta_NamedElement
    {
    };

    // ==================================================================
    // Reference
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Reference class represents (and defines) the role each object "
    "plays in an association. The reference represents the role name of a "
    "class in the context of an association, which supports the provision of "
    "multiple relationship instances for a given object. For example, a "
    "system can be related to many system components.") ]
    class Meta_Reference:Meta_Property
    {
    };

    // ==================================================================
    // Class
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Class class is a collection of instances that support the same "
    "type; that is, the same properties and methods. Classes can be arranged "
    "in a generalization hierarchy that represents subtype relationships "
    "between classes.<P>The generalization hierarchy is a rooted, directed "
    "graph and does not support multiple inheritance. Classes can have "
    "methods, which represent the behavior relevant for that class. A Class "
    "may participate in associations by being the target of one of the "
    "references owned by the association.") ]
    class Meta_Class:Meta_NamedElement
    {
    };

    // ==================================================================
    // Indication
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Indication class represents an object created as a result of a "
    "trigger. Because Indications are subtypes of Meta_Class, they can have "
    "properties and methods, and be arranged in a type hierarchy. ") ]
    class Meta_Indication:Meta_Class
    {
    };

    // ==================================================================
    // Association
    // ==================================================================
    [Version( "2" ), Revision( "2" ), Description (
    "The Meta_Association class represents a class that contains two or more "
    "references and represents a relationship between two or more objects. "
    "Because of how associations are defined, it is possible to establish a "
    "relationship between classes without affecting any of the related "
    "classes.<P>For example, the addition of an association does not affect "
    "the interface of the related classes; associations have no other "
    "significance. Only associations can have references. Associations can "
    "be a subclass of a non-association class . Any subclass of "
    "Meta_Association is an association.") ]
    class Meta_Association:Meta_Class
    {
    };

    // ==================================================================
    // Characteristics
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Aggregation, Description (
    "The Meta_Characteristics class relates a Meta_NamedElement to a "
    "qualifier that characterizes the named element. Meta_NamedElement may "
    "have zero or more characteristics.") ]
    class Meta_Characteristics
    {
    [Description (
    "The Characteristic reference represents the qualifier that "
    "characterizes the named element.") ]
    Meta_Qualifier REF Characteristic;
    [Aggregate, Description (
    "The Characterized reference represents the named element that is being "
    "characterized.") ]
    Meta_NamedElement REF Characterized;
    };

    // ==================================================================
    // PropertyDomain
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Aggregation, Description (
    "The Meta_PropertyDomain class represents an association between a class "
    "and a property.<P>A property has only one domain: the class that owns "
    "the property. A property can have an override relationship with another "
    "property from a different class. The domain of the overridden property "
    "must be a supertype of the domain of the overriding property. The "
    "domain of a reference must be an association.") ]
    class Meta_PropertyDomain
    {
    [Description (
    "The Property reference represents the property that is owned by the "
    "class referenced by Domain.") ]
    Meta_Property REF Property;
    [Aggregate, Description (
    "The Domain reference represents the class that owns the property "
    "referenced by Property.") ]
    Meta_Class REF Domain;
    };

    // ==================================================================
    // MethodDomain
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Aggregation, Description (
    "The Meta_MethodDomain class represents an association between a class "
    "and a method.<P>A method has only one domain: the class that owns the "
    "method, which can have an override relationship with another method "
    "from a different class. The domain of the overridden method must be a "
    "supertype of the domain of the overriding method. The signature of the "
    "method (that is, the name, parameters and return type) must be "
    "identical.") ]
    class Meta_MethodDomain
    {
    [Description (
    "The Method reference represents the method that is owned by the class "
    "referenced by Domain.") ]
    Meta_Method REF Method;
    [Aggregate, Description (
    "The Domain reference represents the class that owns the method "
    "referenced by Method.") ]
    Meta_Class REF Domain;
    };

    // ==================================================================
    // ReferenceRange
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Description (
    "The Meta_ReferenceRange class defines the type of the reference.") ]
    class Meta_ReferenceRange
    {
    [Description (
    "The Reference reference represents the reference whose type is defined "
    "by Range.") ]
    Meta_Reference REF Reference;
    [Description (
    "The Range reference represents the class that defines the type of "
    "reference.") ]
    Meta_Class REF Range;
    };

    // ==================================================================
    // QualifiersFlavor
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Aggregation, Description (
    "The Meta_QualifiersFlavor class represents an association between a "
    "flavor and a qualifier.") ]
    class Meta_QualifiersFlavor
    {
    [Description (
    "The Flavor reference represents the qualifier flavor to "
    "be applied to Qualifier.") ]
    Meta_QualifierFlavor REF Flavor;
    [Aggregate, Description (
    "The Qualifier reference represents the qualifier to which "
    "Flavor applies.") ]
    Meta_Qualifier REF Qualifier;
    };

    // ==================================================================
    // SubtypeSupertype
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Description (
    "The Meta_SubtypeSupertype class represents subtype/supertype "
    "relationships between classes arranged in a generalization hierarchy. "
    "This generalization hierarchy is a rooted, directed graph and does not "
    "support multiple inheritance.") ]
    class Meta_SubtypeSupertype
    {
    [Description (
    "The SuperClass reference represents the class that is hierarchically "
    "immediately above the class referenced by SubClass.") ]
    Meta_Class REF SuperClass;
    [Description (
    "The SubClass reference represents the class that is the immediate "
    "descendent of the class referenced by SuperClass.") ]
    Meta_Class REF SubClass;
    };

    // ==================================================================
    // PropertyOverride
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Description (
    "The Meta_PropertyOverride class represents an association between two "
    "properties where one overrides the other.<P>Properties have reflexive "
    "associations that represent property overriding. A property can "
    "override an inherited property, which implies that any access to the "
    "inherited property will result in the invocation of the implementation "
    "of the overriding property. A Property can have an override "
    "relationship with another property from a different class.<P>The domain "
    "of the overridden property must be a supertype of the domain of the "
    "overriding property. The class referenced by the Meta_ReferenceRange "
    "association of an overriding reference must be the same as, or a "
    "subtype of, the class referenced by the Meta_ReferenceRange "
    "associations of the reference being overridden.") ]
    class Meta_PropertyOverride
    {
    [Description (
    "The OverridingProperty reference represents the property that overrides "
    "the property referenced by OverriddenProperty.") ]
    Meta_Property REF OverridingProperty;
    [Description (
    "The OverriddenProperty reference represents the property that is "
    "overridden by the property reference by OverridingProperty.") ]
    Meta_Property REF OverriddenProperty;
    };

    // ==================================================================
    // MethodOverride
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Description (
    "The Meta_MethodOverride class represents an association between two "
    "methods, where one overrides the other. Methods have reflexive "
    "associations that represent method overriding. A method can override an "
    "inherited method, which implies that any access to the inherited method "
    "will result in the invocation of the implementation of the overriding "
    "method.") ]
    class Meta_MethodOverride
    {
    [Description (
    "The OverridingMethod reference represents the method that overrides the "
    "method referenced by OverriddenMethod.") ]
    Meta_Method REF OverridingMethod;
    [Description (
    "The OverriddenMethod reference represents the method that is overridden "
    "by the method reference by OverridingMethod.") ]
    Meta_Method REF OverriddenMethod;
    };

    // ==================================================================
    // ElementSchema
    // ==================================================================
    [Association, Version( "2" ), Revision( "2" ), Aggregation, Description (
    "The Meta_ElementSchema class represents the elements (typically classes "
    "and qualifiers) that make up a schema.") ]
    class Meta_ElementSchema
    {
    [Description (
    "The Element reference represents the named element that belongs to the "
    "schema referenced by Schema.") ]
    Meta_NamedElement REF Element;
    [Aggregate, Description (
    "The Schema reference represents the schema to which the named element "
    "referenced by Element belongs.") ]
    Meta_Schema REF Schema;
    };

  3. Values for UNITS Qualifier

The UNITS qualifier specifies the unit of measure in which the associated property is expressed. For example, a Size property might have Units ("bytes"). Currently recognized values are:

  1. UML Notation
  2. The CIM meta-schema notation is based directly on the notation used in Unified Modeling Language (UML). There are distinct symbols for all of the major constructs in the schema, with the exception of qualifiers (as opposed to properties, which are directly represented in the diagrams).

    In UML, a class is represented by a rectangle. The class name either stands alone in the rectangle or is in the uppermost segment of the rectangle. If present, the segment below the segment containing the name contains the properties of the class. If present, a third region indicates the presence of methods.

    A line decorated with a triangle indicates an inheritance relationship; the lower rectangle represents a subtype of the upper rectangle. The triangle points to the superclass.

    Other solid lines represent relationships. The cardinality of the references on either side of the relationship is indicated by a decoration on either end. The following character combinations are commonly used:

    "1" indicates a single-valued, required reference

    "0…1" indicates an optional single-valued reference

    "*" indicates an optional many-valued reference (as does "0..*")

    "1..*" indicates a required many-valued reference

    A line connected to a rectangle by a dotted line represents a subclass relationship between two associations.

    The diagramming notation and its interpretation are summarized in this table:

    Meta element

    Interpretation

    Diagramming Notation

     

     

    Object

     

     

    Primitive type

    Text to the right of the colon in the center portion of the class icon


     

     

    Class

     

     

     

     

    Subclass

     

     

     

     

    Association


    1:1

    1:Many

    1:zero or 1

    Aggregation

     

     

    Association with properties

     

     

    link-class with the link-class having the same name as the association, and using normal conventions for representing properties and methods.

     

     

    Association with subclass

     

    A dashed line running from the sub association to the super class.

     

     

     

    Property

     

     

    Middle section of the class icon is a list of the properties of the class.

     

     

    Reference

     

    One end of the association line labeled with the name of the reference.

     

     

     

    Method

     

     

    Lower section of the class icon is a list of the methods of the class.

     

     

    Overriding

     

    No direct equivalent.

    Note: Use of the same name does not imply overriding.


     

    Indication

     

    Message trace diagram in which vertical bars represent objects and horizontal lines represent messages.

     

     

    Trigger

     

    State transition diagrams.


     

    Qualifier

     

    No direct equivalent.


     

  3. Glossary
  4. AggregationAssociation

    A class that expresses the relationship between two other classes. The relationship is established by the presence of two or more references in the association class pointing to the related classes.

    Cardinality

    A relationship between two classes that allows more than one object to be related to a single object. For example, Microsoft Office* is made up of the software elements Word, Excel, Access and PowerPoint.

    CIM

    Common Information Model is the schema of the overall managed environment. It is divided into a Core model, Common model and extended schemas.

    CIM Schema

    The schema representing the Core and Common models. Versions of this schema will be released by the DMTF over time as the schema evolves.

    Class

    A collection of instances, all of which support a common type; that is, a set of properties and methods. The common properties and methods are defined as features of the class. For example, the class called Modem represents all the modems present in a system.

    Common model

    A collection of models specific to a particular area, derived from the Core model. Included are the system model, the application model, the network model and the device model.

    Core model

    A subset of CIM, not specific to any platform. The Core model is set of classes and associations that establish a conceptual framework for the schema of the rest of the managed environment. Systems, applications, networks and related information are modeled as extensions to the Core model.

    Domain

    A virtual room for object names that establishes the range in which the names of objects are unique.

    Explicit Qualifier

    A qualifier defined separately from the definition of a class, property or other schema element (see implicit qualifier). Explicit qualifier names must be unique across the entire schema. Implicit qualifier names must be unique within the defining schema element; that is, a given schema element may not have two qualifiers with the same name.

    Extended schema

    A platform specific schema derived from the Common model. An example is the Win32 schema.

    Feature

    A property or method belonging to a class.

    Flavor

    Part of a qualifier spcification indicating overriding and inheritance rules. For example, the qualifier KEY has Flavor(DisableOverride ToSubclass), meaning that every subclass must inherit it and cannot override it.

    Implicit Qualifier

    A qualifier defined as a part of the definition of a class, property or other schema element (see explicit qualifier).

    Indication

    A type of class usually created as a result of the occurrence of a trigger.

    Inheritance

    A relationship between two classes in which all the members of the subclass are required to be members of the superclass. Any member of the subclass must also support any method or property supported by the superclass. For example, Modem is a subclass of Device.

    Instance

    A unit of data. An instance is a set of property values that can be uniquely identified by a key.

    Key

    One or more qualified class properties that can be used to construct a name.

    One or more qualified object properties which uniquely identify instances of this object in a namespace.

    Managed Object

    The actual item in the system environment that is accessed by the provider. For example, a Network Interface Card.

    Meta model

    A set of classes, associations and properties that expresses the types of things that can be defined in a Schema. For example, the meta model includes a class called property which defines the properties known to the system, a class called method which defines the methods known to the system, and a class called class which defines the classes known to the system.

    Meta schema

    The schema of the meta model.

    Method

    A declaration of a signature; that is, the method name, return type and parameters, and, in the case of a concrete class, may imply an implementation.

    Model

    A set of classes, properties and associations that allows the expression of information about a specific domain. For example, a Network may consist of Network Devices and Logical Networks. The Network Devices may have attachment associations to each other, and may have member associations to Logical Networks.

    Model Path

    A reference to an object within a namespace.

    Namespace

    An object that defines a scope within which object keys must be unique.

    Namespath Path

    A reference to a namespace within an implementation that is capable of hosting CIM objects.

    Name

    Combination of a Namespace path and a Model path that identifies a unique object.

    Trigger

    The occurrence of some action such as the creation, modification or deletion of an object, access to an object, or modification or access to a property. Triggers may also be fired as a result of the passage of a specified period of time. A trigger typically results in an Indication.

    Polymorphism

    A subclass may redefine the implementation of a method or property inherited from its superclass. The property or method is thereby redefined, even if the superclass is used to access the object. For example, Device may define availability as a string, and may return the values "powersave", "on" or "off." The Modem subclass of Device may redefine (override) availability by returning "on," "off," but not "powersave". If all Devices are enumerated, any Device that happens to be a modem will not return the value "powersave" for the availability property.

    Property

    A value used to characterize an instance of a class. For example, a Device may have a property called status.

    Provider

    An executable that can return or set information about a given managed object.

    Qualifier

    A value used to characterize a method, property, or class in the meta schema. For example, if a property has the qualifier KEY with the value TRUE, the property is a key for the class.

    Reference

    Special property types that are references or "pointers" to other instances.

    Schema

    A namespace and unit of ownership for a set of classes. Schemas may come in forms such as a text file, information in a repository, or diagrams in a CASE tool.

    Scope

    Part of a Qualifier specification indicating with which meta constructs the Qualifier can be used. For example, the Qualifier ABSTRACT has Scope(Class Association Indication), meaning that it can only be used with Classes, Associations and Indications.

    Scoping Object

    Objects which represent a real-world managed element, which in turn propagate keys to other objects.

    Signature

    The return type and parameters supported by a method.

    Subclass

    See Inheritance.

    Superclass

    See Inheritance.

    Top Level Object

    A class or object that has no scoping object.

  5. Unicode Usage

All punctuation symbols associated with object path or MOF Syntax occur within the Basic Latin range U+0000 to U+007F. These include normal punctuators, such as slashes, colons, commas, and so on. No important syntactic punctuation character occurs outside of this range.

All characters above U+007F are treated as parts of names, even though there are several reserved characters such as U+2028 and U+2029 which are logically whitespace.

Therefore, all namespace, class and property names are identifiers composed as follows:

    1. Initial identifier characters must be in set S1, where S1 = {U+005F, U+0041...U+005A, U+0061...U+007A, U+0080...U+FFEF) [This is alphabetic, plus underscore]
    2. All following characters must be in set S2 where S2 = S1 union {U+0030...U+0039} [This is alphabetic, underscore, plus Arabic numerals 0 through 9.]

Note that the Unicode specials range (U+FFF0...U+FFFF) are not legal for identifiers. While the above sub-range of U+0080...U+FFEF includes many diacritical characters which would not be useful in an identifier, as well as the Unicode reserved sub-range which has not been allocated, it seems advisable for simplicity of parsers to simply treat this entire sub-range as 'legal' for identifiers.

Refer to RFC2279, published by the Internet Engineering Task Force (IETF), as an example of a Universal Transformation Format that has specific characteristics for dealing with multi-octet characters on an application-specific basis.

    1. MOF Text
    2. MOF files using Unicode must contain a signature as the first two bytes of the text file, either U+FFFE or U+FEFF, depending on the byte ordering of the text file (as suggested in Section 2.4 of the Unicode specification).

      U+FFFE is little endian.

      All MOF keywords and punctuation symbols are as described in the MOF Syntax document and are not locale-specific. They are composed of characters falling in the range U+0000...U+007F, regardless of the locale of origin for the MOF or its identifiers.

    3. Quoted Strings

In all cases where non-identifier string values are required, delimiters must surround them.

The supported delimiter for strings is U+0027. Once a quoted string is started using the delimiter, the same delimiter, U+0027, is used to terminate it.

In addition, the digraph U+005C ("\") followed by U+0027 """ constitutes an embedded quotation mark, not a termination of the quoted string.

The characters permitted within the quotation mark delimiters just described may fall within the range U+0001 through U+FFEF.

  1. Guidelines

Method descriptions are recommended and must, at a minimum, indicate that method’s side-effects (pre- and post-conditions).

Associations must not be declared as subtypes of classes that are not associations.

Leading underscores in identifiers are to be discouraged and not be used at all in the standard schemas.

As a general rule, it is recommended that class names not be reused as part of property or method names. Property and method names are already unique within their defining class.

To enable information sharing between different CIM implementations, the MAXLEN qualifier should be used to specify the maximum length of string properties. This qualifier must always be present for string properties used as keys.

A class that has no ABSTRACT qualifier must define, or inherit, key properties.

    1. Mapping of Octet Strings
    2. Most management models, including SNMP and DMI, support octet strings as data types. The octet string data type represents arbitrary numeric or textual data. This data is stored as an indexed byte array of unlimited, but fixed size. Typically, the first N bytes indicate the actual string length. Since some environments only reserve the first byte, they do not support octet strings larger than 255 bytes.

      In the current release, CIM does not support octet strings as a separate data type. To map octet strings, it is recommended that the equivalent CIM property be defined as an array of unsigned 8-bit integers (uint8). The first four bytes of the array contain the length of the octet data: byte 0 is the most significant byte of the length; byte 3 is the least significant byte of the length. The octet data starts at byte 4.

    3. SQL Reserved Words

It is recommended that SQL reserved words be avoided in the selection of class and property names. This particularly applies to property names, since class names are prefixed by the schema name, making a clash with a reserved word unlikely. The current set of SQL reserved words are:

From sql1992.txt:

AFTER

ALIAS

ASYNC

BEFORE

BOOLEAN

BREADTH

COMPLETION

CALL

CYCLE

DATA

DEPTH

DICTIONARY

EACH

ELSEIF

EQUALS

GENERAL

IF

IGNORE

LEAVE

LESS

LIMIT

LOOP

MODIFY

NEW

NONE

OBJECT

OFF

OID

OLD

OPERATION

OPERATORS

OTHERS

PARAMETERS

PENDANT

PREORDER

PRIVATE

PROTECTED

RECURSIVE

REF

REFERENCING

REPLACE

RESIGNAL

RETURN

RETURNS

ROLE

ROUTINE

ROW

SAVEPOINT

SEARCH

SENSITIVE

SEQUENCE

SIGNAL

SIMILAR

SQLEXCEPTION

SQLWARNING

STRUCTURE

TEST

THERE

TRIGGER

TYPE

UNDER

VARIABLE

VIRTUAL

VISIBLE

WAIT

WHILE

WITHOUT

From sql1992.txt (Annex E):

ABSOLUTE

ACTION

ADD

ALLOCATE

ALTER

ARE

ASSERTION

AT

BETWEEN

BIT

BIT_LENGTH

BOTH

CASCADE

CASCADED

CASE

CAST

CATALOG

CHAR_LENGTH

CHARACTER_LENGTH

COALESCE

COLLATE

COLLATION

COLUMN

CONNECT

CONNECTION

CONSTRAINT

CONSTRAINTS

CONVERT

CORRESPONDING

CROSS

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_USER

DATE

DAY

DEALLOCATE

DEFERRABLE

DEFERRED

DESCRIBE

DESCRIPTOR

DIAGNOSTICS

DISCONNECT

DOMAIN

DROP

ELSE

END-EXEC

EXCEPT

EXCEPTION

EXECUTE

EXTERNAL

EXTRACT

FALSE

FIRST

FULL

GET

GLOBAL

HOUR

IDENTITY

IMMEDIATE

INITIALLY

INNER

INPUT

INSENSITIVE

INTERSECT

INTERVAL

ISOLATION

JOIN

LAST

LEADING

LEFT

LEVEL

LOCAL

LOWER

MATCH

MINUTE

MONTH

NAMES

NATIONAL

NATURAL

NCHAR

NEXT

NO

NULLIF

OCTET_LENGTH

ONLY

OUTER

OUTPUT

OVERLAPS

PAD

PARTIAL

POSITION

PREPARE

PRESERVE

PRIOR

READ

RELATIVE

RESTRICT

REVOKE

RIGHT

ROWS

SCROLL

SECOND

SESSION

SESSION_USER

SIZE

SPACE

SQLSTATE

SUBSTRING

SYSTEM_USER

TEMPORARY

THEN

TIME

TIMESTAMP

TIMEZONE_HOUR

TIMEZONE_MINUTE

TRAILING

TRANSACTION

TRANSLATE

TRANSLATION

TRIM

TRUE

UNKNOWN

UPPER

USAGE

USING

VALUE

VARCHAR

VARYING

WHEN

WRITE

YEAR

ZONE

From sql3part2.txt (Annex E):

ACTION

ACTOR

AFTER

ALIAS

ASYNC

ATTRIBUTES

BEFORE

BOOLEAN

BREADTH

COMPLETION

CURRENT_PATH

CYCLE

DATA

DEPTH

DESTROY

DICTIONARY

EACH

ELEMENT

ELSEIF

EQUALS

FACTOR

GENERAL

HOLD

IGNORE

INSTEAD

LESS

LIMIT

LIST

MODIFY

NEW

NEW_TABLE

NO

NONE

OFF

OID

OLD

OLD_TABLE

OPERATION

OPERATOR

OPERATORS

PARAMETERS

PATH

PENDANT

POSTFIX

PREFIX

PREORDER

PRIVATE

PROTECTED

RECURSIVE

REFERENCING

REPLACE

ROLE

ROUTINE

ROW

SAVEPOINT

SEARCH

SENSITIVE

SEQUENCE

SESSION

SIMILAR

SPACE

SQLEXCEPTION

SQLWARNING

START

STATE

STRUCTURE

SYMBOL

TERM

TEST

THERE

TRIGGER

TYPE

UNDER

VARIABLE

VIRTUAL

VISIBLE

WAIT

WITHOUT

sql3part4.txt (ANNEX E):

CALL

DO

ELSEIF

EXCEPTION

IF

LEAVE

LOOP

OTHERS

RESIGNAL

RETURN

RETURNS

SIGNAL

TUPLE

WHILE

 

  1. References

[1] Grady Booch and James Rumbaugh, Unified Method for Object-Oriented Development Document Set, Rational Software Corporation, 1996, http://www.rational.com/uml

[2] HyperMedia Management Protocol, Protocol Encoding, draft-hmmp-encoding-03.txt, February, 1997

[3] Interface Definition Language, DCE/RPC, The Open Group.

[4] Georges Gardarin and Patrick Valduriez, Relational Databases and Knowledge Bases, Addison Wesley, 1989

[5] Coplein, James O., Schmidt, Douglas C (eds). Pattern Languages of Program Design, Addison-Wesley, Reading Mass., 1995

[6] IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985, Institute of Electrical and Electronics Engineers, August 1985.

[7] Augmented BNF for Syntax Specifications: ABNF, RFC 2234, Nov 1997

[8] G. Weinberger, General Systems Theory

[9] The Unicode Standard, Version 2.0, by The Unicode Consortium, Addison-Wesley, 1996.

[10] Universal Multiple-Octet Coded Character Set, ISO/IEC 10646

[11] UCS Transformation Format 8 (UTF-8), ISO/IEC 10646-1:1993 Amendment 2 (1996)

[12] Code for the Representation of Names of Languages, ISO/IEC 639:1988 (E/F)

[13] Code for the Representation of Names of Territory, ISO/IEC 3166:1988 (E/F)