<!-- 
	XML Manuscript Authoring, Interchange and Delivery Environment 

		"-//RMI//DTD XML MAIDEN 2.1 Formulae//EN"

		Mathematical part of XML MAIDEN 2.1 DTD

	Developed by George Chavchanidze. Released on 11/06/2006 
	For additional information see http://xml-maiden.com 


	XML MAIDEN is science oriented, XML based markup language, 
	designed to simplify authoring, interchange and delivery of 
	short mathematical manuscripts (articles, letters, notes). 
	XML MAIDEN aims to capture general structure of scientific 
	articles (front matter, headers, sections, statements, paragraphs, 
	references etc) and basic structure of mathematical formulae in the way 
	suitable for further formatting with Cascading Style Sheets (2.1 or later).
	The present document describes mathematical part of XML MAIDEN 2.1
	markup. It briefly explains role of basic elements used to encode 
	mathematical formulae in XML MAIDEN 2.1

MATHEMATICAL FORMULAE: 'formula', 'formulae', 'math' and 'subformula' elements

	XML MAIDEN 2.1 reserves four elements used to mark inline-equations, displayed 
	equations, equation arrays and subformulae. These are 'math', 'formula',
	'formulae' and 'subformula' elements.

	'math' element is primary container that encloses inline mathematical expressions
	(those formulae that are part of normal text flow). It is similar to LaTeX
	$...$ environment and may carry arbitrary complex mathematical expressions
	constructed using appropriate XML MAIDEN 2.1 elements.

	Example:
		Dirac's construction provides an explicit local expression for the traverse Poisson 
		structure of a Poisson manifold <math>(M, W)</math> at any of its points.
	Text Image:
		Dirac's construction provides an explicit local expression for the traverse Poisson 
		structure of a Poisson manifold (M, W) at any of its points.

	Aural equivalent of mathematical expression may be specified
	via 'pronounce' attribute of 'formula' or 'math' element.

	Example:
	<math pronounce="Poisson bracket of F and H vanishes">{F, H} = 0</math>

	Text Image:
	
		{F, H} = 0

	Aural equivalent:

		Poisson bracket of F and H vanishes
-->

<!ATTLIST math pronounce CDATA #IMPLIED>
<!ELEMENT math (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

	'formula' element is basic block level container that marks displayed equations
	(block level formulae). It is similar to LaTeX \begin{equation} ... \end{equation}
	environment and may carry complex mathematical expressions. Large formulae may
	be broken into several block level parts using 'subformula' element. Multiple
	related formulae may be grouped using 'formulae' elements.

	Example:
		Any function <math>F</math> commuting with Hamiltonian
		<formula>{F, H} = 0</formula> is first integral 
		of Hamiltonian system.
	Text image:
		Any function F commuting with Hamiltonian
			{F, H} = 0			(1)
		is first integral of Hamiltonian system.

-->

<!ATTLIST formula pronounce CDATA #IMPLIED>
<!ELEMENT formula (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | line | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | subformula | sup | sur | under | underline | vector | wrap)*>

<!--

	'formulae' element is used to group several related formulae.

	Example:
	Being linear operation, Poisson bracket satisfied properties
		<formulae>
		<formula>{F, G + H} = {F, G} + {F, H}</formula>
		<formula>{F, GH} = {F, G}H + {F, H}G</formula>
		</formulae>

	Text image:
	Being linear operation, Poisson bracket satisfied 
	properties
		{F, G + H} = {F, G} + {F, H}		(1)
		{F, GH} = {F, G}H + {F, H}G		(2)


-->

<!ELEMENT formulae (formula, formula+)>

<!--
	'subformula' element may be used to divide long formulae
	into block level parts.

	Example:
		<formula>
		<subformula>{F, (G + H)S} = {F, GS} + {F, HS}</subformula>
		<subformula>= {F, G}S + {F, H}S + (G + H){F, S}</subformula>
		</formula>
	Text image:
		{F, (G + H)S} = {F, GS} + {F, HS}	(1)
		= {F, G}S + {F, H}S + (G + H){F, S}

-->

<!ELEMENT subformula (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

SUBSCRIPTS AND SUPERSCRIPTS: 'float', 'sup', 'sub', 'markers', 'marker' and 'submarker' elements

	In XML MAIDEN 2.1 the elements 'sup' and 'sub' are used to mark
	subscripts and superscripts respectively. They may be nested and
	combined to produce complex indices. Note that indices produced via
	'sub' and 'sup' elements are applied to preceding Unicode character (if any).
	Otherwise base is undefined, in particular note that 'sup' and 'sub'
	elements do not apply to fences (element 'fence'), matrices
	(elements 'matrix', 'determinant' and 'vector') and operators (element 'ope'). 
	In XML MAIDEN 2.1 matrix, fence indices (markers) and operator limits are considered to be 
	intrinsic part of matrix, fence and operator constructions, exta elements are
	reserved for this purpose (operator, fence, matrix and vector markers).

	When positioning indices (elements 'sup', 'sub'), XML MAIDEN 2.1 implementations may 
	base vertical-alignment offsets on font-size value, 
	like it is done in case of XHTML subscripts, superscripts (elements 'sup', 'sub') 
	and CSS vertical-align:super, sub property values, while markers (elements 'marker', 'submarker') 
	should be positioned with respect to base that they are applied to.

	Example:
		<formula>ax<sup>2</sup> + bx + c = 0</formula>
		<formula>u<sub>t</sub> = u<sub>xxx</sub> + uu<sub>x</sub></formula>

	Text image:
		  2
		ax   +  bx  +  c =  0			(1)

		u   =  u      +  u u			(2)
		 t      xxx         x

	Indices may be nested, combined and may carry complex mathematical expressions
	like fractions, operators etc. When subscript and superscript are combined
	they may be formatted in three different ways.
	1. Subscript may precede superscript
	2. Subscript may succeed superscript
	3. Subscript and superscript may be stacked (floated to common base)
	The difference between these three cases is not purely presentational
	and in certain cases position of indices may change meaning
	of mathematical expression therefore XML MAIDEN 2.1 distinguishes
	these cases as follows
	1. A<sub>X</sub><sup>Y</sup> is treated as:

		   y
		A
		 x

	2. A<sup>Y</sup><sub>X</sub> is handled as:

		 y
		A
		  x

	3. A<float><sup>Y</sup><sub>X</sub></float> is formatted like:

		 y
		A
		 x

	Note that 'float' element is used to float indices to base.
-->

<!ELEMENT float ((sup,sub)|(sur,inf))>
<!ELEMENT sup (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT sub (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT markers (marker, submarker)>
<!ELEMENT marker (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT submarker (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

	PRESCRIPTS: 'inf', 'sur'  elements

	The elements 'inf' (inferior) and 'sur' (superior) are similar 
	to 'sub' and 'sup' but are used to mark prescripts (sub and 
	superscripts that precede their base). They may be nested and
	combined to produce complex prescripts. Note that prescripts 
	produced via 'inf' and 'sur' elements are applied to succeeding 
	Unicode character (if any). Otherwise base is undefined.

	Example:
		<formula>
		<inf>13</inf>Al<sup>27</sup> + <inf>2</inf>He<sup>4</sup> 
		= <inf>15</inf>P<sup>30</sup> + n
		</formula>

	Text image:

		    27        4         30
		  Al    +   He    =    P    + n
		13         2         15

	Prescripts may be nested, combined and may carry complex mathematical expressions
	like fractions, operators etc. When inferior and superior are combined
	they may be formatted in three different ways. 
	XML MAIDEN 2.1 treats combined prescripts as follows
	1. <sur>Y</sur><inf>X</inf>A is treated as:

		y
		  A
		 x

	2. <inf>X</inf><sur>Y</sur>A is handled as:

		 y
		  A
		x

	3. <float><sur>Y</sur><inf>X</inf></float>A is formatted like:

		y
		 A
		x

	'float' element is used to float prescripts to base.
-->


<!ELEMENT inf (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT sur (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

FRACTIONS: 'fraction', 'num' and 'den' elements

	Element 'fraction' marks fractions and derivatives
	and contains elements 'num' and 'den' that enclose 
	numerator and denominator respectively. 

	Example:
		<fraction>
		<num>tanh(x) + tanh(y)</num>
		<den>1 + tanh(x)tanh(y)</den>
		</fraction>

	Text image:

		   tanh(x + y)
		__________________

		1 + tanh(x)tanh(y)

-->

<!ELEMENT fraction (num, den)>
<!ELEMENT num (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT den (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

UNDERSCRIPTS AND OVERSCRIPTS: elements 'under', 'over', 'ker', and 'sat' 

	XML MAIDEN 2.1 uses element 'ker' to mark base (kernel) of over
	or under scripted expression. Element 'sat' is used for under and 
	over scripts (sattelites), while 'over' and 'under' element is used to compose over
	or under scripted expressions by combining arbitrary number of over script or
	under scripts with base. Note that 'over' expression
	is not expected to produce diacritical marks/accents. See 
	DIACRITICAL MARKS section below.

	Examples:
		<over>
		<sat>over script</sat>
		<ker>MAIN EXPRESSION</ker>
		</over>

		<under>
		<over>
		<sat>over script</sat>
		<ker>MAIN EXPRESSION</ker>
		</over>
		<sat>under script</sat>
		</under>

		<under>
		<ker>MAIN EXPRESSION</ker>
		<sat>under script</sat>
		</under>

		<under>
		<over>
		<sat>over script</sat>
		<ker>MAIN EXPRESSION</ker>
		</over>
		<sat>under script-1</sat>
		<sat>under script-2</sat>
		</under>


	Text image:

		  over script       over script                         over script
		MAIN EXPRESSION   MAIN EXPRESSION   MAIN EXPRESSION   MAIN EXPRESSION
		                   under  script     under  script    under  script-1
		                                                      under  script-2

-->

<!ELEMENT over (((overbrace, sat*)|(sat+, overbrace?)),(ker|ope|under))>
<!ELEMENT under ((ker|ope|over),((underbrace, sat*)|(sat+, underbrace?)))>
<!ELEMENT ker (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT sat (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

UNDER AND OVER BRACES: elements 'underbrace' and 'overbrace'

	Under and over scripted expressions may involve under and 
	over braces that outline expression to which script applies.
	Such expressions are produced using empty elements 'underbrace' and 'overbrace'


	Example:
		<over>
		<sat>k times</sat>
		<overbrace/>
		<ker>(m, m, ... , m)</ker>
		</over>

		<under>
		<ker>(m, m, ... , m)</ker>
		<underbrace/>
		<sat>k times</sat>
		</under>

	Text image:

		    k times
		  ____________
		 |            |
		 (m, m, ..., m)			(1)


		 (m, m, ..., m)			(2)
		 |____________|
		    k times

-->

<!ELEMENT overbrace EMPTY>
<!ELEMENT underbrace EMPTY>

<!--

OPERATORS: element 'ope', 'opgroup'

	Element 'ope' marks mathematical operators such as sum, product,
	unification, intersection, integral etc. Markup for standalone operators
	is simple 

		<ope>Operator</ope>

	In case if operator is accompanied by over script and/or under scripts one may
	use 'over' and 'under' elements to associate over/under scripts with operator

	Examples:

		<formula>
		A =
		<under>
		<over>
		<sat>n</sat>
		<ope>U</ope>
		</over>
		<sat>s = 1</sat>
		</under>
		A<sup>(s)</sup>
		</formula>

		<formula>
		A =
		<under>
		<ope>U</ope>
		<sat>s</sat>
		</under>
		A<sup>(s)</sup>
		</formula>

	Text image:

		      n

		    |   |   (s)
		A = |   |  A				(1)
		    |___|

		    s = 1


		    |   |   (s)
		A = |   |  A				(2)
		    |___|

		      s
	
	Instead of under and over scripts one may associate markers that are
	positioned near top and bottom edges of operator's core. 
	Element 'opgroup' is reserved for this purpose

	Examples:

		<formula>
		A =
		<opgroup>
		<ope>U</ope>
		<markers>		
		<marker>n</marker>
		<submarker>s = 1</submarker>
		</markers>
		</opgroup>
		A<sup>(s)</sup>
		</formula>

		<formula>
		A =
		<opgroup>
		<ope>U</ope>
		<submarker>s</submarker>
		</opgroup>
		A<sup>(s)</sup>
		</formula>

	Text image:

		    |   |n    (s)
		A = |   |    A				(1)
		    |___|s=1



		    |   |   (s)
		A = |   |  A				(2)
		    |___|s

-->

<!ELEMENT ope (#PCDATA)>
<!ELEMENT opgroup (ope, (marker | markers | submarker))>

<!--

MATRICES, VECTORS AND DETERMINANTS: elements 'matrix', 'vector', 'det', 'row', 'cell', 'entry' and 'apply'

	To represent matrices, vectors and determinants, XML MAIDEN 2.1 uses elements
	'matrix', 'vector', 'det' (determinant), 'row', 'cell'  and 'entry'.
	Matrices and determinants are structured row by row, they should
	contain at least two rows and should be at least two column wide,
	In determinants number of row must be equal to number of columns.

	Examples:

		<formula>
		M =
		<matrix>
		<row><cell>A</cell><cell>B</cell></row>
		<row><cell>C</cell><cell>D</cell></row>
		</matrix>
		</formula>

		<formula>
		det(M) =
		<det>
		<row><cell>A</cell><cell>B</cell></row>
		<row><cell>C</cell><cell>D</cell></row>
		</det>
		= AD - BC
		</formula>

	Text image:
		      _          _
		     |            |
		     |   A    B   |
		 M = |            |			(1)
		     |   C    D   |
		     |_          _|

		         |  A   B  |
		det(M) = |         | = AD - BC		(2)
		         |  C   D  |



	Vectors should contain at least two entries.

	Example:
		<formula>
		V =
		<vector>
		<entry>X</entry>
		<entry>Y</entry>
		</vector>
		</formula>

	Text image:
		      _   _
		     |     |
		     |  X  |
		 V = |     |			(1)
		     |  Y  |
		     |_   _|

	Elements 'apply' may be used to associate either marker or submarker with matrix or vector. 
	Matrix (or vector) marker (submarker) is placed near top (bottom) of right fence that encloses matrix (vector). 
	

	Example:
		<formula>
		M<sup>T</sup> =
		<apply>
		<matrix>
		<row><cell>A</cell><cell>B</cell></row>
		<row><cell>C</cell><cell>D</cell></row>
		</matrix>
		<marker>T</marker>
		</apply>
		</formula>
	Text image:
		         _          _
		        |            | T
		  T     |   A    B   |
		 M   =  |            |		(1)
		        |   C    D   |
		        |_          _|

-->

<!ATTLIST matrix>
<!ELEMENT matrix (row, row+)>
<!ELEMENT det (row, row+)>
<!ELEMENT row (cell, cell+)>
<!ELEMENT cell (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ATTLIST vector>
<!ELEMENT vector (entry, entry+)>
<!ELEMENT entry (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT apply ((matrix | vector),(marker | submarker))>

<!--

CASES: elements 'cases', 'case', 'value' and 'scope' 

	In case when expression has multiple values, depending
	on certain condition, one may use 'cases' construction.
	For each case 'value' element specifies value of
	expression, while element 'scope' specifies condition 
	under which the value is valid.

	Example:
		<formula>
		F(x) =
		<cases>
		<case><value>x<sup>3</sup></value><scope>if x > 0</scope></case>
		<case><value>x<sup>2</sup></value><scope>otherwise</scope></case>
		</cases>
		</formula>

	Text image:
	         ____________________
	        |                    |
	        |    3               |
	        |   x    if x > 0    |
	F(x) = 	|                    |				(1)
	        |    2               |
	        |   x    otherwise   |
	        |____________________|

-->

<!ELEMENT cases (case, case+)>
<!ELEMENT case (value, scope)>
<!ELEMENT value (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT scope (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

FENCES: elements 'fence' and 'fenced'

	Element 'fence' is used to produce large brackets and fences.
	Type of fence is specified via attributes 'left' and 'right'.
	Attribute 'left' may have values 'none', 'curly',  'dashed', 'double'
	'round', 'solid' and 'square' with 'square' being default value.
	Attribute 'right' may have values 'curly',  'dashed', 'double'
	'round', 'solid' and 'square' where 'square' is default value.
	Value 'none' indicates that fence should be omitted, 
	'curly' produces large brace {curly bracket}, 'round' marks large 
	parenthesis (round bracket), 'square' is used for large brackets [square brackets],
	'dashed' produces large dashed bars, 'solid' is used for large single bar fences
	like |absolute value| and 'double' for large double bar fences like ||norm||
	Current list of fence types is not comprehensive and may be extended 
	in future versions of XML MAIDEN. 
	Fence markers are produced via 'marker', 'markers' and 'submarker' elements.
	In XML MAIDEN fence marker is expression aligned near the top (or bottom) of right
	fence. In particular 'marker' element carries top-right marker, while 'submarker' 
	produces bottom-right one. To attach markers to base fence 'fenced' element is used.

	Text image:
		  _              _ 
		 |                |   TOP
		L|F     MAIN     R|F  MARKER
		E|E  EXPRESSION  I|E
		F|N      IN      G|N
		T|C    BRACKETS  H|C
		 |E              T|E  BOTTOM
		  _              _    MARKER


	Example: 	

		<formula>
		<fenced>
		<fence>
		EXPRESSION IN SQUARE BRACKETS
		</fence>
		<marker>TOP MARKER</marker>
		</fenced>
		</formula>

		<formula>
		<fenced>
		<fence left="double" right="double">
		EXPRESSION IN DOUBLE BARS
		</fence>
		<submarker>BOTTOM MARKER</submarker>
		</fenced>
		</formula>
      
		<formula>
		<fenced>
		<fence left="none" right="solid">
		EXPRESSION WITH RIGHT RULER
		</fence>
		<markers>
		<marker>TOP MARKER</marker>
		<submarker>BOTTOM MARKER</submarker>
		</markers>
		</fenced>
		</formula>

	Text image:
		 _                              _
		|                                | TOP MARKER
		|  EXPRESSION IN SQUARE BRACKETS |			(1)
		|_                              _|


		||                           ||
		|| EXPRESSION IN DOUBLE BARS ||				(2)
		||                           || BOTTOM MARKER


		                             | TOP MARKER
		EXPRESSION WITH RIGHT RULER  |				(3)
		                             | BOTTOM MARKER

-->

<!ELEMENT fenced (fence, (marker | markers | submarker))>
<!ATTLIST fence left (none | curly | dashed | double | round | solid | square) "square" right (curly | dashed | double | round | solid | square) "square">
<!ELEMENT fence (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

RADICALS: elements 'radical', 'radix', 'radicand' and 'sqrt' 

	Element 'radical' marks radicals.
	It has child elements 'radix' and 'radicand' specifying 
	degree (index) and content (radicand) of radical.
	There is separate element for square roots named 'sqrt'.

	Examples:
		<formula>
		<sqrt>b<sup>2</sup> - 4ac</sqrt>
		</formula>
		<formula>
		<radical><radix>3</radix><radicand>x<sup>3</sup> + y<sup>3</sup> + z<sup>3</sup></radicand></radical>
		</formula>

	Text image:
		     ____________
		    |  2          
		  __| b   -  4ac			(1)
		    |


		     ___________________
		  3 |  3       3     3
		  __| x   +   y   + z			(2)
		    |


-->

<!ELEMENT radical (radix, radicand)>
<!ELEMENT radicand (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT radix (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT sqrt (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

TEXT: elements 'bold', 'italic', 'overline', 'strike' and 'underline' 

	Elements 'bold' and 'italic' are used to produce bold and italic expressions. 
	In mathematical formulae bold and italic are sometimes applied 
	to individual glyphs that may denote some variables, vectors etc.
	Note however that in such cases Unicode consortium 
	recommends to use bold, bold italic and italic math alphanumeric symbols
	located in Unicode Plane 1:

		Latin bold math characters (&#x1D400;-&#x1D433;)
		Latin bold italic math characters (&#x1D468;-&#x1D49B;)
		Latin italic math characters (&#x1D434;-&#x1D467;)
		Greek bold math characters (&#x1D6A8;-&#x1D6E1;)
		Greek bold italic math characters (&#x1D71C;-&#x1D755;)
		Greek italic math characters (&#x1D6E2;-&#x1D71B;)
		Bold face numbers (&#x1D7CE;-&#x1D7D7;)

	Set of math alphanumeric symbols located in Unicode Plane 1
	is specially shaped and kerned for usage in mathematical formulae, as
	letters that represent mathematical variables are slightly slanted 
	and look smoother then ordinary Latin/Greek glyphs, while kerning of characters 
	used in mathematical expressions differs from kerning in Latin/Greek text.

-->

<!ELEMENT bold (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT italic (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--
	Elements 'overline' and 'underline' are reserved for over and underlined 
	expressions. In case if one needs to apply under or over 
	bars to individual glyphs it is better to use precomposed 
	Unicode characters or combining diacritical marks.
-->

<!ELEMENT overline (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>
<!ELEMENT underline (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--
	Element 'strike' generates line through. In the same time it may 
	be used to mark cancelled or deleted terms. 
	Note that element does not produce new glyphs like h-bar 
	(appropriate Unicode characters should be used instead).
-->

<!ELEMENT strike (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

LINE BREAKS: elements 'line' and 'wrap' 

	Automated line breaks inside mathematical expressions are usually
	prohibited. However line breaks can be specified manually using 
	empty element 'line' that generates line break, or 'wrap' element that marks
	place (wrap point) where line breaks may be generated by browser 
	(depending on page width browser may decide whether to use this opportunity).

	Example:
		<formula>
		{F, (G + H)S} = {F, GS} + {F, HS}<wrap/> 
		= {F, G}S + {F, H}S + (G + H){F, S}
		</formula>
	Depending on available width example may be formatted as

		{F, (G + H)S} = {F, GS} + {F, HS} = {F, G}S + {F, H}S + (G + H){F, S}

	or
		{F, (G + H)S} = {F, GS} + {F, HS} 
		= {F, G}S + {F, H}S + (G + H){F, S}

-->

<!ELEMENT line EMPTY>
<!ELEMENT wrap EMPTY>

<!--

INLINE CONTAINER: element 'group' 

	Element 'group' is general purpose inline container 
	that may be used to group expressions.
-->

<!ELEMENT group (#PCDATA | apply | bold | cases | det | fence | fenced | float | fraction | group | inf | italic | matrix | ope | opgroup | over | overline | radical | sqrt | strike | sub | sup | sur | under | underline | vector)*>

<!--

CORE ATTRIBUTES: 'xml:id', 'role' and 'token' 


	ID type 'xml:id' attribute is unique identifier, 
		see http://www.w3.org/TR/xml-id/
	that can be used to assign unique name to given part of document. 
	In XML MAIDEN 2.1 xml:id attribute may be applied to any element 
	excluding empty elements 'line' and 'wrap'.
	 
	'role' attribute is used to enrich document structure with semantics,
	and may specify semantical role of the given element.
	Attribute may be applied to any element excluding empty elements 'line' and 'wrap'.
		
	'token' is general purpose attribute, can be used to enrich document 
	structure by grouping/dividing elements into classes. 
	Its value is of NMTOKEN type. Attribute may be applied to any XML MAIDEN element.
-->

<!ATTLIST apply role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST bold role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST case role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST cases role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST cell role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST den role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST det role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST entry role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST fence role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST fenced role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST float role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST formula role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST formulae role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST fraction role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST group role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST inf role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST italic role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST ker role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST line token NMTOKEN #IMPLIED>
<!ATTLIST marker role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST markers role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST math role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST matrix role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST num role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST ope role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST opgroup role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST over role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST overbrace role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST overline role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST row role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST radical role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST radicand role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST radix role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST sat role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST scope role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST sqrt role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST strike role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST sub role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST subformula role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST submarker role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST sup role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST sur role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST under role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST underbrace role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST underline role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST value role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST vector role CDATA #IMPLIED token NMTOKEN #IMPLIED xml:id ID #IMPLIED>
<!ATTLIST wrap token NMTOKEN #IMPLIED>

<!--
ACCENTS (DIACRITICAL MARKS)

	XML MAIDEN 2.1 provides no markup for diacritical marks (accents like over dots, 
	hats, tildes, caps) as rendering of diacritical marks is governed by Unicode standard 
	(via combining diacritical marks and precomposed glyphs). Unicode based solution is 
	preferable as it is more universal (may be used in many XML based markup languages 
	and even plain Unicode text), does not put extra burden on style sheets, admits more 
	accurate positioning of accents based on font metrics and allows multiple diacritical marks
	per character. In the same time, note that Unicode standard in its current form does not provide
	mechanism for stretching diacritical marks to enclose several characters (there are 
	some for pairs, however). See also document "Unicode Support for Mathematics" 
	issued by Unicode consortium:
		http://www.unicode.org/reports/tr25/

-->

<!-- MATHEMATICAL PART OF XML MAIDEN DTD ENDS HERE -->