<!-- ************************************************** -->
<!--                                                    -->
<!-- This DTD defines the schema for XML 1.0 Documents  -->
<!-- representing CIM Element Declarations or Messages, -->
<!-- including WMI extensions not yet supported by CIM. -->
<!--                                                    -->
<!-- Extensions Copyright (c) 1998-1999 Microsoft       -->
<!--	Corporation					-->
<!--                                                    -->
<!--    DTD Version : 2.0                               -->
<!--    Date: July 20th 1999                            -->
<!-- ************************************************** -->

<!-- ************************************************** -->
<!-- Entity Declarations                                -->
<!-- ************************************************** -->

<!ENTITY % CIMName         "NAME           CDATA         #REQUIRED">

<!ENTITY % CIMType  "TYPE (boolean|string|char16|uint8|sint8|uint16|sint16|uint32|sint32|uint64|sint64|datetime|real32|real64)">

<!-- This is a WMI extension used for context objects -->
<!ENTITY % VTType  "VTTYPE (VT_I4|VT_R8|VT_BOOL|VT_BSTR|VT_UNKNOWN|VT_NULL)">

<!ENTITY % QualifierFlavor "OVERRIDABLE    (true|false)  'true'
                            TOSUBCLASS     (true|false)  'true'
                            TOINSTANCE     (true|false)  'false'
                            AMENDED		   (true|false)  'false'
                            TRANSLATABLE   (true|false)  'false'">

<!ENTITY % ClassOrigin     "CLASSORIGIN    CDATA         #IMPLIED">

<!ENTITY % Propagated      "PROPAGATED     (true|false)  'false'">

<!ENTITY % ArraySize       "ARRAYSIZE      CDATA         #IMPLIED">

<!ENTITY % SuperClass      "SUPERCLASS     CDATA         #IMPLIED">

<!ENTITY % ClassName       "CLASSNAME      CDATA         #REQUIRED">

<!ENTITY % ReferenceClass  "REFERENCECLASS CDATA         #IMPLIED">


<!-- ************************************************** -->
<!-- Root element                                       -->
<!--     CIMVERSION must be "2.0"                       -->
<!--     DTDVERSION must be "2.0"                       -->
<!-- ************************************************** -->

<!ELEMENT CIM (MESSAGE|DECLARATION)>
<!ATTLIST CIM 
         CIMVERSION CDATA #REQUIRED   
         DTDVERSION CDATA #REQUIRED>  


<!-- ************************************************** -->
<!-- Object declaration elements                        -->
<!-- ************************************************** -->

<!ELEMENT DECLARATION (DECLGROUP|DECLGROUP.WITHNAME|DECLGROUP.WITHPATH)*>

<!ELEMENT DECLGROUP ((LOCALNAMESPACEPATH|NAMESPACEPATH)?,QUALIFIER.DECLARATION*,VALUE.OBJECT*)>

<!ELEMENT DECLGROUP.WITHNAME ((LOCALNAMESPACEPATH|NAMESPACEPATH)?,QUALIFIER.DECLARATION*,VALUE.NAMEDOBJECT*)>

<!ELEMENT DECLGROUP.WITHPATH (VALUE.OBJECTWITHPATH|VALUE.OBJECTWITHLOCALPATH)*>

<!ELEMENT QUALIFIER.DECLARATION (SCOPE?,(VALUE|VALUE.ARRAY)?)>
<!ATTLIST QUALIFIER.DECLARATION 
         %CIMName;               
         %CIMType;               #REQUIRED
         ISARRAY    (true|false) #IMPLIED
         %ArraySize;
         %QualifierFlavor;>

<!ELEMENT SCOPE EMPTY>
<!ATTLIST SCOPE 
         CLASS        (true|false)      'false'
         ASSOCIATION  (true|false)      'false'
         REFERENCE    (true|false)      'false'
         PROPERTY     (true|false)      'false'
         METHOD       (true|false)      'false'
         PARAMETER    (true|false)      'false'
         INDICATION   (true|false)      'false'>


<!-- ************************************************** -->
<!-- Object Value elements                              -->
<!-- ************************************************** -->

<!ELEMENT VALUE (#PCDATA)>

<!ELEMENT VALUE.ARRAY (VALUE*)>

<!ELEMENT VALUE.REFERENCE (CLASSPATH|LOCALCLASSPATH|CLASSNAME|
                           INSTANCEPATH|LOCALINSTANCEPATH|INSTANCENAME)>

<!ELEMENT VALUE.REFARRAY (VALUE.REFERENCE*)>

<!ELEMENT VALUE.OBJECT (CLASS|INSTANCE)>

<!ELEMENT VALUE.NAMEDINSTANCE (INSTANCENAME,INSTANCE)>

<!ELEMENT VALUE.OBJECTARRAY (VALUE.OBJECT*)>

<!ELEMENT VALUE.NAMEDOBJECT (CLASS|(INSTANCENAME,INSTANCE))>

<!ELEMENT VALUE.OBJECTWITHLOCALPATH ((LOCALCLASSPATH,CLASS)|(LOCALINSTANCEPATH,INSTANCE))>

<!ELEMENT VALUE.OBJECTWITHPATH ((CLASSPATH,CLASS)|(INSTANCEPATH,INSTANCE))>


<!-- ************************************************** -->
<!-- Object naming and locating elements                -->
<!-- ************************************************** -->

<!ELEMENT NAMESPACEPATH (HOST,LOCALNAMESPACEPATH)>

<!ELEMENT LOCALNAMESPACEPATH (NAMESPACE+)>

<!ELEMENT HOST (#PCDATA)>

<!ELEMENT NAMESPACE EMPTY>
<!ATTLIST NAMESPACE
         %CIMName;>

<!ELEMENT CLASSPATH (NAMESPACEPATH,CLASSNAME)>

<!ELEMENT LOCALCLASSPATH (LOCALNAMESPACEPATH,CLASSNAME)>

<!ELEMENT CLASSNAME EMPTY>
<!ATTLIST CLASSNAME
         %CIMName;>

<!ELEMENT INSTANCEPATH (NAMESPACEPATH,INSTANCENAME)>

<!ELEMENT LOCALINSTANCEPATH (LOCALNAMESPACEPATH,INSTANCENAME)>

<!ELEMENT INSTANCENAME (KEYBINDING*|KEYVALUE?|VALUE.REFERENCE?)>
<!ATTLIST INSTANCENAME
         %ClassName;>

<!ELEMENT OBJECTPATH (INSTANCEPATH|CLASSPATH)>

<!ELEMENT KEYBINDING (KEYVALUE|VALUE.REFERENCE)>
<!ATTLIST KEYBINDING
         %CIMName;>

<!ELEMENT KEYVALUE (#PCDATA)>
<!ATTLIST KEYVALUE
         VALUETYPE    (string|boolean|numeric)  'string'>

<!-- ************************************************** -->
<!-- Object definition elements                         -->
<!-- ************************************************** -->

<!ELEMENT CLASS (QUALIFIER*,(PROPERTY|PROPERTY.ARRAY|PROPERTY.OBJECT|PROPERTY.OBJECTARRAY|PROPERTY.REFERENCE|PROPERTY.REFARRAY)*,(METHOD|METHOD.REFERENCE|METHOD.OBJECT)*)>
<!ATTLIST CLASS
         %CIMName;
         %SuperClass;>

<!ELEMENT INSTANCE (QUALIFIER*,(PROPERTY|PROPERTY.ARRAY|PROPERTY.OBJECT|PROPERTY.OBJECTARRAY|PROPERTY.REFERENCE|PROPERTY.REFARRAY)*) >
<!ATTLIST INSTANCE
         %ClassName;>

<!ELEMENT QUALIFIER (VALUE|VALUE.ARRAY)>
<!ATTLIST QUALIFIER 
         %CIMName;
         %CIMType;              #REQUIRED
         %Propagated;
         %QualifierFlavor;>
	
<!ELEMENT PROPERTY (QUALIFIER*,VALUE?)>
<!ATTLIST PROPERTY
         %CIMName;
         %ClassOrigin;
         %Propagated;
         %CIMType;              #REQUIRED>

<!ELEMENT PROPERTY.ARRAY (QUALIFIER*,VALUE.ARRAY?)>
<!ATTLIST PROPERTY.ARRAY
         %CIMName;
         %CIMType;              #REQUIRED
         %ArraySize;
         %ClassOrigin;
         %Propagated;>

<!ELEMENT PROPERTY.REFERENCE (QUALIFIER*,(VALUE.REFERENCE)?)>
<!ATTLIST PROPERTY.REFERENCE
         %CIMName;
         %ReferenceClass;
         %ClassOrigin;
         %Propagated;>

<!ELEMENT PROPERTY.REFARRAY (QUALIFIER*,(VALUE.REFARRAY)?)>
<!ATTLIST PROPERTY.REFARRAY
         %CIMName;
         %ArraySize;
         %ReferenceClass;
         %ClassOrigin;
         %Propagated;>

<!ELEMENT PROPERTY.OBJECT (QUALIFIER*,(VALUE.OBJECT)?)>
<!ATTLIST PROPERTY.OBJECT
         %CIMName;
         %ReferenceClass;
         %ClassOrigin;
         %Propagated;>

<!ELEMENT PROPERTY.OBJECTARRAY (QUALIFIER*,(VALUE.OBJECTARRAY)?)>
<!ATTLIST PROPERTY.OBJECTARRAY
         %CIMName;
         %ArraySize;
         %ReferenceClass;
         %ClassOrigin;
         %Propagated;>

<!ELEMENT METHOD (QUALIFIER*,(PARAMETER|PARAMETER.REFERENCE|PARAMETER.ARRAY|PARAMETER.REFARRAY|
                                       PARAMETER.OBJECT|PARAMETER.OBJECTARRAY)*)>
<!ATTLIST METHOD
         %CIMName;
         %CIMType;              #IMPLIED
         %ClassOrigin;
         %Propagated;>

<!ELEMENT METHOD.OBJECT (QUALIFIER*,(PARAMETER|PARAMETER.REFERENCE|PARAMETER.ARRAY|PARAMETER.REFARRAY|
                                       PARAMETER.OBJECT|PARAMETER.OBJECTARRAY)*)>
<!ATTLIST METHOD.OBJECT
         %CIMName;
         %ReferenceClass;		
         %ClassOrigin;
         %Propagated;>

<!ELEMENT METHOD.REFERENCE (QUALIFIER*,(PARAMETER|PARAMETER.REFERENCE|PARAMETER.ARRAY|PARAMETER.REFARRAY|
                                       PARAMETER.OBJECT|PARAMETER.OBJECTARRAY)*)>
<!ATTLIST METHOD.REFERENCE
         %CIMName;
	     %ReferenceClass;		
         %ClassOrigin;
         %Propagated;>


<!ELEMENT PARAMETER (QUALIFIER*)>
<!ATTLIST PARAMETER 
         %CIMName;
         %CIMType;              #REQUIRED>

<!ELEMENT PARAMETER.REFERENCE (QUALIFIER*)>
<!ATTLIST PARAMETER.REFERENCE
         %CIMName;
         %ReferenceClass;>

<!ELEMENT PARAMETER.ARRAY (QUALIFIER*)>
<!ATTLIST PARAMETER.ARRAY 
         %CIMName;
         %CIMType;              #REQUIRED
         %ArraySize;>
		
<!ELEMENT PARAMETER.REFARRAY (QUALIFIER*)>
<!ATTLIST PARAMETER.REFARRAY
         %CIMName;
         %ReferenceClass;
         %ArraySize;>

<!ELEMENT PARAMETER.OBJECT (QUALIFIER*)>
<!ATTLIST PARAMETER.OBJECT
         %CIMName;
         %ReferenceClass;>

<!ELEMENT PARAMETER.OBJECTARRAY (QUALIFIER*)>
<!ATTLIST PARAMETER.OBJECTARRAY
         %CIMName;
         %ReferenceClass;
         %ArraySize;>

<!-- ************************************************** -->
<!-- WMI Extensions to support the WMI COM API          -->
<!-- Currently this includes the CONTEXTOBJECT and		-->
<!-- EXTENDEDSTATUS elements							-->
<!-- ************************************************** -->

<!ELEMENT CONTEXTOBJECT (CONTEXTPROPERTY|CONTEXTPROPERTY.ARRAY|CONTEXTPROPERTY.OBJECT|CONTEXTPROPERTY.OBJECTARRAY)*>
<!ELEMENT CONTEXTPROPERTY (VALUE?)>
<!ATTLIST CONTEXTPROPERTY
         %CIMName;
         %VTType;              #REQUIRED>

<!ELEMENT CONTEXTPROPERTY.ARRAY (VALUE.ARRAY?)>
<!ATTLIST CONTEXTPROPERTY.ARRAY
         %CIMName;
         %ArraySize;
         %VTType;              #REQUIRED>

<!ELEMENT CONTEXTPROPERTY.OBJECT (VALUE.OBJECT?)>
<!ATTLIST CONTEXTPROPERTY.OBJECT
         %CIMName;
         %ReferenceClass;>

<!ELEMENT CONTEXTPROPERTY.OBJECTARRAY (VALUE.OBJECTARRAY?)>
<!ATTLIST CONTEXTPROPERTY.OBJECTARRAY
         %CIMName;
         %ArraySize;
         %ReferenceClass;>

<!ELEMENT EXTENDEDSTATUS (INSTANCE)>

<!-- ************************************************** -->
<!-- Message elements                                   -->
<!-- ************************************************** -->

<!ELEMENT MESSAGE (SIMPLEREQ|MULTIREQ|SIMPLERSP|MULTIRSP)>
<!ATTLIST MESSAGE
         ID              CDATA             #REQUIRED
         PROTOCOLVERSION CDATA             #REQUIRED>

<!ELEMENT MULTIREQ (SIMPLEREQ,SIMPLEREQ+)>
                   
<!ELEMENT SIMPLEREQ (IMETHODCALL|METHODCALL)>

<!ELEMENT IMETHODCALL (LOCALNAMESPACEPATH,CONTEXTOBJECT?,IPARAMVALUE*)>
<!ATTLIST IMETHODCALL
         %CIMName;>

<!ELEMENT METHODCALL ((LOCALINSTANCEPATH|LOCALCLASSPATH),CONTEXTOBJECT?,PARAMVALUE*)>
<!ATTLIST METHODCALL
         %CIMName;>

<!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY
                      |VALUE.OBJECT|VALUE.OBJECTARRAY)?>
<!ATTLIST PARAMVALUE
         %CIMName;>

<!ELEMENT IPARAMVALUE (VALUE|VALUE.ARRAY|VALUE.REFERENCE
                       |INSTANCENAME|CLASSNAME|QUALIFIER.DECLARATION
		       |CLASS|INSTANCE|VALUE.NAMEDINSTANCE)?>
<!ATTLIST IPARAMVALUE
         %CIMName;>

<!ELEMENT MULTIRSP (SIMPLERSP,SIMPLERSP+)>

<!ELEMENT SIMPLERSP (METHODRESPONSE|IMETHODRESPONSE)>

<!ELEMENT METHODRESPONSE (ERROR|(RETURNVALUE?,PARAMVALUE*))>
<!ATTLIST METHODRESPONSE
         %CIMName;>

<!ELEMENT IMETHODRESPONSE (ERROR|IRETURNVALUE?)>
<!ATTLIST IMETHODRESPONSE
         %CIMName;>
                   
<!ELEMENT ERROR (EXTENDEDSTATUS?)>
<!ATTLIST ERROR
         CODE        CDATA   #REQUIRED
         DESCRIPTION CDATA   #IMPLIED>

<!ELEMENT RETURNVALUE (VALUE|VALUE.ARRAY|VALUE.REFERENCE|VALUE.REFARRAY)>                  

<!ELEMENT IRETURNVALUE (CLASSNAME*|INSTANCENAME*|VALUE*|VALUE.OBJECTWITHPATH*                                                  						|VALUE.OBJECTWITHLOCALPATH*|VALUE.OBJECT*|OBJECTPATH*
			|QUALIFIER.DECLARATION*|VALUE.ARRAY?|VALUE.REFERENCE?
                        |CLASS*|INSTANCE*|VALUE.NAMEDINSTANCE*)>                  




