<!-- GChemPaint V0.1 DTD -->

<!ENTITY % id "id ID #REQUIRED">
<!ENTITY % title "title CDATA #IMPLIED">
<!ENTITY % Coords "
	x CDATA #REQUIRED
	y CDATA #REQUIRED
	z CDATA #IMPLIED
">
<!ENTITY % limits "
	begin IDREF #REQUIRED
	end IDREF #REQUIRED
">

<!ELEMENT chemistry (generator, title?, author?, comment?, abbreviation*, (reaction | molecule | object | text)+)>
<!ATTLIST chemistry
	creation CDATA #REQUIRED
	revision CDATA #REQUIRED
>

<!ELEMENT generator (#PCDATA)>
<!ELEMENT title (#PCDATA)>

<!ATTLIST author
	name CDATA #REQUIRED
	e-mail CDATA #IMPLIED
>

<!ELEMENT author EMPTY>
<!ELEMENT comment (#PCDATA)>

<!ELEMENT reaction (molecule, molecule+, electron-move*, reaction-arrow+, reaction-oerator*)
>

<!ATTLIST reaction
	%id;
	%title;
>

<!ELEMENT molecule (atom*, bond*, fragment*)>

<!ATTLIST molecule
	%id;
	stoechiometry CDATA #IMPLIED
>

<!ELEMENT atom (#PCDATA | position)*>
<!ATTLIST atom
	%id;
	element NMTOKEN #IMPLIED
	charge CDATA #IMPLIED
>

<!ELEMENT bond EMPTY>
<!ATTLIST bond
	%id;
	%limits;
	order CDATA #IMPLIED
	type CDATA #IMPLIED
>

<!ELEMENT position EMPTY>
<!ATTLIST position %Coords;>

<!ELEMENT fragment (#PCDATA | position | atom)*>
<!ATTLIST fragment
	%id;
>

<!ELEMENT electron-move  (start?, end?)>
<!ATTLIST electron-move
	%id;
	begin IDREF #IMPLIED
	end IDREF #IMPLIED
	type (single | pair) #IMPLIED
>

<!ELEMENT start EMPTY>
<!ATTLIST start %Coords;>

<!ELEMENT end EMPTY>
<!ATTLIST end %Coords;>

<!ELEMENT reaction-arrow (start, end)>
<!ATTLIST reaction-arrow
	%id;
	type (single | double) #IMPLIED
>

<!ELEMENT mesomery-arrow (start, end)>
<!ATTLIST mesomery-arrow
	%id;
>

<!ELEMENT reaction-operator (position)>
<!ATTLIST reaction-operator
	%id;
>

<!ELEMENT object (reaction-arrow | mesomery-arrow | reaction-operator)>

<!ELEMENT i  (#PCDATA | u | b | s | sub | sup | font)*>
<!ELEMENT u (#PCDATA | i | b | s | sub | sup | font)*>
<!ELEMENT b (#PCDATA | i | u | s | sub | sup | font)*>
<!ELEMENT s (#PCDATA | i | u | b |sub | sup | font)*>
<!ELEMENT sub (#PCDATA | i | u | b | s | font)*>
<!ELEMENT sup (#PCDATA | i | u | b | s | font)*>
<!ELEMENT font (#PCDATA | i | u | b | s | sub | sup)*>
<!ATTLIST font
	name CDATA #REQUIRED
>
<!ELEMENT text (#PCDATA | position | i | u | b | s | sub | sup | font)*>
<!ATTLIST text
	%id;
>
