<!-- This DTD defines the schema for XML 1.0 Documents representing CIM information (Classes and Instances). -->
<!ENTITY % CIMIdentifier   "#PCDATA">
<!ENTITY % CIMType    "boolean|string|char16|uint8|sint8|uint16|sint16|uint32|sint32|uint64|sint64|datetime|real32|real64">

<!ENTITY % QualifierFlavor "OVERRIDABLE     (EnableOverride|DisableOverride)	#REQUIRED
	    		    TOSUBCLASS	    (ToSubclass|Restricted) 	#REQUIRED
			        TRANSLATABLE    (true|false)        #REQUIRED">

<!ENTITY % Origin        	"CLASSORIGIN CDATA        #IMPLIED">
<!ENTITY % Local                "LOCAL      (true|false)  #REQUIRED">

<!ENTITY % Property	   	"PROPERTY|PROPERTY.ARRAY ">

<!-- The CIMVERSION must be set to "2.0" for this DTD, and the
     DTDVERSION to "1.0". -->

<!ELEMENT CIM (CLASS|INSTANCE|ASSOCIATION.CLASS|ASSOCIATION.INSTANCE)*>
<!ATTLIST CIM 
		CIMVERSION	CDATA		#REQUIRED
		DTDVERSION	CDATA		#REQUIRED >

<!ELEMENT VALUE (#PCDATA)>

<!ELEMENT VALUE.INDEXED (#PCDATA)>
<!ATTLIST VALUE.INDEXED 
                INDEX           CDATA           #REQUIRED>

<!ELEMENT VALUE.REFERENCE (CLASSPATH|INSTANCEPATH)>

<!ELEMENT NAMESPACEPATH ((HOST)?,NAMESPACE)>
<!ELEMENT HOST (#PCDATA)>

<!ELEMENT NAMESPACE (NAMESPACENODE,NAMESPACE?)>
<!ELEMENT NAMESPACENODE (%CIMIdentifier;)>

<!ELEMENT CLASS (CLASSPATH,SUPERCLASS?,(QUALIFIER|%Property;|METHOD)*)>

<!ELEMENT CLASSPATH (NAMESPACEPATH,CLASSNAME)>

<!ELEMENT CLASSNAME (%CIMIdentifier;)>

<!ELEMENT SUPERCLASS (%CIMIdentifier;)>

<!ELEMENT QUALIFIER (VALUE|VALUE.INDEXED+)>
<!ATTLIST QUALIFIER 
		NAME 		CDATA			#REQUIRED
		TYPE		(%CIMType;)	#REQUIRED
		%Local;
		%QualifierFlavor;>

<!ELEMENT PROPERTY (QUALIFIER*,VALUE?)>
<!ATTLIST PROPERTY
		NAME		CDATA			#REQUIRED
		%Origin;
		%Local;
		TYPE		(%CIMType;)	#REQUIRED>

<!ELEMENT PROPERTY.ARRAY (ARRAYSIZE,QUALIFIER*,(VALUE.INDEXED)*)>
<!ATTLIST PROPERTY.ARRAY
		NAME		CDATA			#REQUIRED
		%Origin;
		%Local;
		TYPE		(%CIMType;)	#REQUIRED>

<!ELEMENT ARRAYSIZE (#PCDATA)>

<!ELEMENT METHOD (QUALIFIER*,METHODPARAMETER*)>
<!ATTLIST METHOD
		NAME		CDATA			#REQUIRED
		TYPE        (void|%CIMType;)  	#REQUIRED
		%Origin;>

<!ELEMENT METHODPARAMETER (QUALIFIER*,(PARAMETER|PARAMETER.REFERENCE|PARAMETER.ARRAY))>
<!ATTLIST METHODPARAMETER
		NAME	CDATA			#REQUIRED>

<!ELEMENT PARAMETER EMPTY>
<!ATTLIST PARAMETER 
		TYPE	(%CIMType;) 	#REQUIRED>

<!ELEMENT PARAMETER.REFERENCE (REFERENCECLASS)>

<!ELEMENT REFERENCECLASS (%CIMIdentifier;)>

<!ELEMENT PARAMETER.ARRAY (ARRAYSIZE)>
<!ATTLIST PARAMETER.ARRAY 
		TYPE	(%CIMType;)	#REQUIRED>

<!ELEMENT INSTANCE (INSTANCEPATH,(QUALIFIER|%Property;)*) >

<!ELEMENT INSTANCEPATH (NAMESPACEPATH,CLASSNAME,(KEYBINDING)*)>

<!ELEMENT KEYBINDING (KEYNAME,KEYVALUE)>
<!ELEMENT KEYNAME    (%CIMIdentifier;)>
<!ELEMENT KEYVALUE   (VALUE|VALUE.REFERENCE)>

<!ELEMENT ASSOCIATION.CLASS (CLASSPATH,SUPERCLASS?,REFERENCE+,(QUALIFIER|%Property;|METHOD)*) >
<!ATTLIST ASSOCIATION.CLASS 
		xml:link	CDATA			#FIXED "extended"
		inline		(true|false)		#FIXED "true"
		role		CDATA			#IMPLIED
		content-role	CDATA			#IMPLIED
		content-title	CDATA			#IMPLIED>

<!ELEMENT ASSOCIATION.INSTANCE (INSTANCEPATH,REFERENCE+,(QUALIFIER|%Property;)*) >
<!ATTLIST ASSOCIATION.INSTANCE 
		xml:link	CDATA			#FIXED "extended"
		inline		(true|false)		#FIXED "true"
		role		CDATA			#IMPLIED
		content-role	CDATA			#IMPLIED
		content-title	CDATA			#IMPLIED>

<!ELEMENT REFERENCE (REFERENCECLASS,QUALIFIER*,(VALUE.REFERENCE)?)>
<!ATTLIST REFERENCE
		%Origin;
		%Local;
		xml:link	CDATA			#FIXED "locator"
		href		CDATA			#IMPLIED
		role		CDATA			#REQUIRED
		title		CDATA			#IMPLIED
		show		(embed|replace|new)	#IMPLIED
		actuate		(auto|user)		#IMPLIED
		behavior	CDATA			#IMPLIED>