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 VolumeLabe