<!-- 
************************************************** 
This DTD defines the schema for XML 1.0 Documents  
representing CIM Element Declarations or Messages. 

DTD Version : 2.3.0c
DSP0203                                            
Date: September 25, 2007                             
Status: Preliminary
************************************************** 
Copyright 2001-2007 Distributed Management Task Force, Inc. 
All rights reserved.
DMTF is a not-for-profit association of industry members  
dedicated to promoting enterprise and systems management 	 
and interoperability. DMTF specifications and documents
may be reproduced for uses consistent with this purpose
by members and non-members, provided that correct
attribution is given. As DMTF specifications may be
revised from time to time, the particular version and
release date should always be noted.
Implementation of certain elements of this standard or
proposed standard may be subject to third party patent
rights, including provisional patent rights (herein
"patent rights"). DMTF makes no representations to users
of the standard as to the existence of such rights, and
is not responsible to recognize, disclose, or identify
any or all such third party patent right, owners or
claimants, nor for any incomplete or inaccurate
identification or disclosure of such rights, owners or
claimants. DMTF shall have no liability to any party, in
any manner or circumstance, under any legal theory
whatsoever, for failure to recognize, disclose, or
identify any such third party patent rights, or for such
party's reliance on the standard or incorporation
thereof in its product, protocols or testing procedures
DMTF shall have no liability to any party implementing
such standard, whether such implementation is foreseeable
or not, nor to any patent owner or claimant, and shall
have no liability or responsibility for costs or losses
incurred if a standard is withdrawn or modified after
publication, and shall be indemnified and held harmless
by any party implementing the standard from any and all
claims of infringement by a patent owner for such
implementations.
For information about patents held by third-parties
which have notified the DMTF that, in their opinion, such
patent may relate to or impact implementations of DMTF
standards, visit
http://www.dmtf.org/about/policies/disclosures.php.
***********************************************************  
-->
<!-- 
**************************************************
Entity Declarations
************************************************** 
-->
<!ENTITY % CIMName "NAME           CDATA         #REQUIRED">
<!ENTITY % CIMType "TYPE (boolean|string|char16|uint8|sint8|uint16|sint16|uint32|sint32|uint64|sint64|datetime|real32|real64)">
<!ENTITY % ParamType "PARAMTYPE (boolean|string|char16|uint8|sint8|uint16|sint16|uint32|sint32|uint64|sint64|datetime|real32|real64|reference)">
<!ENTITY % EmbeddedObject "EmbeddedObject (object|instance) #IMPLIED">
<!-- 
**************************************************
DEPRECATION NOTE: The flavor TOINSTANCE is
DEPRECATED and MAY be removed from the
QualifierFlavor entity in a future version of this
document.  Its usage is discouraged.
************************************************** 
-->
<!ENTITY % QualifierFlavor "OVERRIDABLE    (true|false)  'true'
                            TOSUBCLASS     (true|false)  'true'
                            TOINSTANCE     (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 defines the version of the CIM Infrastructure
Specification (DSP0004) to which the XML document
conforms and MUST be in the form of "M.N.U".  Where M
is the major version of the specification, N is the minor version 
of the specification and U is the update version
of the specification, each in their decimal representation
without leading zeros. Any draft letter in the version of
the specification MUST NOT be represented in the attribute.
For example, "2.3.0" or "2.4.0".

DTDVERSION defines the version of the Specification for the
Representation of CIM in XML (DSP0201) to which the
XML document conforms and MUST be in the form of "M.N.U".  
Where M is the major version of the specification, N is the minor 
version of the specification and U is the update version
of the specification, each in their decimal representation
without leading zeros. Any draft letter in the version of
the specification MUST NOT be represented in the attribute.
For example, "2.2.0" or "2.3.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 | VALUE.NULL)*>
<!ELEMENT VALUE.REFERENCE (CLASSPATH | LOCALCLASSPATH | CLASSNAME | INSTANCEPATH | LOCALINSTANCEPATH | INSTANCENAME)>
<!ELEMENT VALUE.REFARRAY (VALUE.REFERENCE | VALUE.NULL)*>
<!ELEMENT VALUE.OBJECT (CLASS | INSTANCE)>
<!ELEMENT VALUE.NAMEDINSTANCE (INSTANCENAME, INSTANCE)>
<!ELEMENT VALUE.NAMEDOBJECT (CLASS | (INSTANCENAME, INSTANCE))>
<!ELEMENT VALUE.OBJECTWITHLOCALPATH ((LOCALCLASSPATH, CLASS) | (LOCALINSTANCEPATH, INSTANCE))>
<!ELEMENT VALUE.OBJECTWITHPATH ((CLASSPATH, CLASS) | (INSTANCEPATH, INSTANCE))>
<!ELEMENT VALUE.NULL EMPTY>
<!ELEMENT VALUE.INSTANCEWITHPATH (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"
        %CIMType;              #IMPLIED>
<!-- 
**************************************************
Object definition elements
**************************************************
-->
<!ELEMENT CLASS (QUALIFIER*, (PROPERTY | PROPERTY.ARRAY | PROPERTY.REFERENCE)*, METHOD*)>
<!ATTLIST CLASS
	%CIMName; 
	%SuperClass; 
>
<!ELEMENT INSTANCE (QUALIFIER*, (PROPERTY | PROPERTY.ARRAY | PROPERTY.REFERENCE)*)>
<!ATTLIST INSTANCE
	%ClassName; 
	xml:lang NMTOKEN #IMPLIED
>
<!ELEMENT QUALIFIER ((VALUE | VALUE.ARRAY)?)>
<!ATTLIST QUALIFIER %CIMName;
         %CIMType;              #REQUIRED
         %Propagated;
         %QualifierFlavor;
         xml:lang   NMTOKEN     #IMPLIED 
>
<!ELEMENT PROPERTY (QUALIFIER*, VALUE?)>
<!ATTLIST PROPERTY %CIMName;
         %ClassOrigin;
         %Propagated;
         %EmbeddedObject; 
         %CIMType;              #REQUIRED
         xml:lang   NMTOKEN     #IMPLIED 
>
<!ELEMENT PROPERTY.ARRAY (QUALIFIER*, VALUE.ARRAY?)>
<!ATTLIST PROPERTY.ARRAY %CIMName;
         %CIMType;              #REQUIRED
         %ArraySize;
         %ClassOrigin;
         %Propagated;
         %EmbeddedObject; 
         xml:lang   NMTOKEN     #IMPLIED 
>
<!ELEMENT PROPERTY.REFERENCE (QUALIFIER*, (VALUE.REFERENCE)?)>
<!ATTLIST PROPERTY.REFERENCE
	%CIMName; 
	%ReferenceClass; 
	%ClassOrigin; 
	%Propagated; 
>
<!ELEMENT METHOD (QUALIFIER*, (PARAMETER | PARAMETER.REFERENCE | PARAMETER.ARRAY | PARAMETER.REFARRAY)*)>
<!ATTLIST METHOD %CIMName;
         %CIMType;              #IMPLIED
         %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; 
>
<!-- 
**************************************************
Message elements
************************************************** 
-->
<!ELEMENT MESSAGE (SIMPLEREQ | MULTIREQ | SIMPLERSP | MULTIRSP | SIMPLEEXPREQ | MULTIEXPREQ | SIMPLEEXPRSP | MULTIEXPRSP)>
<!ATTLIST MESSAGE
	ID CDATA #REQUIRED
	PROTOCOLVERSION CDATA #REQUIRED
>
<!ELEMENT MULTIREQ (SIMPLEREQ, SIMPLEREQ+)>
<!ELEMENT MULTIEXPREQ (SIMPLEEXPREQ, SIMPLEEXPREQ+)>
<!ELEMENT SIMPLEREQ (IMETHODCALL | METHODCALL)>
<!ELEMENT SIMPLEEXPREQ (EXPMETHODCALL)>
<!ELEMENT IMETHODCALL (LOCALNAMESPACEPATH, IPARAMVALUE*)>
<!ATTLIST IMETHODCALL
	%CIMName; 
>
<!ELEMENT METHODCALL ((LOCALINSTANCEPATH | LOCALCLASSPATH), PARAMVALUE*)>
<!ATTLIST METHODCALL
	%CIMName; 
>
<!ELEMENT EXPMETHODCALL (EXPPARAMVALUE*)>
<!ATTLIST EXPMETHODCALL
	%CIMName; 
>
<!ELEMENT PARAMVALUE (VALUE | VALUE.REFERENCE | VALUE.ARRAY | VALUE.REFARRAY)?>
<!ATTLIST PARAMVALUE %CIMName; 
        %ParamType;  #IMPLIED
        %EmbeddedObject;
>
<!ELEMENT IPARAMVALUE (VALUE | VALUE.ARRAY | VALUE.REFERENCE | INSTANCENAME | CLASSNAME | QUALIFIER.DECLARATION | CLASS | INSTANCE | VALUE.NAMEDINSTANCE)?>
<!ATTLIST IPARAMVALUE
	%CIMName; 
>
<!ELEMENT EXPPARAMVALUE (INSTANCE? | VALUE? | METHODRESPONSE? | IMETHODRESPONSE?)>
<!ATTLIST EXPPARAMVALUE
	%CIMName; 
>
<!ELEMENT MULTIRSP (SIMPLERSP, SIMPLERSP+)>
<!ELEMENT MULTIEXPRSP (SIMPLEEXPRSP, SIMPLEEXPRSP+)>
<!ELEMENT SIMPLERSP (METHODRESPONSE | IMETHODRESPONSE)>
<!ELEMENT SIMPLEEXPRSP (EXPMETHODRESPONSE)>
<!ELEMENT METHODRESPONSE (ERROR | (RETURNVALUE?, PARAMVALUE*))>
<!ATTLIST METHODRESPONSE
	%CIMName; 
>
<!ELEMENT EXPMETHODRESPONSE (ERROR | IRETURNVALUE?)>
<!ATTLIST EXPMETHODRESPONSE
	%CIMName; 
>
<!ELEMENT IMETHODRESPONSE (ERROR | IRETURNVALUE?)>
<!ATTLIST IMETHODRESPONSE
	%CIMName; 
>
<!ELEMENT ERROR (INSTANCE*)>
<!ATTLIST ERROR
	CODE CDATA #REQUIRED
	DESCRIPTION CDATA #IMPLIED
>
<!ELEMENT RETURNVALUE (VALUE | VALUE.REFERENCE)?>
<!ATTLIST RETURNVALUE %ParamType;       #IMPLIED 
     %EmbeddedObject;
>
<!ELEMENT IRETURNVALUE (CLASSNAME* | INSTANCENAME* | VALUE* | VALUE.OBJECTWITHPATH* | VALUE.OBJECTWITHLOCALPATH* | VALUE.OBJECT* | OBJECTPATH* | QUALIFIER.DECLARATION* | VALUE.ARRAY? | VALUE.REFERENCE? | CLASS* | INSTANCE* | VALUE.NAMEDINSTANCE*)>
<!ELEMENT ENUMERATIONCONTEXT (#PCDATA)>
