<!--
	JCLASSINFO.DTD
		XML element type set for the jclassinfo xml output

	Version: 0.1
		Updated for the new implements tag.

	Version: 0.0
		Initial version
		Works with jclassinfo 0.18.
-->

<!ELEMENT jclassinfo (findclass*,class*,packagesref*,classref*,methodsref*,interfacemethodsref*)>
<!ATTLIST jclassinfo
	version	CDATA	#REQUIRED
>

<!ELEMENT refentry            (#PCDATA)>
<!ELEMENT classref            (refentry*)>
<!ELEMENT interfacemethodsref (refentry*)>
<!ELEMENT methodsref          (refentry*)>
<!ELEMENT packagesref         (refentry*)>

<!ELEMENT class (implements*,constant_pool?,field*,method*,attribute*)>
<!ATTLIST class
	name       CDATA	#REQUIRED
	package    CDATA	#IMPLIED
	access     CDATA	#IMPLIED
	extends    CDATA	#IMPLIED
	sourcefile CDATA	#IMPLIED
	vm         CDATA	#IMPLIED
>

<!ELEMENT implements EMPTY>
<!ATTLIST implements
	name	CDATA	#REQUIRED
>

<!ELEMENT field (attribute)*>
<!ATTLIST field
	access	CDATA	#REQUIRED
	type	CDATA	#REQUIRED
	name	CDATA	#REQUIRED
>

<!ELEMENT method (param*,attribute*)>
<!ATTLIST method
	access	CDATA	#IMPLIED
	type	CDATA	#IMPLIED
	name	CDATA	#REQUIRED
>

<!ELEMENT param>
<!ATTLIST param
	type	CDATA	#REQUIRED
>

<!ELEMENT attribute (sourcefile|innerclass|code|bytecode|exception|value|EMPTY)*>
<!ATTLIST attribute
	name	CDATA	#REQUIRED
	value	CDATA	#IMPLIED
>

<!ELEMENT value ANY>

<!ELEMENT code (attribute|instruction)*>
<!ELEMENT instruction (operand)*>
<!ATTLIST instruction
	pc   CDATA	#REQUIRED
	name CDATA	#REQUIRED
>

<!ELEMENT operand EMPTY>
<!ATTLIST operand
	type	CDATA	#REQUIRED
	value	CDATA	#REQUIRED
>

<!ELEMENT exception EMPTY>
<!ATTLIST exception
	name   CDATA	#REQUIRED
	access CDATA	#IMPLIED
>

<!ELEMENT sourcefile (#PCDATA)>

<!ELEMENT innerclass EMPTY>
<!ATTLIST innerclass
	access	  CDATA	#REQUIRED
	name	  CDATA	#REQUIRED
	member-of CDATA	#IMPLIED
	shortname CDATA	#IMPLIED
>

<!-- Constant Pool -->
<!ELEMENT constant_pool (Integer|Float|Long|Double|String|Utf8|Class|NameAndType|Fieldref|Methodref|InterfaceMethodref)*>

<!ELEMENT Integer EMPTY>
<!ATTLIST Integer
	index	CDATA	#REQUIRED
	value	CDATA	#REQUIRED
>

<!ELEMENT Float EMPTY>
<!ATTLIST Float
	index	CDATA	#REQUIRED
	value	CDATA	#REQUIRED
>

<!ELEMENT Long EMPTY>
<!ATTLIST Long
	index	CDATA	#REQUIRED
	value	CDATA	#REQUIRED
>

<!ELEMENT Double EMPTY>
<!ATTLIST Double
	index	CDATA	#REQUIRED
	value	CDATA	#REQUIRED
>

<!ELEMENT String EMPTY>
<!ATTLIST String
	index        CDATA	#REQUIRED
	string_index CDATA	#REQUIRED
>

<!ELEMENT Utf8 (#PCDATA)>
<!ATTLIST Utf8
	index	CDATA	#REQUIRED
>

<!ELEMENT NameAndType EMPTY>
<!ATTLIST NameAndType
	index           CDATA	#REQUIRED
	name_index      CDATA	#REQUIRED
	signature_index CDATA	#REQUIRED
>

<!ELEMENT Fieldref EMPTY>
<!ATTLIST Fieldref
	index               CDATA #REQUIRED
	class_index         CDATA #REQUIRED
	name_and_type_index CDATA #REQUIRED
>

<!ELEMENT Methodref EMPTY>
<!ATTLIST Methodref
	index               CDATA #REQUIRED
	class_index         CDATA #REQUIRED
	name_and_type_index CDATA #REQUIRED
>

<!ELEMENT InterfaceMethodref EMPTY>
<!ATTLIST InterfaceMethodref
	index               CDATA #REQUIRED
	class_index         CDATA #REQUIRED
	name_and_type_index CDATA #REQUIRED
>

<!ELEMENT Class EMPTY>
<!ATTLIST Class
	index      CDATA	#REQUIRED
	name_index CDATA	#REQUIRED
>


<!-- Find class entities -->
<!ELEMENT findclass EMPTY>
<!ATTLIST findclass
	name     CDATA #REQUIRED
	location CDATA	#IMPLIED
>
