A MathML document must be a well-formed XML documents using elements in the MathML namespace as defined by this specification, however it is not required that the document refer to any specific Document Type Definition (DTD) or schema that specifies MathML. It is sometimes advantagous not to specify such a language definition as these files are large, often much larger than the MathML expression and unless they have been previously cached by the MathML application, the time taken to fetch the DTD or schema may have an appreciable effect on the processing of the MathML document.
Note also that if no DTD is specified with a DOCTYPE declaration, that entity references (for example to refer to MathML characters by name) may not be used. The document should be encoded in an encoding (for example UTF-8) in which all needed characters may be encoded as character data, or characters may be referenced using numeric character references, for example ∫ rather than ∫
If a MathML fragment is parsed without a DTD, in other words as a well-formed XML fragment, it is the responsibility of the processing application to treat the white space characters occurring outside of token elements as not significant.
However, in many circumstances, especially while producing or editing MathML, it is useful to use a language definition, to constrain the editing process or to check the correctness of generated files. The following section, Section A.2 Using the MathML DTD, discusses the MathML DTD, which forms a normative part of the specification. Following that, Section A.3 Using the MathML XML Schema, discusses an alternative language definition using the W3C XML schema language, [XMLSchemas]. One should note that the schema definition of the language is currently stricter than the DTD version. That is, a schema validating processor will declare invalid documents that are declared valid by a (DTD) validating XML parser. This is partly due to the fact that the XML schema language may express additional constraints not expressable in the DTD, and partly due to the fact that for reasons of compatibility with earlier releases, the DTD is intentionally forgiving in some places and does not enforce constraints that are specified in the text of this specification.
MathML documents should be validated using the XML DTD for MathML, http://www.w3.org/Math/DTD/mathml2/mathml2.dtd, which is also shown below in Section A.2.5 The MathML DTD.
Documents using this DTD should contain a doctype declaration of the form:
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"
>
The URI may be changed to that of a local copy of the DTD if required.
The MathML DTD has several parameter entities that may be used to
customise the behaviour of the XML parser. In the examples below
these parameter entites are shown being used in the internal
subset of the DTD, i.e. within [] inside the
<!DOCTYPE declaration. If the MathML DTD is being used
as a module in a larger document type, then these parameters entities
may be set in the combined DTD and need not be explictly set in
individual document instances. For example the combined XHTML + MathML
DTD described below in Section A.2.3 MathML as a DTD Module sets each of
these parameters to appropriate defaults.
It is sometimes necessary, or convenient, to
use the mechanisms described in [Modularization]
which provide a namespace prefix on
MathML element names. The DTD below is designed to allow this usage.
If the parameter entity MATHML.prefixed is declared to be
INCLUDE, using a declaration such as
<!ENTITY % MATHML.prefixed "INCLUDE" >
either in the internal subset of the DOCTYPE declaration, or in the
DTD file that is including the MathML DTD, then all MathML elements
should be used with a prefix, for example <m:mrow>,
<m:apply>, etc. The prefix defaults to m
but another prefix may be declared by
declaring in addition the parameter entity MathML.prefix.
For example,
<!ENTITY % MATHML.prefix "mml" >
would set the prefix for the MathML namespace to mml.
So a complete declaration for a document using this prefix could be:
<!DOCTYPE mml:math
PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
<!ENTITY % MATHML.prefixed "INCLUDE">
<!ENTITY % MATHML.prefix "mml">
]>
<mml:math>
...
This use of parameter entities to control namespace prefixes follows the conventions specified in [Modularization].
In addition to the prefix for the MathML namespace, the DTD
allows similar customization of other prefixes that may be used
in attributes. The Xlink and W3C XML schema instance namespaces
may be used with this DTD, with default prefixes xlink
and xsi respectively. The entities XLINK.prefix and
Schema.prefix may be set in the same way as
MATHML.prefix above to use different prefixes. As these
namespaces are used for attribute names, they must be used with
explict prefixes, so there is no analogue of the
MATHML.prefixed parameter in these cases.
The following example uses the s:schemaLocation attribute (which is
described below in Section A.3.1 Associating the MathML schema with MathML fragments)
with a non standard prefix, and uses a parameter entity in the internal
subset of the DTD so that the file may be DTD valid as well as
schema valid.
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
<!ENTITY % Schema.prefix "s">
]>
<math xmlns="http://www.w3.org/1998/Math/MathML"
xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
s:schemaLocation="http://www.w3.org/1998/Math/MathML
http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd">
...
Note that while the [Namespaces] Recommendation provides mechanisms to change the prefix at arbitrary points in the document, this flexibility is not provided in this DTD (and is probably not possible to specify in any DTD).
For reasons of backward compatibility, there are several
constraints specified in this specification that are not
enforced by the DTD by default. There are many constraints in the
specification that may not be enforced by a DTD, however there
are some additional constraints that could be checked.
The parameter entity MathMLStrict
may be set to INCLUDE to activate
these stricter checks.
The syntax to set the parameter is as the same as for the previous examples:
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
<!ENTITY % MathMLstrict "INCLUDE">
]>
If this strict checking is enabled, the DTD will enforce that
mfrac has exactly two child elements. Similarly for
msub, mover, etc. The values of several
attributes will be checked, for example the value of
mathvariant is constrained to the list specified in Section 3.2.2 Mathematics style attributes common to token
elements. The DTD will check
that table makup, mtr and mtd, is only used correctly
nested in mtable. Finally the use of Presentation MathML
elements within Content MathML is restricted to those elements listed
in section Section 5.2.3 Presentation Markup Contained in Content Markup.
Normally, however, a MathML expression does not constitute an entire XML document. MathML is designed to be used as the mathematics fragment of larger markup languages. In particular it is designed to be used as a module in documents marked up with the XHTML family of markup languages, as defined in [Modularization]. As a convenience, a version of the XHTML DTD, extended with this MathML module, is also provided as a concrete example. This version includes all the necessary declarations included into one file (in contrast to the standalone version of the MathML DTD which references several files for entity declarations etc.). To use this DTD, a document should contain the doctype declaration
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"
>
as above, the URI may be altered to that of a local copy of the DTD, and the namespace prefixes used for XHTML and MathML may be controlled by the use of parameter entities.
If required, one may validate MathML documents using an SGML
parser such as nsgmls,
rather than a validating XML parser.
In this case an SGML declaration defining the
constraints of XML applicable to an SGML parser must be used.
See [sgml-xml].
The entity declarations for characters are referenced at the end of the DTD. These are linked to the character tables in Chapter 6 Characters, Entities and Fonts for each entity set.
Lists of the combined MathML set of character names, ordered by name or by Unicode value are also available.
In order to accommodate XML namespace prefixes, the DTD does not
directly refer to an element name such as mrow
but instead always refers to the name via a parameter entity such as
%mrow.qname;. The definitions of these parameter
entities are in the file
but are not shown here. They are simply declarations such as
the following, one for each MathML element.
<!ENTITY % mrow.qname "%MATHML.pfx;mrow" >
Here we give the main body of the DTD. The full DTD, as well as the XHTML-Math DTD, is available as a gzipped tar archive.
<!-- MathML 2.0 DTD ....................................................... -->
<!-- file: mathml2.dtd
-->
<!-- MathML 2.0 DTD
This is the Mathematical Markup Language (MathML) 2.0, an XML
application for describing mathematical notation and capturing
both its structure and content.
Copyright © 1998-2003 W3C® (MIT, ERCIM, Keio), All Rights
Reserved. W3C liability, trademark, document use and software
licensing rules apply.
Permission to use, copy, modify and distribute the MathML 2.0 DTD and
its accompanying documentation for any purpose and without fee is
hereby granted in perpetuity, provided that the above copyright notice
and this paragraph appear in all copies. The copyright holders make
no representation about the suitability of the DTD for any purpose.
It is provided "as is" without expressed or implied warranty.
Revision: $Id: appendixa.html,v 1.1 2003/10/20 19:36:55 mf Exp $
This entity may be identified by the PUBLIC and SYSTEM identifiers:
PUBLIC "-//W3C//DTD MathML 2.0//EN"
SYSTEM "mathml2.dtd"
Revisions: editor and revision history at EOF
-->
<!-- Entity used to enable marked sections which enforces stricter
checking of MathML syntax rules
-->
<!ENTITY % MathMLstrict "IGNORE">
<!-- MathML Qualified Names module ............................... -->
<!ENTITY % mathml-qname.module "INCLUDE" >
<![%mathml-qname.module;[
<!ENTITY % mathml-qname.mod
PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
"mathml2-qname-1.mod" >
%mathml-qname.mod;]]>
<!-- if %NS.prefixed; is INCLUDE, include all NS attributes,
otherwise just those associated with MathML
-->
<![%NS.prefixed;[
<!ENTITY % MATHML.NamespaceDecl.attrib
"%NamespaceDecl.attrib;"
>
]]>
<!ENTITY % MATHML.NamespaceDecl.attrib
"%MATHML.xmlns.attrib;"
>
<!-- Attributes shared by all elements .......................... -->
<!ENTITY % MATHML.Common.attrib
"%MATHML.NamespaceDecl.attrib;
%XLINK.prefix;:href CDATA #IMPLIED
%XLINK.prefix;:type CDATA #IMPLIED
class CDATA #IMPLIED
style CDATA #IMPLIED
id ID #IMPLIED
xref IDREF #IMPLIED
other CDATA #IMPLIED"
>
<!-- Presentation element set ................................... -->
<!-- Attribute definitions -->
<!ENTITY % att-fontsize
"fontsize CDATA #IMPLIED" >
<!ENTITY % att-fontweight
"fontweight ( normal | bold ) #IMPLIED" >
<!ENTITY % att-fontstyle
"fontstyle ( normal | italic ) #IMPLIED" >
<!ENTITY % att-fontfamily
"fontfamily CDATA #IMPLIED" >
<!ENTITY % att-color
"color CDATA #IMPLIED" >
<!-- MathML2 typographically-distinguished symbol attributes -->
<![%MathMLstrict;[
<!ENTITY % att-mathvariant
"mathvariant ( normal | bold | italic | bold-italic | double-struck |
bold-fraktur | script | bold-script | fraktur |
sans-serif | bold-sans-serif | sans-serif-italic |
sans-serif-bold-italic | monospace )
#IMPLIED" >
]]>
<!ENTITY % att-mathvariant
"mathvariant CDATA #IMPLIED" >
<!ENTITY % att-mathsize
"mathsize CDATA #IMPLIED" >
<!ENTITY % att-mathcolor
"mathcolor CDATA #IMPLIED" >
<!ENTITY % att-mathbackground
"mathbackground CDATA #IMPLIED" >
<!ENTITY % att-fontinfo
"%att-fontsize;
%att-fontweight;
%att-fontstyle;
%att-fontfamily;
%att-color;
%att-mathvariant;
%att-mathsize;
%att-mathcolor;
%att-mathbackground;"
>
<!ENTITY % att-form
"form ( prefix | infix | postfix ) #IMPLIED" >
<!ENTITY % att-fence
"fence ( true | false ) #IMPLIED" >
<!ENTITY % att-separator
"separator ( true | false ) #IMPLIED" >
<!ENTITY % att-lspace
"lspace CDATA #IMPLIED" >
<!ENTITY % att-rspace
"rspace CDATA #IMPLIED" >
<!ENTITY % att-stretchy
"stretchy ( true | false ) #IMPLIED" >
<!ENTITY % att-symmetric
"symmetric ( true | false ) #IMPLIED" >
<!ENTITY % att-maxsize
"maxsize CDATA #IMPLIED" >
<!ENTITY % att-minsize
"minsize CDATA #IMPLIED" >
<!ENTITY % att-largeop
"largeop ( true | false) #IMPLIED" >
<!ENTITY % att-movablelimits
"movablelimits ( true | false ) #IMPLIED" >
<!ENTITY % att-accent
"accent ( true | false ) #IMPLIED" >
<!ENTITY % att-opinfo
"%att-form;
%att-fence;
%att-separator;
%att-lspace;
%att-rspace;
%att-stretchy;
%att-symmetric;
%att-maxsize;
%att-minsize;
%att-largeop;
%att-movablelimits;
%att-accent;"
>
<!ENTITY % att-width
"width CDATA #IMPLIED" >
<!ENTITY % att-height
"height CDATA #IMPLIED" >
<!ENTITY % att-depth
"depth CDATA #IMPLIED" >
<!ENTITY % att-linebreak
"linebreak CDATA #IMPLIED" >
<!ENTITY % att-sizeinfo
"%att-width;
%att-height;
%att-depth;"
>
<!ENTITY % att-lquote
"lquote CDATA #IMPLIED" >
<!ENTITY % att-rquote
"rquote CDATA #IMPLIED" >
<!ENTITY % att-linethickness
"linethickness CDATA #IMPLIED" >
<!ENTITY % att-scriptlevel
"scriptlevel CDATA #IMPLIED" >
<!ENTITY % att-displaystyle
"displaystyle ( true | false ) #IMPLIED" >
<!ENTITY % att-scriptsizemultiplier
"scriptsizemultiplier CDATA #IMPLIED" >
<!ENTITY % att-scriptminsize
"scriptminsize CDATA #IMPLIED" >
<!ENTITY % att-background
"background CDATA #IMPLIED" >
<!ENTITY % att-veryverythinmathspace
"veryverythinmathspace CDATA #IMPLIED" >
<!ENTITY % att-verythinmathspace
"verythinmathspace CDATA #IMPLIED" >
<!ENTITY % att-thinmathspace
"thinmathspace CDATA #IMPLIED" >
<!ENTITY % att-mediummathspace
"mediummathspace CDATA #IMPLIED" >
<!ENTITY % att-thickmathspace
"thickmathspace CDATA #IMPLIED" >
<!ENTITY % att-verythickmathspace
"verythickmathspace CDATA #IMPLIED" >
<!ENTITY % att-veryverythickmathspace
"veryverythickmathspace CDATA #IMPLIED" >
<!ENTITY % att-open
"open CDATA #IMPLIED" >
<!ENTITY % att-close
"close CDATA #IMPLIED" >
<!ENTITY % att-separators
"separators CDATA #IMPLIED" >
<!ENTITY % att-subscriptshift
"subscriptshift CDATA #IMPLIED" >
<!ENTITY % att-superscriptshift
"superscriptshift CDATA #IMPLIED" >
<!ENTITY % att-accentunder
"accentunder ( true | false ) #IMPLIED" >
<!ENTITY % att-align
"align CDATA #IMPLIED" >
<![%MathMLstrict;[
<!ENTITY % att-numalign
"numalign ( left | center | right ) #IMPLIED" >
<!ENTITY % att-denomalign
"denomalign ( left | center | right ) #IMPLIED" >
]]>
<!ENTITY % att-numalign
"numalign CDATA #IMPLIED" >
<!ENTITY % att-denomalign
"denomalign CDATA #IMPLIED" >
<!ENTITY % att-rowalign-list
"rowalign CDATA #IMPLIED" >
<!ENTITY % att-columnalign-list
"columnalign CDATA #IMPLIED" >
<![%MathMLstrict;[
<!ENTITY % att-rowalign
"rowalign ( top | bottom | center | baseline | axis ) #IMPLIED" >
<!ENTITY % att-columnalign
"columnalign ( left | center | right ) #IMPLIED" >
]]>
<!ENTITY % att-rowalign
"rowalign CDATA #IMPLIED" >
<!ENTITY % att-columnalign
"columnalign CDATA #IMPLIED" >
<!ENTITY % att-columnwidth
"columnwidth CDATA #IMPLIED" >
<!ENTITY % att-groupalign-list
"groupalign CDATA #IMPLIED" >
<![%MathMLstrict;[
<!ENTITY % att-groupalign
"groupalign ( left | right | center | decimalpoint ) #IMPLIED" >
]]>
<!ENTITY % att-groupalign
"groupalign CDATA #IMPLIED" >
<!ENTITY % att-alignmentscope
"alignmentscope CDATA #IMPLIED" >
<!ENTITY % att-rowspacing
"rowspacing CDATA #IMPLIED" >
<!ENTITY % att-columnspacing
"columnspacing CDATA #IMPLIED" >
<!ENTITY % att-rowlines
"rowlines CDATA #IMPLIED" >
<!ENTITY % att-columnlines
"columnlines CDATA #IMPLIED" >
<!ENTITY % att-frame
"frame ( none | solid | dashed ) #IMPLIED" >
<!ENTITY % att-side
"side ( left | right | leftoverlap | rightoverlap ) #IMPLIED" >
<!ENTITY % att-framespacing
"framespacing CDATA #IMPLIED" >
<!ENTITY % att-minlabelspacing
"minlabelspacing CDATA #IMPLIED" >
<![%MathMLstrict;[
<!ENTITY % att-equalrows
"equalrows ( true | false ) #IMPLIED" >
<!ENTITY % att-equalcolumns
"equalcolumns ( true | false ) #IMPLIED" >
]]>
<!ENTITY % att-equalrows
"equalrows CDATA #IMPLIED" >
<!ENTITY % att-equalcolumns
"equalcolumns CDATA #IMPLIED" >
<!ENTITY % att-tableinfo
"%att-align;
%att-rowalign-list;
%att-columnalign-list;
%att-columnwidth;
%att-groupalign-list;
%att-alignmentscope;
%att-side;
%att-rowspacing;
%att-columnspacing;
%att-rowlines;
%att-columnlines;
%att-width;
%att-frame;
%att-framespacing;
%att-minlabelspacing;
%att-equalrows;
%att-equalcolumns;
%att-displaystyle;"
>
<!ENTITY % att-rowspan
"rowspan CDATA #IMPLIED" >
<!ENTITY % att-columnspan
"columnspan CDATA #IMPLIED" >
<!ENTITY % att-edge
"edge ( left | right ) #IMPLIED" >
<!ENTITY % att-actiontype
"actiontype CDATA #IMPLIED" >
<!ENTITY % att-selection
"selection CDATA #IMPLIED" >
<!ENTITY % att-name
"name CDATA #IMPLIED" >
<!ENTITY % att-alt
"alt CDATA #IMPLIED" >
<!ENTITY % att-index
"index CDATA #IMPLIED" >
<![%MathMLstrict;[
<!ENTITY % att-bevelled
"bevelled ( true | false ) #IMPLIED" >
]]>
<!ENTITY % att-bevelled
"bevelled CDATA #IMPLIED" >
<!-- Presentation schemata with content -->
<!ENTITY % ptoken
"%mi.qname; | %mn.qname; | %mo.qname;
| %mtext.qname; | %ms.qname;" >
<!ATTLIST %mi.qname;
%MATHML.Common.attrib;
%att-fontinfo;
>
<!ATTLIST %mn.qname;
%MATHML.Common.attrib;
%att-fontinfo;
>
<!ATTLIST %mo.qname;
%MATHML.Common.attrib;
%att-fontinfo;
%att-opinfo;
>
<!ATTLIST %mtext.qname;
%MATHML.Common.attrib;
%att-fontinfo;
>
<!ATTLIST %ms.qname;
%MATHML.Common.attrib;
%att-fontinfo;
%att-lquote;
%att-rquote;
>
<!-- Empty presentation schemata -->
<!ENTITY % petoken
"%mspace.qname;" >
<!ELEMENT %mspace.qname; EMPTY >
<!ATTLIST %mspace.qname;
%att-sizeinfo;
%att-linebreak;
%MATHML.Common.attrib;
>
<!-- Presentation: general layout schemata -->
<!ENTITY % pgenschema
"%mrow.qname; | %mfrac.qname; | %msqrt.qname; | %mroot.qname;
| %menclose.qname; | %mstyle.qname; | %merror.qname;
| %mpadded.qname; | %mphantom.qname; | %mfenced.qname;" >
<!ATTLIST %mrow.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %mfrac.qname;
%MATHML.Common.attrib;
%att-bevelled;
%att-numalign;
%att-denomalign;
%att-linethickness;
>
<!ATTLIST %msqrt.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %menclose.qname;
%MATHML.Common.attrib;
notation CDATA 'longdiv' >
<!ATTLIST %mroot.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %mstyle.qname;
%MATHML.Common.attrib;
%att-fontinfo;
%att-opinfo;
%att-lquote;
%att-rquote;
%att-linethickness;
%att-scriptlevel;
%att-scriptsizemultiplier;
%att-scriptminsize;
%att-background;
%att-veryverythinmathspace;
%att-verythinmathspace;
%att-thinmathspace;
%att-mediummathspace;
%att-thickmathspace;
%att-verythickmathspace;
%att-veryverythickmathspace;
%att-open;
%att-close;
%att-separators;
%att-subscriptshift;
%att-superscriptshift;
%att-accentunder;
%att-tableinfo;
%att-rowspan;
%att-columnspan;
%att-edge;
%att-selection;
%att-bevelled;
%att-height;
%att-depth;
>
<!ATTLIST %merror.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %mpadded.qname;
%MATHML.Common.attrib;
%att-sizeinfo;
%att-lspace;
>
<!ATTLIST %mphantom.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %mfenced.qname;
%MATHML.Common.attrib;
%att-open;
%att-close;
%att-separators;
>
<!-- Presentation layout schemata: scripts and limits -->
<!ENTITY % pscrschema
"%msub.qname; | %msup.qname; | %msubsup.qname; | %munder.qname;
| %mover.qname; | %munderover.qname; | %mmultiscripts.qname;" >
<!ATTLIST %msub.qname;
%MATHML.Common.attrib;
%att-subscriptshift;
>
<!ATTLIST %msup.qname;
%MATHML.Common.attrib;
%att-superscriptshift;
>
<!ATTLIST %msubsup.qname;
%MATHML.Common.attrib;
%att-subscriptshift;
%att-superscriptshift;
>
<!ATTLIST %munder.qname;
%MATHML.Common.attrib;
%att-accentunder;
>
<!ATTLIST %mover.qname;
%MATHML.Common.attrib;
%att-accent;
>
<!ATTLIST %munderover.qname;
%MATHML.Common.attrib;
%att-accent;
%att-accentunder;
>
<!ATTLIST %mmultiscripts.qname;
%MATHML.Common.attrib;
%att-subscriptshift;
%att-superscriptshift;
>
<!-- Presentation layout schemata: empty elements for scripts -->
<!ENTITY % pscreschema
"%mprescripts.qname; | %none.qname;" >
<!ELEMENT %mprescripts.qname; EMPTY >
<!ATTLIST %mprescripts.qname;
%MATHML.xmlns.attrib; >
<!ELEMENT %none.qname; EMPTY >
<!ATTLIST %none.qname;
%MATHML.xmlns.attrib; >
<!-- Presentation layout schemata: tables -->
<![%MathMLstrict;[
<!-- in strict mode only allow mtable at top level.
mtr ,mlabledtr and mtd only allowed inside mtable.
-->
<!ENTITY % ptabschema "%mtable.qname;" >
]]>
<!ENTITY % ptabschema
"%mtable.qname; | %mtr.qname; | %mlabeledtr.qname; | %mtd.qname;" >
<!ATTLIST %mtable.qname;
%MATHML.Common.attrib;
%att-tableinfo;
>
<!ATTLIST %mtr.qname;
%MATHML.Common.attrib;
%att-rowalign;
%att-columnalign-list;
%att-groupalign-list;
>
<!ATTLIST %mlabeledtr.qname;
%MATHML.Common.attrib;
%att-rowalign;
%att-columnalign-list;
%att-groupalign-list;
>
<!ATTLIST %mtd.qname;
%MATHML.Common.attrib;
%att-rowalign;
%att-columnalign;
%att-groupalign-list;
%att-rowspan;
%att-columnspan;
>
<!ENTITY % plschema
"%pgenschema; | %pscrschema; | %ptabschema;" >
<!-- Empty presentation layout schemata -->
<!ENTITY % peschema
"%maligngroup.qname; | %malignmark.qname;" >
<!ELEMENT %malignmark.qname; EMPTY >
<!ATTLIST %malignmark.qname;
%att-edge; >
<!ELEMENT %maligngroup.qname; EMPTY >
<!ATTLIST %maligngroup.qname;
%MATHML.Common.attrib;
%att-groupalign;
>
<!ELEMENT %mglyph.qname; EMPTY >
<!ATTLIST %mglyph.qname;
%att-alt;
%att-fontfamily;
%att-index; >
<!-- Presentation action schemata -->
<!ENTITY % pactions
"%maction.qname;" >
<!ATTLIST %maction.qname;
%MATHML.Common.attrib;
%att-actiontype;
%att-selection;
>
<!-- The following entity for substitution into
content constructs excludes elements that
are not valid as expressions.
-->
<!ENTITY % PresInCont
"%ptoken; | %petoken; |
%plschema; | %peschema; | %pactions;" >
<!-- Presentation entity: all presentation constructs -->
<![%MathMLstrict;[
<!-- In strict mode don't allow prescripts and none at top level.-->
<!ENTITY % Presentation "%PresInCont;">
]]>
<!ENTITY % Presentation
"%ptoken; | %petoken; | %pscreschema; |
%plschema; | %peschema; | %pactions;">
<!-- Content element set ........................................ -->
<!-- Attribute definitions -->
<!ENTITY % att-base
"base CDATA '10'" >
<!ENTITY % att-closure
"closure CDATA 'closed'" >
<!ENTITY % att-definition
"definitionURL CDATA ''" >
<!ENTITY % att-encoding
"encoding CDATA ''" >
<!ENTITY % att-nargs
"nargs CDATA '1'" >
<!ENTITY % att-occurrence
"occurrence CDATA 'function-model'" >
<!ENTITY % att-order
"order CDATA 'numeric'" >
<!ENTITY % att-scope
"scope CDATA 'local'" >
<!ENTITY % att-type
"type CDATA #IMPLIED" >
<!-- Content elements: leaf nodes -->
<!ENTITY % ctoken
"%csymbol.qname; | %ci.qname; | %cn.qname;" >
<!ATTLIST %ci.qname;
%MATHML.Common.attrib;
%att-type;
%att-definition;
%att-encoding;
>
<!ATTLIST %csymbol.qname;
%MATHML.Common.attrib;
%att-encoding;
%att-type;
%att-definition;
>
<!ATTLIST %cn.qname;
%MATHML.Common.attrib;
%att-type;
%att-base;
%att-definition;
%att-encoding;
>
<!-- Content elements: specials -->
<!ENTITY % cspecial
"%apply.qname; | %reln.qname; |
%lambda.qname;" >
<!ATTLIST %apply.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %reln.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %lambda.qname;
%MATHML.Common.attrib;
>
<!-- Content elements: others -->
<!ENTITY % cother
"%condition.qname; | %declare.qname; | %sep.qname;" >
<!ATTLIST %condition.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %declare.qname;
%MATHML.Common.attrib;
%att-type;
%att-scope;
%att-nargs;
%att-occurrence;
%att-definition;
%att-encoding;
>
<!ELEMENT %sep.qname; EMPTY >
<!ATTLIST %sep.qname;
%MATHML.xmlns.attrib; >
<!-- Content elements: semantic mapping -->
<![%MathMLstrict;[
<!-- in strict mode only allow semantics at top level.
annotation and annotation-xml only allowed in semantics
-->
<!ENTITY % csemantics "%semantics.qname;" >
]]>
<!ENTITY % csemantics
"%semantics.qname; | %annotation.qname; |
%annotation-xml.qname;" >
<!ATTLIST %semantics.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ATTLIST %annotation.qname;
%MATHML.Common.attrib;
%att-encoding;
>
<!ATTLIST %annotation-xml.qname;
%MATHML.Common.attrib;
%att-encoding;
>
<!-- Content elements: constructors -->
<!ENTITY % cconstructor
"%interval.qname; | %list.qname; | %matrix.qname;
| %matrixrow.qname; | %set.qname; | %vector.qname;
| %piecewise.qname; " >
<!ATTLIST %interval.qname;
%MATHML.Common.attrib;
%att-closure;
>
<!ATTLIST %set.qname;
%MATHML.Common.attrib;
%att-type;
>
<!ATTLIST %list.qname;
%MATHML.Common.attrib;
%att-order;
>
<!ATTLIST %vector.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %matrix.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %matrixrow.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %piecewise.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %piece.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %otherwise.qname;
%MATHML.Common.attrib;
>
<!-- Content elements: symbols -->
<!ENTITY % c0ary
"%integers.qname; |
%reals.qname; |
%rationals.qname; |
%naturalnumbers.qname; |
%complexes.qname; |
%primes.qname; |
%exponentiale.qname; |
%imaginaryi.qname; |
%notanumber.qname; |
%true.qname; |
%false.qname; |
%emptyset.qname; |
%pi.qname; |
%eulergamma.qname; |
%infinity.qname;" >
<!ELEMENT %integers.qname; EMPTY >
<!ATTLIST %integers.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %reals.qname; EMPTY >
<!ATTLIST %reals.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %rationals.qname; EMPTY >
<!ATTLIST %rationals.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %naturalnumbers.qname; EMPTY >
<!ATTLIST %naturalnumbers.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %complexes.qname; EMPTY >
<!ATTLIST %complexes.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %primes.qname; EMPTY >
<!ATTLIST %primes.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %exponentiale.qname; EMPTY >
<!ATTLIST %exponentiale.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %imaginaryi.qname; EMPTY >
<!ATTLIST %imaginaryi.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %notanumber.qname; EMPTY >
<!ATTLIST %notanumber.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %true.qname; EMPTY >
<!ATTLIST %true.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %false.qname; EMPTY >
<!ATTLIST %false.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %emptyset.qname; EMPTY >
<!ATTLIST %emptyset.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %pi.qname; EMPTY >
<!ATTLIST %pi.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %eulergamma.qname; EMPTY >
<!ATTLIST %eulergamma.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %infinity.qname; EMPTY >
<!ATTLIST %infinity.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!-- Content elements: operators -->
<!ENTITY % cfuncop1ary
"%inverse.qname; | %ident.qname;|
%domain.qname; | %codomain.qname; |
%image.qname; " >
<!ELEMENT %inverse.qname; EMPTY >
<!ATTLIST %inverse.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %domain.qname; EMPTY >
<!ATTLIST %domain.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %codomain.qname; EMPTY >
<!ATTLIST %codomain.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %image.qname; EMPTY >
<!ATTLIST %image.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % cfuncopnary
"%fn.qname; | %compose.qname;" >
<!ATTLIST %fn.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %ident.qname; EMPTY >
<!ATTLIST %ident.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %compose.qname; EMPTY >
<!ATTLIST %compose.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % carithop1ary
"%abs.qname; | %conjugate.qname; | %exp.qname; | %factorial.qname; |
%arg.qname; | %real.qname; | %imaginary.qname; |
%floor.qname; | %ceiling.qname;" >
<!ELEMENT %exp.qname; EMPTY >
<!ATTLIST %exp.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %abs.qname; EMPTY >
<!ATTLIST %abs.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arg.qname; EMPTY >
<!ATTLIST %arg.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %real.qname; EMPTY >
<!ATTLIST %real.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %imaginary.qname; EMPTY >
<!ATTLIST %imaginary.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %conjugate.qname; EMPTY >
<!ATTLIST %conjugate.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %factorial.qname; EMPTY >
<!ATTLIST %factorial.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %floor.qname; EMPTY >
<!ATTLIST %floor.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %ceiling.qname; EMPTY >
<!ATTLIST %ceiling.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % carithop1or2ary
"%minus.qname;" >
<!ELEMENT %minus.qname; EMPTY >
<!ATTLIST %minus.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % carithop2ary
"%quotient.qname; | %divide.qname; | %power.qname; | %rem.qname;" >
<!ELEMENT %quotient.qname; EMPTY >
<!ATTLIST %quotient.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %divide.qname; EMPTY >
<!ATTLIST %divide.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %power.qname; EMPTY >
<!ATTLIST %power.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %rem.qname; EMPTY >
<!ATTLIST %rem.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % carithopnary
"%plus.qname; | %times.qname; | %max.qname;
| %min.qname; | %gcd.qname; | %lcm.qname;" >
<!ELEMENT %plus.qname; EMPTY >
<!ATTLIST %plus.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %max.qname; EMPTY >
<!ATTLIST %max.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %min.qname; EMPTY >
<!ATTLIST %min.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %times.qname; EMPTY >
<!ATTLIST %times.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %gcd.qname; EMPTY >
<!ATTLIST %gcd.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %lcm.qname; EMPTY >
<!ATTLIST %lcm.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % carithoproot
"%root.qname;" >
<!ELEMENT %root.qname; EMPTY >
<!ATTLIST %root.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clogicopquant
"%exists.qname; | %forall.qname;" >
<!ELEMENT %exists.qname; EMPTY >
<!ATTLIST %exists.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %forall.qname; EMPTY >
<!ATTLIST %forall.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clogicopnary
"%and.qname; | %or.qname; | %xor.qname;" >
<!ELEMENT %and.qname; EMPTY >
<!ATTLIST %and.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %or.qname; EMPTY >
<!ATTLIST %or.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %xor.qname; EMPTY >
<!ATTLIST %xor.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clogicop1ary
"%not.qname;" >
<!ELEMENT %not.qname; EMPTY >
<!ATTLIST %not.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clogicop2ary
"%implies.qname;" >
<!ELEMENT %implies.qname; EMPTY >
<!ATTLIST %implies.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % ccalcop
"%log.qname; | %int.qname; | %diff.qname; | %partialdiff.qname; |
%divergence.qname; | %grad.qname; | %curl.qname; | %laplacian.qname;" >
<!ELEMENT %divergence.qname; EMPTY >
<!ATTLIST %divergence.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %grad.qname; EMPTY >
<!ATTLIST %grad.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %curl.qname; EMPTY >
<!ATTLIST %curl.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %laplacian.qname; EMPTY >
<!ATTLIST %laplacian.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %log.qname; EMPTY >
<!ATTLIST %log.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %int.qname; EMPTY >
<!ATTLIST %int.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %diff.qname; EMPTY >
<!ATTLIST %diff.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %partialdiff.qname; EMPTY >
<!ATTLIST %partialdiff.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % ccalcop1ary
"%ln.qname;" >
<!ELEMENT %ln.qname; EMPTY >
<!ATTLIST %ln.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetop1ary
"%card.qname;" >
<!ELEMENT %card.qname; EMPTY >
<!ATTLIST %card.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetop2ary
"%setdiff.qname;" >
<!ELEMENT %setdiff.qname; EMPTY >
<!ATTLIST %setdiff.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetopnary
"%union.qname; | %intersect.qname; | %cartesianproduct.qname; " >
<!ELEMENT %union.qname; EMPTY >
<!ATTLIST %union.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %intersect.qname; EMPTY >
<!ATTLIST %intersect.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %cartesianproduct.qname; EMPTY >
<!ATTLIST %cartesianproduct.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % cseqop
"%sum.qname; | %product.qname; | %limit.qname;" >
<!ELEMENT %sum.qname; EMPTY >
<!ATTLIST %sum.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %product.qname; EMPTY >
<!ATTLIST %product.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %limit.qname; EMPTY >
<!ATTLIST %limit.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % ctrigop
"%sin.qname; | %cos.qname; | %tan.qname;
| %sec.qname; | %csc.qname; | %cot.qname;
| %sinh.qname; | %cosh.qname; | %tanh.qname;
| %sech.qname; | %csch.qname; | %coth.qname;
| %arcsin.qname; | %arccos.qname; | %arctan.qname;
| %arccosh.qname; | %arccot.qname; | %arccoth.qname;
| %arccsc.qname; | %arccsch.qname; | %arcsec.qname;
| %arcsech.qname; | %arcsinh.qname; | %arctanh.qname;
" >
<!ELEMENT %sin.qname; EMPTY >
<!ATTLIST %sin.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %cos.qname; EMPTY >
<!ATTLIST %cos.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %tan.qname; EMPTY >
<!ATTLIST %tan.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %sec.qname; EMPTY >
<!ATTLIST %sec.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %csc.qname; EMPTY >
<!ATTLIST %csc.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %cot.qname; EMPTY >
<!ATTLIST %cot.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %sinh.qname; EMPTY >
<!ATTLIST %sinh.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %cosh.qname; EMPTY >
<!ATTLIST %cosh.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %tanh.qname; EMPTY >
<!ATTLIST %tanh.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %sech.qname; EMPTY >
<!ATTLIST %sech.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %csch.qname; EMPTY >
<!ATTLIST %csch.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %coth.qname; EMPTY >
<!ATTLIST %coth.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arcsin.qname; EMPTY >
<!ATTLIST %arcsin.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arccos.qname; EMPTY >
<!ATTLIST %arccos.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arctan.qname; EMPTY >
<!ATTLIST %arctan.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arccosh.qname; EMPTY >
<!ATTLIST %arccosh.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arccot.qname; EMPTY >
<!ATTLIST %arccot.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arccoth.qname; EMPTY >
<!ATTLIST %arccoth.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arccsc.qname; EMPTY >
<!ATTLIST %arccsc.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arccsch.qname; EMPTY >
<!ATTLIST %arccsch.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arcsec.qname; EMPTY >
<!ATTLIST %arcsec.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arcsech.qname; EMPTY >
<!ATTLIST %arcsech.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arcsinh.qname; EMPTY >
<!ATTLIST %arcsinh.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %arctanh.qname; EMPTY >
<!ATTLIST %arctanh.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % cstatopnary
"%mean.qname; | %sdev.qname; |
%variance.qname; | %median.qname; |
%mode.qname;" >
<!ELEMENT %mean.qname; EMPTY >
<!ATTLIST %mean.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %sdev.qname; EMPTY >
<!ATTLIST %sdev.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %variance.qname; EMPTY >
<!ATTLIST %variance.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %median.qname; EMPTY >
<!ATTLIST %median.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %mode.qname; EMPTY >
<!ATTLIST %mode.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % cstatopmoment
"%moment.qname;" >
<!ELEMENT %moment.qname; EMPTY >
<!ATTLIST %moment.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clalgop1ary
"%determinant.qname; |
%transpose.qname;" >
<!ELEMENT %determinant.qname; EMPTY >
<!ATTLIST %determinant.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %transpose.qname; EMPTY >
<!ATTLIST %transpose.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clalgop2ary
"%vectorproduct.qname;
| %scalarproduct.qname;
| %outerproduct.qname;" >
<!ELEMENT %vectorproduct.qname; EMPTY >
<!ATTLIST %vectorproduct.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %scalarproduct.qname; EMPTY >
<!ATTLIST %scalarproduct.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %outerproduct.qname; EMPTY >
<!ATTLIST %outerproduct.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % clalgopnary
"%selector.qname;" >
<!ELEMENT %selector.qname; EMPTY >
<!ATTLIST %selector.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!-- Content elements: relations -->
<!ENTITY % cgenrel2ary
"%neq.qname; | %factorof.qname;" >
<!ELEMENT %neq.qname; EMPTY >
<!ATTLIST %neq.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %factorof.qname; EMPTY >
<!ATTLIST %factorof.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % cgenrelnary
"%eq.qname; | %leq.qname; | %lt.qname; | %geq.qname;
| %gt.qname;| %equivalent.qname; | %approx.qname;" >
<!ELEMENT %eq.qname; EMPTY >
<!ATTLIST %eq.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %equivalent.qname; EMPTY >
<!ATTLIST %equivalent.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %approx.qname; EMPTY >
<!ATTLIST %approx.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %gt.qname; EMPTY >
<!ATTLIST %gt.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %lt.qname; EMPTY >
<!ATTLIST %lt.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %geq.qname; EMPTY >
<!ATTLIST %geq.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %leq.qname; EMPTY >
<!ATTLIST %leq.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetrel2ary
"%in.qname; | %notin.qname; | %notsubset.qname; | %notprsubset.qname;" >
<!ELEMENT %in.qname; EMPTY >
<!ATTLIST %in.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %notin.qname; EMPTY >
<!ATTLIST %notin.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %notsubset.qname; EMPTY >
<!ATTLIST %notsubset.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %notprsubset.qname; EMPTY >
<!ATTLIST %notprsubset.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetrelnary
"%subset.qname; | %prsubset.qname;" >
<!ELEMENT %subset.qname; EMPTY >
<!ATTLIST %subset.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ELEMENT %prsubset.qname; EMPTY >
<!ATTLIST %prsubset.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % cseqrel2ary
"%tendsto.qname;" >
<!ELEMENT %tendsto.qname; EMPTY >
<!ATTLIST %tendsto.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
%att-type;
>
<!-- Content elements: quantifiers -->
<!ENTITY % cquantifier
"%lowlimit.qname; | %uplimit.qname; | %bvar.qname;
| %degree.qname; | %logbase.qname;
| %momentabout.qname; | %domainofapplication.qname; " >
<!ATTLIST %lowlimit.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %uplimit.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %bvar.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %degree.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %logbase.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %momentabout.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %domainofapplication.qname;
%MATHML.Common.attrib;
>
<!-- Operator groups -->
<!ENTITY % cop1ary
"%cfuncop1ary; | %carithop1ary; | %clogicop1ary; |
%ccalcop1ary; | %ctrigop; | %clalgop1ary; |
%csetop1ary;" >
<!ENTITY % cop2ary
"%carithop2ary; | %clogicop2ary;| %clalgop2ary; | %csetop2ary;" >
<!ENTITY % copnary
"%cfuncopnary; | %carithopnary; | %clogicopnary; |
%csetopnary; | %cstatopnary; | %clalgopnary;" >
<!ENTITY % copmisc
"%carithoproot; | %carithop1or2ary; | %ccalcop; |
%cseqop; | %cstatopmoment; | %clogicopquant;" >
<!-- Relation groups -->
<!ENTITY % crel2ary
"%cgenrel2ary; | %csetrel2ary; | %cseqrel2ary;" >
<!ENTITY % crelnary
"%cgenrelnary; | %csetrelnary;" >
<!-- Content constructs: all -->
<!ENTITY % Content
"%ctoken; | %cspecial; | %cother; | %csemantics; | %c0ary;
| %cconstructor; | %cquantifier; | %cop1ary; | %cop2ary;
| %copnary; |%copmisc; | %crel2ary; | %crelnary;" >
<!-- Content constructs for substitution in presentation structures -->
<!ENTITY % ContInPres
"%ci.qname; |%csymbol.qname;| %cn.qname; | %c0ary; |
%apply.qname; | %fn.qname; |
%lambda.qname; | %reln.qname; |
%cconstructor; |
%semantics.qname; |%declare.qname;" >
<!-- ............................................................. -->
<!-- Recursive definition for content of expressions. Include
presentation constructs at lowest level so presentation
layout schemata hold presentation or content elements.
Include content constructs at lowest level so content
elements hold PCDATA or presentation elements at leaf
level (for permitted substitutable elements in context)
-->
<![%MathMLstrict;[
<!-- in strict mode don't allow presentation in content
except where allowed by chapter 5:
ci, cn, csymbol, semantics
-->
<!ENTITY % ContentExpression "(%Content;)*" >
<!ENTITY % semanticsContentExpression
"(%Content; | %PresInCont; |
%annotation.qname; | %annotation-xml.qname;)*" >
]]>
<!ENTITY % ContentExpression
"(%Content; | %PresInCont;)*" >
<!ENTITY % semanticsContentExpression "%ContentExpression;">
<!ENTITY % PresExpression
"(%Presentation; | %ContInPres;)*" >
<!ENTITY % MathExpression
"(%PresInCont; | %ContInPres;)*" >
<!-- PCDATA or MathML character elements -->
<!ENTITY % MathMLCharacters
"#PCDATA | %mglyph.qname; " >
<!-- Content elements: tokens -->
<!-- (may contain embedded presentation constructs) -->
<!ELEMENT %ci.qname; (%MathMLCharacters; | %PresInCont;)* >
<!ELEMENT %csymbol.qname; (%MathMLCharacters; | %PresInCont;)* >
<!ELEMENT %cn.qname; (%MathMLCharacters; | %sep.qname; | %PresInCont;)* >
<!-- Content elements: special -->
<!ELEMENT %apply.qname; (%ContentExpression;) >
<!ELEMENT %reln.qname; (%ContentExpression;) >
<!ELEMENT %lambda.qname; (%ContentExpression;) >
<!-- Content elements: other -->
<!ELEMENT %condition.qname; (%ContentExpression;) >
<!ELEMENT %declare.qname; (%ContentExpression;) >
<!-- Content elements: semantics -->
<!ELEMENT %semantics.qname; (%semanticsContentExpression;) >
<!ENTITY % Annotation.content "( #PCDATA )" >
<!ELEMENT %annotation.qname; %Annotation.content; >
<!ENTITY % Annotation-xml.content "ANY" >
<!ELEMENT %annotation-xml.qname; %Annotation-xml.content; >
<!-- Content elements: constructors -->
<!ELEMENT %interval.qname; (%ContentExpression;) >
<!ELEMENT %set.qname; (%ContentExpression;) >
<!ELEMENT %list.qname; (%ContentExpression;) >
&