mathml-s
mathml-s
In addition to the HTML version, this document is also available in these non-normative formats: diff marked HTML version, XHTML+MathML
version, PDF (paper formatted) version, PDF (screen formatted) version, zip archive of XML sources and stylesheets, and zip archive of
(X)HTML documents.
Copyright c 1998-2003 W3C R (MIT, ERCIM, Keio), All Rights Reserved.W3C liability, trademark, document use and software licensing
rules apply.
Abstract
This specification defines the Mathematical Markup Language, or MathML. MathML is an XML application for describing mathematical
notation and capturing both its structure and content. The goal of MathML is to enable mathematics to be served, received, and processed
on the World Wide Web, just as HTML has enabled this functionality for text.
2
This specification of the markup language MathML is intended primarily for a readership consisting of those who will be developing or
implementing renderers or editors using it, or software that will communicate using MathML as a protocol for input or output. It is not a
User’s Guide but rather a reference document.
This document begins with background information on mathematical notation, the problems it poses, and the philosophy underlying the
solutions MathML 2.0 proposes. MathML can be used to encode both mathematical notation and mathematical content. About thirty of the
MathML tags describe abstract notational structures, while another about one hundred and fifty provide a way of unambiguously specifying
the intended meaning of an expression. Additional chapters discuss how the MathML content and presentation elements interact, and
how MathML renderers might be implemented and should interact with browsers. Finally, this document addresses the issue of MathML
characters and their relation to fonts.
While MathML is human-readable, it is anticipated that, in all but the simplest cases, authors will use equation editors, conversion pro-
grams, and other specialized software tools to generate MathML. Several versions of such MathML tools already exist, and a number of
others, both freely available software and commercial products, are under development.
This section describes the status of this document at the time of its publication. Other documents may supersede this document.
A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at
http://www.w3.org/TR/.
This is a revised edition of a document that has been reviewed by W3C Members and other interested parties and has been endorsed by
the Director as a W3C Recommendation.
This document has been produced by the W3C Math Working Group as part of W3C Math Activity. The goals of the W3C Math Working
Group are discussed in the W3C Math WG Charter (revised February 2000 and June 2001 from the original of 11 June 1998). A list of
participants in the W3C Math Working Group is available.
The MathML 2.0 (Second Edition) specification was reviewed extensively during its development, as provided by the W3C Process. During
that period the W3C Math Working Group participants encouraged implementation using the specification and comment on it; a report
on Implementation and Interoperability experiences and issues has been made public. It is intended that this will be updated from time to
time by the continuing work of the W3C that oversees the MathML 2.0 Recommendation. The W3C Math Activity maintains a public Web
page http://www.w3.org/Math/ which contains further background information.
The preparation of a Second Edition of the MathML 2.0 Specification allows the revision of that document to provide a coherent whole
containing corrections to all the known errata and clarifications of some smaller issues that proved problematic. It is not the occasion for
any fundamental changes in the language MathML 2.0. To clarify this a diff-marked HTML version of this Second Edition is made available.
Public discussion of MathML and issues of support through the W3C for mathematics on the Web takes place on the public mailing list
of the Math Working Group (list archives). To subscribe send an email to [email protected] with the word subscribe in the
subject line.
Patent disclosures relevant to this specification may be found on the Math Working Group’s patent disclosure page.
The basic structure of this document is the same as that of the earlier MathML 2.0 Recommendation [MathML2], with the addition of an
index in the new Appendix L. MathML 2.0 itself was a revision of the earlier W3C Recommendation MathML 1.01 [MathML1]. It differed
from it in that all chapters were updated and two new ones and some appendices were added.
Since MathML 1.01, Chapters 1 and 2, which are introductory material, have been revised to reflect the changes elsewhere in the
document, and in the rapidly evolving Web environment. Chapters 3 and 4 have been extended to describe new functionalities added
as well as smaller improvements of material already proposed. Chapter 5 has been newly written to reflect changes in the technology
available. The major tables in Chapter 6 have been regenerated and reorganized to reflect an improved list of characters useful for
mathematics, and the text revised to reflect the new situation in regard to Unicode. Chapter 7 has been completely revised since Web
technology has changed. A new Chapter 8 on the DOM for MathML 2.0 has been added; the latter points to new appendices D and E for
detailed listings.
The appendices have been reorganized into normative and non-normative groups. The material in Appendices D, E, G and L was not
present in MathML 1.01.
Contents
1 Introduction 13
1.1 Mathematics and its Notation 13
1.2 Origins and Goals 14
1.2.1 The History of MathML 14
1.2.2 Limitations of HTML 15
1.2.3 Requirements for Mathematics Markup 16
1.2.4 Design Goals of MathML 17
1.3 The Role of MathML on the Web 18
1.3.1 Layered Design of Mathematical Web Services 18
1.3.2 Relation to Other Web Technology 19
2 MathML Fundamentals 22
2.1 MathML Overview 22
2.1.1 Taxonomy of MathML Elements 23
2.1.2 Presentation Markup 25
2.1.3 Content Markup 25
2.1.4 Mixing Presentation and Content 26
2.2 MathML in a Document 27
2.3 Some MathML Examples 28
2.3.1 Presentation Examples 28
2.3.2 Content Examples 31
2.3.3 Mixed Markup Examples 34
2.4 MathML Syntax and Grammar 37
2.4.1 MathML Syntax and Grammar 37
2.4.2 An XML Syntax Primer 37
2.4.3 Children versus Arguments 38
2.4.4 MathML Attribute Values 38
2.4.5 Attributes Shared by all MathML Elements 45
2.4.6 Collapsing Whitespace in Input 46
3 Presentation Markup 47
3.1 Introduction 47
5
Introduction
Mathematical notations are constantly evolving as people continue to make innovations in ways of approaching and expressing ideas.
Even the commonplace notations of arithmetic have gone through an amazing variety of styles, including many defunct ones advocated
by leading mathematical figures of their day [Cajori1928]. Modern mathematical notation is the product of centuries of refinement, and the
notational conventions for high-quality typesetting are quite complicated. For example, variables and letters which stand for numbers are
usually typeset today in a special mathematical italic font subtly distinct from the usual text italic. Spacing around symbols for operations
such as +, -, × and / is slightly different from that of text, to reflect conventions about operator precedence. Entire books have been devoted
to the conventions of mathematical typesetting, from the alignment of superscripts and subscripts, to rules for choosing parenthesis sizes,
and on to specialized notational practices for subfields of mathematics (for instance, [Chaundy1954], [Swanson1979], [Swanson1999],
[Higham1993], or in the TEX literature [Knuth1986] and [Spivak1986]).
Notational conventions in mathematics, and in printed text in general, guide the eye and make printed expressions much easier to read
and understand. Though we usually take them for granted, we rely on hundreds of conventions such as paragraphs, capital letters, font
families and cases, and even the device of decimal-like numbering of sections such as we are using in this document (an invention due
to G. Peano, who is probably better known for his axioms for the natural numbers). Such notational conventions are perhaps even more
important for electronic media, where one must contend with the difficulties of on-screen reading.
14
However, there is more to putting mathematics on the Web than merely finding ways of displaying traditional mathematical notation in a
Web browser. The Web represents a fundamental change in the underlying metaphor for knowledge storage, a change in which intercon-
nectivity plays a central role. It is becoming increasingly important to find ways of communicating mathematics which facilitate automatic
processing, searching and indexing, and reuse in other mathematical applications and contexts. With this advance in communication
technology, there is an opportunity to expand our ability to represent, encode, and ultimately to communicate our mathematical insights
and understanding with each other. We believe that MathML is an important step in developing mathematics on the Web.
The problem of encoding mathematics for computer processing or electronic communication is much older than the Web. The common
practice among scientists before the Web was to write papers in some encoded form based on the ASCII character set, and e-mail them
to each other. Several markup methods for mathematics, in particular TEX [Knuth1986], were already in wide use in 1992 just before the
Web rose to prominence, [Poppelier1992].
Since its inception, the Web has demonstrated itself to be a very effective method of making information available to widely separated
groups of individuals. However, even though the World Wide Web was initially conceived and implemented by scientists for scientists, the
possibilities for including mathematical expressions in HTML has been very limited. At present, most mathematics on the Web consists
of text with images of scientific notation (in GIF or JPEG format), which are difficult to read and to author, or of entire documents in PDF
form.
The World Wide Web Consortium (W3C) recognized that lack of support for scientific communication was a serious problem. Dave Raggett
included a proposal for HTML Math in the HTML 3.0 working draft in 1994. A panel discussion on mathematical markup was held at the
WWW Conference in Darmstadt in April 1995. In November 1995, representatives from Wolfram Research presented a proposal for doing
mathematics in HTML to the W3C team. In May 1996, the Digital Library Initiative meeting in Champaign-Urbana played an important role
in bringing together many interested parties. Following the meeting, an HTML Math Editorial Review Board was formed. In the intervening
years, this group has grown, and was formally reconstituted as the first W3C Math Working Group in March 1997. The second W3C Math
Working Group was chartered in July 1998 with a term which was later extended to run to the end of the year 2000.
15
The MathML proposal reflects the interests and expertise of a very diverse group. Many contributions to the development of MathML
deserve special mention, some of which we touch on here. One such contribution concerns the question of accessibility, especially for
the visually handicapped. T. V. Raman is particularly notable in this regard. Neil Soiffer and Bruce Smith from Wolfram Research shared
their experience with the problems of representing mathematics in connection with the design of Mathematica 3.0; this expertise was
an important influence in the design of the presentation elements. Paul Topping from Design Science also contributed his expertise in
mathematical formatting and editing. MathML has benefited from the participation of a number of working group members involved in
other mathematical encoding efforts in the SGML and computer-algebra communities, including Stephen Buswell from Stilo Technologies,
Nico Poppelier at first with Elsevier Science, Stéphane Dalmas from INRIA (Sophia Antipolis), Stan Devitt at first with Waterloo Maple,
Angel Diaz and Robert S. Sutor from IBM, and Stephen M. Watt from the University of Western Ontario. In particular, MathML has been
influenced by the OpenMath project, the work of the ISO 12083 working group, and Stilo Technologies’ work on a ‘semantic’ mathematics
DTD fragment. The American Mathematical Society has played a key role in the development of MathML. Among other things, it has
provided two working group chairs: Ron Whitney led the group from May 1996 to March 1997, and Patrick Ion, who has co-chaired the
group with Robert Miner from The Geometry Center from March 1997 to June 1998, and since July 1998 with Angel Diaz of IBM.
The demand for effective means of electronic scientific communication remains high. Ever increasingly, researchers, scientists, engineers,
educators, students and technicians find themselves working at dispersed locations and relying on electronic communication. At the same
time, the image-based methods that are currently the predominant means of transmitting scientific notation over the Web are primitive
and inadequate. Document quality is poor, authoring is difficult, and mathematical information contained in images is not available for
searching, indexing, or reuse in other applications.
The most obvious problems with HTML for mathematical communication are of two types.
x
Display Problems. Consider the equation 22 = 10. This equation is sized to match the surrounding line in 14pt type on the system where
it was authored. Of course, on other systems, or for other font sizes, the equation is too small or too large. A second point to observe is
that the equation image was generated against a white background. Thus, if a reader or browser resets
√ the page background to another
−b± b2 −4ac
color, the anti-aliasing in the image results in white ‘halos’. Next, consider the equation x = 2a , which is an example with the
equation’s horizontal alignment axis above the tops of the lower-case letters in the surrounding text.
Image-based equations are generally harder to see, read and comprehend than the surrounding text in the browser window. Moreover,
these problems become worse when the document is printed. The resolution of the equations as images will be around 70 dots per inch,
while the surrounding text will typically be 300, 600 or more dots per inch. The disparity in quality is judged to be unacceptable by most
people.
16
Encoding Problems. Consider trying to search this document for part of an equation, for example, the ‘=10’ from the first equation above.
In a similar vein, consider trying to cut and paste an equation into another application; even more demanding is to cut and paste a sub-
expression. Using image-based methods, neither of these common needs can be adequately addressed. Although the use of the alt
attribute in the document source can help, it is clear that highly interactive Web documents must provide a more sophisticated interface
between browsers and mathematical notation.
Another problem with encoding mathematics as images is that it requires more bandwidth. Markup describing an equation is typically
smaller and more compressible than an image of the equation. In addition, by using markup-based encoding, more of the rendering
process is moved to the client machine.
Another general design requirement is the ability to render mathematical material in other media such as speech or braille, which is
extremely important for the visually impaired.
Commercial publishers are also involved with mathematics on the Web at all levels from electronic versions of print books to interactive
textbooks and academic journals. Publishers require a method of putting mathematics on the Web that is capable of high-quality output,
robust enough for large-scale commercial use, and preferably compatible with their previous, often SGML-based, production systems.
In order to meet the diverse needs of the scientific community, MathML has been designed with the following ultimate goals in mind.
MathML should:
• Encode mathematical material suitable for teaching and scientific communication at all levels.
• Encode both mathematical notation and mathematical meaning.
• Facilitate conversion to and from other mathematical formats, both presentational and semantic. Output formats should include:
– graphical displays
– speech synthesizers
– input for computer algebra systems
– other mathematics typesetting languages, such as TEX
– plain text displays, e.g. VT100 emulators
– print media, including braille
It is recognized that conversion to and from other notational systems or media may entail loss of information in the process.
• Allow the passing of information intended for specific renderers and applications.
• Support efficient browsing of lengthy expressions.
• Provide for extensibility.
• Be well suited to template and other mathematics editing techniques.
• Be human legible, and simple for software to generate and process.
No matter how successfully MathML may achieve its goals as a markup language, it is clear that MathML will only be useful if it is
implemented well. To this end, the W3C Math Working Group has identified a short list of additional implementation goals. These goals
attempt to describe concisely the minimal functionality MathML rendering and processing software should try to provide.
• MathML expressions in HTML (and XHTML) pages should render properly in popular Web browsers, in accordance with reader
and author viewing preferences, and at the highest quality possible given the capabilities of the platform.
• HTML (and XHTML) documents containing MathML expressions should print properly and at high-quality printer resolutions.
• MathML expressions in Web pages should be able to react to user gestures, such those as with a mouse, and to coordinate
communication with other applications through the browser.
• Mathematical expression editors and converters should be developed to facilitate the creation of Web pages containing MathML
expressions.
18
These goals have begun to be addressed for the near term by using embedded elements such as Java applets, plug-ins and ActiveX
controls to render MathML. However, the extent to which these goals are ultimately met depends on the cooperation and support of
browser vendors, and other software developers. The W3C Math Working Group has continued to work with the working groups for the
Document Object Model (DOM) and the Extensible Style Language (XSL) to ensure that the needs of the scientific community will be
met in the future, and feels that MathML 2.0 shows considerable progress in this area over the situation that obtained at the time of the
MathML 1.0 Recommendation (April 1998) [MathML1].
The design goals of MathML require a system for encoding mathematical material for the Web which is flexible and extensible, suitable for
interaction with external software, and capable of producing high-quality rendering in several media. Any markup language that encodes
enough information to do all these tasks well will of necessity involve some complexity.
At the same time, it is important for many groups, such as students, to have simple ways to include mathematics in Web pages by hand.
Similarly, other groups, such as the TEX community, would be best served by a system which allowed the direct entry of markup languages
like TEX into Web pages. In general, specific user groups are better served by specialized kinds of input and output tailored to their needs.
Therefore, the ideal system for communicating mathematics on the Web should provide both specialized services for input and output,
and general services for interchange of information and rendering to multiple media.
In practical terms, the observation that mathematics on the Web should provide for both specialized and general needs naturally leads to
the idea of a layered architecture. One layer consists of powerful, general software tools exchanging, processing and rendering suitably
encoded mathematical data. A second layer consists of specialized software tools, aimed at specific user groups, which are capable of
easily generating encoded mathematical data that can then be shared with a particular audience.
MathML is designed to provide the encoding of mathematical information for the bottom, more general layer in a two-layer architecture. It
is intended to encode complex notational and semantic structure in an explicit, regular, and easy-to-process way for renderers, searching
and indexing software, and other mathematical applications.
As a consequence, raw MathML markup is not primarily intended for direct use by authors. While MathML is human-readable, which
helps a lot in debugging it, in all but the simplest cases it is too verbose and error-prone for hand generation. Instead, it is anticipated
that authors will use equation editors, conversion programs, and other specialized software tools to generate MathML. Alternatively, some
renderers and systems supporting mathematics may convert other kinds of input directly included in Web pages into MathML on the fly,
in response to a cut-and-paste operation, for example.
In some ways, MathML is analogous to other low-level, communication formats such as Adobe’s PostScript language. You can create
PostScript files in a variety of ways, depending on your needs; experts write and modify them by hand, authors create them with word
processors, graphic artists with illustration programs, and so on. Once you have a PostScript file, however, you can share it with a very
large audience, since devices which render PostScript, such as printers and screen previewers, are widely available.
19
Part of the reason for designing MathML as a markup language for a low-level, general, communication layer is to stimulate mathematical
Web software development in the layer above. MathML provides a way of coordinating the development of modular authoring tools and
rendering software. By making it easier to develop a functional piece of a larger system, MathML can stimulate a ‘critical mass’ of software
development, greatly to the benefit of potential users of mathematics on the Web.
One can envision a similar situation for mathematical data. Authors are free to create MathML documents using the tools best suited to
their needs. For example, a student might prefer to use a menu-driven equation editor that can write out MathML to an XHTML file. A
researcher might use a computer algebra package that automatically encodes the mathematical content of an expression, so that it can
be cut from a Web page and evaluated by a colleague. An academic journal publisher might use a program that converts TEX markup
to HTML and MathML. Regardless of the method used to create a Web page containing MathML, once it exists, all the advantages of a
powerful and general communication layer become available. A variety of MathML software could all be used with the same document
to render it in speech or print, to send it to a computer algebra system, or to manage it as part of a large Web document collection.
To render high-quality printed mathematics the MathML encoding will often be converted back to standard typesetting and composition
languages, including TEX which is widely appreciated for the job it does in this regard. Finally, one may expect that eventually MathML will
be integrated into other arenas where mathematical formulas occur, such as spreadsheets, statistical packages and engineering tools.
The W3C Math Working Group has been working with vendors to ensure that a variety of MathML software will soon be available,
including both rendering and authoring tools. A current list of MathML software is maintained on the public Math page at the World Wide
Web Consortium.
Furthermore, other applications of XML for all kinds of document publishing and processing promise to become increasingly important.
Consequently, both on theoretical and pragmatic grounds, it has made a great deal of sense to specify MathML as an XML application.
By now, as opposed to the situation when the MathML 1.0 Recommendation [MathML1] was adopted, the details of a general model for
rendering and processing XML extensions to HTML are largely clear. Formatting Properties, developed by the Cascading Style Sheets
and Formatting Properties Working Group for CSS and made available through the Document Object Model (DOM), will be applied to
MathML elements to obtain stylistic control over the presentation of MathML. Further development of these Formatting Properties falls
within the charters of both the CSS&FP and the XSL working groups. For an introduction to this topic see the discussion in Chapter 7. For
detailed commentary on how to render MathML with current systems consult the W3C Math WG Home Page.
Until style sheet mechanisms are capable of delivering native browser rendering of MathML, however, it is necessary to extend browser
capabilities by using embedded elements to render MathML. It is already possible to instruct a browser to use a particular embedded
renderer to process embedded XML markup such as MathML, and to coordinate the resulting output with the surrounding Web page,
however the results are not yet entirely as one wishes. See Chapter 7.
For specialized processing, such as connecting to a computer algebra system, the capability of calling out to other programs is likely to
remain highly desirable. However, for such an interaction to be really satisfactory, it is necessary to define a document object model rich
enough to facilitate complicated interactions between browsers and embedded elements. For this reason, the W3C Math Working Group
has coordinated its efforts closely with the Document Object Model (DOM) Working Group. The results are described in Chapter 8.
For processing by embedded elements, and for inter-communication between scientific software generally, a style sheet-based layout
model is in some ways less than ideal. It can impose an additional implementation burden in a setting where it may offer few advantages,
and it imposes implementation requirements for coordination between browsers and embedded renderers that will likely be unavailable in
the immediate future.
For these reasons, the MathML specification defines an attribute-based layout model, which has proven very effective for high-quality
rendering of complicated mathematical expressions in several independent implementations. MathML presentation attributes utilize W3C
Formatting Properties where possible. Also, MathML elements accept class, style and id attributes to facilitate their use with CSS style
sheets. However, at present, there are few settings where CSS machinery is currently available to MathML renderers.
The use of CSS style sheet mechanisms has been mentioned above. The mechanisms of XSL have also recently become available for
the transformation of XML documents to effect their rendering. Indeed the alternative forms of this present recommendation, including the
definitive public HTML version, have been prepared from an underlying XML source using XSL transformation language tools. As further
developments in this direction become available to MathML, it is anticipated their use will become the dominant method of stylistic control
of MathML presentation meant for use in rendering environments which support those mechanisms.
Chapter 2
MathML Fundamentals
All MathML elements fall into one of three categories: presentation elements, content elements and interface elements. Each of these
categories is described in detail in Chapter 3, Chapter 4 and Chapter 7, respectively.
Presentation elements describe mathematical notation’s visually oriented two-dimensional structure. Typical examples are the mrow ele-
ment, which is usually employed to indicate a horizontal row of pieces of expressions, and the msup element, which is used to mark up a
base expression and a superscript to it. As a general rule, each presentation element corresponds to a single kind of notational ‘schema’
such as a row, a superscript, a subscript, an underscript and so on. Any formula is made by putting together parts which ultimately can be
analyzed down to the simplest items such as digits, letters, or other symbol characters.
Although the previous paragraph was concerned with the display aspect of mathematical notation, and hence with presentation markup,
the same observation about decomposition applies equally well to abstract mathematical objects, and hence to content markup. For
example, in the context of content markup a superscript would typically be denoted by an exponentiation operation that would require two
operands: a ‘base’ and an ‘exponent’. This is no coincidence, since as a general rule, mathematical notation’s layout closely follows the
logical structure of the underlying mathematical objects.
The recursive nature of mathematical objects and notation is strongly reflected in MathML markup. In use, most presentation or content
elements contain some number of other MathML elements corresponding to the constituent pieces out of which the original object is
recursively built. The original schema is commonly called the parent schema, and the constituent pieces are called child schemata. More
generally, MathML expressions can be regarded as trees, where each node corresponds to a MathML element, the branches under a
‘parent’ node correspond to its ‘children’, and the leaves in the tree correspond to atomic notation or content units such as numbers,
characters, etc.
Most leaf nodes in a MathML expression tree are either canonically empty elements with no bodies, or token elements. Canonically
empty elements represent symbols directly in MathML, for example, the content element <plus/> does this. MathML token elements are
the only MathML elements permitted to contain MathML character data. MathML character data consists of Unicode characters with the
infrequent addition of special character constructions done with the mglyph element. A third kind of leaf node permitted in MathML is the
annotation element, which is used to hold data which is not in MathML format.
The most important presentation token elements are mi, mn and mo for representing identifiers, numbers and operators respectively.
Typically a renderer will employ slightly different typesetting styles for each of these kinds of character data: numbers are usually in
upright font, identifiers in italics, and operators have extra space around them. In content markup, there are only three tokens, ci, cn and
csymbol, for identifiers, numbers and new symbols introduced in the document itself, respectively. In content markup, separate elements
are provided for commonly used functions and operators. The apply element is provided for user-defined extensions to the base set.
In terms of markup, most MathML elements are denoted by a start tag and an end tag, which enclose the markup for their contents. In
the case of tokens, the content is character data, and in most other cases, the content is the markup for child elements. Elements in a
third category, called canonically empty elements, do not require any contents, and are denoted by a single tag of the form <name/>. An
example of this kind of markup is <plus/> in content markup.
Let us take the very simple example of (a + b)2 , and we can now see how the principles discussed above play out in practice. One form
of presentation markup for this example is:
24
<mrow>
<msup>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mn>2</mn>
</msup>
</mrow>
This example demonstrates a number of presentation elements. The first element, one that is used a great deal is mrow. This element
is used to denote a row of horizontally aligned material. The material contained between the <mrow> and </mrow> tags is considered to
be an argument to the mrow element. Thus the whole expression here is contained in an mrow element. As previously noted, almost all
mathematical expressions decompose into subexpressions. These subexpressions can, in turn, also be contained in an mrow element.
For example, a + b is also contained in an mrow.
The mfenced element is used to provide fences (braces, brackets, and parentheses) around formula material. It defaults to using paren-
theses.
Note the use of the mi element for displaying the variables a and b and the mo element for marking the + operator.
The msup element is for expressions involving superscripts and takes two arguments, in order, the base expression (here, (a+b)) and the
exponent expression (here, 2).
Here, the apply content element means apply an operation to an expression. In this example, the power element (for exponentiation),
which requires no body, and the similar plus element (for addition) are both applied. Observe that both operators take two arguments, the
order being particularly significant in the case of the power operator. But the order of the children is crucial in the use of the apply since
the first child, the operator, takes as argument list the remaining ones.
Note the use of the ci element to mark up the variables a and b, and the cn element to mark up the number 2.
MathML presentation markup consists of about 30 elements which accept over 50 attributes. Most of the elements correspond to layout
schemata, which contain other presentation elements. Each layout schema corresponds to a two-dimensional notational device, such as
a superscript or subscript, fraction or table. In addition, there are the presentation token elements mi, mo and mn introduced above, as
well as several other less commonly used token elements. The remaining few presentation elements are empty elements, and are used
mostly in connection with alignment.
The layout schemata fall into several classes. One group of elements is concerned with scripts, and contains elements such as msub,
munder, and mmultiscripts. Another group focuses on more general layout and includes mrow, mstyle, and mfrac. A third group
deals with tables. The maction element is in a category by itself, and allows coding of various kinds of actions on notation, such as occur
in an expression which toggles between two pieces of notation.
An important feature of many layout schemata is that the order of child schemata is significant. For example, the first child of an mfrac
element is the numerator and the second child is the denominator. Since the order of child schemata is not enforced at the XML level by the
MathML DTD, the information added by ordering is only available to a MathML processor, as opposed to a generic XML processor. When
we want to emphasize that a MathML element such as mfrac requires children in a specific order, we will refer to them as arguments,
and think of the mfrac element as a notational ‘constructor’.
Content markup consists of about 120 elements accepting roughly a dozen attributes. The majority of these elements are empty elements
corresponding to a wide variety of operators, relations and named functions. Examples of this sort include partialdiff, leq and tan.
Others such as matrix and set are used to encode various mathematical data types, and a third, important category of content elements
such as apply are used to apply operations to expressions and also to make new mathematical objects from others.
The apply element is perhaps the single most important content element. It is used to apply a function or operation to a collection of
arguments. The positions of the child schemata are again significant, with the first child denoting the function to be applied, and the
remaining children denoting the arguments of the function in order. Note that the apply construct always uses prefix notation, like the
programming language LISP. In particular, even binary operations such as subtraction are marked up by applying a prefix subtraction
operator to two arguments. For example, a - b would be marked up as
26
<mrow>
<apply>
<minus/>
<ci>a</ci>
<ci>b</ci>
</apply>
</mrow>
A number of functions and operations require one or more quantifiers to be well-defined. For example, in addition to an integrand, a
definite integral must specify the limits of integration and the bound variable. For this reason, there are several qualifier schemata such as
bvar and lowlimit. They are used with operators such as diff and int.
The declare construct is especially important for content markup that might be evaluated by a computer algebra system. The declare
element provides a basic assignment mechanism, where a variable can be declared to be of a certain type, with a certain value.
In both the presentation and content markup examples, mathematical expressions are recursively decomposed into nested, simpler
MathML elements specifying each stage of the decomposition. The examples in the following sections illustrate this with more complex
expressions.
Different kinds of markup will be found most appropriate for different kinds of tasks. Documents written before the World Wide Web
became important were most often intended only for visual communication of information, so that legacy data is probably best translated
into pure presentation markup, since semantic information about what the author meant can only be guessed at heuristically. By contrast,
some mathematical applications and pedagogically-oriented authoring tools will likely choose to be entirely content-based. The majority
of applications fall somewhere in between these extremes. For these applications, the most appropriate markup is a mixture of both
presentation and content markup.
The rules for mixing presentation and content markup derive from the general principle that mixed content should only be allowed in places
where it makes sense. For content markup embedded in presentation markup this basically means that any content fragments should
be semantically meaningful, and should not require additional arguments or quantifiers to be fully specified. For presentation markup
embedded in content markup, this usually means that presentation markup must be contained in a content token element, so that it will
be treated as an indivisible notational unit used as a variable or function name.
Another option is to use a semantics element. The semantics element is used to bind MathML expressions to various kinds of anno-
tations. One common use for the semantics element is to bind a piece of content markup to some presentation markup as a semantic
annotation. In this way, an author can specify a non-standard notation to be used when displaying a particular content expression. Anoth-
er use of the semantics element is to bind some other kind of semantic specification, such as an OpenMath expression, to a MathML
expression. In this way, the semantics element can be used to extend the scope of MathML content markup.
27
<head>
<title>MathML’s Hello Square</title>
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<msup>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mn>2</mn>
</msup>
</mrow>
</math>
</body>
</html>
Here we have the normal structure of an XHTML document. It begins with the start tag <html> embellished with an XML namespace
declaration and language assertions. A head element contains a title as is customary. Within the body is a simple paragraph followed by
a math element which has the MathML namespace declared. Inside the math element is MathML markup.
For the next level of technical detail concerning such matters as !DOCTYPE statements and the like, see the discussion in Chapter 7.
28
Notation: x2 + 4x + 4 = 0.
Markup:
<mrow>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>x</mi>
</mrow>
<mo>+</mo>
<mn>4</mn>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
Note the use of nested mrow elements to denote terms, for example, the left-hand side of the equation functioning as an operand of
‘=’. Marking terms greatly facilitates spacing for visual rendering, voice rendering, and line breaking. The ⁢ MathML
character entity is used here to indicate to a renderer that there are special spacing rules between the 4 and the x, and that the 4 and the
x should not be broken onto separate lines.
√
−b± b2 −4ac
Notation: x = 2a .
Markup:
29
<mrow>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
<mi>b</mi>
</mrow>
<mo>±</mo>
<msqrt>
<mrow>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>a</mi>
<mo>⁢</mo>
<mi>c</mi>
</mrow>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢</mo>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
The mfrac and msqrt elements are used for generating fractions and square roots, respectively.
30
Notice that the ‘plus or minus’ sign is given by the entity name ±, this is equivalent to using the character reference �B1;.
MathML provides a very comprehensive list of character names for mathematical symbols. In addition to the mathematical symbols needed
for screen and print rendering, MathML provides symbols to facilitate audio rendering. For audio rendering, it is important to be able to
automatically determine whether
<mrow>
<mi>z</mi>
<mfenced>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
</mfenced>
</mrow>
should be read as ’z times the quantity x plus y’ or ’z of x plus y’. The characters ⁢ (U+2062) and ⁡
(U+2061) provide a way for authors to directly encode the distinction for audio renderers. For instance, in the first case ⁢
(U+2062) should be inserted after the line containing the z. MathML also introduces entities like ⅆ (U+2146) representing a ‘differential
d’, which renders with slightly different spacing in print and can be rendered as ‘d’ or ‘with respect to’ in speech. Unless content tags, or
some other mechanism, are used to eliminate the ambiguity, authors should always use these characters here referred to as entities, in
order to make their documents more accessible.
x y
Notation: A = .
z w
Markup:
31
<mrow>
<mi>A</mi>
<mo>=</mo>
<mfenced open="[" close="]">
<mtable>
<mtr>
<mtd><mi>x</mi></mtd>
<mtd><mi>y</mi></mtd>
</mtr>
<mtr>
<mtd><mi>z</mi></mtd>
<mtd><mi>w</mi></mtd>
</mtr>
</mtable>
</mfenced>
</mrow>
The mtable element denotes that a MathML table is being created. The mtr specifies a row of the table and the mtd element holds the
data for an element of a row. Most elements have a number of attributes that control the details of their screen and print rendering. For
example, there are several attributes for the mfenced element that controls what delimiters should be used at the beginning and the end of
the grouped expression above. The attributes for operator elements given using <mo> are set to default values determined by a dictionary.
For the suggested MathML operator dictionary, see Appendix F.
Notation: x2 + 4x + 4 = 0.
Markup:
32
<mrow>
<apply>
<eq/>
<apply>
<plus/>
<apply>
<power/>
<ci>x</ci>
<cn>2</cn>
</apply>
<apply>
<times/>
<cn>4</cn>
<ci>x</ci>
</apply>
<cn>4</cn>
</apply>
<cn>0</cn>
</apply>
</mrow>
Note that the apply element is used for relations, operators and functions.
√
±(−b, b2 −4ac)
Notation: x = 2a .
Markup:
33
<apply>
<eq/>
<ci>x</ci>
<apply>
<divide/>
<apply>
<csymbol>±</csymbol>
<apply>
<minus/>
<ci>b</ci>
</apply>
<apply>
<root/>
<degree><cn>2</cn></degree>
<apply>
<minus/>
<apply>
<power/>
<ci>b</ci>
<cn>2</cn>
</apply>
<apply>
<times/>
<cn>4</cn>
<ci>a</ci>
<ci>c</ci>
</apply>
</apply>
</apply>
</apply>
<apply>
<times/>
<cn>2</cn>
<ci>a</ci>
</apply>
</apply>
</apply>
34
MathML content markup does not directly contain an element for the ‘plus or minus’ operation. Therefore, we use the csymbol element to
specify this operator. Note that the default presentation is given here in prefix form, although a renderer may recognize this operator and
render it as infix. Alternatively the Mixed Markup style shown below may be used to specify a presentation form for this expression as well
as the Content Markup.
x y
Notation: A = .
z w
Markup:
<mrow>
<apply>
<eq/>
<ci>A</ci>
<matrix>
<matrixrow>
<ci>x</ci>
<ci>y</ci>
</matrixrow>
<matrixrow>
<ci>z</ci>
<ci>w</ci>
</matrixrow>
</matrix>
</apply>
</mrow>
Here we have used the matrix element, and the matrixrow element to wrap the entries in a row of the matrix. Note that, by default,
the rendering of the content element matrix includes enclosing parentheses, so we need not directly encode them. This is quite different
from the presentation element mtable which may or may not refer to a matrix, and hence requires explicit encoding of parentheses if they
are desired.
<mrow>
<semantics>
<mrow>
<msubsup>
<mo>∫</mo>
<mn>1</mn>
<mi>t</mi>
</msubsup>
<mfrac>
<mrow>
<mo>ⅆ</mo>
<mi>x</mi>
</mrow>
<mi>x</mi>
</mfrac>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply>
<int/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>1</cn></lowlimit>
<uplimit><ci>t</ci></uplimit>
<apply>
<divide/>
<cn>1</cn>
<ci>x</ci>
</apply>
</apply>
</annotation-xml>
</semantics>
</mrow>
In this example, we use the semantics element to provide a MathML content expression to serve as a ‘semantic annotation’ for a pre-
sentation expression. In the display markup, we have used the msubsup element to attach a subscript and a superscript to an expression,
in this case the integral sign. We also used entities ∫ and ⅆ to specify the integral and differential symbols.
36
The semantics element has as its first child the expression being annotated, and the subsequent children are the annotations. There is
no restriction on the kind of annotation that can be attached using the semantics element. For example, one might give a TEX encoding,
or computer algebra input in an annotation. The type of annotation is specified by the encoding attribute and the annotation and
annotation-xml elements.
Another common use of the semantics element arises when one wants to use a content coding, and provide a suggestion for its
presentation. In such a case, applied to the formula above we would have the markup:
<semantics>
<apply>
<int/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>1</cn></lowlimit>
<uplimit><ci>t</ci></uplimit>
<apply>
<divide/>
<cn>1</cn>
<ci>x</ci>
</apply>
</apply>
<annotation-xml encoding="MathML-Presentation">
<mrow>
<msubsup>
<mo>∫</mo>
<mn>1</mn>
<mi>t</mi>
</msubsup>
<mfrac>
<mrow>
<mo>ⅆ</mo>
<mi>x</mi>
</mrow>
<mi>x</mi>
</mfrac>
</mrow>
</annotation-xml>
</semantics>
37
This kind of annotation is useful when something other than the default rendering of the content encoding is desired. For example, by
default, some renderers might layout the integrand something like ‘(1/x) dx’. Specifying that the integrand should by preference render as
‘dx/x’ instead can be accomplished with the use of a MathML Presentation annotation as shown. Be aware, however, that renderers are
not required to take into account information contained in annotations, and what use is made of them, if any, will depend on the renderer.
MathML is an application of [XML], or Extensible Markup Language, and as such its syntax is governed by the rules of XML syntax, and its
grammar is in part specified by a DTD, or Document Type Definition. In other words, the details of using tags, attributes, entity references
and so on are defined in the XML language specification, and the details about MathML element and attribute names, which elements
can be nested inside each other, and so on are specified in the MathML DTD. This is in Appendix A.
The W3C in seeking to increase the flexibility of the use of XML for the Web, and to encourage modularization of applications built with
XML, has found that the basic form of a DTD is not sufficiently flexible. Therefore, a W3C Working Group was created to develop a
specification for XML Schemas [XMLSchemas], which are specification documents that will eventually supersede DTDs. MathML 2.0 is
consciously designed so that mathematics may take advantage of the latest in the evolving Web technology. Thus, there is to be a schema
for MathML. For further information on a MathML schema see Appendix A and the MathML Home Page.
However, MathML also specifies some syntax and grammar rules in addition to the general rules it inherits as an XML application.
These rules allow MathML to encode a great deal more information than would ordinarily be possible with pure XML, without introducing
many more elements, and using a substantially more complex DTD or schema. A grammar for content markup expressions is given in
Appendix B. Of course, one drawback to using MathML specific rules is that they are invisible to generic XML processors and validators.
There are basically two kinds of additional MathML grammar and syntax rules. One kind involves placing additional criteria on attribute
values. For example, it is not possible in pure XML to require that an attribute value be a positive integer. The second kind of rule specifies
more detailed restrictions on the child elements (for example on ordering) than are given in the DTD or even a schema. For example, it is
not possible in XML to specify that the first child be interpreted one way, and the second in another.
The following sections discuss features both of XML syntax and grammar in general, and of MathML in particular. Throughout the re-
mainder of the MathML specification, we will usually take care to distinguish between usage required by XML syntax and the MathML
DTD (and schema) and usage required by MathML specific rules. However, we will frequently allude to ‘MathML errors’ without identifying
which part of the specification is being violated.
Since MathML is an application of XML, the MathML specification uses the terminology of XML to describe it. Briefly, XML data is
composed of Unicode characters (which include ordinary ASCII characters), ‘entity references’ (informally called ‘entities’) such as <
which usually represent ‘extended characters’, and ‘elements’ such as <mi fontstyle="normal"> x </mi>.
38
An element quite often encloses other XML data called its ‘content’, or ‘body’, between a ‘start tag’ (sometimes called a ‘begin tag’) and an
‘end tag’, much as in HTML. There are also ‘empty elements’ such as <plus/>, whose start tag ends with /> to indicate that the element
has no content or end tag. The start tag can contain named parameters called ‘attributes’, such as fontstyle="normal" in the example
above. For further details on XML, consult the XML specification [XML].
As XML is case-sensitive, MathML element and attribute names are case-sensitive. For reasons of legibility, the MathML specification
defines them almost all in lowercase.
In formal discussions of XML markup, a distinction is maintained between an element, such as an mrow element, and the tags <mrow>
and </mrow> marking it. What is between the <mrow> start tag and the </mrow> end tag is the content, or body, of the mrow element.
An ‘empty element’ such as none is defined to have no body, and so has a single tag of the form <none/>. Usually, the distinction
between elements and tags will not be so finely drawn in this specification. For instance, we will sometimes refer to the <mrow> and
<none/> elements, really meaning the elements whose tags these are, in order that references to elements are visually distinguishable
from references to attributes. However, the words ‘element’ and ‘tag’ themselves will be used strictly in accordance with XML terminology.
Many MathML elements require a specific number of child elements or attach additional meanings to children in certain positions. As
noted above, these kinds of requirements are MathML specific, and cannot be given entirely using XML syntax and grammar. When the
children of a given MathML element are subject to these kinds of additional conditions, we will often refer to them as arguments instead of
merely as children, in order to emphasize their MathML specific usage. Note that, especially in Chapter 3, the term ‘argument’ is usually
used in this technical sense, unless otherwise noted, and therefore refers to a child element.
In the detailed discussions of element syntax given with each element throughout the MathML specification, the number of required
arguments and their order is implicitly indicated by giving names for the arguments at various positions. This information is also given for
presentation elements in the table of argument requirements in Section 3.1.3, and for content elements in Appendix B.
A few elements have other requirements on the number or type of arguments. These additional requirements are described together with
the individual elements.
According to the XML language specification, attributes given to elements must have one of the forms
attribute-name = "value"
or
attribute-name = ’value’
where whitespace around the ’=’ is optional.
39
Attribute names are generally shown in a monospaced font within descriptive text in this specification, just as the monospaced font is used
for examples.
An attribute’s value, which in general in MathML can be a string of arbitrary characters, must be surrounded by a pair of either double
quotes (") or single quotes (’). The kind of quotes not used to surround the value may be included within it.
MathML uses a more complicated syntax for attribute values than the generic XML syntax required by the MathML DTD. These additional
rules are intended for use by MathML applications, and it is a MathML error to violate them, though they cannot be enforced by XML
processing. The MathML syntax of each attribute value is specified in the table of attributes provided with the description of each element,
using a notation described below. When MathML applications process attribute values, whitespace is ignored except to separate letter
and digit sequences into individual words or numbers. Attribute values may contain any MathML characters listed in Section 6.2 permitted
by the syntax restrictions for an attribute. Character data can be included directly in attribute values, or by using entity references as
described in Section 6.2.1.
In particular, the characters ", ’, & and < can be included in MathML attribute values (when permitted by the attribute value syntax) using
the entity references ", ', & and <, respectively.
The MathML DTD provided in Appendix A declares most attribute value types as CDATA strings. This permits increased interoperability
with existing SGML and XML software and allows extension to the lists of predefined values. Similar sorts of considerations apply with
XML schemas.
To describe the MathML-specific syntax of permissible attribute values, the following conventions and notations are used for most attributes
in the present document.
40
Adjacent keywords and numbers must be separated by whitespace in the actual attribute values, except for unit identifiers (denoted by
h-unit or v-unit syntax symbols) following numbers. Whitespace is not otherwise required, but is permitted between any of the tokens
listed above, except (for compatibility with CSS) immediately before unit identifiers, between the ’-’ signs and digits of negative numbers,
or between # or "rrggbb" and "rgb".
41
Numerical attribute values for dimensions that should depend upon the current font can be given in font-related units, or in named absolute
units (described in a separate subsection below). Horizontal dimensions are conventionally given in em’s, and vertical dimensions in ex’s,
by immediately following a number by one of the unit identifiers "em" or "ex". For example, the horizontal spacing around an operator
such as ‘+’ is conventionally given in "em"s, though other units can be used. Using font-related units is usually preferable to using absolute
units, since it allows renderings to grow or shrink in proportion to the current font size.
For most numerical attributes, only those in a subset of the expressible values are sensible; values outside this subset are not errors,
unless otherwise specified, but rather are rounded up or down (at the discretion of the renderer) to the closest value within the allowed
subset. The set of allowed values may depend on the renderer, and is not specified by MathML.
If a numerical value within an attribute value syntax description is declared to allow a minus sign (’-’), e.g. number or integer, it is not a
syntax error when one is provided in cases where a negative value is not sensible. Instead, the value should be handled by the processing
application as described in the preceding paragraph. An explicit plus sign (’+’) is not allowed as part of a numerical value except when it
is specifically listed in the syntax (as a quoted ’+’ or "+"), and its presence can change the meaning of the attribute value (as documented
with each attribute which permits it).
The symbols h-unit, v-unit, css-fontfamily, and css-color-name are explained in the following subsections.
Some attributes accept horizontal or vertical lengths as numbers followed by a ‘unit identifier’ (often just called a ‘unit’). The syntax symbols
h-unit and v-unit refer to a unit for horizontal or vertical length, respectively. The possible units and the lengths they refer to are shown
in the table below; they are the same for horizontal and vertical lengths, but the syntax symbols are distinguished in attribute syntaxes as
a reminder of the direction each is used in.
The unit identifiers and meanings are taken from CSS. However, the syntax of numbers followed by unit identifiers in MathML is not
identical to the syntax of length values with units in CSS style sheets, since numbers in CSS cannot end with decimal points, and are
allowed to start with ’+’ signs.
The possible horizontal or vertical units in MathML are:
Unit identifier Unit description
em em (font-relative unit traditionally used for horizontal lengths)
ex ex (font-relative unit traditionally used for vertical lengths)
px pixels, or pixel size of the current display
in inches (1 inch = 2.54 centimeters)
cm centimeters
mm millimeters
pt points (1 point = 1/72 inch)
pc picas (1 pica = 12 points)
% percentage of default value
The typesetting units "em" and "ex" are defined in Appendix H, and discussed further under ‘Additional notes’ below.
42
% is a ‘relative unit’; when an attribute value is given as "n%" (for any numerical value "n"), the value being specified is the default value
for the property being controlled multiplied by "n" divided by 100. The default value (or the way in which it is obtained, when it is not
constant) is listed in the table of attributes for each element, and its meaning is described in the subsequent documentation about that
attribute. (The mpadded element has its own syntax for % and does not allow it as a unit identifier.)
For consistency with CSS, length units in MathML are rarely optional. When they are, the unit symbol is enclosed in square brackets in
the attribute syntax, following the number to which it applies, e.g. number [ h-unit ]. The meaning of specifying no unit is given in
the documentation for each attribute; in general it is that the number given is a multiplier for the default value of the attribute. (In such
cases, specifying the number "nnn" without a unit is equivalent to specifying the number "nnn" times 100 followed by %. For example,
<mo maxsize="2"> ( </mo> is equivalent to <mo maxsize="200%"> ( </mo>.)
As a special exception (also consistent with CSS), a numerical value equal to 0 need not be followed by a unit identifier even if the syntax
specified here requires one. In such cases, the unit identifier (or lack of one) would not matter, since 0 times any unit is 0.
For most attributes, the typical unit which would be used to describe them in typesetting is chosen as the one used in that attribute’s
default value in this specification; when a specific default value is not given, the typical unit is usually mentioned in the syntax table or in
the documentation for that attribute. The most common units are em or ex. However, any unit can be used, unless otherwise specified for
a specific attribute.
For reference, a table showing the correspondence of the deprecated MathML 1.01 style attribute with the CSS counterparts is given
below:
MathML attribute CSS property syntax symbol MathML elements refer to
fontsize font-size - presentation tokens; mstyle Section 3.2.2
fontweight font-weight - presentation tokens; mstyle Section 3.2.2
fontstyle font-style - presentation tokens; mstyle Section 3.2.2
fontfamily font-family css-fontfamily presentation tokens; mstyle Section 3.2.2
color color css-color-name presentation tokens; mstyle Section 3.3.4
background background css-color-name mstyle Section 3.3.4
See also Section 2.4.5 below for a discussion of the class, style and id attributes for use with style sheets.
CSS or analogous style sheets can specify changes to rendering properties of selected MathML elements. Since rendering properties can
also be changed by attributes on an element, or be changed automatically by the renderer, it is necessary to specify the order in which
changes from various sources occur. An example of automatic adjustment is what happens for fontsize, as explained in the discussion
on scriptlevel in Section 3.3.4. In the case of ‘absolute’ changes, i.e., setting a new property value independent of the old value (as
opposed to ‘relative’ changes, such as increments or multiplications by a factor), the absolute change performed last will be the only
absolute change which is effective, so the sources of changes which should have the highest priority must be processed last.
In the case of CSS, the order of processing of changes from various sources which affect one MathML element’s rendering properties
should be as follows:
(first changes; lowest priority)
• Automatic changes to properties or attributes based on the type of the parent element, and this element’s position in the parent,
as for the changes to fontsize in relation to scriptlevel mentioned above; such changes will usually be implemented by
the parent element itself before it passes a set of rendering properties to this element
• From a style sheet from the reader: styles which are not declared ‘important’
• Explicit attribute settings on this MathML element
• From a style sheet from the author: styles which are not declared ‘important’
• From a style sheet from the author: styles which are declared ‘important’
• From a style sheet from the reader: styles which are declared ‘important’
(last changes; highest priority)
Note that the order of the changes derived from CSS style sheets is specified by CSS itself (this is the order specified by CSS2). The
following rationale is related only to the issue of where in this pre-existing order the changes caused by explicit MathML attribute settings
should be inserted.
44
Rationale: MathML rendering attributes are analogous to HTML rendering attributes such as align, which the CSS section on cascading
order specifies should be processed with the same priority. Furthermore, this choice of priority permits readers, by declaring certain
CSS styles as ‘important’, to decide which of their style preferences should override explicit attribute settings in MathML. Since MathML
expressions, whether composed of ‘presentation’ or ‘content’ elements, are primarily intended to convey meaning, with their ‘graphic
design’ (if any) intended mainly to aid in that purpose but not to be essential in it, it is likely that readers will often want their own style
preferences to have priority; the main exception will be when a rendering attribute is intended to alter the meaning conveyed by an
expression, which is generally discouraged in the presentation attributes of MathML.
Default values for MathML attributes are in general given along with the detailed descriptions of specific elements in the text. Default
values shown in plain text in the tables of attributes for an element are literal (unless they are obviously explanatory phrases), but when
italicized are descriptions of how default values can be computed.
Default values described as inherited are taken from the rendering environment, as described under mstyle, or in some cases (described
individually) from the values of other attributes of surrounding elements, or from certain parts of those values. The value used will always
be one which could have been specified explicitly, had it been known; it will never depend on the content or attributes of the same element,
only on its environment. (What it means when used may, however, depend on those attributes or the content.)
Default values described as automatic should be computed by a MathML renderer in a way which will produce a high-quality rendering;
how to do this is not usually specified by the MathML specification. The value computed will always be one which could have been
specified explicitly, had it been known, but it will usually depend on the element content and possibly on the rendering environment.
Other italicized descriptions of default values which appear in the tables of attributes are explained for each attribute individually.
The single or double quotes which are required around attribute values in an XML start tag are not shown in the tables of attribute value
syntax for each element, but are shown around example attribute values in the text.
Note that, in general, there is no value which can be given explicitly for a MathML attribute which will simulate the effect of not specifying
the attribute at all for attributes which are inherited or automatic. Giving the words ‘inherited’ or ‘automatic’ explicitly will not work, and is
not generally allowed. Furthermore, even for presentation attributes for which a specific default value is documented here, the mstyle
element (Section 3.3.4) can be used to change this for the elements it contains. Therefore, the MathML DTD declares most presentation
attribute default values as #IMPLIED, which prevents XML preprocessors from adding them with any specific default value. This point of
view is carried through to the MathML schema.
In an XML DTD, allowed attribute values can be declared as general strings, or they can be constrained in various ways, either by
enumerating the possible values, or by declaring them to be certain special data types. The choice of an XML attribute type affects the
extent to which validity checks can be performed using a DTD.
45
The MathML DTD specifies formal XML attribute types for all MathML attributes, including enumerations of legitimate values in some
cases. In general, however, the MathML DTD is relatively permissive, frequently declaring attribute values as strings; this is done to
provide for interoperability with SGML parsers while allowing multiple attributes on one MathML element to accept the same values (such
as "true" and "false"), and also to allow extension to the lists of predefined values.
At the same time, even though an attribute value may be declared as a string in the DTD, only certain values are legitimate in MathML, as
described above and in the rest of this specification. For example, many attributes expect numerical values. In the sections which follow,
the allowed attribute values are described for each element. To determine when these constraints are actually enforced in the MathML
DTD, consult Appendix A. However, lack of enforcement of a requirement in the DTD does not imply that the requirement is not part of
the MathML language itself, or that it will not be enforced by a particular MathML renderer. (See Section 7.2.2 for a description of how
MathML renderers should respond to MathML errors.)
Furthermore, the MathML DTD is provided for convenience; although it is intended to be fully compatible with the text of the specification,
the text should be taken as definitive if there is a contradiction. (Any contradictions which may exist between various chapters of the text
should be resolved by favoring Chapter 6 first, then Chapter 3, Chapter 4, then Section 2.4, and then other parts of the text.) For the
MathML schema the situation will be the same: the published Recommendation text takes precedence. Though this is what is intended
to happen, there is a practical difficulty. If the system processing the MathML uses a validating parser, whether it be based on a DTD or
on a schema, the process will probably simply stop when it hits something held to be incorrect syntax, whether or not further MathML
processing in full harmony with the specification would have processed the piece correctly.
In order to facilitate use with style sheet mechanisms such as [XSLT] and [CSS2] all MathML elements accept class, style, and id
attributes in addition to the attributes described specifically for each element. MathML renderers not supporting CSS may ignore these
attributes. MathML specifies these attribute values as general strings, even if style sheet mechanisms have more restrictive syntaxes for
them. That is, any value for them is valid in MathML.
In order to facilitate compatibility with linking mechanisms, all MathML elements accept the xlink:href attribute.
All MathML elements also accept the xref attribute for use in parallel markup (Section 5.3). The id is also used in this context.
Every MathML element, because of a legacy from MathML 1.0, also accepts the deprecated attribute other (Section 7.2.3) which was
conceived for passing non-standard attributes without violating the MathML DTD. MathML renderers are only required to process this
attribute if they respond to any attributes which are not standard in MathML. However, the use of other is strongly discouraged when
there are already other ways within MathML of passing specific information.
See also Section 3.2.2 for a list of MathML attributes which can be used on most presentation token elements.
46
MathML ignores whitespace occurring outside token elements. Non-whitespace characters are not allowed there. Whitespace occurring
within the content of token elements is ‘trimmed’ from the ends, i.e., all whitespace at the beginning and end of the content is removed.
Whitespace internal to content of MathML elements is ‘collapsed’ canonically, i.e., each sequence of 1 or more whitespace characters is
replaced with one space character (sometimes called a blank character).
In MathML, as in XML, ‘whitespace’ means simple spaces, tabs, newlines, or carriage returns, i.e., characters with hexadecimal Unicode
codes U+0020, U+0009, U+000A, or U+000D, respectively.
Authors wishing to encode whitespace characters at the start or end of the content of a token, or in sequences other than a single space,
without having them ignored, must use or other ‘whitespace’ non-marking entities as described in Section 6.2.4. For example,
compare
<mtext>
Theorem
1:
</mtext>
with
<mtext>
Theorem 1:
</mtext>
When the first example is rendered, there is no whitespace before ‘Theorem’, one space between ‘Theorem’ and ‘1:’, and no whitespace
after ‘1:’. In the second example, a single space is rendered before ‘Theorem’, two spaces are rendered before ‘1:’, and there is no
whitespace after the ‘1:’.
Note that the xml:space attribute does not apply in this situation since XML processors pass whitespace in tokens to a MathML processor;
it is the MathML processing rules which specify that whitespace is trimmed and collapsed.
For whitespace occurring outside the content of the token elements mi, mn, mo, ms, mtext, ci, cn and annotation, an mspace element
should be used, as opposed to an mtext element containing only ‘whitespace’ entities.
Chapter 3
Presentation Markup
3.1 Introduction
This chapter specifies the ‘presentation’ elements of MathML, which can be used to describe the layout structure of mathematical notation.
Presentation elements correspond to the ‘constructors’ of traditional mathematical notation - that is, to the basic kinds of symbols and
expression-building structures out of which any particular piece of traditional mathematical notation is built. Because of the importance
of traditional visual notation, the descriptions of the notational constructs the elements represent are usually given here in visual terms.
However, the elements are medium-independent in the sense that they have been designed to contain enough information for good
spoken renderings as well. Some attributes of these elements may make sense only for visual media, but most attributes can be treated
in an analogous way in audio as well (for example, by a correspondence between time duration and horizontal extent).
MathML presentation elements only suggest (i.e. do not require) specific ways of rendering in order to allow for medium-dependent
rendering and for individual preferences of style. This specification describes suggested visual rendering rules in some detail, but a
particular MathML renderer is free to use its own rules as long as its renderings are intelligible.
The presentation elements are meant to express the syntactic structure of mathematical notation in much the same way as titles, sections,
and paragraphs capture the higher-level syntactic structure of a textual document. Because of this, for example, a single row of identifiers
and operators, such as ‘x + a / b’, will often be represented not just by one mrow element (which renders as a horizontal row of its
arguments), but by multiple nested mrow elements corresponding to the nested sub-expressions of which one mathematical expression is
composed - in this case,
48
<mrow>
<mi> x </mi>
<mo> + </mo>
<mrow>
<mi> a </mi>
<mo> / </mo>
<mi> b </mi>
</mrow>
</mrow>
Similarly, superscripts are attached not just to the preceding character, but to the full expression constituting their base. This structure
allows for better-quality rendering of mathematics, especially when details of the rendering environment such as display widths are not
known to the document author; it also greatly eases automatic interpretation of the mathematical structures being represented.
Certain MathML characters are used to name operators or identifiers that in traditional notation render the same as other symbols, such
as ⅆ, ⅇ, or ⅈ, or operators that usually render invisibly, such as ⁢,
⁡, or ⁣. These are distinct notational symbols or objects, as evidenced by their distinct spoken
renderings and in some cases by their effects on linebreaking and spacing in visual rendering, and as such should be represented by the
appropriate specific entity references. For example, the expression represented visually as ‘ f (x)’ would usually be spoken in English as
‘ f of x’ rather than just ‘ f x’; this is expressible in MathML by the use of the ⁡ operator after the ‘ f ’, which (in this case)
can be aurally rendered as ‘of’.
It is strongly recommended that, before reading the present chapter, one read Section 2.4 on MathML syntax and grammar, which
contains important information on MathML notations and conventions. In particular, in this chapter it is assumed that the reader has
an understanding of basic XML terminology described in Section 2.4.2, and the attribute value notations and conventions described in
Section 2.4.4.
The remainder of this section introduces MathML-specific terminology and conventions used in this chapter.
The presentation elements are divided into two classes. Token elements represent individual symbols, names, numbers, labels, etc. In
general, tokens can have only characters as content. The only exceptions are the vertical alignment element malignmark, mglyph, and
entity references. Layout schemata build expressions out of parts, and can have only elements as content (except for whitespace, which
they ignore). There are also a few empty elements used only in conjunction with certain layout schemata.
49
All individual ‘symbols’ in a mathematical expression should be represented by MathML token elements. The primary MathML token
element types are identifiers (e.g. variables or function names), numbers, and operators (including fences, such as parentheses, and
separators, such as commas). There are also token elements for representing text or whitespace that has more aesthetic than mathemat-
ical significance, and for representing ‘string literals’ for compatibility with computer algebra systems. Note that although a token element
represents a single meaningful ‘symbol’ (name, number, label, mathematical symbol, etc.), such symbols may be comprised of more than
one character. For example sin and 24 are represented by the single tokens <mi>sin</mi> and <mn>24</mn> respectively.
In traditional mathematical notation, expressions are recursively constructed out of smaller expressions, and ultimately out of single
symbols, with the parts grouped and positioned using one of a small set of notational structures, which can be thought of as ‘expression
constructors’. In MathML, expressions are constructed in the same way, with the layout schemata playing the role of the expression
constructors. The layout schemata specify the way in which sub-expressions are built into larger expressions. The terminology derives
from the fact that each layout schema corresponds to a different way of ‘laying out’ its sub-expressions to form a larger expression in
traditional mathematical typesetting.
The terminology used in this chapter for special classes of elements, and for relationships between elements, is as follows: The presenta-
tion elements are the MathML elements defined in this chapter. These elements are listed in Section 3.1.6. The content elements are the
MathML elements defined in Chapter 4. The content elements are listed in Section 4.4.
A MathML expression is a single instance of any of the presentation elements with the exception of the empty elements none or
mprescripts, or is a single instance of any of the content elements which are allowed as content of presentation elements (described
in Section 5.2.4). A sub-expression of an expression E is any MathML expression that is part of the content of E , whether directly or
indirectly, i.e. whether it is a ‘child’ of E or not.
Since layout schemata attach special meaning to the number and/or positions of their children, a child of a layout schema is also called
an argument of that element. As a consequence of the above definitions, the content of a layout schema consists exactly of a sequence
of zero or more elements that are its arguments.
Many of the elements described herein require a specific number of arguments (always 1, 2, or 3). In the detailed descriptions of element
syntax given below, the number of required arguments is implicitly indicated by giving names for the arguments at various positions. A
few elements have additional requirements on the number or type of arguments, which are described with the individual element. For
example, some elements accept sequences of zero or more arguments - that is, they are allowed to occur with no arguments at all.
Note that MathML elements encoding rendered space do count as arguments of the elements in which they appear. See Section 3.2.7 for
a discussion of the proper use of such space-like elements.
50
The elements listed in the following table as requiring 1* argument (msqrt, mstyle, merror, menclose, mpadded, mphantom, mtd, and
math) actually accept any number of arguments. However, if the number of arguments is 0, or is more than 1, they treat their contents
as a single inferred mrow formed from all their arguments. Although the math element is not a presentation element, it is listed below for
completeness.
For example,
<mtd>
</mtd>
is treated as if it were
<mtd>
<mrow>
</mrow>
</mtd>
and
<msqrt>
<mo> - </mo>
<mn> 1 </mn>
</msqrt>
is treated as if it were
<msqrt>
<mrow>
<mo> - </mo>
<mn> 1 </mn>
</mrow>
</msqrt>
This feature allows MathML data not to contain (and its authors to leave out) many mrow elements that would otherwise be necessary.
In the descriptions in this chapter of the above-listed elements’ rendering behaviors, their content can be assumed to consist of exactly
one expression, which may be an mrow element formed from their arguments in this manner. However, their argument counts are shown
in the following table as 1*, since they are most naturally understood as acting on a single expression.
51
For convenience, here is a table of each element’s argument count requirements, and the roles of individual arguments when these are
distinguished. An argument count of 1* indicates an inferred mrow as described above.
Element Required argument count Argument roles (when these differ by position)
mrow 0 or more
mfrac 2 numerator denominator
msqrt 1*
mroot 2 base index
mstyle 1*
merror 1*
mpadded 1*
mphantom 1*
mfenced 0 or more
menclose 1*
msub 2 base subscript
msup 2 base superscript
msubsup 3 base subscript superscript
munder 2 base underscript
mover 2 base overscript
munderover 3 base underscript overscript
mmultiscripts 1 or more base (subscript superscript)* [<mprescripts/> (presubscript presuperscript)*]
mtable 0 or more rows 0 or more mtr or mlabeledtr elements
mlabeledtr 1 or more a label and 0 or more mtd elements
mtr 0 or more 0 or more mtd elements
mtd 1*
maction 1 or more depend on actiontype attribute
math 1*
Certain MathML presentation elements exhibit special behaviors in certain contexts. Such special behaviors are discussed in the detailed
element descriptions below. However, for convenience, some of the most important classes of special behavior are listed here.
Certain elements are considered space-like; these are defined in Section 3.2.7. This definition affects some of the suggested rendering
rules for mo elements (Section 3.2.5).
Certain elements, e.g. msup, are able to embellish operators that are their first argument. These elements are listed in Section 3.2.5,
which precisely defines an ‘embellished operator’ and explains how this affects the suggested rendering rules for stretchy operators.
52
Certain elements treat their arguments as the arguments of an ‘inferred mrow’ if they are not given exactly one argument, as explained in
Section 3.1.3.
In MathML 1.x, the mtable element could infer mtr elements around its arguments, and the mtr element could infer mtd elements. In
MathML 2.0, mtr and mtd elements must be explicit. However, for backward compatibility renderers may wish to continue supporting
inferred mtr and mtd elements.
The term ’bidirectional layout’ refers to the fact that letters from certain scripts, in particular Arabic and Hebrew, are written from right to
left, and that mixing these with numbers or letters from scripts written left- to-right results in text runs of two differing directions within the
same line or paragraph.
For ordinary text, Unicode defines a bidirectional algorithm [Bidi]. This algorithm assumes that the order of characters in a ’backing store’
is in logical order (i.e. in the order it would be pronounced or typed in), and defines how the characters get reordered for display based on
character properties and other directives. HTML, CSS, XSL, and SVG adopt this algorithm and provide ways to control it via markup or
styling.
In mathematical expressions, bidirectional layout is more difficult than it is in text. In part, this is due to the 2-dimensional nature of
mathematical layout, and the fact that spatial relationships are often used to convey meaning in mathematics notation. Another factor is
the lack of established conventions for bidirectional mathematics layout, since this is relatively uncommon, even in right-to-left contexts.
For these reasons, MathML 2.0 only adopts a restricted version of the Unicode Bidirectional algorithm, as described in the remainder of
this section.
For MathML token elements that can contain text (mtext, mo, mi, mn and ms), the implicit part of the Unicode bidirectional algorithm [Bidi]
is applied when its content is rendered visually (i.e. characters are reordered based on character properties). The base directionality is
left-to-right.
The implicit part of the Unicode bidirectional algorithm is identical to straightforward left-to-right layout if there is only one character, or if
there are no strong right-to-left characters (i.e. no characters from the Arabic, Hebrew, or similar scripts).
Applications are not required to apply the Unicode bidirectional algorithm if they do not render strong right-to-left characters.
Please note that for the transfinite cardinals represented by Hebrew characters, the codepoints U+2135-U+2138 (ALEF SYMBOL, BET
SYMBOL, GIMEL SYMBOL, DALET SYMBOL) should be used. These are strong left-to-right.
MathML 2.0 does not address right-to-left or bidirectional layout in mathematics formulas. Only left-to-right layout is supported. Right-to-left
layout of mathematical formulas may be addressed in a future version of MathML.
53
Frequently tokens consist of a single character denoting a mathematical symbol. Other cases, e.g. function names, involve multi-character
tokens. Further, because traditional mathematical notation makes wide use of symbols distinguished by their typographical properties
(e.g. a Fraktur ’g’ for a Lie algebra, or a bold ’x’ for a vector), care must be taken to insure that styling mechanisms respect typographical
properties which carry meaning. Consequently, characters, tokens, and typographical properties of symbols are closely related to one
another in MathML.
Character data in MathML markup is only allowed to occur as part of the content of token elements. The only exception is whitespace
between elements, which is ignored. Token elements can contain any sequence of zero or more Unicode characters. In particular, tokens
with empty content are allowed, and should typically render invisibly, with no width except for the normal extra spacing for that kind of token
element. The exceptions to this are the empty elements mspace and mglyph. The mspace element’s width depends upon its attribute
values. The mglyph element renders using the character described by its attributes.
While all Unicode character data is valid in token element content, MathML 2.0 distinguishes a special subset of named Unicode 3.2 char-
acters, called MathML characters in this document. The complete list of MathML characters is defined in Chapter 6. MathML characters
can be either represented directly as Unicode character data, or indirectly via numeric or character entity references. See Chapter 6 for a
discussion of the advantages and disadvantages of numeric character references versus entity references. New mathematics characters
that arise, or non-standard glyphs for existing MathML characters, may be represented by means of the mglyph element.
Apart from the mglyph element, the malignmark element is the only other element allowed in the content of tokens. See Section 3.5.5
for details.
Token elements (other than mspace and mglyph) should be rendered as their content (i.e. in the visual case, as a closely-spaced horizontal
row of standard glyphs for the characters in their content). Rendering algorithms should also take into account the mathematics style
attributes as described below, and modify surrounding spacing by rules or attributes specific to each type of token element.
55
A large class of mathematical symbols are single letter identifiers typically used as variable names in formulas. Different font variants of a
letter are treated as separate symbols. For example, a Fraktur ’g’ might denote a Lie algebra, while a Roman ’g’ denotes the corresponding
Lie group. These letter-like symbols are traditionally typeset differently than the same characters appearing in text, using different spacing
and ligature conventions. These characters must also be treated specially by style mechanisms, since arbitrary style transformations can
change meaning in an expression.
For these reasons, Unicode 3.2 contains more than nine hundred Math Alphanumeric Symbol characters corresponding to letter-like
symbols. These characters are in the Secondary Multilingual Plane (SMP). See Chapter 6 for more information. As valid Unicode data,
these characters are permitted in MathML 2.0, and as tools and fonts for them become widely available, we anticipate they will be the
predominant way of denoting letter-like symbols.
MathML 2.0 also provides an alternative encoding for these characters using only Basic Multilingual Plane (BMP) characters together
with markup. MathML 2.0 defines a correspondence between token elements with certain combinations of BMP character data and
the mathvariant attribute and tokens containing SMP Math Alphanumeric Symbol characters. Processing applications that accept SMP
characters are required to treat the corresponding BMP and attribute combinations identically. This is particularly important for applications
that support searching and/or equality testing.
The next section discusses the mathvariant attribute in more detail, and a complete technical description of the corresponding characters
is given in Section 6.2.3.
MathML 2.0 introduces four new mathematics style attributes. These attributes are valid on all presentation token elements except mspace
and mglyph, and on no other elements except mstyle. The attributes are:
Name values default
mathvariant normal | bold | italic | bold-italic | double-struck | bold-fraktur | script | bold-script | fraktur | normal (except on <mi>)
sans-serif | bold-sans-serif | sans-serif-italic | sans-serif-bold-italic | monospace
mathsize small | normal | big | number v-unit inherited
mathcolor #rgb | #rrggbb | html-color-name inherited
mathbackground #rgb | #rrggbb | html-color-name inherited
(See Section 2.4.4 for terminology and notation used in attribute value descriptions.)
The mathematics style attributes define logical classes of token elements. Each class is intended to correspond to a collection of
typographically-related symbolic tokens that have a meaning within a given math expression, and therefore need to be visually distin-
guished and protected from inadvertent document-wide style changes which might change their meanings.
When MathML rendering takes place in an environment where CSS is available, the mathematics style attributes can be viewed as
predefined selectors for CSS style rules. See Section 7.1.6 and Appendix G for further discussion and a sample CSS style sheet. When
CSS is not available, it is up to the internal style mechanism of the rendering application to visually distinguish the different logical classes.
56
Renderers have complete freedom in mapping mathematics style attributes to specific rendering properties. However, in practice, the
mathematics style attribute names and values suggest obvious typographical properties, and renderers should attempt to respect these
natural interpretations as far as possible. For example, it is reasonable to render a token with the mathvariant attribute set to
"sans-serif" in Helvetica or Arial. However, rendering the token in a Times Roman font could be seriously misleading and should be
avoided.
It is important to note that only certain combinations of character data and mathvariant attribute values make sense. For example,
there is no clear cut rendering for a ’fraktur’ alpha, or a ’bold italic’ Kanji character. By design, the only cases that have an unambiguous
interpretation are exactly the ones that correspond to SMP Math Alphanumeric Symbol characters, which are enumerated in Section 6.2.3.
In all other cases, it is suggested that renderers ignore the value of the mathvariant attribute if it is present. Similarly, authors should
refrain from using the mathvariant attribute with characters that do not have SMP counterparts, since renderings may not be useful or
predictable. In the very rare case that it is necessary to specify a font variant for other characters or symbols within an equation, external
styling mechanisms such as CSS are generally preferable, or in the last resort, the deprecated style attributes of MathML 1 could be used.
Token elements also permit id, xref, class and style attributes for compatibility with style sheet mechanisms, as described in Sec-
tion 2.4.5. However, some care must be taken when using CSS generally. Using CSS to produce visual effects that alter the meaning of an
equation should be especially avoided, since MathML is used in many non-CSS environments. Similarly, care should be taken to insure
arbitrary document-wide style transformations do not affect mathematics expressions in such a way that meaning is altered.
Since MathML expressions are often embedded in a textual data format such as XHTML, the surrounding text and the MathML must
share rendering attributes such as font size, so that the renderings will be compatible in style. For this reason, most attribute values
affecting text rendering are inherited from the rendering environment, as shown in the ‘default’ column in the table above. (In cases where
the surrounding text and the MathML are being rendered by separate software, e.g. a browser and a plug-in, it is also important for the
rendering environment to provide the MathML renderer with additional information, such as the baseline position of surrounding text, which
is not specified by any MathML attributes.) Note, however, that MathML 2.0 doesn’t specify the mechanism by which style information is
inherited from the rendering environment. For example, one browser plug-in might choose to rely completely on the CSS inheritance
mechanism and use the fully resolved CSS properties for rendering, while another application might only consult a style environment at
the root node, and then use its own internal style inheritance rules.
Most MathML renderers will probably want to rely on some degree to additional, internal style processing algorithms. In particular, inher-
itance of the mathvariant attribute does not follow the CSS model. The default value for this attribute is "normal" (non-slanted) for
all tokens except mi. For mi tokens, the default depends on the number of characters in tokens’ content. (The deprecated fontslant
attribute also behaves this way.) See Section 3.2.3 for details.
If both a new mathematics style attribute and conflicting deprecated attributes are given, the new math style attribute value should be
used. For example
The new mathematics style attributes also override deprecated 1.01 style attribute values that are inherited. Thus
<mstyle fontstyle=’italic’>
<mi mathvariant=’bold’> a </mi>
</mstyle>
renders in a bold upright font, not a bold italic font.
At the same time, the MathML 1.01 attributes still serve a purpose. Since they correspond directly to rendering properties needed for
mathematics layout, they are very useful for describing MathML layout rules and algorithms. For this reason, and for backward compatibility,
the MathML rendering rules suggested in this chapter continue to be described in terms of the rendering properties described by these
MathML 1.01 style attributes.
If the requested size of the current font is not available, the renderer should approximate it in the manner likely to lead to the most
intelligible, highest quality rendering.
58
Many MathML elements automatically change fontsize in some of their children; see the discussion of scriptlevel in the section on
mstyle, Section 3.3.4.
The value of the fontfamily attribute should be the name of a font that may be available to a MathML renderer, or information that
permits the renderer to select a font in some manner; acceptable values and their meanings are dependent on the specific renderer
and rendering environment in use, and are not specified by MathML (but see the note about css-fontfamily below). (Note that the
renderer’s mechanism for finding fonts by name may be case-sensitive.)
If the value of fontfamily is not recognized by a particular MathML renderer, this should never be interpreted as a MathML error; rather,
the renderer should either use a font that it considers to be a suitable substitute for the requested font, or ignore the attribute and act as if
no value had been given.
Note that any use of the fontfamily attribute is unlikely to be portable across all MathML renderers. In particular, it should never be
used to try to achieve the effect of a reference to a non-ASCII MathML character (for example, by using a reference to a character in
some symbol font that maps ordinary characters to glyphs for non-ASCII characters). As a corollary to this principle, MathML renderers
should attempt to always produce intelligible renderings for the MathML characters listed in Chapter 6, even when these characters are
not available in the font family indicated. Such a rendering is always possible - as a last resort, a character can be rendered to appear as
an XML-style entity reference using one of the entity names given for the same character in Chapter 6.
The symbol css-fontfamily refers to a legal value for the font-family property in CSS, which is a comma-separated list of alternative
font family names or generic font types in order of preference, as documented in more detail in CSS[CSS2]. MathML renderers are
encouraged to make use of the CSS syntax for specifying fonts when this is practical in their rendering environment, even if they do not
otherwise support CSS. (See also the subsection CSS-compatible attributes within Section 2.4.4.3).
The mathcolor (and deprecated color) attribute controls the color in which the content of tokens is rendered. Additionally, when inherited
from mstyle or from a MathML expression’s rendering environment, it controls the color of all other drawing by MathML elements, including
the lines or radical signs that can be drawn by mfrac, mtable, or msqrt.
The values of mathcolor, color, mathbackground, and background can be specified as a string consisting of ‘#’ followed without
intervening whitespace by either 1-digit or 2-digit hexadecimal values for the red, green, and blue components, respectively, of the desired
color. The same number of digits must be used for each component. No whitespace is allowed between the ’#’ and the hexadecimal
values. The hexadecimal digits are not case-sensitive. The possible 1-digit values range from 0 (component not present) to F (component
fully present), and the possible 2-digit values range from 00 (component not present) to FF (component fully present), with the 1-digit
value x being equivalent to the 2-digit value xx (rather than x0).
These attributes can also be specified as an html-color-name, which is defined below. Additionally, the keyword "transparent" may
be used for the background attribute.
59
The color syntax described above is a subset of the syntax of the color and background-color properties of CSS. The
background-color syntax is in turn a subset of the full CSS background property syntax, which also permits specification of (for
example) background images with optional repeats. The more general attribute name background is used in MathML to facilitate possible
extensions to the attribute’s scope in future versions of MathML.
Color values on either attribute can also be specified as an html-color-name, that is, as one of the color-name keywords defined
in [HTML4] ("aqua", "black", "blue", "fuchsia", "gray", "green", "lime", "maroon", "navy", "olive", "purple", "red",
"silver", "teal", "white", and "yellow"). Note that the color name keywords are not case-sensitive, unlike most keywords in
MathML attribute values for compatibility with CSS and HTML.
The suggested MathML visual rendering rules do not define the precise extent of the region whose background is affected by using the
background attribute on mstyle, except that, when mstyle’s content does not have negative dimensions and its drawing region is not
overlapped by other drawing due to surrounding negative spacing, this region should lie behind all the drawing done to render the content
of the mstyle, but should not lie behind any of the drawing done to render surrounding expressions. The effect of overlap of drawing
regions caused by negative spacing on the extent of the region affected by the background attribute is not defined by these rules.
3.2.3.1 Description
An mi element represents a symbolic name or arbitrary text that should be rendered as an identifier. Identifiers can include variables,
function names, and symbolic constants.
Not all ‘mathematical identifiers’ are represented by mi elements - for example, subscripted or primed variables should be represented
using msub or msup respectively. Conversely, arbitrary text playing the role of a ‘term’ (such as an ellipsis in a summed series) can be
represented using an mi element, as shown in an example in Section 3.2.6.4.
It should be stressed that mi is a presentation element, and as such, it only indicates that its content should be rendered as an identifier. In
the majority of cases, the contents of an mi will actually represent a mathematical identifier such as a variable or function name. However,
as the preceding paragraph indicates, the correspondence between notations that should render like identifiers and notations that are
actually intended to represent mathematical identifiers is not perfect. For an element whose semantics is guaranteed to be that of an
identifier, see the description of ci in Chapter 4.
3.2.3.2 Attributes
mi elements accept the attributes listed in Section 3.2.2, but in one case with a different default value:
Name values default
mathvariant normal | bold | italic | bold-italic | double-struck | bold-fraktur | script | (depends on content; described below)
bold-script | fraktur | sans-serif | bold-sans-serif | sans-serif-italic | sans-
serif-bold-italic | monospace
fontstyle (deprecated) normal | italic (depends on content; described below)
60
A typical graphical renderer would render an mi element as the characters in its content, with no extra spacing around the characters
(except spacing associated with neighboring elements). The default mathvariant and fontstyle would (typically) be "normal" (non-
slanted) unless the content is a single character, in which case it would be "italic". Note that this rule for mathvariant and fontstyle
attributes is specific to mi elements; the default value for the mathvariant and fontstyle attributes on other MathML token elements
is "normal".
Note that for purposes of determining equivalences of Math Alphanumeric Symbol characters (See Section 6.2.3 and Section 3.2.1.1) the
value of the mathvariant attribute should be resolved first, including the special defaulting behavior described above.
3.2.3.3 Examples
<mi> x </mi>
<mi> D </mi>
<mi> sin </mi>
<mi mathvariant=’script’> L </mi>
<mi></mi>
An mi element with no content is allowed; <mi></mi> might, for example, be used by an ‘expression editor’ to represent a location in a
MathML expression which requires a ‘term’ (according to conventional syntax for mathematics) but does not yet contain one.
Identifiers include function names such as ‘sin’. Expressions such as ‘sin x’ should be written using the ⁡ operator
(which also has the short name ⁡) as shown below; see also the discussion of invisible operators in Section 3.2.5.
<mrow>
<mi> sin </mi>
<mo> ⁡ </mo>
<mi> x </mi>
</mrow>
Miscellaneous text that should be treated as a ‘term’ can also be represented by an mi element, as in:
<mrow>
<mn> 1 </mn>
<mo> + </mo>
<mi> ... </mi>
<mo> + </mo>
<mi> n </mi>
</mrow>
When an mi is used in such exceptional situations, explicitly setting the fontstyle attribute may give better results than the default
behavior of some renderers.
61
3.2.4.1 Description
An mn element represents a ‘numeric literal’ or other data that should be rendered as a numeric literal. Generally speaking, a numeric
literal is a sequence of digits, perhaps including a decimal point, representing an unsigned integer or real number.
The mathematical concept of a ‘number’ can be quite subtle and involved, depending on the context. As a consequence, not all mathe-
matical numbers should be represented using mn; examples of mathematical numbers that should be represented differently are shown
below, and include complex numbers, ratios of numbers shown as fractions, and names of numeric constants.
Conversely, since mn is a presentation element, there are a few situations where it may desirable to include arbitrary text in the content
of an mn that should merely render as a numeric literal, even though that content may not be unambiguously interpretable as a number
according to any particular standard encoding of numbers as character sequences. As a general rule, however, the mn element should
be reserved for situations where its content is actually intended to represent a numeric quantity in some fashion. For an element whose
semantics are guaranteed to be that of a particular kind of mathematical number, see the description of cn in Chapter 4.
3.2.4.2 Attributes
3.2.4.3 Examples
<mn> 2 </mn>
<mn> 0.123 </mn>
<mn> 1,000,000 </mn>
<mn> 2.1e10 </mn>
<mn> 0xFFEF </mn>
<mn> MCMLXIX </mn>
<mn> twenty one </mn>
Many mathematical numbers should be represented using presentation elements other than mn alone; this includes complex numbers,
ratios of numbers shown as fractions, and names of numeric constants. Examples of MathML representations of such numbers include:
<mrow>
<mn> 2 </mn>
<mo> + </mo>
<mrow>
<mn> 3 </mn>
<mo> ⁢ </mo>
<mi> ⅈ </mi>
</mrow>
</mrow>
<mfrac> <mn> 1 </mn> <mn> 2 </mn> </mfrac>
<mi> π </mi>
<mi> ⅇ </mi>
3.2.5.1 Description
An mo element represents an operator or anything that should be rendered as an operator. In general, the notational conventions for
mathematical operators are quite complicated, and therefore MathML provides a relatively sophisticated mechanism for specifying the
rendering behavior of an mo element. As a consequence, in MathML the list of things that should ‘render as an operator’ includes a
number of notations that are not mathematical operators in the ordinary sense. Besides ordinary operators with infix, prefix, or postfix
forms, these include fence characters such as braces, parentheses, and ‘absolute value’ bars, separators such as comma and semicolon,
and mathematical accents such as a bar or tilde over a symbol.
63
The term ‘operator’ as used in the present chapter means any symbol or notation that should render as an operator, and that is therefore
representable by an mo element. That is, the term ‘operator’ includes any ordinary operator, fence, separator, or accent unless otherwise
specified or clear from the context.
All such symbols are represented in MathML with mo elements since they are subject to essentially the same rendering attributes and
rules; subtle distinctions in the rendering of these classes of symbols, when they exist, are supported using the boolean attributes fence,
separator and accent, which can be used to distinguish these cases.
A key feature of the mo element is that its default attribute values are set on a case-by-case basis from an ‘operator dictionary’ as explained
below. In particular, default values for fence, separator and accent can usually be found in the operator dictionary and therefore need
not be specified on each mo element.
Note that some mathematical operators are represented not by mo elements alone, but by mo elements ‘embellished’ with (for example)
surrounding superscripts; this is further described below. Conversely, as presentation elements, mo elements can contain arbitrary text,
even when that text has no standard interpretation as an operator; for an example, see the discussion ‘Mixing text and mathematics’
in Section 3.2.6. See also Chapter 4 for definitions of MathML content elements that are guaranteed to have the semantics of specific
mathematical operators.
3.2.5.2 Attributes
mo elements accept the attributes listed in Section 3.2.2, and the additional attributes listed here. Most attributes get their default values
from the Section 3.2.5.7, as described later in this section. When a dictionary entry is not found for a given mo element, the default value
shown here in parentheses is used.
Name values default
form prefix | infix | postfix set by position of operator in an mrow (rule given below); used with mo
content to index operator dictionary
fence true | false set by dictionary (false)
separator true | false set by dictionary (false)
lspace number h-unit | namedspace set by dictionary (thickmathspace)
rspace number h-unit | namedspace set by dictionary (thickmathspace)
stretchy true | false set by dictionary (false)
symmetric true | false set by dictionary (true)
maxsize number [ v-unit | h-unit ] | namedspace | infinity set by dictionary (infinity)
minsize number [ v-unit | h-unit ] | namedspace set by dictionary (1)
largeop true | false set by dictionary (false)
movablelimits true | false set by dictionary (false)
accent true | false set by dictionary (false)
64
h-unit represents a unit of horizontal length, and v-unit represents a unit of vertical length (see Section 2.4.4.2). namedspace is one
of "veryverythinmathspace", "verythinmathspace", "thinmathspace", "mediummathspace", "thickmathspace",
"verythickmathspace", or "veryverythickmathspace". These values can be set by using the mstyle element as is further dis-
cussed in Section 3.3.4.
If no unit is given with maxsize or minsize, the number is a multiplier of the normal size of the operator in the direction (or directions) in
which it stretches. These attributes are further explained below.
Typical graphical renderers show all mo elements as the characters of their content, with additional spacing around the element deter-
mined from the attributes listed above. Detailed rules for determining operator spacing in visual renderings are described in a subsection
below. As always, MathML does not require a specific rendering, and these rules are provided as suggestions for the convenience of
implementors.
Renderers without access to complete fonts for the MathML character set may choose not to render an mo element as precisely the
characters in its content in some cases. For example, <mo> ≤ </mo> might be rendered as <= to a terminal. However, as a general
rule, renderers should attempt to render the content of an mo element as literally as possible. That is, <mo> ≤ </mo> and <mo>
<= </mo> should render differently. (The first one should render as a single character representing a less-than-or-equal-to sign, and
the second one as the two-character sequence <=.)
<mo> + </mo>
<mo> < </mo>
<mo> ≤ </mo>
<mo> <= </mo>
<mo> ++ </mo>
<mo> ∑ </mo>
<mo> .NOT. </mo>
<mo> and </mo>
<mo> ⁢ </mo>
<mo mathvariant=’bold’> + </mo>
Note that the mo elements in these examples don’t need explicit fence or separator attributes, since these can be found using the
operator dictionary as described below. Some of these examples could also be encoded using the mfenced element described in Sec-
tion 3.3.8.
(a+b)
65
<mrow>
<mo> ( </mo>
<mrow>
<mi> a </mi>
<mo> + </mo>
<mi> b </mi>
</mrow>
<mo> ) </mo>
</mrow>
[0,1)
<mrow>
<mo> [ </mo>
<mrow>
<mn> 0 </mn>
<mo> , </mo>
<mn> 1 </mn>
</mrow>
<mo> ) </mo>
</mrow>
f (x,y)
<mrow>
<mi> f </mi>
<mo> ⁡ </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
66
Certain operators that are ‘invisible’ in traditional mathematical notation should be represented using specific entity references within mo
elements, rather than simply by nothing. The entity references used for these ‘invisible operators’ are:
Full name Short name Examples of use
⁢ ⁢ xy
⁡ ⁡ f (x) sin x
⁣ ⁣ m12
The MathML representations of the examples in the above table are:
<mrow>
<mi> x </mi>
<mo> ⁢ </mo>
<mi> y </mi>
</mrow>
<mrow>
<mi> f </mi>
<mo> ⁡ </mo>
<mrow>
<mo> ( </mo>
<mi> x </mi>
<mo> ) </mo>
</mrow>
</mrow>
<mrow>
<mi> sin </mi>
<mo> ⁡ </mo>
<mi> x </mi>
</mrow>
<msub>
<mi> m </mi>
<mrow>
<mn> 1 </mn>
<mo> ⁣ </mo>
<mn> 2 </mn>
67
</mrow>
</msub>
The reasons for using specific mo elements for invisible operators include:
• such operators should often have specific effects on visual rendering (particularly spacing and linebreaking rules) that are not
the same as either the lack of any operator, or spacing represented by mspace or mtext elements;
• these operators should often have specific audio renderings different than that of the lack of any operator;
• automatic semantic interpretation of MathML presentation elements is made easier by the explicit specification of such opera-
tors.
For example, an audio renderer might render f (x) (represented as in the above examples) by speaking ‘f of x’, but use the word ‘times’ in
its rendering of xy. Although its rendering must still be different depending on the structure of neighboring elements (sometimes leaving
out ‘of’ or ‘times’ entirely), its task is made much easier by the use of a different mo element for each invisible operator.
The following notes are included as a rationale for certain aspects of the above definitions, but should not be important for most users of
MathML.
An mfrac is included as an ‘embellisher’ because of the common notation for a differential operator:
<mfrac>
<mo> ⅆ </mo>
<mrow>
<mo> ⅆ </mo>
<mi> x </mi>
</mrow>
</mfrac>
Since the definition of embellished operator affects the use of the attributes related to stretching, it is important that it includes embellished
fences as well as ordinary operators; thus it applies to any mo element.
Note that an mrow containing a single argument is an embellished operator if and only if its argument is an embellished operator. This is
because an mrow with a single argument must be equivalent in all respects to that argument alone (as discussed in Section 3.3.1). This
means that an mo element that is the sole argument of an mrow will determine its default form attribute based on that mrow’s position in a
surrounding, perhaps inferred, mrow (if there is one), rather than based on its own position in the mrow in which it is the sole argument.
Note that the above definition defines every mo element to be ‘embellished’ - that is, ‘embellished operator’ can be considered (and
implemented in renderers) as a special class of MathML expressions, of which mo is a specific case.
The amount of space added around an operator (or embellished operator), when it occurs in an mrow, can be directly specified by the
lspace and rspace attributes. By convention, operators that tend to bind tightly to their arguments have smaller values for spacing than
operators that tend to bind less tightly. This convention should be followed in the operator dictionary included with a MathML renderer. In
TEX, these values can only be one of three values; typically they are 3/18em, 4/18em, and 5/18em. MathML does not impose this limit.
Some renderers may choose to use no space around most operators appearing within subscripts or superscripts, as is done in TEX.
Non-graphical renderers should treat spacing attributes, and other rendering attributes described here, in analogous ways for their ren-
dering medium. For example, more space might translate into a longer pause in an audio rendering.
70
Four attributes govern whether and how an operator (perhaps embellished) stretches so that it matches the size of other elements:
stretchy, symmetric, maxsize, and minsize. If an operator has the attribute stretchy="true", then it (that is, each character in its
content) obeys the stretching rules listed below, given the constraints imposed by the fonts and font rendering system. In practice, typical
renderers will only be able to stretch a small set of characters, and quite possibly will only be able to generate a discrete set of character
sizes.
There is no provision in MathML for specifying in which direction (horizontal or vertical) to stretch a specific character or operator; rather,
when stretchy="true" it should be stretched in each direction for which stretching is possible. It is up to the renderer to know in which
directions it is able to stretch each character. (Most characters can be stretched in at most one direction by typical renderers, but some
renderers may be able to stretch certain characters, such as diagonal arrows, in both directions independently.)
The minsize and maxsize attributes limit the amount of stretching (in either direction). These two attributes are given as multipliers of
the operator’s normal size in the direction or directions of stretching, or as absolute sizes using units. For example, if a character has
maxsize="3", then it can grow to be no more than three times its normal (unstretched) size.
The symmetric attribute governs whether the height and depth above and below the axis of the character are forced to be equal (by
forcing both height and depth to become the maximum of the two). An example of a situation where one might set symmetric="false"
arises with parentheses around a matrix not aligned on the axis, which frequently occurs when multiplying non-square matrices. In this
case, one wants the parentheses to stretch to cover the matrix, whereas stretching the parentheses symmetrically would cause them to
protrude beyond one edge of the matrix. The symmetric attribute only applies to characters that stretch vertically (otherwise it is ignored).
If a stretchy mo element is embellished (as defined earlier in this section), the mo element at its core is stretched to a size based on
the context of the embellished operator as a whole, i.e. to the same size as if the embellishments were not present. For example, the
parentheses in the following example (which would typically be set to be stretchy by the operator dictionary) will be stretched to the same
size as each other, and the same size they would have if they were not underlined and overlined, and furthermore will cover the same
vertical interval:
71
<mrow>
<munder>
<mo> ( </mo>
<mo> _ </mo>
</munder>
<mfrac>
<mi> a </mi>
<mi> b </mi>
</mfrac>
<mover>
<mo> ) </mo>
<mo> ‾ </mo>
</mover>
</mrow>
Note that this means that the stretching rules given below must refer to the context of the embellished operator as a whole, not just to the
mo element itself.
This shows one way to set the maximum size of a parenthesis so that it does not grow, even though its default value is stretchy="true".
<mrow>
<mo maxsize="1"> ( </mo>
<mfrac>
<mi> a </mi> <mi> b </mi>
</mfrac>
<mo maxsize="1"> ) </mo>
</mrow>
The above should render as ( ba ) as opposed to the default rendering ab .
Note that each parenthesis is sized independently; if only one of them had maxsize="1", they would render with different sizes.
• If a stretchy operator is a direct sub-expression of an mrow element, or is the sole direct sub-expression of an mtd element in
some row of a table, then it should stretch to cover the height and depth (above and below the axis) of the non-stretchy direct
sub-expressions in the mrow element or table row, unless stretching is constrained by minsize or maxsize attributes.
• In the case of an embellished stretchy operator, the preceding rule applies to the stretchy operator at its core.
72
• If symmetric="true", then the maximum of the height and depth is used to determine the size, before application of the
minsize or maxsize attributes.
• The preceding rules also apply in situations where the mrow element is inferred.
Most common opening and closing fences are defined in the operator dictionary to stretch by default; and they stretch vertically. Also,
operators such as ∑, ∫, /, and vertical arrows stretch vertically by default.
In the case of a stretchy operator in a table cell (i.e. within an mtd element), the above rules assume each cell of the table row containing
the stretchy operator covers exactly one row. (Equivalently, the value of the rowspan attribute is assumed to be 1 for all the table cells
in the table row, including the cell containing the operator.) When this is not the case, the operator should only be stretched vertically to
cover those table cells that are entirely within the set of table rows that the operator’s cell covers. Table cells that extend into rows not
covered by the stretchy operator’s table cell should be ignored. See Section 3.5.4.2 for details about the rowspan attribute.
If a stretchy operator is not required to stretch (i.e. if it is not in one of the locations mentioned above, or if there are no other expressions
whose size it should stretch to match), then it has the standard (unstretched) size determined by the font and current fontsize.
If a stretchy operator is required to stretch, but all other expressions in the containing element (as described above) are also stretchy, all
elements that can stretch should grow to the maximum of the normal unstretched sizes of all elements in the containing object, if they can
grow that large. If the value of minsize or maxsize prevents this then that (min or max) size is used.
For example, in an mrow containing nothing but vertically stretchy operators, each of the operators should stretch to the maximum of all
of their normal unstretched sizes, provided no other attributes are set that override this behavior. Of course, limitations in fonts or font
rendering may result in the final, stretched sizes being only approximately the same.
The largeop attribute specifies whether the operator should be drawn larger than normal if displaystyle="true" in the current
rendering environment. This roughly corresponds to TEX’s \displaystyle style setting. MathML uses two attributes, displaystyle
and scriptlevel, to control orthogonal presentation features that TEX encodes into one ‘style’ attribute with values \displaystyle,
\textstyle, \scriptstyle, and \scriptscriptstyle. These attributes are discussed further in Section 3.3.4 describing the mstyle
element. Note that these attributes can be specified directly on an mstyle element’s start tag, but not on most other elements. Examples
of large operators include ∫ and ∏.
The movablelimits attribute specifies whether underscripts and overscripts attached to this mo element should be drawn as subscripts
and superscripts when displaystyle="false". movablelimits="false" means that underscripts and overscripts should never be
drawn as subscripts and superscripts. In general, displaystyle is "true" for displayed mathematics and "false" for inline mathe-
matics. Also, displaystyle is "false" by default within tables, scripts and fractions, and a few other exceptional situations detailed in
Section 3.3.4. Thus, operators with movablelimits="true" will display with limits (i.e. underscripts and overscripts) in displayed math-
ematics, and with subscripts and superscripts in inline mathematics, tables, scripts and so on. Examples of operators that typically have
movablelimits="true" are ∑, ∏, and lim.
The accent attribute determines whether this operator should be treated by default as an accent (diacritical mark) when used as an
underscript or overscript; see munder, mover, and munderover (Section 3.4.4, Section 3.4.5 and Section 3.4.6).
The separator attribute may affect automatic linebreaking in renderers that position ordinary infix operators at the beginnings of broken
lines rather than at the ends (that is, which avoid linebreaking just after such operators), since linebreaking should be avoided just before
separators, but is acceptable just after them.
The fence attribute has no effect in the suggested visual rendering rules given here; it is not needed for properly rendering traditional
notation using these rules. It is provided so that specific MathML renderers, especially non-visual renderers, have the option of using this
information.
74
3.2.6.1 Description
An mtext element is used to represent arbitrary text that should be rendered as itself. In general, the mtext element is intended to denote
commentary text.
Note that some text with a clearly defined notational role might be more appropriately marked up using mi or mo; this is discussed further
below.
An mtext element can be used to contain ‘renderable whitespace’, i.e. invisible characters that are intended to alter the positioning of
surrounding elements. In non-graphical media, such characters are intended to have an analogous effect, such as introducing positive
or negative time delays or affecting rhythm in an audio renderer. This is not related to any whitespace in the source MathML consisting
of blanks, newlines, tabs, or carriage returns; whitespace present directly in the source is trimmed and collapsed, as described in Sec-
tion 2.4.6. Whitespace that is intended to be rendered as part of an element’s content must be represented by entity references or mspace
elements (unless it consists only of single blanks between non-whitespace characters).
3.2.6.2 Attributes
3.2.6.3 Examples
In some cases, text embedded in mathematics could be more appropriately represented using mo or mi elements. For example, the
expression ’there exists δ > 0 such that f (x) <1’ is equivalent to ∃δ > 0 3 f (x) < 1 and could be represented as:
75
<mrow>
<mo> there exists </mo>
<mrow>
<mrow>
<mi> δ </mi>
<mo> > </mo>
<mn> 0 </mn>
</mrow>
<mo> such that </mo>
<mrow>
<mrow>
<mi> f </mi>
<mo> ⁡ </mo>
<mrow>
<mo> ( </mo>
<mi> x </mi>
<mo> ) </mo>
</mrow>
</mrow>
<mo> < </mo>
<mn> 1 </mn>
</mrow>
</mrow>
</mrow>
An example involving an mi element is: x+x2 +···+xn . In this example, ellipsis should be represented using an mi element, since it takes
the place of a term in the sum; (see Section 3.2.3).
On the other hand, expository text within MathML is best represented with an mtext element. An example of this is:
Theorem 1: if x > 1, then x2 > x.
However, when MathML is embedded in HTML, or another document markup language, the example is probably best rendered with only
the two inequalities represented as MathML at all, letting the text be part of the surrounding HTML.
Another factor to consider in deciding how to mark up text is the effect on rendering. Text enclosed in an mo element is unlikely to be found
in a renderer’s operator dictionary, so it will be rendered with the format and spacing appropriate for an ‘unrecognized operator’, which
may or may not be better than the format and spacing for ‘text’ obtained by using an mtext element. An ellipsis entity in an mi element is
apt to be spaced more appropriately for taking the place of a term within a series than if it appeared in an mtext element.
3.2.7.1 Description
An mspace empty element represents a blank space of any desired size, as set by its attributes. It can also be used to make linebreaking
suggestions to a visual renderer. Note that the default values for attributes have been chosen so that they typically will have no effect on
rendering. Thus, the mspace element is generally used with one or more attribute values explicitly specified.
3.2.7.2 Attributes
In addition to the attributes listed below, mspace permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
width number h-unit | namedspace 0em
height number v-unit 0ex
depth number v-unit 0ex
linebreak auto | newline | indentingnewline | nobreak | goodbreak | badbreak auto
"h-unit" and "v-unit" represent units of horizontal or vertical length, respectively (see Section 2.4.4.2).
The linebreak attribute is used to give a linebreaking hint to a visual renderer. The default value is "auto", which indicates that a
renderer should use whatever default linebreaking algorithm it would normally use. The meanings of the other values are described in the
table below.
Value Description
newline start a new line and do not indent
indentingnewline start a new line and do indent
nobreak do not allow a linebreak here
goodbreak if a linebreak is needed on the line, here is a good spot
badbreak if a linebreak is needed on the line, try to avoid breaking here
In the case when both dimensional attributes and a linebreaking attribute are set, the linebreaking attribute is ignored.
Note the warning about the legal grouping of ‘space-like elements’ given below, and the warning about the use of such elements for
‘tweaking’ or conveying meaning in Section 3.3.6. See also the other elements that can render as whitespace, namely mtext, mphantom,
and maligngroup.
A number of MathML presentation elements are ‘space-like’ in the sense that they typically render as whitespace, and do not affect the
mathematical meaning of the expressions in which they appear. As a consequence, these elements often function in somewhat exceptional
ways in other MathML expressions. For example, space-like elements are handled specially in the suggested rendering rules for mo given
in Section 3.2.5. The following MathML elements are defined to be ‘space-like’:
• an mtext, mspace, maligngroup, or malignmark element;
• an mstyle, mphantom, or mpadded element, all of whose direct sub-expressions are space-like;
77
Authors who insert space-like elements or mphantom elements into an existing MathML expression should note that such elements are
counted as arguments, in elements that require a specific number of arguments, or that interpret different argument positions differently.
Therefore, space-like elements inserted into such a MathML element should be grouped with a neighboring argument of that element
by introducing an mrow for that purpose. For example, to allow for vertical alignment on the right edge of the base of a superscript, the
expression
<msup>
<mi> x </mi>
<malignmark edge="right"/>
<mn> 2 </mn>
</msup>
is illegal, because msup must have exactly 2 arguments; the correct expression would be:
<msup>
<mrow>
<mi> x </mi>
<malignmark edge="right"/>
</mrow>
<mn> 2 </mn>
</msup>
See also the warning about ‘tweaking’ in Section 3.3.6.
3.2.8.1 Description
The ms element is used to represent ‘string literals’ in expressions meant to be interpreted by computer algebra systems or other systems
containing ‘programming languages’. By default, string literals are displayed surrounded by double quotes. As explained in Section 3.2.6,
ordinary text embedded in a mathematical expression should be marked up with mtext, or in some cases mo or mi, but never with ms.
78
Note that the string literals encoded by ms are made up of characters, mglyphs and malignmarks rather than ‘ASCII strings’. For
example, <ms>&</ms> represents a string literal containing a single character, &, and <ms>&amp;</ms> represents a string
literal containing 5 characters, the first one of which is &.
Like all token elements, ms does trim and collapse whitespace in its content according to the rules of Section 2.4.6, so whitespace intended
to remain in the content should be encoded as described in that section.
3.2.8.2 Attributes
3.2.9.1 Description
Unicode defines a large number of characters used in mathematics, and in most cases, glyphs representing these characters are widely
available in a variety of fonts. Although these characters should meet almost all users needs, MathML recognizes that mathematics is not
static and that new characters are added when convenient. Characters that become well accepted will likely be eventually incorporated
by the Unicode Consortium or other standards bodies, but that is often a lengthy process. In the meantime, a mechanism is necessary for
accessing glyphs from non-standard fonts representing these characters.
The mglyph element is the means by which users can directly access glyphs for characters that are not defined by Unicode, or not known
to the renderer. Similarly, the mglyph element can also be used to select glyph variants for existing Unicode characters, as might be
desirable when a glyph variant has begun to differentiate itself as a new character by taking on a distinguished mathematical meaning.
The mglyph element names a specific glyph, and is valid inside any MathML leaf content listed in Section 3.1.6 (mi, etc.) or Section 4.2.2
(ci, etc.) unless otherwise restricted by an attribute (e.g. base=2 to <cn>). In order for a visually-oriented renderer to render the character,
the renderer must be told what font to use and what index within that font to use.
79
3.2.9.2 Attributes
mglyph elements accept the attributes listed in Section 3.2.2, and the additional attributes listed here.
Name values default
alt string required
fontfamily string | css-fontfamily required
index integer required
The alt attribute provides an alternate name for the glyph. If the specified font can’t be found, the renderer may use this name in a
warning message or some unknown glyph notation. The name might also be used by an audio renderer or symbol processing system and
should be chosen to be descriptive. The fontfamily and index uniquely identify the mglyph; two mglyphs with the same values for
fontfamily and index should be considered identical by applications that must determine whether two characters/glyphs are identical.
The alt attribute should not be part of the identity test.
The fontfamily and index attributes name a font and position within that font. All font properties apart from fontfamily are inherited.
Variants of the font (e.g., bold) that may be inherited may be ignored if the variant of the font is not present. Note that the use of the
fontfamily attribute is deprecated with other token elements, but not for use with mglyph.
Authors should be aware that rendering requires the fonts referenced by mglyph, which the MathML renderer may not have access to or
may be not be supported by the system on which the renderer runs. For these reasons, authors are encouraged to use mglyph only when
absolutely necessary, and not for stylistic purposes.
3.2.9.3 Example
The following example illustrates how a researcher might use the mglyph construct with an experimental font to work with braid group
notation.
<mrow>
<mi><mglyph fontfamily="my-braid-font" index="2" alt="23braid"/></mi>
<mo>+</mo>
<mi><mglyph fontfamily="my-braid-font" index="5" alt="132braid"/></mi>
<mo>=</mo>
<mi><mglyph fontfamily="my-braid-font" index="3" alt="13braid"/></mi>
</mrow>
This might render as:
80
3.3.1.1 Description
An mrow element is used to group together any number of sub-expressions, usually consisting of one or more mo elements acting as
‘operators’ on one or more other expressions that are their ‘operands’.
Several elements automatically treat their arguments as if they were contained in an mrow element. See the discussion of inferred mrows
in Section 3.1.3. See also mfenced (Section 3.3.8), which can effectively form an mrow containing its arguments separated by commas.
3.3.1.2 Attributes
This element only permits id, xref, class and style attributes, as described in Section 2.4.5.
mrow elements are typically rendered visually as a horizontal row of their arguments, left to right in the order in which the arguments occur,
or audibly as a sequence of renderings of the arguments. The description in Section 3.2.5 of suggested rendering rules for mo elements
assumes that all horizontal spacing between operators and their operands is added by the rendering of mo elements (or, more generally,
embellished operators), not by the rendering of the mrows they are contained in.
MathML is designed to allow renderers to automatically linebreak expressions (that is, to break excessively long expressions into several
lines), without requiring authors to specify explicitly how this should be done. This is because linebreaking positions can’t be chosen well
without knowing the width of the display device and the current font size, which for many uses of MathML will not be known except by the
renderer at the time of each rendering.
Determining good positions for linebreaks is complex, and rules for this are not described here; whether and how it is done is up to each
MathML renderer. Typically, linebreaking will involve selection of ‘good’ points for insertion of linebreaks between successive arguments
of mrow elements.
Although MathML does not require linebreaking or specify a particular linebreaking algorithm, it has several features designed to allow
such algorithms to produce good results. These include the use of special entities for certain operators, including invisible operators (see
Section 3.2.5), or for providing hints related to linebreaking when necessary (see Section 3.2.6), and the ability to use nested mrows to
describe sub-expression structure (see below).
81
Sub-expressions should be grouped by the document author in the same way as they are grouped in the mathematical interpretation of the
expression; that is, according to the underlying ‘syntax tree’ of the expression. Specifically, operators and their mathematical arguments
should occur in a single mrow; more than one operator should occur directly in one mrow only when they can be considered (in a syntactic
sense) to act together on the interleaved arguments, e.g. for a single parenthesized term and its parentheses, for chains of relational
operators, or for sequences of terms separated by + and -. A precise rule is given below.
Proper grouping has several purposes: it improves display by possibly affecting spacing; it allows for more intelligent linebreaking and
indentation; and it simplifies possible semantic interpretation of presentation elements by computer algebra systems, and audio renderers.
Although improper grouping will sometimes result in suboptimal renderings, and will often make interpretation other than pure visual
rendering difficult or impossible, any grouping of expressions using mrow is allowed in MathML syntax; that is, renderers should not
assume the rules for proper grouping will be followed.
A precise rule for when and how to nest sub-expressions using mrow is especially desirable when generating MathML automatically by
conversion from other formats for displayed mathematics, such as TEX, which don’t always specify how sub-expressions nest. When a
precise rule for grouping is desired, the following rule should be used:
Two adjacent operators (i.e. mo elements, possibly embellished), possibly separated by operands (i.e. anything other than operators),
should occur in the same mrow only when the left operator has an infix or prefix form (perhaps inferred), the right operator has an infix or
postfix form, and the operators are listed in the same group of entries in the operator dictionary provided in Appendix F. In all other cases,
nested mrows should be used.
When forming a nested mrow (during generation of MathML) that includes just one of two successive operators with the forms mentioned
above (which mean that either operator could in principle act on the intervening operand or operands), it is necessary to decide which
operator acts on those operands directly (or would do so, if they were present). Ideally, this should be determined from the original
expression; for example, in conversion from an operator-precedence-based format, it would be the operator with the higher precedence.
If this cannot be determined directly from the original expression, the operator that occurs later in the suggested operator dictionary
(Appendix F) can be assumed to have a higher precedence for this purpose.
82
Note that the above rule has no effect on whether any MathML expression is valid, only on the recommended way of generating MathML
from other formats for displayed mathematics or directly from written notation.
(Some of the terminology used in stating the above rule in defined in Section 3.2.5.)
3.3.1.4 Examples
As an example, 2x+y-z should be written as:
<mrow>
<mrow>
<mn> 2 </mn>
<mo> ⁢ </mo>
<mi> x </mi>
</mrow>
<mo> + </mo>
<mi> y </mi>
<mo> - </mo>
<mi> z </mi>
</mrow>
The proper encoding of (x, y) furnishes a less obvious example of nesting mrows:
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> , </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
In this case, a nested mrow is required inside the parentheses, since parentheses and commas, thought of as fence and separator
‘operators’, do not act together on their arguments.
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
linethickness number [ v-unit ] | thin | medium | thick 1 (rule thickness)
numalign left | center | right center
denomalign left | center | right center
bevelled true | false false
The linethickness attribute indicates the thickness of the horizontal ‘fraction bar’, or ‘rule’, typically used to render fractions. A fraction
with linethickness="0" renders without the bar, and might be used within binomial coefficients. A linethickness greater than one
might be used with nested fractions. These cases are shown below:
a a
b b
c
d
In general, the value of linethickness can be a number, as a multiplier of the default thickness of the fraction bar (the default thickness
is not specified by MathML), or a number with a unit of vertical length (see Section 2.4.4.2), or one of the keywords medium (same as 1),
thin (thinner than 1, otherwise up to the renderer), or thick (thicker than 1, otherwise up to the renderer).
The numalign and denomalign attributes control the horizontal alignment of the numerator and denominator respectively. Typically,
numerators and denominators are centered, but a very long numerator or denominator might be displayed on several lines and a left
alignment might be more appropriate for displaying them.
The bevelled attribute determines whether the fraction is displayed with the numerator above the denominator separated by a horizontal
line or whether a diagonal line is used to separate a slightly raised numerator from a slightly lowered denominator. The latter form
corresponds to the attribute value being "true" and provides for a more compact form for simple numerator and denominators. An
example illustrating the bevelled form is show below:
1 1
= x3 + 3x
x3 + 3x
The mfrac element sets displaystyle to "false", or if it was already false increments scriptlevel by 1, within numerator and
denominator. These attributes are inherited by every element from its rendering environment, but can be set explicitly only on the mstyle
and mtable elements. (See Section 3.3.4.)
3.3.2.3 Examples
<mrow>
<mo> ( </mo>
<mfrac linethickness="0">
<mi> a </mi>
<mi> b </mi>
</mfrac>
<mo> ) </mo>
</mrow>
<mfrac linethickness="2">
<mfrac>
<mi> a </mi>
<mi> b </mi>
</mfrac>
<mfrac>
<mi> c </mi>
<mi> d </mi>
</mfrac>
</mfrac>
85
<mfrac>
<mn> 1 </mn>
<mrow>
<msup>
<mi> x </mi>
<mn> 3 </mn>
</msup>
<mo> + </mo>
<mfrac>
<mi> x </mi>
<mn> 3 </mn>
</mfrac>
</mrow>
</mfrac>
<mo> = </mo>
<mfrac bevelled="true">
<mn> 1 </mn>
<mrow>
<msup>
<mi> x </mi>
<mn> 3 </mn>
</msup>
<mo> + </mo>
<mfrac>
<mi> x </mi>
<mn> 3 </mn>
</mfrac>
</mrow>
</mfrac>
A more generic example is:
86
<mfrac>
<mrow>
<mn> 1 </mn>
<mo> + </mo>
<msqrt>
<mn> 5 </mn>
</msqrt>
</mrow>
<mn> 2 </mn>
</mfrac>
3.3.3.1 Description
These elements construct radicals. The msqrt element is used for square roots, while the mroot element is used to draw radicals with
indices, e.g. a cube root. The syntax for these elements is:
3.3.3.2 Attributes
This element only permits id, xref, class and style attributes, as described in Section 2.4.5.
The mroot element increments scriptlevel by 2, and sets displaystyle to "false", within index, but leaves both attributes un-
changed within base. The msqrt element leaves both attributes unchanged within all its arguments. These attributes are inherited by
every element from its rendering environment, but can be set explicitly only on mstyle. (See Section 3.3.4.)
3.3.4.1 Description
The mstyle element is used to make style changes that affect the rendering of its contents. mstyle can be given any attribute accepted
by any MathML presentation element provided that the attribute value is inherited, computed or has a default value; presentation element
attributes whose values are required are not accepted by the mstyle element. In addition mstyle can also be given certain special
attributes listed below.
87
The mstyle element accepts any number of arguments. If this number is not 1, its contents are treated as a single ‘inferred mrow’ formed
from all its arguments, as described in Section 3.1.3.
Loosely speaking, the effect of the mstyle element is to change the default value of an attribute for the elements it contains. Style changes
work in one of several ways, depending on the way in which default values are specified for an attribute. The cases are:
• Some attributes, such as displaystyle or scriptlevel (explained below), are inherited from the surrounding context when
they are not explicitly set. Specifying such an attribute on an mstyle element sets the value that will be inherited by its child
elements. Unless a child element overrides this inherited value, it will pass it on to its children, and they will pass it to their
children, and so on. But if a child element does override it, either by an explicit attribute setting or automatically (as is common
for scriptlevel), the new (overriding) value will be passed on to that element’s children, and then to their children, etc, until
it is again overridden.
• Other attributes, such as linethickness on mfrac, have default values that are not normally inherited. That is, if the
linethickness attribute is not set on the start tag of an mfrac element, it will normally use the default value of "1", even if
it was contained in a larger mfrac element that set this attribute to a different value. For attributes like this, specifying a value
with an mstyle element has the effect of changing the default value for all elements within its scope. The net effect is that
setting the attribute value with mstyle propagates the change to all the elements it contains directly or indirectly, except for the
individual elements on which the value is overridden. Unlike in the case of inherited attributes, elements that explicitly override
this attribute have no effect on this attribute’s value in their children.
• Another group of attributes, such as stretchy and form, are computed from operator dictionary information, position in the
enclosing mrow, and other similar data. For these attributes, a value specified by an enclosing mstyle overrides the value that
would normally be computed.
Note that attribute values inherited from an mstyle in any manner affect a given element in the mstyle’s content only if that attribute is
not given a value in that element’s start tag. On any element for which the attribute is set explicitly, the value specified on the start tag
overrides the inherited value. The only exception to this rule is when the value given on the start tag is documented as specifying an
incremental change to the value inherited from that element’s context or rendering environment.
Note also that the difference between inherited and non-inherited attributes set by mstyle, explained above, only matters when the
attribute is set on some element within the mstyle’s contents that has children also setting it. Thus it never matters for attributes, such as
color, which can only be set on token elements (or on mstyle itself).
There are several exceptional elements, mpadded, mtable, mtr, mlabeledtr and mtd that have attributes which cannot be set with
mstyle. The mpadded and mtable elements share attribute names with the mspace element. The mtable, mtr, mlabeledtr and
mtd all share attribute names. Similarly, mpadded and mo elements also share an attribute name. Since the syntax for the values these
shared attributes accept differs between elements, MathML specifies that when the attributes height, width or depth are specified on
an mstyle element, they apply only to mspace elements, and not the corresponding attributes of mpadded or mtable. Similarly, when
rowalign, columnalign or groupalign are specified on an mstyle element, the apply only to the mtable element, and not the row
and cell elements. Finally, when lspace is set with mstyle, it applies only to the mo element and not mpadded.
88
3.3.4.2 Attributes
As stated above, mstyle accepts all attributes of all MathML presentation elements which do not have required values. That is, all
attributes which have an explicit default value or a default value which is inherited or computed are accepted by the mstyle element.
This element also accepts id, xref, class and style attributes, as described in Section 2.4.5.
Additionally, mstyle can be given the following special attributes that are implicitly inherited by every MathML element as part of its
rendering environment:
Name values default
scriptlevel [’+’ | ’-’] unsigned-integer inherited
displaystyle true | false inherited
scriptsizemultiplier number 0.71
scriptminsize number v-unit 8pt
background #rgb | #rrggbb | transparent | html-color-name transparent
veryverythinmathspace number h-unit 0.0555556em
verythinmathspace number h-unit 0.111111em
thinmathspace number h-unit 0.166667em
mediummathspace number h-unit 0.222222em
thickmathspace number h-unit 0.277778em
verythickmathspace number h-unit 0.333333em
veryverythickmathspace number h-unit 0.388889em
For an instance of MathML embedded in a textual data format (such as HTML) in ‘display’ mode, i.e. in place of a paragraph,
displaystyle = "true" and scriptlevel = "0" for the outermost expression of the embedded MathML; if the MathML is embedded
in ‘inline’ mode, i.e. in place of a character, displaystyle = "false" and scriptlevel = "0" for the outermost expression. See
Chapter 7 for further discussion of the distinction between ‘display’ and ‘inline’ embedding of MathML and how this can be specified in
particular instances. In general, a MathML renderer may determine these initial values in whatever manner is appropriate for the location
and context of the specific instance of MathML it is rendering, or if it has no way to determine this, based on the way it is most likely to be
used; as a last resort it is suggested that it use the most generic values displaystyle = ""true"" and scriptlevel = ""0"".
The MathML layout schemata that typically display some of their arguments in smaller type or with less vertical spacing, namely the
elements for scripts, fractions, radicals, and tables or matrices, set displaystyle to "false", and in some cases increase scriptlevel,
for those arguments. The new values are inherited by all sub-expressions within those arguments, unless they are overridden.
The specific rules by which each element modifies displaystyle and/or scriptlevel are given in the specification for each element
that does so; the complete list of elements that modify either attribute are: the ‘scripting’ elements msub, msup, msubsup, munder, mover,
munderover, and mmultiscripts; and the elements mfrac, mroot, and mtable.
When mstyle is given a scriptlevel attribute with no sign, it sets the value of scriptlevel within its contents to the value given,
which must be a nonnegative integer. When the attribute value consists of a sign followed by an integer, the value of scriptlevel is
incremented (for ’+’) or decremented (for ’-’) by the amount given. The incremental syntax for this attribute is an exception to the general
rules for setting inherited attributes using mstyle, and is not allowed by any other attribute on mstyle.
Whenever the scriptlevel is changed, either automatically or by being explicitly incremented, decremented, or set, the current font
size is multiplied by the value of scriptsizemultiplier to the power of the change in scriptlevel. For example, if scriptlevel is
increased by 2, the font size is multiplied by scriptsizemultiplier twice in succession; if scriptlevel is explicitly set to 2 when it
had been 3, the font size is divided by scriptsizemultiplier. References to fontsize in this section should be interpreted to mean
either the fontsize attribute or the mathsize attribute.
The default value of scriptsizemultiplier is less than one (in fact, it is approximately the square root of 1/2), resulting in a smaller
font size with increasing scriptlevel. To prevent scripts from becoming unreadably small, the font size is never allowed to go below
the value of scriptminsize as a result of a change to scriptlevel, though it can be set to a lower value using the fontsize
attribute (Section 3.2.2) on mstyle or on token elements. If a change to scriptlevel would cause the font size to become lower than
scriptminsize using the above formula, the font size is instead set equal to scriptminsize within the sub-expression for which
scriptlevel was changed.
In the syntax for scriptminsize, v-unit represents a unit of vertical length (as described in Section 2.4.4.2). The most common unit
for specifying font sizes in typesetting is pt (points).
Explicit changes to the fontsize attribute have no effect on the value of scriptlevel.
90
For MathML renderers that support CSS style sheets, or some other analogous style sheet mechanism, absolute or relative changes to
fontsize (or other attributes) may occur implicitly on any element in response to a style sheet. Changes to fontsize of this kind also
have no effect on scriptlevel. A style sheet-induced change to fontsize overrides scriptminsize in the same way as for an explicit
change to fontsize in the element’s start tag (discussed above), whether it is specified in the style sheet as an absolute or a relative
change. (However, any subsequent scriptlevel-induced change to fontsize will still be affected by it.) As is required for inherited
attributes in CSS, the style sheet-modified fontsize is inherited by child elements.
If the same element is subject to both a style sheet-induced and an automatic (scriptlevel-related) change to its own fontsize, the
scriptlevel-related change is done first - in fact, in the simplest implementation of the element-specific rules for scriptlevel, this
change would be done by the element’s parent as part of producing the rendering properties it passes to the given element, since it is the
parent element that knows whether scriptlevel should be changed for each of its child elements.
If the element’s own fontsize is changed by a style sheet and it also changes scriptlevel (and thus fontsize) for one of its
children, the style sheet-induced change is done first, followed by the change inherited by that child. If more than one child’s
scriptlevel is changed, the change inherited by each child has no effect on the other children. (As a mnemonic rule that applies to
a ‘parse tree’ of elements and their children, style sheet-induced changes to fontsize can be associated to nodes of the tree, i.e. to
MathML elements, and scriptlevel-related changes can be associated to the edges between parent and child elements; then the
order of the associated changes corresponds to the order of nodes and edges in each path down the tree.) For general information on
the relative order of processing of properties set by style sheets versus by attributes, see the appropriate subsection of CSS-compatible
attributes in Section 2.4.4.3.
If scriptlevel is changed incrementally by an mstyle element that also sets certain other attributes, the overall effect of the changes
may depend on the order in which they are processed. In such cases, the attributes in the following list should be processed in the following
order, regardless of the order in which they occur in the XML-format attribute list of the mstyle start tag: scriptsizemultiplier,
scriptminsize, scriptlevel, fontsize.
Note that scriptlevel can, in principle, attain any integral value by being decremented sufficiently, even though it can only be explicitly
set to nonnegative values. Negative values of scriptlevel generated in this way are legal and should work as described, generating font
sizes larger than those of the surrounding expression. Since scriptlevel is initially 0 and never decreases automatically, it will always
be nonnegative unless it is decremented past 0 using mstyle.
Explicit decrements of scriptlevel after the font size has been limited by scriptminsize as described above would produce unde-
sirable results. This might occur, for example, in a representation of a continued fraction, in which the scriptlevel was decremented for
part of the denominator back to its value for the fraction as a whole, if the continued fraction itself was located in a place that had a
high scriptlevel. To prevent this problem, MathML renderers should, when decrementing scriptlevel, use as the initial font size the
value the font size would have had if it had never been limited by scriptminsize. They should not, however, ignore the effects of explicit
settings of fontsize, even to values below scriptminsize.
91
Since MathML renderers may be unable to make use of arbitrary font sizes with good results, they may wish to modify the mapping from
scriptlevel to fontsize to produce better renderings in their judgment. In particular, if fontsizes have to be rounded to available values, or
limited to values within a range, the details of how this is done are up to the renderer. Renderers should, however, ensure that a series
of incremental changes to scriptlevel resulting in its return to the same value for some sub-expression that it had in a surrounding
expression results in the same fontsize for that sub-expression as for the surrounding expression.
3.3.4.3 Examples
The example of limiting the stretchiness of a parenthesis shown in the section on <mo>,
<mrow>
<mo maxsize="1"> ( </mo>
<mfrac> <mi> a </mi> <mi> b </mi> </mfrac>
<mo maxsize="1"> ) </mo>
</mrow>
92
<mstyle maxsize="1">
<mrow>
<mo> ( </mo>
<mfrac> <mi> a </mi> <mi> b </mi> </mfrac>
<mo> ) </mo>
</mrow>
</mstyle>
3.3.5.2 Attributes
This element only permits id, xref, class and style attributes, as described in Section 2.4.5.
3.3.5.3 Example
If a MathML syntax-checking preprocessor received the input
93
<mfraction>
<mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
<mn> 2 </mn>
</mfraction>
which contains the non-MathML element mfraction (presumably in place of the MathML element mfrac), it might generate the error
message
<merror>
<mtext> Unrecognized element: mfraction;
arguments were: </mtext>
<mrow> <mn> 1 </mn> <mo> + </mo> <msqrt> <mn> 5 </mn> </msqrt> </mrow>
<mtext> and </mtext>
<mn> 2 </mn>
</merror>
Note that the preprocessor’s input is not, in this case, valid MathML, but the error message it outputs is valid MathML.
3.3.6.1 Description
An mpadded element renders the same as its content, but with its overall size and other dimensions (such as baseline position) modified
according to its attributes. The mpadded element does not rescale (stretch or shrink) its content; its only effect is to modify the apparent
size and position of the ‘bounding box’ around its content, so as to affect the relative position of the content with respect to the surrounding
elements. The name of the element reflects the use of mpadded to effectively add ‘padding’, or extra space, around its content. If the
‘padding’ is negative, it is possible for the content of mpadded to be rendered outside the mpadded element’s bounding box; see below for
warnings about several potential pitfalls of this effect.
The mpadded element accepts any number of arguments; if this number is not 1, its contents are treated as a single ‘inferred mrow’ as
described in Section 3.1.3.
It is suggested that audio renderers add (or shorten) time delays based on the attributes representing horizontal space (width and
lspace).
3.3.6.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
94
These attributes modify the dimensions of the ‘bounding box’ of the mpadded element. The dimensions (which have the same names
as the attributes) are defined in the next subsection. Depending on the format of the attribute value, a dimension may be set to a new
value, or to an incremented or decremented version of the content’s corresponding dimension. Values may be specified as multiples or
percentages of any of the dimensions of the normal rendering of the element’s content (using so-called ‘pseudo-units’), or they can be set
directly using standard units Section 2.4.4.2.
If an attribute value begins with a + or - sign, it specifies an increment or decrement of the corresponding dimension by the following
length value (interpreted as explained below). Otherwise, the corresponding dimension is set directly to the following length value. Note
that the + and - do not mean that the following value is positive or negative, even when an explicit length unit (h-unit or v-unit) is given. In
particular, these attributes cannot directly set a dimension to a negative value.
Length values (after the optional sign, which is not part of the length value) can be specified in several formats. Each format begins with
an unsigned-number, which may be followed by a % sign and an optional ‘pseudo-unit’ (denoted by pseudo-unit in the attribute syntaxes
above), by a pseudo-unit alone, or by one of the length units (denoted by h-unit or v-unit) specified in Section 2.4.4.2, not including %.
The possible pseudo-units are the keywords width, lspace, height, and depth; they each represent the length of the same-named
dimension of the mpadded element’s content (not of the mpadded element itself). The lengths represented by h-unit or v-unit are described
in Section 2.4.4.2.
In any of these formats, the length value specified is the product of the specified number and the length represented by the unit or pseudo-
unit. The result is multiplied by 0.01 if % is given. If no pseudo-unit is given after %, the one with the same name as the attribute being
specified is assumed.
Some examples of attribute formats using pseudo-units (explicit or default) are as follows: depth="100% height" and depth="1.0
height" both set the depth of the mpadded element to the height of its content. depth="105%" sets the depth to 1.05 times the content’s
depth, and either depth="+100%" or depth="200%" sets the depth to twice the content’s depth.
Dimensions that would be positive if the content was rendered normally cannot be made negative using mpadded; a positive dimension is
set to 0 if it would otherwise become negative. Dimensions that are initially 0 can be made negative, but this should generally be avoided.
See the warnings below on the use of negative spacing for ‘tweaking’ or conveying meaning.
The rules given above imply that all of the following attribute settings have the same effect, which is to leave the content’s dimensions
unchanged:
95
See Appendix H for further information about some of the typesetting terms used here.
The width attribute refers to the overall horizontal width of a bounding box. By default (i.e. when lspace is not modified), the bounding
box of the content of an mpadded element should be rendered flush with the left edge of the mpadded element’s bounding box. Thus,
increasing width alone effectively adds space on the right edge of the box.
The lspace attribute refers to the amount of space between the left edge of a bounding box and the start of the rendering of its contents’
bounding box. Unlike the other dimensions, lspace does not correspond to a real property of a bounding box, but exists only transiently
during the computations done by each instance of mpadded. It is provided so that there is a way to add space on the left edge of a
bounding box.
The rationale behind using width and lspace to control horizontal padding instead of more symmetric attributes, such as a hypothetical
rspace and lspace, is that it is desirable to have a ‘width’ pseudo unit, in part because ‘width’ is an actual property of a bounding box.
The height attribute refers to the amount of vertical space between the baseline (the line along the bottom of most letter glyphs in normal
text rendering) and the top of the bounding box.
The depth attribute refers to the amount of vertical space between the bottom of the bounding box and the baseline.
MathML renderers should ensure that, except for the effects of the attributes, relative spacing between the contents of mpadded and
surrounding MathML elements is not modified by replacing an mpadded element with an mrow element with the same content. This holds
even if linebreaking occurs within the mpadded element. However, if an mpadded element with non-default attribute values is subjected to
linebreaking, MathML does not define how its attributes or rendering interact with the linebreaking algorithm.
A likely temptation for the use of the mpadded and mspace elements (and perhaps also mphantom and mtext) will be for an author to
improve the spacing generated by a specific renderer by slightly modifying it in specific expressions, i.e. to ‘tweak’ the rendering.
96
Authors are strongly warned that different MathML renderers may use different spacing rules for computing the relative positions of
rendered symbols in expressions that have no explicit modifications to their spacing; if renderer B improves upon renderer A’s spacing
rules, explicit spacing added to improve the output quality of renderer A may produce very poor results in renderer B, very likely worse
than without any ‘tweaking’ at all.
Even when a specific choice of renderer can be assumed, its spacing rules may be improved in successive versions, so that the effect of
tweaking in a given MathML document may grow worse with time. Also, when style sheet mechanisms are extended to MathML, even one
version of a renderer may use different spacing rules for users with different style sheets.
Therefore, it is suggested that MathML markup never use mpadded or mspace elements to tweak the rendering of specific expressions,
unless the MathML is generated solely to be viewed using one specific version of one MathML renderer, using one specific style sheet (if
style sheets are available in that renderer).
In cases where the temptation to improve spacing proves too strong, careful use of mpadded, mphantom, or the alignment elements
(Section 3.5.5) may give more portable results than the direct insertion of extra space using mspace or mtext. Advice given to the
implementors of MathML renderers might be still more productive, in the long run.
MathML elements that permit ‘negative spacing’, namely mspace, mpadded, and mtext, could in theory be used to simulate new notations
or ‘overstruck’ characters by the visual overlap of the renderings of more than one MathML sub-expression.
This practice is strongly discouraged in all situations, for the following reasons:
• it will give different results in different MathML renderers (so the warning about ‘tweaking’ applies), especially if attempts are
made to render glyphs outside the bounding box of the MathML expression;
• it is likely to appear much worse than a more standard construct supported by good renderers;
• such expressions are almost certain to be uninterpretable by audio renderers, computer algebra systems, text searches for
standard symbols, or other processors of MathML input.
More generally, any construct that uses spacing to convey mathematical meaning, rather than simply as an aid to viewing expression
structure, is discouraged. That is, the constructs that are discouraged are those that would be interpreted differently by a human viewer
of rendered MathML if all explicit spacing was removed.
If such constructs are used in spite of this warning, they should be enclosed in a semantics element that also provides an additional
MathML expression that can be interpreted in a standard way.
<mrow>
<mi> C </mi>
<mpadded width="0em">
<mspace width="-0.3em"/>
<mtext> | </mtext>
</mpadded>
</mrow>
forms an overstruck symbol in violation of the policy stated above; it might be intended to represent the set of complex numbers for a
MathML renderer that lacks support for the standard symbol used for this purpose. This kind of construct should always be avoided in
MathML, for the reasons stated above; indeed, it should never be necessary for standard symbols, since a MathML renderer with no better
method of rendering them is free to use overstriking internally, so that it can still support general MathML input.
However, if for whatever reason such a construct is used in MathML, it should always be enclosed in a semantics element such as
<semantics>
<mrow>
<mi> C </mi>
<mpadded width="0em">
<mspace width="-0.3em"/>
<mtext> | </mtext>
</mpadded>
</mrow>
<annotation-xml encoding="MathML-Presentation">
<mi> ℂ </mi>
</annotation-xml>
</semantics>
which provides an alternative, standard encoding for the desired symbol, which is much more easily interpreted than the construct using
negative spacing. The alternative encoding in this example uses MathML presentation elements; the content elements described in
Chapter 4 should also be considered.
The above warning also applies to most uses of rendering attributes to alter the meaning conveyed by an expression, with the exception
of attributes on mi (such as fontweight) used to distinguish one variable from another.
3.3.7.1 Description
The mphantom element renders invisibly, but with the same size and other dimensions, including baseline position, that its contents would
have if they were rendered normally. mphantom can be used to align parts of an expression by invisibly duplicating sub-expressions.
98
The mphantom element accepts any number of arguments; if this number is not 1, its contents are treated as a single ‘inferred mrow’
formed from all its arguments, as described in Section 3.1.3.
3.3.7.2 Attributes
This element only permits id, xref, class and style attributes, as described in Section 2.4.5.
Note that it is possible to wrap both an mphantom and an mpadded element around one MathML expression, as in <mphantom><mpadded
attribute-settings> ... </mpadded></mphantom>, to change its size and make it invisible at the same time.
MathML renderers should ensure that the relative spacing between the contents of an mphantom element and the surrounding MathML
elements is the same as it would be if the mphantom element were replaced by an mrow element with the same content. This holds even
if linebreaking occurs within the mphantom element.
For the above reason, mphantom is not considered space-like (Section 3.2.7) unless its content is space-like, since the suggested render-
ing rules for operators are affected by whether nearby elements are space-like. Even so, the warning about the legal grouping of space-like
elements may apply to uses of mphantom.
There is one situation where the preceding rule for rendering an mphantom may not give the desired effect. When an mphantom is
wrapped around a subsequence of the arguments of an mrow, the default determination of the form attribute for an mo element within the
subsequence can change. (See the default value of the form attribute described in Section 3.2.5.) It may be necessary to add an explicit
form attribute to such an mo in these cases. This is illustrated in the following example.
3.3.7.3 Examples
In this example, mphantom is used to ensure alignment of corresponding parts of the numerator and denominator of a fraction:
99
<mfrac>
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mrow>
<mi> x </mi>
<mphantom>
<mo form="infix"> + </mo>
<mi> y </mi>
</mphantom>
<mo> + </mo>
<mi> z </mi>
</mrow>
</mfrac>
This would render as something like
x+y+z
x +z
rather than as
x+y+z
x+z
The explicit attribute setting form="infix" on the mo element inside the mphantom sets the form attribute to what it would have been in
the absence of the surrounding mphantom. This is necessary since otherwise, the + sign would be interpreted as a prefix operator, which
might have slightly different spacing.
Alternatively, this problem could be avoided without any explicit attribute settings, by wrapping each of the arguments <mo>+</mo> and
<mi>y</mi> in its own mphantom element, i.e.
100
<mfrac>
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mrow>
<mi> x </mi>
<mphantom>
<mo> + </mo>
</mphantom>
<mphantom>
<mi> y </mi>
</mphantom>
<mo> + </mo>
<mi> z </mi>
</mrow>
</mfrac>
3.3.8.1 Description
The mfenced element provides a convenient form in which to express common constructs involving fences (i.e. braces, brackets, and
parentheses), possibly including separators (such as comma) between the arguments.
<mrow>
<mo> ( </mo>
<mrow> <mi>x</mi> <mo>,</mo> <mi>y</mi> </mrow>
<mo> ) </mo>
</mrow>
101
Individual fences or separators are represented using mo elements, as described in Section 3.2.5. Thus, any mfenced element is com-
pletely equivalent to an expanded form described below; either form can be used in MathML, at the convenience of an author or of a
MathML-generating program. A MathML renderer is required to render either of these forms in exactly the same way.
In general, an mfenced element can contain zero or more arguments, and will enclose them between fences in an mrow; if there is
more than one argument, it will insert separators between adjacent arguments, using an additional nested mrow around the arguments
and separators for proper grouping (Section 3.3.1). The general expanded form is shown below. The fences and separators will be
parentheses and comma by default, but can be changed using attributes, as shown in the following table.
3.3.8.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
open string (
close string )
separators character * ,
A generic mfenced element, with all attributes explicit, looks as follows:
<mfenced open="opening-fence"
close="closing-fence"
separators="sep#1 sep#2 ... sep#(n-1)" >
arg#1
...
arg#n
</mfenced>
The "opening-fence" and "closing-fence" are arbitrary strings. (Since they are used as the content of mo elements, any whitespace
they contain will be trimmed and collapsed as described in Section 2.4.6.)
The value of separators is a sequence of zero or more separator characters (or entity references), optionally separated by whitespace.
Each sep#i consists of exactly one character or entity reference. Thus, separators=",;" is equivalent to separators=" , ; ".
The general mfenced element shown above is equivalent to the following expanded form:
102
<mrow>
<mo fence="true"> opening-fence </mo>
<mrow>
arg#1
<mo separator="true"> sep#1 </mo>
...
<mo separator="true"> sep#(n-1) </mo>
arg#n
</mrow>
<mo fence="true"> closing-fence </mo>
</mrow>
Each argument except the last is followed by a separator. The inner mrow is added for proper grouping, as described in Section 3.3.1.
When there is only one argument, the above form has no separators; since <mrow> arg#1 </mrow> is equivalent to arg#1 (as described
in Section 3.3.1), this case is also equivalent to:
<mrow>
<mo fence="true"> opening-fence </mo>
arg#1
<mo fence="true"> closing-fence </mo>
</mrow>
If there are too many separator characters, the extra ones are ignored. If separator characters are given, but there are too few, the last
one is repeated as necessary. Thus, the default value of separators="," is equivalent to separators="„", separators="„,", etc. If there
are no separator characters provided but some are needed, for example if separators=" " or "" and there is more than one argument,
then no separator elements are inserted at all - that is, the elements <mo separator="true"> sep#i </mo> are left out entirely. Note
that this is different from inserting separators consisting of mo elements with empty content.
<mfenced open="opening-fence"
close="closing-fence"
separators="anything" >
</mfenced>
the equivalent expanded form is defined to include just the fences within an mrow:
103
<mrow>
<mo fence="true"> opening-fence </mo>
<mo fence="true"> closing-fence </mo>
</mrow>
Note that not all ‘fenced expressions’ can be encoded by an mfenced element. Such exceptional expressions include those with an
‘embellished’ separator or fence or one enclosed in an mstyle element, a missing or extra separator or fence, or a separator with multiple
content characters. In these cases, it is necessary to encode the expression using an appropriately modified version of an expanded form.
As discussed above, it is always permissible to use the expanded form directly, even when it is not necessary. In particular, authors cannot
be guaranteed that MathML preprocessors won’t replace occurrences of mfenced with equivalent expanded forms.
Note that the equivalent expanded forms shown above include attributes on the mo elements that identify them as fences or separators.
Since the most common choices of fences and separators already occur in the operator dictionary with those attributes, authors would
not normally need to specify those attributes explicitly when using the expanded form directly. Also, the rules for the default form at-
tribute (Section 3.2.5) cause the opening and closing fences to be effectively given the values form="prefix" and form="postfix"
respectively, and the separators to be given the value form="infix".
Note that it would be incorrect to use mfenced with a separator of, for instance, ‘+’, as an abbreviation for an expression using ‘+’ as an
ordinary operator, e.g.
<mrow>
<mi>x</mi> <mo>+</mo> <mi>y</mi> <mo>+</mo> <mi>z</mi>
</mrow>
This is because the + signs would be treated as separators, not infix operators. That is, it would render as if they were marked up as <mo
separator="true">+</mo>, which might therefore render inappropriately.
3.3.8.3 Examples
(a+b)
<mfenced>
<mrow>
<mi> a </mi>
<mo> + </mo>
<mi> b </mi>
</mrow>
</mfenced>
Note that the above mrow is necessary so that the mfenced has just one argument. Without it, this would render incorrectly as ‘(a, +, b)’.
[0,1)
104
<mfenced open="[">
<mn> 0 </mn>
<mn> 1 </mn>
</mfenced>
f (x,y)
<mrow>
<mi> f </mi>
<mo> ⁡ </mo>
<mfenced>
<mi> x </mi>
<mi> y </mi>
</mfenced>
</mrow>
3.3.9.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
The values allowed for notation are open-ended. Conforming renderers may ignore any value they do not handle, although renderers
are encouraged to render as many of the values listed below as possible.
Name values
notation longdiv | actuarial | radical | box | roundedbox | circle | left | right | top | bottom | updiagonalstrike | downdiagonalstrike | verticalstrike |
Any number of values can be given for notation separated by whitespace; all of those given and understood by a MathML renderer
should be rendered. For example, notation="circle horizontalstrike" should result in circle around the contents of menclose
with a horizontal line through the contents.
When notation has the value "longdiv", the contents are drawn enclosed by a long division symbol. A complete example of long
division is accomplished by also using mtable and malign. When notation is specified as "actuarial", the contents are drawn
enclosed by an actuarial symbol. A similar result can be achieved with the value "top right". The case of notation="radical" is
equivalent to the msqrt schema.
105
The values "box", "roundedbox", and "circle" should enclose the contents as indicated by the values. The amount of distance
between the box, roundedbox, or circle, and the contents are not specified by MathML, and is left to the renderer. In practice, paddings on
each side of 0.4em in the horizontal direction and .5ex in the vertical direction seem to work well.
The values "left", "right", "top" and "bottom" should result in lines drawn on those sides of the contents. The values
"updiagonalstrike", "downdiagonalstrike", "verticalstrike" and "horizontalstrike" should result in the indicated strike-
out lines being superimposed over the content of the menclose, e.g. a strikeout that extends from the lower left corner to the upper right
corner of the menclose element for "updiagonalstrike", etc.
3.3.9.3 Examples
The following markup might be used to encode an elementary US-style long division problem.
<mtable columnspacing=’0pt’ rowspacing=’0pt’>
<mtr>
<mtd></mtd>
<mtd columnalign=’right’><mn>10</mn></mtd>
</mtr>
<mtr>
<mtd columnalign=’right’><mn>131</mn></mtd>
<mtd columnalign=’right’>
<menclose notation=’longdiv’><mn>1413</mn></menclose>
</mtd>
</mtr>
<mtr>
<mtd></mtd>
<mtd columnalign=’right’>
<mrow>
<munder>
<mn>131</mn>
<mo> _ </mo>
</munder>
<mphantom><mn>3</mn></mphantom>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd></mtd>
<mtd columnalign=’right’><mn>103</mn></mtd>
</mtr>
106
</mtable>
This might be rendered roughly as:
10
131)1413
131
103
An example of using menclose for actuarial notation is
<msub>
<mi>a</mi>
<mrow>
<menclose notation=’actuarial’>
<mi>n</mi>
</menclose>
<mo>⁢</mo>
<mi>i</mi>
</mrow>
</msub>
which renders roughly as
a
n |i
In addition to sub/superscript elements, MathML has overscript and underscript elements that place scripts above and below the base.
These elements can be used to place limits on large operators, or for placing accents and lines above or below the base. The rules
for rendering accents differ from those for overscripts and underscripts, and this difference can be controlled with the accent and
accentunder attributes, as described in the appropriate sections below.
Rendering of scripts is affected by the scriptlevel and displaystyle attributes, which are part of the environment inherited by
the rendering process of every MathML expression, and are described under mstyle (Section 3.3.4). These attributes cannot be given
explicitly on a scripting element, but can be specified on the start tag of a surrounding mstyle element if desired.
107
MathML also provides an element for attachment of tensor indices. Tensor indices are distinct from ordinary subscripts and superscripts
in that they must align in vertical columns. Tensor indices can also occur in prescript positions.
Because presentation elements should be used to describe the abstract notational structure of expressions, it is important that the base
expression in all ‘scripting’ elements (i.e. the first argument expression) should be the entire expression that is being scripted, not just the
rightmost character. For example, (x+y)2 should be written as:
<msup>
<mrow>
<mo> ( </mo>
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
<mn> 2 </mn>
</msup>
3.4.1.1 Description
3.4.1.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
subscriptshift number v-unit automatic (typical unit is ex)
The subscriptshift attribute specifies the minimum amount to shift the baseline of subscript down.
v-unit represents a unit of vertical length (see Section 2.4.4.2).
The msub element increments scriptlevel by 1, and sets displaystyle to "false", within subscript, but leaves both attributes
unchanged within base. (These attributes are inherited by every element through its rendering environment, but can be set explicitly only
on mstyle; see Section 3.3.4.)
108
3.4.2.1 Description
3.4.2.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
superscriptshift number v-unit automatic (typical unit is ex)
The superscriptshift attribute specifies the minimum amount to shift the baseline of superscript up.
The msup element increments scriptlevel by 1, and sets displaystyle to "false", within superscript, but leaves both attributes
unchanged within base. (These attributes are inherited by every element through its rendering environment, but can be set explicitly only
on mstyle; see Section 3.3.4.)
3.4.3.1 Description
The msubsup element is used to attach both a subscript and superscript to a base expression. Note that both scripts are positioned tight
against the base as shown here x12 versus the staggered positioning of nested scripts as shown here x1 2 .
3.4.3.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
subscriptshift number v-unit automatic (typical unit is ex)
superscriptshift number v-unit automatic (typical unit is ex)
The subscriptshift attribute specifies the minimum amount to shift the baseline of subscript down. The superscriptshift attribute
specifies the minimum amount to shift the baseline of superscript up.
109
The msubsup element increments scriptlevel by 1, and sets displaystyle to "false", within subscript and superscript, but leaves
both attributes unchanged within base. (These attributes are inherited by every element through its rendering environment, but can be set
explicitly only on mstyle; see Section 3.3.4.)
3.4.3.3 Examples
The msubsup is most commonly used for adding sub/superscript pairs to identifiers as illustrated above. However, another important use
is placing limits on certain large operators whose limits are traditionally displayed in the script positions even when rendered in display
style. The most common of these is the integral. For example,
Z 1
ex dx
0
would be represented as
<mrow>
<msubsup>
<mo> ∫ </mo>
<mn> 0 </mn>
<mn> 1 </mn>
</msubsup>
<mrow>
<msup>
<mi> ⅇ </mi>
<mi> x </mi>
</msup>
<mo> ⁢ </mo>
<mrow>
<mo> ⅆ </mo>
<mi> x </mi>
</mrow>
</mrow>
</mrow>
3.4.4.1 Description
3.4.4.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
accentunder true | false automatic
The accentunder attribute controls whether underscript is drawn as an ‘accent’ or as a limit. The main difference between an accent and
a limit is that the limit is reduced in size whereas an accent is the same size as the base. A second difference is that the accent is drawn
closer to the base.
The default value of accentunder is false, unless underscript is an mo element or an embellished operator (see Section 3.2.5). If
underscript is an mo element, the value of its accent attribute is used as the default value of accentunder. If underscript is an embellished
operator, the accent attribute of the mo element at its core is used as the default value. As with all attributes, an explicitly given value
overrides the default.
Here is an example (accent versus underscript): x + y + z versus x + y + z. The MathML representation for this example is shown below.
| {z } | {z }
If the base is an operator with movablelimits="true" (or an embellished operator whose mo element core has movablelimits=
"true"), and displaystyle="false", then underscript is drawn in a subscript position. In this case, the accentunder attribute is
ignored. This is often used for limits on symbols such as ∑.
Within underscript, munder always sets displaystyle to "false", but increments scriptlevel by 1 only when accentunder is
"false". Within base, it always leaves both attributes unchanged. (These attributes are inherited by every element through its rendering
environment, but can be set explicitly only on mstyle; see Section 3.3.4.)
3.4.4.3 Examples
<mrow>
<munder accentunder="true">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏟ </mo>
</munder>
<mtext> versus </mtext>
<munder accentunder="false">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏟ </mo>
</munder>
</mrow>
3.4.5.1 Description
3.4.5.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
accent true | false automatic
112
The accent attribute controls whether overscript is drawn as an ‘accent’ (diacritical mark) or as a limit. The main difference between an
accent and a limit is that the limit is reduced in size whereas an accent is the same size as the base. A second difference is that the accent
is drawn closer to the base. This is shown below (accent versus limit): x̂ versus xˆ .
z }| { z }| {
These differences also apply to ‘mathematical accents’ such as bars or braces over expressions: x + y + z versus x + y + z. The MathML
representation for each of these examples is shown below.
The default value of accent is false, unless overscript is an mo element or an embellished operator (see Section 3.2.5). If overscript is an
mo element, the value of its accent attribute is used as the default value of accent for mover. If overscript is an embellished operator,
the accent attribute of the mo element at its core is used as the default value.
If the base is an operator with movablelimits="true" (or an embellished operator whose mo element core has movablelimits=
"true"), and displaystyle="false", then overscript is drawn in a superscript position. In this case, the accent attribute is ignored.
This is often used for limits on symbols such as ∑.
Within overscript, mover always sets displaystyle to "false", but increments scriptlevel by 1 only when accent is "false". With-
in base, it always leaves both attributes unchanged. (These attributes are inherited by every element through its rendering environment,
but can be set explicitly only on mstyle; see Section 3.3.4.)
3.4.5.3 Examples
<mrow>
<mover accent="true">
<mi> x </mi>
<mo> ^ </mo>
</mover>
<mtext> versus </mtext>
<mover accent="false">
<mi> x </mi>
<mo> ^ </mo>
</mover>
</mrow>
113
<mrow>
<mover accent="true">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏞ </mo>
</mover>
<mtext> versus </mtext>
<mover accent="false">
<mrow>
<mi> x </mi>
<mo> + </mo>
<mi> y </mi>
<mo> + </mo>
<mi> z </mi>
</mrow>
<mo> ⏞ </mo>
</mover>
</mrow>
3.4.6.1 Description
3.4.6.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
accent true | false automatic
accentunder true | false automatic
114
The munderover element is used so that the underscript and overscript are vertically spaced equally in relation to the base and so that
they follow the slant of the base as in the second expression shown below:
R∞ R∞
0 versus 0 The MathML representation for this example is shown below.
The difference in the vertical spacing is too small to be noticed on a low resolution display at a normal font size, but is noticeable on
a higher resolution device such as a printer and when using large font sizes. In addition to the visual differences, attaching both the
underscript and overscript to the same base more accurately reflects the semantics of the expression.
The accent and accentunder attributes have the same effect as the attributes with the same names on mover (Section 3.4.5) and
munder (Section 3.4.4), respectively. Their default values are also computed in the same manner as described for those elements, with
the default value of accent depending on overscript and the default value of accentunder depending on underscript.
If the base is an operator with movablelimits="true" (or an embellished operator whose mo element core has movablelimits=
"true"), and displaystyle="false", then underscript and overscript are drawn in a subscript and superscript position, respectively.
In this case, the accent and accentunder attributes are ignored. This is often used for limits on symbols such as ∑.
Within underscript, munderover always sets displaystyle to "false", but increments scriptlevel by 1 only when accentunder is
"false". Within overscript, munderover always sets displaystyle to "false", but increments scriptlevel by 1 only when accent
is "false". Within base, it always leaves both attributes unchanged. (These attributes are inherited by every element through its rendering
environment, but can be set explicitly only on mstyle; see Section 3.3.4).
3.4.6.3 Examples
The MathML representation for the example shown above with the first expression made using separate munder and mover elements,
and the second one using an munderover element, is:
<mrow>
<mover>
<munder>
<mo> ∫ </mo>
<mn> 0 </mn>
</munder>
<mi> ∞ </mi>
</mover>
<mtext> versus </mtext>
<munderover>
<mo> ∫ </mo>
<mn> 0 </mn>
<mi> ∞ </mi>
</munderover>
</mrow>
115
3.4.7.1 Description
<mmultiscripts>
base
( subscript superscript )*
[ <mprescripts/> ( presubscript presuperscript )* ]
</mmultiscripts>
Presubscripts and tensor notations are represented by a single element, mmultiscripts. This element allows the representation of any
number of vertically-aligned pairs of subscripts and superscripts, attached to one base expression. It supports both postscripts (to the
right of the base in visual notation) and prescripts (to the left of the base in visual notation). Missing scripts can be represented by the
empty element none.
The prescripts are optional, and when present are given after the postscripts, because prescripts are relatively rare compared to tensor
notation.
The argument sequence consists of the base followed by zero or more pairs of vertically-aligned subscripts and superscripts (in that order)
that represent all of the postscripts. This list is optionally followed by an empty element mprescripts and a list of zero or more pairs
of vertically-aligned presubscripts and presuperscripts that represent all of the prescripts. The pair lists for postscripts and prescripts are
given in a left-to-right order. If no subscript or superscript should be rendered in a given position, then the empty element none should be
used in that position.
The base, subscripts, superscripts, the optional separator element mprescripts, the presubscripts, and the presuperscripts, are all direct
sub-expressions of the mmultiscripts element, i.e. they are all at the same level of the expression tree. Whether a script argument is a
subscript or a superscript, or whether it is a presubscript or a presuperscript is determined by whether it occurs in an even-numbered or
odd-numbered argument position, respectively, ignoring the empty element mprescripts itself when determining the position. The first
argument, the base, is considered to be in position 1. The total number of arguments must be odd, if mprescripts is not given, or even,
if it is.
The empty elements mprescripts and none are only allowed as direct sub-expressions of mmultiscripts.
3.4.7.2 Attributes
The mmultiscripts element increments scriptlevel by 1, and sets displaystyle to "false", within each of its arguments except
base, but leaves both attributes unchanged within base. (These attributes are inherited by every element through its rendering environ-
ment, but can be set explicitly only on mstyle; see Section 3.3.4.)
116
3.4.7.3 Examples
0 F 1 (;a;z).
<mrow>
<mmultiscripts>
<mi> F </mi>
<mn> 1 </mn>
<none/>
<mprescripts/>
<mn> 0 </mn>
<none/>
</mmultiscripts>
<mo> ⁡ </mo>
<mrow>
<mo> ( </mo>
<mrow>
<mo> ; </mo>
<mi> a </mi>
<mo> ; </mo>
<mi> z </mi>
</mrow>
<mo> ) </mo>
</mrow>
</mrow>
j
Ri kl (where k and l are different indices)
117
<mmultiscripts>
<mi> R </mi>
<mi> i </mi>
<none/>
<none/>
<mi> j </mi>
<mi> k </mi>
<none/>
<mi> l </mi>
<none/>
</mmultiscripts>
The mlabeledtr element represents a labeled row of a table and can be used for numbered equations. The first child of mlabeledtr
is the label. A label is somewhat special in that it is not considered an expression in the matrix and is not counted when determining the
number of columns in that row.
3.5.1.1 Description
A matrix or table is specified using the mtable element. Inside of the mtable element, only mtr or mlabeledtr elements may appear.
In MathML 1.x, the mtable element could infer mtr elements around its arguments, and the mtr element could infer mtd elements. In
other words, if some argument to an mtable was not an mtr element, a MathML application was to assume a row with a single column
(i.e. the argument was effectively wrapped with an inferred mtr). Similarly, if some argument to a (possibly inferred) mtr element was not
an mtd element, that argument was to be treated as a table entry by wrapping it with an inferred mtd element. MathML 2.0 deprecates the
inference of mtr and mtd elements; mtr and mtd elements must be used inside of mtable and mtr respectively.
Table rows that have fewer columns than other rows of the same table (whether the other rows precede or follow them) are effectively
padded on the right with empty mtd elements so that the number of columns in each row equals the maximum number of columns in
any row of the table. Note that the use of mtd elements with non-default values of the rowspan or columnspan attributes may affect the
number of mtd elements that should be given in subsequent mtr elements to cover a given number of columns. Note also that the label
in an mlabeledtr element is not considered a column in the table.
118
3.5.1.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
align (top | bottom | center | baseline | axis) [ rownumber ] axis
rowalign (top | bottom | center | baseline | axis) + baseline
columnalign (left | center | right) + center
groupalign group-alignment-list-list left
alignmentscope (true | false) + true
columnwidth (auto | number h-unit | namedspace | fit) + auto
width auto | number h-unit auto
rowspacing (number v-unit) + 1.0ex
columnspacing (number h-unit | namedspace) + 0.8em
rowlines (none | solid | dashed) + none
columnlines (none | solid | dashed) + none
frame none | solid | dashed none
framespacing (number h-unit | namedspace) (number v-unit | namedspace) 0.4em 0.5ex
equalrows true | false false
equalcolumns true | false false
displaystyle true | false false
side left | right | leftoverlap | rightoverlap right
minlabelspacing number h-unit | namedspace 0.8em
Note that the default value for each of rowlines, columnlines and frame is the literal string ‘none’, meaning that the default is to render
no lines, rather than that there is no default.
As described in Section 2.4.4, the notation (x | y)+ means one or more occurrences of either x or y, separated by whitespace. For
example, possible values for columnalign are "left", "left left", and "left right center center". If there are more entries
than are necessary (e.g. more entries than columns for columnalign), then only the first entries will be used. If there are fewer entries,
then the last entry is repeated as often as necessary. For example, if columnalign="right center" and the table has three columns, the
first column will be right aligned and the second and third columns will be centered. The label in a mlabeledtr is not considered as a
column in the table and the attribute values that apply to columns do not apply to labels.
The align attribute specifies where to align the table with respect to its environment. "axis" means to align the center of the table on
the environment’s axis. (The axis of an equation is an alignment line used by typesetters. It is the line on which a minus sign typically lies.
The center of the table is the midpoint of the table’s vertical extent.) "center" and "baseline" both mean to align the center of the table
on the environment’s baseline. "top" or "bottom" aligns the top or bottom of the table on the environment’s baseline.
119
If the align attribute value ends with a "rownumber" between 1 and n (for a table with n rows), the specified row is aligned in the way
described above, rather than the table as a whole; the top (first) row is numbered 1, and the bottom (last) row is numbered n. The same is
true if the row number is negative, between -1 and -n, except that the bottom row is referred to as -1 and the top row as -n. Other values
of "rownumber" are illegal.
The rowalign attribute specifies how the entries in each row should be aligned. For example, "top" means that the tops of each entry
in each row should be aligned with the tops of the other entries in that row. The columnalign attribute specifies how the entries in each
column should be aligned.
The groupalign and alignmentscope attributes are described with the alignment elements, maligngroup and malignmark, in Sec-
tion 3.5.5.
The columnwidth attribute specifies how wide a column should be. The "auto" value means that the column should be as wide as
needed, which is the default. If an explicit value is given, then the column is exactly that wide and the contents of that column are made to
fit in that width. The contents are linewrapped or clipped at the discretion of the renderer. If "fit" is given as a value, the remaining page
width after subtracting the widths for columns specified as "auto" and/or specific widths is divided equally among the "fit" columns and
this value is used for the column width. If insufficient room remains to hold the contents of the "fit" columns, renderers may linewrap
or clip the contents of the "fit" columns. When the columnwidth is specified as a percentage, the value is relative to the width of the
table. That is, a renderer should try to adjust the width of the column so that it covers the specified percentage of the entire table width.
The width attribute specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage
value, the value is relative to the horizontal space a MathML renderer has available for the math element. When the value is "auto", the
MathML renderer should calculate the table width from its contents using whatever layout algorithm it chooses.
MathML 2.0 does not specify a table layout algorithm. In particular, it is the responsibility of a MathML renderer to resolve conflicts between
the width attribute and other constraints on the width of a table, such as explicit values for columnwidth attributes, and minimum sizes
for table cell contents. For a discussion of table layout algorithms, see Cascading Style Sheets, level 2.
The rowspacing and columnspacing attributes specify how much space should be added between each row and column. However,
spacing before the first row and after the last row (i.e. at the top and bottom of the table) is given by the second number in the value of
the framespacing attribute, and spacing before the first column and after the last column (i.e. on the left and on the right of the table) is
given by the first number in the value of the framespacing attribute.
In those attributes’ syntaxes, h-unit or v-unit represents a unit of horizontal or vertical length, respectively (see Section 2.4.4.2). The units
shown in the attributes’ default values (em or ex) are typically used.
The rowlines and columnlines attributes specify whether and what kind of lines should be added between each row and column. Lines
before the first row or column and after the last row or column are given using the frame attribute.
120
If a frame is desired around the table, the frame attribute is used. If the attribute value is not ‘none’, then framespacing is used to add
spacing between the lines of the frame and the first and last rows and columns of the table. If frame="none", then the framespacing
attribute is ignored. The frame and framespacing attributes are not part of the rowlines/columnlines, rowspacing/columnspacing
options because having them be so would often require that rowlines and columnlines would need to be fully specified instead of just
giving a single value. For example, if a table had five columns and it was desired to have no frame around the table but to have lines
between the columns, then columnlines="none solid solid solid solid none" would be necessary. If the frame is separated
from the internal lines, only columnlines="solid" is needed.
The equalrows attribute forces the rows all to be the same total height when set to "true". The equalcolumns attribute forces the
columns all to be the same width when set to "true".
The displaystyle attribute specifies the value of displaystyle (described under mstyle in Section 3.3.4) within each cell (mtd
element) of the table. Setting displaystyle="true" can be useful for tables whose elements are whole mathematical expressions; the
default value of "false" is appropriate when the table is part of an expression, for example, when it represents a matrix. In either case,
scriptlevel (Section 3.3.4) is not changed for the table cells.
The side attribute specifies what side of a table a label for a table row should should be placed. This attribute is intended to be used for
labeled expressions. If "left" or "right" is specified, the label is placed on the left or right side of the table row respectively. The other
two attribute values are variations on "left" and "right": if the labeled row fits within the width allowed for the table without the label,
but does not fit within the width if the label is included, then the label overlaps the row and is displayed above the row if rowalign for that
row is "top"; otherwise the label is displayed below the row.
If there are multiple labels in a table, the alignment of the labels within the virtual column that they form is left-aligned for labels on
the left side of the table, and right-aligned for labels on the right side of the table. The alignment can be overridden by specifying
columnalignment for a mlabeledtr element.
The minlabelspacing attribute specifies the minimum space allowed between a label and the adjacent entry in the row.
3.5.1.3 Examples
<mrow>
<mo> ( </mo>
<mtable>
<mtr>
<mtd> <mn>1</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
</mtr>
<mtr>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>1</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
</mtr>
<mtr>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>0</mn> </mtd>
<mtd> <mn>1</mn> </mtd>
</mtr>
</mtable>
<mo> ) </mo>
</mrow>
This might be rendered as:
1 0 0
0 1 0
0 0 1
Note that the parentheses must be represented explicitly; they are not part of the mtable element’s rendering. This allows use of other
surrounding fences, such as brackets, or none at all.
3.5.2.1 Description
An mtr element represents one row in a table or matrix. An mtr element is only allowed as a direct sub-expression of an mtable element,
and specifies that its contents should form one row of the table. Each argument of mtr is placed in a different column of the table, starting
at the leftmost column.
As described in Section 3.5.1, mtr elements are effectively padded on the right with mtd elements when they are shorter than other rows
in a table.
122
3.5.2.2 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
rowalign top | bottom | center | baseline | axis inherited
columnalign (left | center | right) + inherited
groupalign group-alignment-list-list inherited
The rowalign and columnalign attributes allow a specific row to override the alignment specified by the same attributes in the sur-
rounding mtable element.
As with mtable, if there are more entries than necessary in the value of columnalign (i.e. more entries than columns in the row), then
the extra entries will be ignored. If there are fewer entries than columns, then the last entry will be repeated as many times as needed.
The groupalign attribute is described with the alignment elements, maligngroup and malignmark, in Section 3.5.5.
3.5.3.1 Description
An mlabeledtr element represents one row in a table that has a label on either the left or right side, as determined by the side attribute.
The label is the first child of mlabeledtr. The rest of the children represent the contents of the row and are identical to those used for
mtr; all of the children except the first must be mtd elements.
An mlabeledtr element is only allowed as a direct sub-expression of an mtable element. Each argument of mlabeledtr except for the
first argument (the label) is placed in a different column of the table, starting at the leftmost column.
Note that the label element is not considered to be a cell in the table row. In particular, the label element is not taken into consideration
in the table layout for purposes of width and alignment calculations. For example, in the case of an mlabeledtr with a label and a single
centered mtd child, the child is first centered in the enclosing mtable, and then the label is placed. Specifically, the child is not centered
in the space that remains in the table after placing the label.
While MathML 2.0 does not specify an algorithm for placing labels, implementors of visual renderers may find the following formatting
model useful. To place a label, an implementor might think in terms of creating a larger table, with an extra column on both ends. The
columnwidth attributes of both these border columns would be set to "fit" so that they expand to fill whatever space remains after the
inner columns have been laid out. Finally, depending on the values of side and minlabelspacing, the label is placed in whatever border
column is appropriate, possibly shifted down if necessary.
3.5.3.2 Attributes
The attributes for mlabeledtr are the same as for mtr. Unlike the attributes for the mtable element, attributes of mlabeledtr that apply
to column elements also apply to the label. For example, in a one column table,
123
<mlabeledtr rowalign=’top’>
means that the label and other entries in the row are vertically aligned along their top. To force a particular alignment on the label, the
appropriate attribute would normally be set on the mtd start tag that surrounds the label content.
One of the important uses of mlabeledtr is for numbered equations. In a mlabeledtr, the label represents the equation number and the
elements in the row are the equation being numbered. The side and minlabelspacing attributes of mtable determine the placement
of the equation number.
In larger documents with many numbered equations, automatic numbering becomes important. While automatic equation numbering and
automatically resolving references to equation numbers is outside the scope of MathML, these problems can be addressed by the use of
style sheets or other means. The mlabeledtr construction provides support for both of these functions in a way that is intended to facilitate
XSLT processing. The mlabeledtr element can be used to indicate the presence of a numbered equation, and the first child can be
changed to the current equation number, along with incrementing the global equation number. For cross references, an id on either the
mlabeledtr element or on the first element itself could be used as a target of any link.
124
<mtable>
<mlabeledtr id=’e-is-m-c-square’>
<mtd>
<mtext> (2.1) </mtext>
</mtd>
<mtd>
<mrow>
<mi>E</mi>
<mo>=</mo>
<mrow>
<mi>m</mi>
<mo>⁢</mo>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</mrow>
</mrow>
</mtd>
</mlabeledtr>
</mtable>
This should be rendered as:
E = mc2 (2.1)
3.5.4.1 Description
An mtd element represents one entry, or cell, in a table or matrix. An mtd element is only allowed as a direct sub-expression of an mtr or
an mlabeledtr element.
The mtd element accepts any number of arguments; if this number is not 1, its contents are treated as a single ‘inferred mrow’ formed
from all its arguments, as described in Section 3.1.3.
125
3.5.4.2 Attributes
Name values default
rowspan positive-integer 1
columnspan positive-integer 1
rowalign top | bottom | center | baseline | axis inherited
columnalign left | center | right inherited
groupalign group-alignment-list inherited
The rowspan and columnspan attributes allow a specific matrix element to be treated as if it occupied the number of rows or columns
specified. The interpretation of how this larger element affects specifying subsequent rows and columns is meant to correspond with the
similar attributes for HTML 4.01 tables.
The rowspan and columnspan attributes can be used around an mtd element that represents the label in a mlabeledtr element. Also,
the label of a mlabeledtr element is not considered to be part of a previous rowspan and columnspan.
The rowalign and columnalign attributes allow a specific matrix element to override the alignment specified by a surrounding mtable
or mtr element.
The groupalign attribute is described with the alignment elements, maligngroup and malignmark, in Section 3.5.5.
3.5.5.1 Description
Alignment markers are space-like elements (see Section 3.2.7) that can be used to vertically align specified points within a column of
MathML expressions by the automatic insertion of the necessary amount of horizontal space between specified sub-expressions.
The discussion that follows will use the example of a set of simultaneous equations that should be rendered with vertical alignment of the
coefficients and variables of each term, by inserting spacing somewhat like that shown here:
8.44x + 55 y = 0
3.1 x - 0.7y = -1.1
If the example expressions shown above were arranged in a column but not aligned, they would appear as:
8.44x + 55y = 0
3.1x - 0.7y = -1.1
For audio renderers, it is suggested that the alignment elements produce the analogous behavior of altering the rhythm of pronunciation
so that it is the same for several sub-expressions in a column, by the insertion of the appropriate time delays in place of the extra horizontal
spacing described here.
The expressions whose parts are to be aligned (each equation, in the example above) must be given as the table elements (i.e. as the mtd
elements) of one column of an mtable. To avoid confusion, the term ‘table cell’ rather than ‘table element’ will be used in the remainder
of this section.
126
All interactions between alignment elements are limited to the mtable column they arise in. That is, every column of a table specified by
an mtable element acts as an ‘alignment scope’ that contains within it all alignment effects arising from its contents. It also excludes any
interaction between its own alignment elements and the alignment elements inside any nested alignment scopes it might contain.
The reason mtable columns are used as alignment scopes is that they are the only general way in MathML to arrange expressions
into vertical columns. Future versions of MathML may provide an malignscope element that allows an alignment scope to be created
around any MathML element, but even then, table columns would still sometimes need to act as alignment scopes, and since they are not
elements themselves, but rather are made from corresponding parts of the content of several mtr elements, they could not individually be
the content of an alignment scope element.
An mtable element can be given the attribute alignmentscope="false" to cause its columns not to act as alignment scopes. This is
discussed further at the end of this section. Otherwise, the discussion in this section assumes that this attribute has its default value of
"true".
To cause alignment, it is necessary to specify, within each expression to be aligned, the points to be aligned with corresponding points in
other expressions, and the beginning of each alignment group of sub-expressions that can be horizontally shifted as a unit to effect the
alignment. Each alignment group must contain one alignment point. It is also necessary to specify which expressions in the column have
no alignment groups at all, but are affected only by the ordinary column alignment for that column of the table, i.e. by the columnalign
attribute, described elsewhere.
The alignment groups start at the locations of invisible maligngroup elements, which are rendered with zero width when they occur
outside of an alignment scope, but within an alignment scope are rendered with just enough horizontal space to cause the desired
alignment of the alignment group that follows them. A simple algorithm by which a MathML application can achieve this is given later. In
the example above, each equation would have one maligngroup element before each coefficient, variable, and operator on the left-hand
side, one before the = sign, and one before the constant on the right-hand side.
In general, a table cell containing n maligngroup elements contains n alignment groups, with the ith group consisting of the elements
entirely after the ith maligngroup element and before the (i+1)-th; no element within the table cell’s content should occur entirely before
its first maligngroup element.
Note that the division into alignment groups does not necessarily fit the nested expression structure of the MathML expression containing
the groups - that is, it is permissible for one alignment group to consist of the end of one mrow, all of another one, and the beginning of a
third one, for example. This can be seen in the MathML markup for the present example, given at the end of this section.
The nested expression structure formed by mrows and other layout schemata should reflect the mathematical structure of the expression,
not the alignment-group structure, to make possible optimal renderings and better automatic interpretations; see the discussion of proper
grouping in section Section 3.3.1. Insertion of alignment elements (or other space-like elements) should not alter the correspondence
between the structure of a MathML expression and the structure of the mathematical expression it represents.
127
Although alignment groups need not coincide with the nested expression structure of layout schemata, there are nonetheless restrictions
on where an maligngroup element is allowed within a table cell. The maligngroup element may only be contained within elements
(directly or indirectly) of the following types (which are themselves contained in the table cell):
• an mrow element, including an inferred mrow such as the one formed by a multi-argument mtd element;
• an mstyle element;
• an mphantom element;
• an mfenced element;
• an maction element, though only its selected sub-expression is checked;
• a semantics element.
These restrictions are intended to ensure that alignment can be unambiguously specified, while avoiding complexities involving things like
overscripts, radical signs and fraction bars. They also ensure that a simple algorithm suffices to accomplish the desired alignment.
Note that some positions for an maligngroup element, although legal, are not useful, such as for an maligngroup element to be an
argument of an mfenced element. When inserting an maligngroup element before a given element in pre-existing MathML, it will often
be necessary, and always acceptable, to form a new mrow element to contain just the maligngroup element and the element it is inserted
before. In general, this will be necessary except when the maligngroup element is inserted directly into an mrow or into an element that
can form an inferred mrow from its contents. See the warning about the legal grouping of ‘space-like elements’ in Section 3.2.7.
For the table cells that are divided into alignment groups, every element in their content must be part of exactly one alignment group,
except the elements from the above list that contain maligngroup elements inside them, and the maligngroup elements themselves.
This means that, within any table cell containing alignment groups, the first complete element must be an maligngroup element, though
this may be preceded by the start tags of other elements.
This requirement removes a potential confusion about how to align elements before the first maligngroup element, and makes it easy to
identify table cells that are left out of their column’s alignment process entirely.
Note that it is not required that the table cells in a column that are divided into alignment groups each contain the same number of groups.
If they don’t, zero-width alignment groups are effectively added on the right side of each table cell that has fewer groups than other table
cells in the same column.
3.5.5.3 Table cells that are not divided into alignment groups
Expressions in a column that are to have no alignment groups should contain no maligngroup elements. Expressions with no alignment
groups are aligned using only the columnalign attribute that applies to the table column as a whole, and are not affected by the
groupalign attribute described below. If such an expression is wider than the column width needed for the table cells containing alignment
groups, all the table cells containing alignment groups will be shifted as a unit within the column as described by the columnalign attribute
for that column. For example, a column heading with no internal alignment could be added to the column of two equations given above by
preceding them with another table row containing an mtext element for the heading, and using the default columnalign="center" for the
table, to produce:
128
some equations
8.44x + 55 y = 0
3.1 x - 0.7y = -1.1
If there is more than one malignmark element in an alignment group, all but the first one will be ignored. MathML applications may wish
to provide a mode in which they will warn about this situation, but it is not an error, and should trigger no warnings by default. The rationale
for this is that it would be inconvenient to have to remove all unnecessary malignmark elements from automatically generated data, in
certain cases, such as when they are used to specify alignment on ‘decimal points’ other than the ’.’ character.
maligngroup has one attribute, groupalign, which is used to determine the position of its group’s alignment point when no malignmark
element is present. The following discussion assumes that no malignmark element is found within a group.
In the example given at the beginning of this section, there is one column of 2 table cells, with 7 alignment groups in each table cell; thus
there are 7 columns of alignment groups, with 2 groups, one above the other, in each column. These columns of alignment groups should
be given the 7 groupalign values ‘decimalpoint left left decimalpoint left left decimalpoint’, in that order. How to specify this list of values
for a table cell or table column as a whole, using attributes on elements surrounding the maligngroup element is described later.
If groupalign is ‘left’, ‘right’, or ‘center’, the alignment point is defined to be at the group’s left edge, at its right edge, or halfway between
these edges, respectively. The meanings of ‘left edge’ and ‘right edge’ are as discussed above in relation to malignmark.
If groupalign is ‘decimalpoint’, the alignment point is the right edge of the last character before the decimal point. The decimal point is
the first ‘.’ character (ASCII 0x2e) in the first mn element found along the alignment group’s baseline. More precisely, the alignment group
is scanned recursively, depth-first, for the first mn element, descending into all arguments of each element of the types mrow (including
inferred mrows), mstyle, mpadded, mphantom, menclose, mfenced, or msqrt, descending into only the first argument of each ‘scripting’
element (msub, msup, msubsup, munder, mover, munderover, mmultiscripts) or of each mroot or semantics element, descending
into only the selected sub-expression of each maction element, and skipping the content of all other elements. The first mn so found
always contains the alignment point, which is the right edge of the last character before the first decimal point in the content of the mn
element. If there is no decimal point in the mn element, the alignment point is the right edge of the last character in the content. If the
decimal point is the first character of the mn element’s content, the right edge of a zero-width character inserted before the decimal point
is used. If no mn element is found, the right edge of the entire alignment group is used (as for groupalign="right").
In order to permit alignment on decimal points in cn elements, a MathML application can convert a content expression into a presentation
expression that renders the same way before searching for decimal points as described above.
If characters other than ‘.’ should be used as ‘decimal points’ for alignment, they should be preceded by malignmark elements within the
mn token’s content itself.
For any of the groupalign values, if an explicit malignmark element is present anywhere within the group, the position it specifies
(described earlier) overrides the automatic determination of alignment point from the groupalign value.
It is not usually necessary to put a groupalign attribute on every maligngroup element. Since this attribute is usually the same for
every group in a column of alignment groups to be aligned, it can be inherited from an attribute on the mtable that was used to set up
the alignment scope as a whole, or from the mtr or mtd elements surrounding the alignment group. It is inherited via an ‘inheritance path’
that proceeds from mtable through successively contained mtr, mtd, and maligngroup elements. There is exactly one element of each
of these kinds in this path from an mtable to any alignment group inside it. In general, the value of groupalign will be inherited by any
given alignment group from the innermost element that surrounds the alignment group and provides an explicit setting for this attribute. For
example, if an mtable element specifies values for groupalign and a maligngroup element within the table also specifies an explicit
groupalign value, then then the value from the maligngroup takes priority.
131
Note, however, that each mtd element needs, in general, a list of groupalign values, one for each maligngroup element inside it, rather
than just a single value. Furthermore, an mtr or mtable element needs, in general, a list of lists of groupalign values, since it spans
multiple mtable columns, each potentially acting as an alignment scope. Such lists of group-alignment values are specified using the
following syntax rules:
The permissible values of the groupalign attribute of the elements that have this attribute are specified using the above syntax definitions
as follows:
Element type groupalign attribute syntax default value
mtable group-alignment-list-list left
mtr group-alignment-list-list inherited from mtable attribute
mlabeledtr group-alignment-list-list inherited from mtable attribute
mtd group-alignment-list inherited from within mtr attribute
maligngroup group-alignment inherited from within mtd attribute
In the example near the beginning of this section, the group alignment values could be specified on every mtd element using groupalign
= ‘decimalpoint left left decimalpoint left left decimalpoint’, or on every mtr element using groupalign = ‘decimalpoint left left decimalpoint
left left decimalpoint’, or (most conveniently) on the mtable as a whole using groupalign = ‘decimalpoint left left decimalpoint left left
decimalpoint’, which provides a single braced list of group-alignment values for the single column of expressions to be aligned.
The above rules are sufficient to explain the MathML representation of the example given near the start of this section. To repeat the
example, the desired rendering is:
8.44x + 55 y = 0
3.1 x - 0.7y = -1.1
One way to represent that in MathML is:
132
<mi> x </mi>
</mrow>
<maligngroup/>
<mo> - </mo>
<mrow>
<maligngroup/>
<mn> 0.7 </mn>
<mo> ⁢ </mo>
<maligngroup/>
<mi> y </mi>
</mrow>
</mrow>
<maligngroup/>
<mo> = </mo>
<maligngroup/>
<mrow>
<mo> - </mo>
<mn> 1.1 </mn>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
The alignment elements maligngroup and malignmark can occur outside of alignment scopes, where they are ignored. The rationale
behind this is that in situations in which MathML is generated, or copied from another document, without knowing whether it will be placed
inside an alignment scope, it would be inconvenient for this to be an error.
An mtable element can be given the attribute alignmentscope="false" to cause its columns not to act as alignment scopes. In general,
this attribute has the syntax (true | false) +; if its value is a list of boolean values, each boolean value applies to one column, with
the last value repeated if necessary to cover additional columns, or with extra values ignored. Columns that are not alignment scopes are
part of the alignment scope surrounding the mtable element, if there is one. Use of alignmentscope="false" allows nested tables to
contain malignmark elements for aligning the inner table in the surrounding alignment scope.
As discussed above, processing of alignment for content elements is not well-defined, since MathML does not specify how content
elements should be rendered. However, many MathML applications are likely to find it convenient to internally convert content elements to
presentation elements that render the same way. Thus, as a general rule, even if a renderer does not perform such conversions internally,
it is recommended that the alignment elements should be processed as if it did perform them.
134
A particularly important case for renderers to handle gracefully is the interaction of alignment elements with the matrix content element,
since this element may or may not be internally converted to an expression containing an mtable element for rendering. To partially resolve
this ambiguity, it is suggested, but not required, that if the matrix element is converted to an expression involving an mtable element, that
the mtable element be given the attribute alignmentscope="false", which will make the interaction of the matrix element with the
alignment elements no different than that of a generic presentation element (in particular, it will allow it to contain malignmark elements
that operate within the alignment scopes created by the columns of an mtable that contains the matrix element in one of its table cells).
The effect of alignment elements within table cells that have non-default values of the columnspan or rowspan attributes is not specified,
except that such use of alignment elements is not an error. Future versions of MathML may specify the behavior of alignment elements in
such table cells.
The effect of possible linebreaking of an mtable element on the alignment elements is not specified.
A simple algorithm by which a MathML application can perform the alignment specified in this section is given here. Since the alignment
specification is deterministic (except for the definition of the left and right edges of a character), any correct MathML alignment algorithm
will have the same behavior as this one. Each mtable column (alignment scope) can be treated independently; the algorithm given here
applies to one mtable column, and takes into account the alignment elements, the groupalign attribute described in this section, and
the columnalign attribute described under mtable (Section 3.5.1).
First, a rendering is computed for the contents of each table cell in the column, using zero width for all maligngroup and malignmark
elements. The final rendering will be identical except for horizontal shifts applied to each alignment group and/or table cell. The positions of
alignment points specified by any malignmark elements are noted, and the remaining alignment points are determined using groupalign
values.
For each alignment group, the horizontal positions of the left edge, alignment point, and right edge are noted, allowing the width of the
group on each side of the alignment point (left and right) to be determined. The sum of these two ‘side-widths’, i.e. the sum of the widths
to the left and right of the alignment point, will equal the width of the alignment group.
Second, each column of alignment groups, from left to right, is scanned. The ith scan covers the ith alignment group in each table cell
containing any alignment groups. Table cells with no alignment groups, or with fewer than i alignment groups, are ignored. Each scan
computes two maximums over the alignment groups scanned: the maximum width to the left of the alignment point, and the maximum
width to the right of the alignment point, of any alignment group scanned.
The sum of all the maximum widths computed (two for each column of alignment groups) gives one total width, which will be the width of
each table cell containing alignment groups. Call the maximum number of alignment groups in one cell n; each such cell’s width is divided
into 2n adjacent sections, called L(i) and R(i) for i from 1 to n, using the 2n maximum side-widths computed above; for each i, the width of
all sections called L(i) is the maximum width of any cell’s ith alignment group to the left of its alignment point, and the width of all sections
called R(i) is the maximum width of any cell’s ith alignment group to the right of its alignment point.
135
The alignment groups are then positioned in the unique way that places the part of each ith group to the left of its alignment point in
a section called L(i), and places the part of each ith group to the right of its alignment point in a section called R(i). This results in the
alignment point of each ith group being on the boundary between adjacent sections L(i) and R(i), so that all alignment points of ith groups
have the same horizontal position.
The widths of the table cells that contain no alignment groups were computed as part of the initial rendering, and may be different for each
cell, and different from the single width used for cells containing alignment groups. The maximum of all the cell widths (for both kinds of
cells) gives the width of the table column as a whole.
The position of each cell in the column is determined by the applicable part of the value of the columnalign attribute of the innermost
surrounding mtable, mtr, or mtd element that has an explicit value for it, as described in the sections on those elements. This may mean
that the cells containing alignment groups will be shifted within their column, in addition to their alignment groups having been shifted
within the cells as described above, but since each such cell has the same width, it will be shifted the same amount within the column,
thus maintaining the vertical alignment of the alignment points of the corresponding alignment groups in each cell.
There are many ways in which it might be desirable to make mathematical content active. Adding a link to a MathML sub-expression is
one basic kind of interactivity. See Section 7.1.4. However, many other kinds of interactivity cannot be easily accommodated by generic
linking mechanisms. For example, in lengthy mathematical expressions, the ability to ‘fold’ expressions might be provided, i.e. a renderer
might allow a reader to toggle between an ellipsis and a much longer expression that it represents.
To provide a mechanism for binding actions to expressions, MathML provides the maction element. This element accepts any number of
sub-expressions as arguments.
3.6.1.1 Attributes
In addition to the attributes listed below, this element permits id, xref, class and style attributes, as described in Section 2.4.5.
Name values default
actiontype (described below) (required attribute, no default value)
selection positive-integer 1
By default, MathML applications that do not recognize the specified actiontype should render the selected sub-expression as defined
below. If no selected sub-expression exists, it is a MathML error; the appropriate rendering in that case is as described in Section 7.2.2.
Since a MathML application is not required to recognize any particular actiontypes, an application can be in MathML conformance just
by implementing the above-described default behavior.
136
The selection attribute is provided for those actiontypes that permit someone viewing a document to select one of several sub-
expressions for viewing. Its value should be a positive integer that indicates one of the sub-expressions of the maction element, numbered
from 1 to the number of children of the element. When this is the case, the sub-expression so indicated is defined to be the ‘selected
sub-expression’ of the maction element; otherwise the ‘selected sub-expression’ does not exist, which is an error. When the selection
attribute is not specified (including for actiontypes for which it makes no sense), its default value is 1, so the selected sub-expression will
be the first sub-expression.
Furthermore, as described in Chapter 7, if a MathML application responds to a user command to copy a MathML sub-expression to the
environment’s ‘clipboard’, any maction elements present in what is copied should be given selection attributes that correspond to their
selection state in the MathML rendering at the time of the copy command.
A suggested list of actiontypes and their associated actions is given below. Keep in mind, however, that this list is mainly for illustration,
and recognized values and behaviors will vary from application to application.
<maction actiontype="toggle" selection="positive-integer" > (first expression) (second expression)... </maction>
For this action type, a renderer would alternately display the given expressions, cycling through them when a reader clicked on
the active expression, starting with the selected expression and updating the selection attribute value as described above.
Typical uses would be for exercises in education, ellipses in long computer algebra output, or to illustrate alternate notations.
Note that the expressions may be of significantly different size, so that size negotiation with the browser may be desirable. If
size negotiation is not available, scrolling, elision, panning, or some other method may be necessary to allow full viewing.
<maction actiontype="statusline"> (expression) (message) </maction>
In this case, the renderer would display the expression in context on the screen. When a reader clicked on the expression or
moved the mouse over it, the renderer would send a rendering of the message to the browser statusline. Since most browsers
in the foreseeable future are likely to be limited to displaying text on their statusline, authors would presumably use plain text
in an mtext element for the message in most circumstances. For non-mtext messages, renderers might provide a natural
language translation of the markup, but this is not required.
<maction actiontype="tooltip"> (expression) (message) </maction>
Here the renderer would also display the expression in context on the screen. When the mouse pauses over the expression for
a long enough delay time, the renderer displays a rendering of the message in a pop-up ‘tooltip’ box near the expression. These
message boxes are also sometimes called ‘balloon help’ boxes. Presumably authors would use plain text in an mtext element
for the message in most circumstances. For non-mtext messages, renderers may provide a natural language translation of
the markup if full MathML rendering is not practical, but this is not required.
<maction actiontype="highlight" my:color="red" my:background="yellow"> expression </maction>
In this case, a renderer might highlight the enclosed expression on a ‘mouse-over’ event. In the example given above, non-
standard attributes from another namespace are being used to pass additional information to renderers that support them,
without violating the MathML DTD (see Section 7.2.3). The my:color attribute changes the color of the characters in the
presentation, while the my:background attribute changes the color of the background behind the characters.
Chapter 4
Content Markup
4.1 Introduction
4.1.1 The Intent of Content Markup
As has been noted in the introductory section of this Recommendation, mathematics can be distinguished by its use of a (relatively)
formal language, mathematical notation. However, mathematics and its presentation should not be viewed as one and the same thing.
Mathematical sums or products exist and are meaningful to many applications completely without regard to how they are rendered aurally
or visually. The intent of the content markup in the Mathematical Markup Language is to provide an explicit encoding of the underlying
mathematical structure of an expression, rather than any particular rendering for the expression.
There are many reasons for providing a specific encoding for content. Even a disciplined and systematic use of presentation tags cannot
properly capture this semantic information. This is because without additional information it is impossible to decide whether a particu-
lar presentation was chosen deliberately to encode the mathematical structure or simply to achieve a particular visual or aural effect.
Furthermore, an author using the same encoding to deal with both the presentation and mathematical structure might find a particular
presentation encoding unavailable simply because convention had reserved it for a different semantic meaning.
The difficulties stem from the fact that there are many to one mappings from presentation to semantics and vice versa. For example the
mathematical construct ‘ H multiplied by e’ is often encoded using an explicit operator as in H × e. In different presentational contexts,
the multiplication operator might be invisible ‘ H e’, or rendered as the spoken word ‘times’. Generally, many different presentations are
possible depending on the context and style preferences of the author or reader. Thus, given ‘ H e’ out of context it may be impossible to
decide if this is the name of a chemical or a mathematical product of two variables H and e.
Mathematical presentation also changes with culture and time: some expressions in combinatorial mathematics today have one meaning
to a Russian mathematician, and quite another to a French mathematician; see Section 5.4.1 for an example. Notations may lose currency,
for example the use of musical sharp and flat symbols to denote maxima and minima [Chaundy1954]. A notation in use in 1644 for the
multiplication mentioned above was H e [Cajori1928].
138
When we encode the underlying mathematical structure explicitly, without regard to how it is presented aurally or visually, we are able to
interchange information more precisely with those systems that are able to manipulate the mathematics. In the trivial example above, such
a system could substitute values for the variables H and e and evaluate the result. Further interesting application areas include interactive
textbooks and other teaching aids.
The semantics of general mathematical notation is not a matter of consensus. It would be an enormous job to systematically codify
most of mathematics - a task that can never be complete. Instead, MathML makes explicit a relatively small number of commonplace
mathematical constructs, chosen carefully to be sufficient in a large number of applications. In addition, it provides a mechanism for
associating semantics with new notational constructs. In this way, mathematical concepts that are not in the base collection of elements
can still be encoded (Section 4.2.6).
The base set of content elements is chosen to be adequate for simple coding of most of the formulas used from kindergarten to the end
of high school in the United States, and probably beyond through the first two years of college, that is up to A-Level or Baccalaureate level
in Europe. Subject areas covered to some extent in MathML are:
• arithmetic, algebra, logic and relations
• calculus and vector calculus
• set theory
• sequences and series
• elementary classical functions
• statistics
• linear algebra
It is not claimed, or even suggested, that the proposed set of elements is complete for these areas, but the provision for author extensibility
greatly alleviates any problem omissions from this finite list might cause.
The design of the MathML content elements are driven by the following principles:
• The expression tree structure of a mathematical expression should be directly encoded by the MathML content elements.
• The encoding of an expression tree should be explicit, and not dependent on the special parsing of PCDATA or on additional
processing such as operator precedence parsing.
• The basic set of mathematical content constructs that are provided should have default mathematical semantics.
• There should be a mechanism for associating specific mathematical semantics with the constructs.
The primary goal of the content encoding is to establish explicit connections between mathematical structures and their mathematical
meanings. The content elements correspond directly to parts of the underlying mathematical expression tree. Each structure has an
associated default semantics and there is a mechanism for associating new mathematical definitions with new constructs.
• Usage of presentation elements is less constrained. When mathematical semantics are inferred from presentation markup,
processing agents must either be quite sophisticated, or they run the risk of inferring incomplete or incorrect semantics when
irregular constructions are used to achieve a particular aural or visual effect.
• It is immediately clear which kind of information is being encoded simply by the kind of elements that are used.
• Combinations of semantic and presentation elements can be used to convey both the appearance and its mathematical mean-
ing much more effectively than simply trying to infer one from the other.
Expressions described in terms of content elements must still be rendered. For common expressions, default visual presentations are
usually clear. ‘Take care of the sense and the sounds will take care of themselves’ wrote Lewis Carroll [Carroll1871]. Default presentations
are included in the detailed description of each element occurring in Section 4.4.
To accomplish these goals, the MathML content encoding is based on the concept of an expression tree. A content expression tree is
constructed from a collection of more primitive objects, referred to herein as containers and operators. MathML possesses a rich set of
predefined container and operator objects, as well as constructs for combining containers and operators in mathematically meaningful
ways. The syntax and usage of these content elements and constructions is described in the next section.
The purpose of this section is to describe the intended, consistent usage. The requirements involve more than just satisfying the syntactic
structure specified by an XML DTD. Failure to conform to the usage as described below will result in a MathML error, even though the
expression may be syntactically valid according to the DTD.
In addition to the usage information contained in this section, Section 4.4 gives a complete listing of each content element, providing
reference information about their attributes, syntax, examples and suggested default semantics and renderings. The rules for using
presentation markup within content markup are explained in Section 5.2.3. An informal EBNF grammar describing the syntax for the
content markup is given in Appendix B.
140
MathML content encoding is based on the concept of an expression tree. As a general rule, the terminal nodes in the tree represent basic
mathematical objects, such as numbers, variables, arithmetic operations and so on. The internal nodes in the tree generally represent
some kind of function application or other mathematical construction that builds up a compound object. Function application provides
the most important example; an internal node might represent the application of a function to several arguments, which are themselves
represented by the terminal nodes underneath the internal node.
The MathML content elements can be grouped into the following categories based on their usage:
• constants and symbols
• containers
• operators and functions
• qualifiers
• relations
• conditions
• semantic mappings
These are the building blocks out of which MathML content expressions are constructed. Each category is discussed in a separate section
below. In the remainder of this section, we will briefly introduce some of the most common elements of each type, and consider the general
constructions for combining them in mathematically meaningful ways.
Content expression trees are built up from basic mathematical objects. At the lowest level, leaf nodes are encapsulated in non-empty
elements that define their type. Numbers and symbols are marked by the token elements cn and ci. More elaborate constructs such as
sets, vectors and matrices are also marked using elements to denote their types, but rather than containing data directly, these container
elements are constructed out of other elements. Elements are used in order to clearly identify the underlying objects. In this way, standard
XML parsing can be used and attributes can be used to specify global properties of the objects.
<cn>12345</cn>
The attributes and PCDATA content together provide the data necessary for an application to parse the number. For example, a default
base of 10 is assumed, but to communicate that the underlying data was actually written in base 8, simply set the base attribute to 8 as in
<cn base="8">12345</cn>
141
<cn type="complex-cartesian">3<sep/>4</cn>
Such information makes it possible for another application to easily parse this into the correct number.
<ci>v</ci>
By default, ci elements represent elements from a commutative field (see Appendix C). If a vector is intended then this fact can be
encoded as
<ci type="vector">v</ci>
This invokes default semantics associated with the vector element, namely an arbitrary element of a finite-dimensional vector space.
By using the ci and csymbol elements we have made clear that we are referring to a mathematical identifier or symbol but this does
not say anything about how it should be rendered. By default a symbol is rendered as if the ci or csymbol element were actually the
presentation element mi (see Section 3.2.3). The actual rendering of a mathematical symbol can be made as elaborate as necessary
simply by using the more elaborate presentational constructs (as described in Chapter 3) in the body of the ci or csymbol element.
The default rendering of a simple cn-tagged object is the same as for the presentation element mn with some provision for overriding the
presentation of the PCDATA by providing explicit mn tags. This is described in detail in Section 4.4.
The issues for compound objects such as sets, vectors and matrices are all similar to those outlined above for numbers and symbols.
Each such object has global properties as a mathematical object that impact how it is to be parsed. This may affect everything from the
interpretation of operations that are applied to it to how to render the symbols representing it. These mathematical properties are captured
by setting attribute values or by associating the properties with the object through the use of the semantics element.
The notion of constructing a general expression tree is essentially that of applying an operator to sub-objects. For example, the sum a +
b can be thought of as an application of the addition operator to two arguments a and b. In MathML, elements are used for operators for
much the same reason that elements are used to contain objects. They are recognized at the level of XML parsing, and their attributes
can be used to record or modify the intended semantics. For example, with the MathML plus element, setting the definitionURL and
encoding attributes as in
<plus definitionURL="http://www.example.com/VectorCalculus.htm"
encoding="text"/>
can communicate that the intended operation is vector-based.
142
There is also another reason for using elements to denote operators. There is a crucial semantic distinction between the function itself and
the expression resulting from applying that function to zero or more arguments which must be captured. This is addressed by making the
functions self-contained objects with their own properties and providing an explicit apply construct corresponding to function application.
We will consider the apply construct in the next section.
MathML contains many pre-defined operator elements, covering a range of mathematical subjects. However, an important class of ex-
pressions involve unknown or user-defined functions and symbols. For these situations, MathML provides a general csymbol element,
which is discussed below.
The most fundamental way of building up a mathematical expression in MathML content markup is the apply construct. An apply element
typically applies an operator to its arguments. It corresponds to a complete mathematical expression. Roughly speaking, this means a
piece of mathematics that could be surrounded by parentheses or ‘logical brackets’ without changing its meaning.
<apply>
<plus/>
<ci> x </ci>
<ci> y </ci>
</apply>
The opening and closing tags of apply specify exactly the scope of any operator or function. The most typical way of using apply is
simple and recursive. Symbolically, the content model can be described as:
<apply>
op
a
b </apply>
where the operands a and b are containers or other content-based elements themselves, and op is an operator or function. Note that
since apply is a container, this allows apply constructs to be nested to arbitrary depth.
<apply>
<plus/>
<ci> x </ci>
<ci> y </ci>
<ci> z </ci>
</apply>
Mathematical expressions involving a mixture of operations result in nested occurrences of apply. For example, a x + b would be encoded
as
<apply>
<plus/>
<apply>
<times/>
<ci> a </ci>
<ci> x </ci>
</apply>
<ci> b </ci>
</apply>
There is no need to introduce parentheses or to resort to operator precedence in order to parse the expression correctly. The apply tags
provide the proper grouping for the re-use of the expressions within other constructs. Any expression enclosed by an apply element is
viewed as a single coherent object.
<apply>
<times/>
<apply>
<plus/>
<ci> F </ci>
<ci> G </ci>
</apply>
<ci> x </ci>
</apply>
or it might indicate the application of the function F + G to the argument x. This is indicated by constructing the sum
144
<apply>
<plus/>
<ci> F </ci>
<ci> G </ci>
</apply>
and applying it to the argument x as in
<apply>
<apply>
<plus/>
<ci> F </ci>
<ci> G </ci>
</apply>
<ci> x </ci>
</apply>
Both the function and the arguments may be simple identifiers or more complicated expressions.
In MathML 1.0 , another construction closely related to the use of the apply element with operators and arguments was the reln element.
The reln element was used to denote that a mathematical relation holds between its arguments, as opposed to applying an operator.
Thus, the MathML markup for the expression x < y was given in MathML 1.0 by:
<reln>
<lt/>
<ci> x </ci>
<ci> y </ci>
</reln>
In MathML 2.0, the apply construct is used with all operators, including logical operators. The expression above becomes
<apply>
<lt/>
<ci> x </ci>
<ci> y </ci>
</apply>
in MathML 2.0. The use of reln with relational operators is supported for reasons of backwards compatibility, but deprecated. Authors
creating new content are encouraged to use apply in all cases.
145
The most common operations and functions such as plus and sin have been predefined explicitly as empty elements (see Section 4.4).
The definitionURL attribute can be used by the author to record that a different sort of algebraic operation is intended. This allows
essentially the same notation to be re-used for a discussion taking place in a different algebraic domain.
Due to the nature of mathematics the notation must be extensible. The key to extensibility is the ability of the user to define new functions
and other symbols to expand the terrain of mathematical discourse.
It is always possible to create arbitrary expressions, and then to use them as symbols in the language. Their properties can then be inferred
directly from that usage as was done in the previous section. However, such an approach would preclude being able to encode the fact
that the construct was a known symbol, or to record its mathematical properties except by actually using it. The csymbol element is used
as a container to construct a new symbol in much the same way that ci is used to construct an identifier. (Note that ‘symbol’ is used here
in the abstract sense and has no connection with any presentation of the construct on screen or paper). The difference in usage is that
csymbol should refer to some mathematically defined concept with an external definition referenced via the definitionURL attribute,
whereas ci is used for identifiers that are essentially ‘local’ to the MathML expression . The target of the definitionURL attribute on the
csymbol element may encode the definition in any format; the particular encoding in use is given by the encoding attribute. In contrast,
the definitionURL attribute on a ci element might be used to associate an identifier with another sub-expression by referring to its id
attribute. This approach can be used, for example to indicate clearly that a particular ci element is an instance of a ci element that has
been declared to have some properties using the declare construct (see Section 4.4.2.8) or that it is an instance of a specific bound
variable as declared by a use of the bvar (see Section 4.4.5.6) element.
<csymbol definitionURL="http://www.example.com/VectorCalculus.htm"
encoding="text">
Christoffel
</csymbol>
The definitionURL attribute specifies a URI that provides a written definition for the Christoffel symbol. Suggested default definitions
for the content elements of MathML appear in Appendix C in a format based on OpenMath, although there is no requirement that a
particular format be used. The role of the definitionURL attribute is very similar to the role of definitions included at the beginning of
many mathematical papers, and which often just refer to a definition used by a particular book.
MathML 1.0 supported the use of the fn to encode the fact that a construct is explicitly being used as a function or operator. To record the
fact that F + G is being used semantically as if it were a function, it was encoded as:
146
<fn>
<apply>
<plus/>
<ci>F</ci>
<ci>G</ci>
</apply>
</fn>
This usage, although allowed in MathML 2.0 for reasons of backwards compatibility, is now deprecated. The fact that a construct is being
used as an operator is clear from the position of the construct as the first child of the apply. If it is required to add additional information
to the construct, it should be wrapped in a semantics element, for example:
<semantics definitionURL="http://www.example.com/vectorfuncs/plus.htm"
encoding="Mathematica">
<apply>
<plus/>
<ci>F</ci>
<ci>G</ci>
</apply>
</semantics>
MathML 1.0 supported the use of definitionURL with fn to refer to external definitions for user-defined functions. This usage, although
allowed for reasons of backwards compatibility, is deprecated in MathML 2.0 in favor of using csymbol to define the function, and then
apply to link the function to its arguments. For example:
<apply>
<csymbol definitionURL="http://www.example.org/function_spaces.html#my_def"
encoding="text">
BigK
</csymbol>
<ci>x</ci>
<ci>y</ci>
</apply>
Given functions, it is natural to have functional inverses. This is handled by the inverse element.
147
Functional inverses can be problematic from a mathematical point of view in that they implicitly involve the definition of an inverse for an
arbitrary function F . Even at the K-through-12 level the concept of an inverse F −1 of many common functions F is not used in a uniform
way. For example, the definitions used for the inverse trigonometric functions may differ slightly depending on the choice of domain and/or
branch cuts.
MathML adopts the view: if F is a function from a domain D to D’, then the inverse G of F is a function over D’ such that G(F (x)) = x for
x in D. This definition does not assert that such an inverse exists for all or indeed any x in D, or that it is single-valued anywhere. Also,
depending on the functions involved, additional properties such as F (G(y)) = y for y in D’ may hold.
The inverse element is applied to a function whenever an inverse is required. For example, application of the inverse sine function to x,
i.e. sin−1 (x), is encoded as:
<apply>
<apply> <inverse/> <sin/> </apply>
<ci> x </ci>
</apply>
While arcsin is one of the predefined MathML functions, an explicit reference to sin−1 (x) might occur in a document discussing possible
definitions of arcsin.
Consider a document discussing the vectors A = (a, b, c) and B = (d , e, f ), and later including the expression V = A + B. It is important
to be able to communicate the fact that wherever A and B are used they represent a particular vector. The properties of that vector may
determine aspects of operators such as plus.
The simple fact that A is a vector can be communicated by using the markup
<ci type="vector">A</ci>
but this still does not communicate, for example, which vector is involved or its dimensions.
The declare construct is used to associate specific properties or meanings with an object. The actual declaration itself is not rendered
visually (or in any other form). However, it indirectly impacts the semantics of all affected uses of the declared object.
Declarations must occur at the beginning of a math element. The scope of a declaration is the entire math element in which the declaration
is made. The scope attribute of a declare may be included but has no effect since the two possible values of "local" or "global" now
have the same meaning. The "global" attribute value is still allowed for backwards compatibility with MathML 1.0., but is deprecated in
MathML 2.0.
The uses of the declare element range from resetting default attribute values to associating an expression with a particular instance of a
more elaborate structure. Subsequent uses of the original expression (within the scope of the declare) play the same semantic role as
would the paired object.
For example, the declaration
148
<declare>
<ci> A </ci>
<vector>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</vector>
</declare>
specifies that A stands for the particular vector (a, b, c) so that subsequent uses of A as in V = A + B can take this into account. When
declare is used in this way, the actual encoding
<apply>
<eq/>
<ci> V </ci>
<apply>
<plus/>
<ci> A </ci>
<ci> B </ci>
</apply>
</apply>
remains unchanged but the expression can be interpreted properly as vector addition.
There is no requirement to declare an expression to stand for a specific object. For example, the declaration
<declare type="vector">
<ci> A </ci>
</declare>
specifies that A is a vector without indicating the number of components or the values of specific components. Any attribute which is valid
for the target element can be assigned in this way, with the possible values being the same as would ordinarily be assigned to such an
object.
The lambda calculus allows a user to construct a function from a variable and an expression. For example, the lambda construct underlies
the common mathematical idiom illustrated here:
Let f be the function taking x to x2 + 2
149
There are various notations for this concept in mathematical literature, such as λ(x, F (x)) = F or λ(x, [F ]) =F , where x is a free variable in
F.
This concept is implemented in MathML with the lambda element. A lambda construct with n (possibly 0) internal variables is encoded
by a lambda element, where the first n children are bvar elements containing the identifiers of the internal variables. This is followed by
an optional domainofapplication qualifier (see Section 4.2.3.2) and an expression defining the function. The defining expression is
typically an apply, but can also be any expression.
<declare type="function">
<ci> f </ci>
<lambda>
<bvar><ci> x </ci></bvar>
<apply>
<plus/>
<apply>
<power/>
<ci> x </ci>
<cn> 2 </cn>
</apply>
<ci> x </ci>
<cn> 3 </cn>
</apply>
</lambda>
</declare>
The following markup declares and constructs the function J such that J (x, y) is the integral from x to y of t 4 with respect to t .
150
<declare type="function">
<ci> J </ci>
<lambda>
<bvar><ci> x </ci></bvar>
<bvar><ci> y </ci></bvar>
<apply> <int/>
<bvar><ci> t </ci></bvar>
<lowlimit><ci> x </ci></lowlimit>
<uplimit><ci> y </ci></uplimit>
<apply>
<power/>
<ci>t</ci>
<cn>4</cn>
</apply>
</apply>
</lambda>
</declare>
The function J can then in turn be applied to an argument pair.
The last example of the preceding section illustrates the use of qualifier elements lowlimit, uplimit, and bvar in conjunction with the
int element. A number of common mathematical constructions involve additional data that is either implicit in conventional notation, such
as a bound variable, or thought of as part of the operator rather than an argument, as is the case with the limits of a definite integral.
Content markup uses qualifier elements in conjunction with a number of operators, including integrals, sums, series, and certain differential
operators. They may also be used by user defined functions such as those added by making use of the csymbol element, or by use of
lambda expressions. Qualifier elements appear in the same apply element with one of these operators. In general, they must appear in a
certain order, and their precise meaning depends on the operators being used. For details about the use of qualifiers with the predefined
operators see Section 4.2.3.2. The role of qualifiers for user defined functions is determined solely by the definition of each function.
A typical use of a qualifier is to identify a bound variable through use of the bvar element, or to restrict the values of the bound variable
to a particular domain of application or in some other way. For example, a domain of application can be given explicitly using the
domainofapplication element or by restricting the values of the bound variable represented by the bvar element to an interval or
by conditions. A condition element can be used to place restrictions directly on the bound variable. This allows MathML to define sets
by rule, rather than enumeration. The following markup, for instance, encodes the set x | x < 1:
151
<set>
<bvar><ci> x </ci></bvar>
<condition>
<apply>
<lt/>
<ci> x </ci>
<cn> 1 </cn>
</apply>
</condition>
<ci> x </ci>
</set>
Another typical use is the ‘lifting’ of n-ary operators to ‘big operators’, for instance the n-ary union operator to the union operator over sets,
as the union of the U -complements over a family F of sets in this construction
<apply>
<union/>
<bvar><ci>S</ci></bvar>
<condition>
<apply><in/><ci>S</ci><ci>F</ci></apply>
</condition>
<apply><setdiff/><ci>U</ci><ci>S</ci></apply>
</apply>
or this representation of the harmonic series:
<apply>
<plus/>
<domainofapplication><naturalnumbers/></domainofapplication>
<lambda>
<bvar><ci>x</ci></bvar>
<apply><quotient/><cn>1</cn><ci>x</ci></apply>
</lambda>
</apply>
This general construction gives natural lifted versions of the many n-ary operators (including csymbol) as described in Section 4.2.3.2.
The meaning of an expression of the first form is that the operator is applied to the values of the expression in the last child (where the
bound variables vary as specified in the qualifiers). The meaning of a construction of the second form is that the operator is applied to the
set of values obtained by applying the last child as a function to the elements of the set specified by the domainofapplication qualifier.
152
While the primary role of the MathML content element set is to directly encode the mathematical structure of expressions independent
of the notation used to present the objects, rendering issues cannot be ignored. Each content element has a default rendering, given in
Section 4.4, and several mechanisms (including Section 4.3.3.2) are provided for associating a particular rendering with an object.
4.2.2 Containers
Containers provide a means for the construction of mathematical objects of a given type.
Tokens ci, cn, csymbol
Constructors interval, list, matrix, matrixrow, set, vector, apply, reln (deprecated), fn (deprecated), lambda, piecewise,
piece, otherwise
Specials declare
4.2.2.1 Tokens
Token elements are typically the leaves of the MathML expression tree. Token elements are used to indicate mathematical identifiers,
numbers and symbols.
It is also possible for the canonically empty operator elements such as exp, sin and cos to be leaves in an expression tree. The usage of
operator elements is described in Section 4.2.3.
cn The cn element is the MathML token element used to represent numbers. The supported types of numbers include: "real",
"integer", "rational", "complex-cartesian", and "complex-polar", with "real" being the default type. An attribute
base (with default value "10") is used to help specify how the content is to be parsed. The content itself is essentially
PCDATA, separated by <sep/> when two parts are needed in order to fully describe a number. For example, the real number
3 is constructed by <cn type="real"> 3 </cn>, while the rational number 3/4 is constructed as <cn type="rational">
3<sep/>4 </cn>. The detailed structure and specifications are provided in Section 4.4.1.1.
ci The ci element, or ‘content identifier’ is used to construct a variable, or an identifier. A type attribute indicates the type of object the
symbol represents. Typically, ci represents a real scalar, but no default is specified. The content is either PCDATA or a general
presentation construct (see Section 3.1.6). For example,
<ci>
<msub>
<mi>c</mi>
<mn>1</mn>
</msub>
</ci>
encodes an atomic symbol that displays visually as c1 which, for purposes of content, is treated as a single symbol representing
a real number. The definitionURL attribute can be used to identify special properties or to refer to a defining instance of (for
example) a bound variable. The detailed structure and specifications are provided in Section 4.4.1.2.
153
csymbol The csymbol element, or ‘content symbol’ is used to construct a symbol whose semantics are not part of the core content
elements provided by MathML, but defined outside of the MathML specification. csymbol does not make any attempt to
describe how to map the arguments occurring in any application of the function into a new MathML expression. Instead, it
depends on its definitionURL attribute to point to a particular meaning, and the encoding attribute to give the syntax of this
definition. The content of a csymbol is either PCDATA or a general presentation construct (see Section 3.1.6). For example,
<csymbol definitionURL="http://www.example.com/ContDiffFuncs.htm"
encoding="text">
<msup>
<mi>C</mi>
<mn>2</mn>
</msup>
</csymbol>
encodes an atomic symbol that displays visually as C2 and that, for purposes of content, is treated as a single symbol repre-
senting the space of twice-differentiable continuous functions. The detailed structure and specifications are provided in Sec-
tion 4.4.1.3.
4.2.2.2 Constructors
MathML provides a number of elements for combining elements into familiar compound objects. The compound objects include things like
lists and sets. Each constructor produces a new type of object.
interval The interval element is described in detail in Section 4.4.2.4. It denotes an interval on the real line with the values represented
by its children as end points. The closure attribute is used to qualify the type of interval being represented. For example,
<interval closure="open-closed">
<ci> a </ci>
<ci> b </ci>
</interval>
represents the open-closed interval often written (a, b].
set and list The set and list elements are described in detail in Section 4.4.6.1 and Section 4.4.6.2. Typically, the child elements of a
possibly empty list element are the actual components of an ordered list. For example, an ordered list of the three symbols
a, b, and c is encoded as
<list> <ci> a </ci> <ci> b </ci> <ci> c </ci> </list>
154
Sets and lists can also be constructed by evaluating a function over a domain of application, each evaluation corresponding to
a term of the set or list. In the most general form a domain is explicitly specified by a domainofapplication element together
with optional bvar elements. Qualifications involving a domainofapplication element can be abbreviated in several ways
as described in Section 4.2.3.2. For example, a bvar and a condition element can be used to define lists where membership
depends on satisfying certain conditions. An order attribute can be used to specify what ordering is to be used. When the
nature of the child elements permits, the ordering defaults to a numeric or lexicographic ordering. Sets are structured much the
same as lists except that there is no implied ordering and the type of set may be "normal" or "multiset" with "multiset"
indicating that repetitions are allowed. For both sets and lists, the child elements must be valid MathML content elements. The
type of the child elements is not restricted. For example, one might construct a list of equations, or of inequalities.
matrix and matrixrow The matrix element is used to represent mathematical matrices. It is described in detail in Section 4.4.10.2. It
has zero or more child elements, all of which are matrixrow elements. These in turn expect zero or more child elements that
evaluate to algebraic expressions or numbers. These sub-elements are often real numbers, or symbols as in
<matrix>
<matrixrow> <cn> 1 </cn> <cn> 2 </cn> </matrixrow>
<matrixrow> <cn> 3 </cn> <cn> 4 </cn> </matrixrow>
</matrix>
The matrixrow elements must always be contained inside of a matrix, and all rows in a given matrix must have the same
number of elements. Note that the behavior of the matrix and matrixrow elements is substantially different from the mtable
and mtr presentation elements. A matrix can also be constructed by evaluating a bivariate function over a specific domain
of application, each evaluation corresponding to an entry in the matrix. In its most general form a domain of application is
explicitly specified by a domainofapplication element and a function which when evaluated at points of the domain produces
entries in the matrix. Optionally the domainofapplication can be augmented by bvar elements and an algebraic expression
expressed in terms of them. Qualifications defined by a domainofapplication element can be abbreviated in several ways
as described in Section 4.2.3.
vector The vector element is described in detail in Section 4.4.10.1. It constructs vectors from an n-dimensional vector space so that
its n child elements typically represent real or complex valued scalars as in the three-element vector
<vector>
<apply>
<plus/>
<ci> x </ci>
<ci> y </ci>
</apply>
<cn> 3 </cn>
<cn> 7 </cn>
</vector>
155
A vector can also be constructed by evaluating a function over a specific domain of application, each evaluation corresponding
to an entry in the vector. In its most general form a domain is explicitly specified by a domainofapplication element and a
function. Optionally the domainofapplication can be augmented by a bvar element and an algebraic expression expressed
in terms of it. Qualifications defined by a domainofapplication element can be abbreviated in several ways as described in
Section 4.2.3.
apply The apply element is described in detail in Section 4.4.2.1. Its purpose is to apply a function or operator to its arguments to
produce an expression representing an element of the codomain of the function. It is involved in everything from forming sums
such as a + b as in
<apply>
<plus/>
<ci> a </ci>
<ci> b </ci>
</apply>
through to using the sine function to construct sin(a) as in
<apply>
<sin/>
<ci> a </ci>
</apply>
or constructing integrals. Its usage in any particular setting is determined largely by the properties of the function (the first child
element) and as such its detailed usage is covered together with the functions and operators in Section 4.2.3.
reln The reln element is described in detail in Section 4.4.2.2. It was used in MathML 1.0 to construct an expression such as a = b, as in
<reln><eq/>
<ci> a </ci>
<ci> b </ci>
</reln>
indicating an intended comparison between two mathematical values. MathML 2.0 takes the view that this should be regarded
as the application of a Boolean function, and as such could be constructed using apply. The use of reln with logical operators
is supported for reasons of backwards compatibility, but deprecated in favor of apply.
fn The fn element was used in MathML 1.0 to make explicit the fact that an expression is being used as a function or operator. This is
allowed in MathML 2.0 for backwards compatibility, but is deprecated, as the use of an expression as a function or operator is
clear from its position as the first child of an apply. fn is discussed in detail in Section 4.4.2.3.
lambda The lambda element is used to construct a user-defined function from an expression. The last child is an expression defining
the function in terms of the bound variables declared by the bvar and any domainofapplication (see Section 4.2.3.2)
elements coming before it. The last element is typically an apply element, but can also be any container element. The following
constructs λ (x, sin x)
156
<lambda>
<bvar><ci> x </ci></bvar>
<apply>
<sin/>
<ci> x </ci>
</apply>
</lambda>
The following constructs the constant function λ (x, 3)
<lambda>
<bvar><ci> x </ci></bvar>
<cn> 3 </cn>
</lambda>
piecewise, piece, otherwise The piecewise, piece, otherwise elements are used to support ‘piecewise’ declarations of the form ‘
H (x) = 0 if x less than 0, H (x) = x otherwise’.
<piecewise>
<piece>
<cn> 0 </cn>
<apply><lt/><ci> x </ci> <cn> 0 </cn></apply>
</piece>
<otherwise>
<ci> x </ci>
</otherwise>
</piecewise>
The piecewise elements are discussed in detail in Section 4.4.2.16.
The declare construct is described in detail in Section 4.4.2.8. It is special in that its entire purpose is to modify the semantics of other
objects. It is not rendered visually or aurally.
The need for declarations arises any time a symbol (including more general presentations) is being used to represent an instance of an
object of a particular type. For example, you may wish to declare that the symbolic identifier V represents a vector. The single argument
form can be used to set properties of objects by setting the default values of implied attribute values to specific values.
The declaration
<declare type="vector"><ci>V</ci></declare>
157
resets the default type attribute of <ci>V</ci> to "vector" for all affected occurrences of <ci>V</ci>. This avoids having to write <ci
type="vector">V</ci> every time you use the symbol.
More generally, declare can be used to associate expressions with specific content. For example, the declaration
<declare>
<ci>F</ci>
<lambda>
<bvar><ci> U </ci></bvar>
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<lowlimit><cn> 0 </cn></lowlimit>
<uplimit><ci> a </ci></uplimit>
<ci> U </ci>
</apply>
</lambda>
</declare>
associates the symbol F with a new function defined by the lambda construct. Within the scope where the declaration is in effect, the
expression
<apply>
<ci>F</ci>
<ci> U </ci>
</apply>
stands for the integral of U from 0 to a.
The declare element can also be used to change the definition of a function or operator. For example, if the URL
http://.../MathML:noncommutplus described a non-commutative plus operation encoded in Maple syntax, then the declaration
<declare definitionURL="http://.../MathML:noncommutplus"
encoding="Maple">
<plus/>
</declare>
would indicate that all affected uses of plus are to be interpreted as having that definition of plus.
unary arithmetic factorial, minus, abs, conjugate, arg, real, imaginary, floor, ceiling
unary logical not
unary functional inverse, ident, domain, codomain, image
unary elementary classical functions sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth, arcsin, arccos, arctan,
arccosh, arccot, arccoth, arccsc, arccsch, arcsec, arcsech, arcsinh, arctanh, exp, ln,
log
unary linear algebra determinant, transpose
unary calculus and vector calculus divergence, grad, curl, laplacian
unary set-theoretic card
binary arithmetic quotient, divide, minus, power, rem
binary logical implies, equivalent, approx
binary set operators setdiff
binary linear algebra vectorproduct, scalarproduct, outerproduct
n-ary arithmetic plus, times, max, min, gcd, lcm
n-ary statistical mean, sdev, variance, median, mode
n-ary logical and, or, xor
n-ary linear algebra selector
n-ary set operator union, intersect, cartesianproduct
n-ary functional fn(deprecated), compose
integral, sum, product operators int, sum, product
differential operator diff, partialdiff
quantifier forall, exists
From the point of view of usage, MathML regards functions (for example sin and cos) and operators (for example plus and times) in
the same way. MathML predefined functions and operators are all canonically empty elements.
Note that the csymbol element can be used to construct a user-defined symbol that can be used as a function or operator.
MathML functions can be used in two ways. They can be used as the operator within an apply element, in which case they refer to a
function evaluated at a specific value. For example,
<apply>
<sin/>
<cn>5</cn>
</apply>
denotes a real number, namely sin(5).
MathML functions can also be used as arguments to other operators, for example
159
<apply>
<plus/><sin/><cos/>
</apply>
denotes a function, namely the result of adding the sine and cosine functions in some function space. (The default semantic definition of
plus is such that it infers what kind of operation is intended from the type of its arguments.)
The number of child elements in the apply is defined by the element in the first (i.e. operator) position after taking into account the use of
qualifiers as described in Section 4.2.3.2.
Unary operators are followed by exactly one other child element within the apply.
Binary operators are followed by exactly two child elements.
N-ary operators are followed by any number of child elements. Alternatively, their operands may be generated by allowing a function or
expression to vary over a domain of application.
Some operators have multiple classifications depending on how they are used. For example the minus operator can be both unary and
binary.
Integral, sum, product and differential operators are discussed below in Section 4.2.3.2.
The (lowlimit,uplimit) pair, the interval and the condition are all shorthand notations specifying a particular domain of application
and should not be used if domainofapplication is used. These shorthand notations are provided as they correspond to common usage
cases and map more easily to familiar presentations. For example, the lowlimit, uplimit pair can be used where explicit upper and
lower limits and a bound variable are all known, while an interval can be used in the same situation but without an explicit bound
variable as in:
<apply>
<int/>
<interval><cn>0</cn><cn>1</cn></interval>
<sin/>
</apply>
The condition qualifier corresponds to situations where the domain of application is a set described by simple conditions placed directly
on the bound variable(s). (Such conditions are often displayed in place of a lower bound.) An example of the use of condition is:
<apply>
<int/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><in/><ci>x</ci><ci type="set">C</ci></apply>
</condition>
<apply><sin/><ci>x</ci></apply>
</apply>
The most general domain qualifier is the domainofapplication. It is used to provide the name of or a description of the set over which
the operation is to take place and should be used explicitly whenever there is danger of confusing the role of one of the short forms such
as in an expression with multiple interval elements. It can be used to write an expression for the integral a function over a named set
as in
<apply>
<int/>
<domainofapplication>
<ci type="set">C</ci>
</domainofapplication>
<ci type="function">f</ci>
</apply>
The domainofapplication element can also be used with bound variables so that
161
<apply>
<int/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>1</cn></uplimit>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
can be written as:
<apply>
<int/>
<bvar><ci>x</ci></bvar>
<domainofapplication>
<set>
<bvar><ci>t</ci></bvar>
<condition>
<apply>
<and/>
<apply><leq/><cn>0</cn><ci>t</ci></apply>
<apply><leq/><ci>t</ci><cn>1</cn></apply>
</apply>
</condition>
<ci>t</ci>
</set>
</domainofapplication>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
This use extends to multivariate domains by using extra bound variables and a domain corresponding to a cartesian product as in
162
<apply>
<int/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<domainofapplication>
<set>
<bvar><ci>t</ci></bvar>
<bvar><ci>u</ci></bvar>
<condition>
<apply>
<and/>
<apply><leq/><cn>0</cn><ci>t</ci></apply>
<apply><leq/><ci>t</ci><cn>1</cn></apply>
<apply><leq/><cn>0</cn><ci>u</ci></apply>
<apply><leq/><ci>u</ci><cn>1</cn></apply>
</apply>
</condition>
<list><ci>t</ci><ci>u</ci></list>
</set>
</domainofapplication>
<apply>
<times/>
<apply><power/><ci>x</ci><cn>2</cn></apply>
<apply><power/><ci>y</ci><cn>3</cn></apply>
</apply>
</apply>
Note that the order of bound variables of the integral must correspond to the order in the list used by the set constructor in the
domainofapplication.
By using the deprecated fn element, it was possible to associate a qualifier schema with a function before it was applied to an argument.
For example, a function acting on integrable functions on the interval [0,1] could have been written:
<fn>
<apply>
<int/>
<interval><cn>0</cn><cn>1</cn></interval>
</apply>
</fn>
163
This same function can be constructed without using the deprecated fn element by making use of a lambda expression as in:
<lambda>
<bvar><ci>f</ci></bvar>
<apply>
<int/>
<interval><cn>0</cn><cn>1</cn></interval>
<ci>f</ci>
</apply>
</lambda>
This second form has the advantage of making the intended meaning explicit.
The meaning and usage of qualifier schemata varies from function to function. The following list summarizes the usage of qualifier
schemata with the MathML functions that normally take qualifiers.
csymbol and ci In addition to the defined usage in MathML, qualifier schemata may be used with any user-defined symbol (e.g. using
csymbol) or construct such as an apply. In this context bvar and domainofapplication and its various alternate forms
have their usual interpretation and structure, but other qualifiers and arguments are not defined by MathML; they would nor-
mally be user-defined using the definitionURL attribute. In the absence of specific alternatives, it is recommended that the
default rendering of an arbitrary function with domain of application qualifiers or its short forms mimic the rendering for sum by
decorating a larger form of some operator - the function name. For other qualifiers, or in the absence of a suitable larger form
of the operator, use of a functional notation to record the function, its qualifiers and its arguments may be most appropriate.
int The int function accepts the lowlimit, uplimit, bvar, interval, condition and domainofapplication schemata. If both
lowlimit and uplimit schemata are present, they denote the limits of a definite integral. The domain of integration may
alternatively be specified using interval, condition or domainofapplication. The bvar schema signifies the variable of
integration.
diff The diff function accepts the bvar schema. The bvar schema specifies with respect to which variable the derivative is being taken.
The bvar may itself contain a degree schema that is used to specify the order of the derivative, i.e. a first derivative, a second
derivative, etc. For example, the second derivative of f with respect to x is:
<apply>
<diff/>
<bvar>
<ci> x </ci>
<degree><cn> 2 </cn></degree>
</bvar>
<apply><fn><ci>f</ci></fn>
<ci> x </ci>
</apply>
</apply>
164
partialdiff The partialdiff operator accepts zero or more bvar schemata, and an optional degree qualifier schema. The bvar
schema specify, in order, the variables with respect to which the derivative is being taken. Each bvar element may contain
a degree schema which is used to specify the order of the derivative being taken with respect to that variable. The optional
degree schema qualifier associated with the partialdiff element itself (that is, appearing as a child of the enclosing apply
element rather than of one of the bvar qualifiers) is used to represent the total degree of the differentiation. Each degree
schema used with partialdiff is expected to contain a single child schema. For example,
<apply>
<partialdiff/>
<bvar>
<degree><cn>2</cn></degree>
<ci>x</ci>
</bvar>
<bvar><ci>y</ci></bvar>
<bvar><ci>x</ci></bvar>
<degree><cn>4</cn></degree>
<ci type="function">f</ci>
</apply>
denotes the mixed partial derivative ( d4 / d2 x dy dx ) f .
sum, product The sum and product functions accept the bvar, lowlimit, uplimit, interval, condition and
domainofapplication schemata. If both lowlimit and uplimit schemata are present, they denote the limits of the sum or
product. The limits may alternatively be specified using the interval, condition or domainofapplication schema. The
bvar schema signifies the internal variable in the sum or product. A typical example might be:
<apply>
<sum/>
<bvar><ci>i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>100</cn></uplimit>
<apply>
<power/>
<ci>x</ci>
<ci>i</ci>
</apply>
</apply>
When used with sum or product, each qualifier schema is expected to contain a single child schema; otherwise an error is
generated.
165
limit The limit function accepts zero or more bvar schemata, and optional condition and lowlimit schemata. A condition may
be used to place constraints on the bvar. The bvar schema denotes the variable with respect to which the limit is being taken.
The lowlimit schema denotes the limit point. When used with limit, the bvar and lowlimit schemata are expected to
contain a single child schema; otherwise an error is generated.
log The log function accepts only the logbase schema. If present, the logbase schema denotes the base with respect to which the
logarithm is being taken. Otherwise, the log is assumed to be base 10. When used with log, the logbase schema is expected
to contain a single child schema; otherwise an error is generated.
moment The moment function accepts the degree and momentabout schema. If present, the degree schema denotes the order of the
moment. Otherwise, the moment is assumed to be the first order moment. When used with moment, the degree schema is
expected to contain a single child schema; otherwise an error is generated. If present, the momentabout schema denotes the
point about which the moment is taken. Otherwise, the moment is assumed to be the moment about zero.
min, max The min and max operators are n-ary operators may use the domain of application qualifiers as described in 4.2.3.2. For
example, the min and max functions accept a bvar schema in cases where the maximum or minimum is being taken over
a set of values specified by a condition schema together with an expression to be evaluated on that set. In MathML1.0,
the bvar element was optional when using a condition; if a condition element containing a single variable was given by
itself following a min or max operator, the variable was implicitly assumed to be bound, and the expression to be maximized
or minimized (if absent) was assumed to be the single bound variable. This usage is deprecated in MathML 2.0 in favor
of explicitly stating the bound variable(s) and the expression to be maximized or minimized in all cases. The min and max
elements may also be applied to a list of values in which case no qualifier schemata are used. For examples of all three
usages, see Section 4.4.3.4.
forall, exists The universal and existential quantifier operators forall and exists are used in conjunction with one or more bvar
schemata to represent simple logical assertions. There are two main main ways of using the logical quantifier operators.
The first usage is for representing a simple, quantified assertion. For example, the statement ‘there exists x < 9’ would be
represented as:
<apply>
<exists/>
<bvar><ci> x </ci></bvar>
<apply><lt/>
<ci> x </ci><cn> 9 </cn>
</apply>
</apply>
The second usage is for representing implications. Hypotheses are given by a condition element following the bound vari-
ables. For example the statement ‘for all x < 9, x < 10’ would be represented as:
166
<apply>
<forall/>
<bvar><ci> x </ci></bvar>
<condition>
<apply><lt/>
<ci> x </ci><cn> 9 </cn>
</apply>
</condition>
<apply><lt/>
<ci> x </ci><cn> 10 </cn>
</apply>
</apply>
Note that in both these usages one or more bvar qualifiers are mandatory. Expressions involving quantifiers may also be
constructed using a function and a domain of application as described in 4.2.3.2.
n-ary operators n-ary operators accept the bvar and domainofapplication schemata (and the abbreviated forms of
domainofapplication: lowlimit, uplimit interval and condition). If qualifiers are used, they should be followed
by a single child element representing a function or an expression in the bound variables specified in the bvar qualifiers.
Mathematically the operation is then taken to be over the arguments generated by this function ranging over the specified
domain of application, rather than over an explicit list of arguments as is the case when qualifier schemata are not used. The
default presentation in such a case should be modelled as a prefix operator similar to the layout used for sum even if the
operator when used without qualifiers has a default presentation as an infix operator.
4.2.4 Relations
binary relation neq, equivalent, approx, factorof
binary logical relation implies
binary set relation in, notin, notsubset, notprsubset
binary series relation tendsto
n-ary relation eq, leq, lt, geq, gt
n-ary set relation subset, prsubset
The MathML content tags include a number of canonically empty elements which denote arithmetic and logical relations. Relations are
characterized by the fact that, if an external application were to evaluate them (MathML does not specify how to evaluate expressions),
they would typically return a truth value. By contrast, operators generally return a value of the same type as the operands. For example,
the result of evaluating a < b is either true or false (by contrast, 1 + 2 is again a number).
Relations are bracketed with their arguments using the apply element in the same way as other functions. In MathML 1.0, relational
operators were bracketed using reln. This usage, although still supported, is now deprecated in favor of apply. The element for the
relational operator is the first child element of the apply. Thus, the example from the preceding paragraph is properly marked up as:
167
<apply>
<lt/>
<ci>a</ci>
<ci>b</ci>
</apply>
The number of child elements in the apply is defined by the element in the first (i.e. relation) position.
Unary relations are followed by exactly one other child element within the apply.
Some elements have more than one such classification. For example, the minus element is both unary and binary.
4.2.5 Conditions
condition condition
The condition element is used to assert that a Boolean valued expression should be true. When used in an an apply element to place
a condition on a bound variable, it forms a shorthand notation for specifying a domain of application (see Section 4.4.2.15) since it restricts
the permissible values for that bound variable. In the context of quantifier operators, this corresponds to the ‘such that’ construct used
in mathematical expressions. As a shorthand for domainofapplication it is used in conjunction with operators like int and sum, or to
specify argument lists for operators like min and max.
A condition element contains a single child that is either an apply, a reln element (deprecated), or a set (deprecated) indicating mem-
bership in that set. Compound conditions are indicated by applying relations such as and inside the child of the condition.
4.2.5.1 Examples
<apply>
<exists/>
<bvar><ci> x </ci></bvar>
<condition>
<apply><lt/>
<apply>
<power/>
<ci>x</ci>
<cn>5</cn>
</apply>
<cn>3</cn>
</apply>
</condition>
<true/>
</apply>
The next example encodes ‘for all x in N there exist prime numbers p, q such that p+q = 2x’.
<apply>
<forall/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><in/>
<ci>x</ci>
<csymbol encoding="OpenMath"
definitionURL="http://www.openmath.org/cd/setname1#N">
N
</csymbol>
</apply>
</condition>
169
<apply><exists/>
<bvar><ci>p</ci></bvar>
<bvar><ci>q</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>p</ci>
<csymbol encoding="OpenMath"
definitionURL="http://www.openmath.org/cd/setname1#P">
P
</csymbol>
</apply>
<apply><in/><ci>q</ci>
<csymbol encoding="OpenMath"
definitionURL="http://www.openmath.org/cd/setname1#P">
P
</csymbol>
</apply>
</apply>
</condition>
<apply><eq/>
<apply><plus/><ci>p</ci><ci>q</ci></apply>
<apply><times/><cn>2</cn><ci>x</ci></apply>
</apply>
</apply>
</apply>
A third example shows the use of quantifiers with condition. The following markup encodes ‘there exists x < 3 such that x2 = 4’.
170
<apply>
<exists/>
<bvar><ci> x </ci></bvar>
<condition>
<apply><lt/><ci>x</ci><cn>3</cn></apply>
</condition>
<apply>
<eq/>
<apply>
<power/><ci>x</ci><cn>2</cn>
</apply>
<cn>4</cn>
</apply>
</apply>
However, even in such apparently simple expressions as X + Y , some additional information may be required for applications such as
computer algebra. Are X and Y integers, or functions, etc.? ‘Plus’ represents addition over which field? This additional information is
referred to as semantic mapping. In MathML, this mapping is provided by the semantics, annotation and annotation-xml elements.
The semantics element is the container element for the MathML expression together with its semantic mappings. semantics expects
a variable number of child elements. The first is the element (which may itself be a complex element structure) for which this additional
semantic information is being defined. The second and subsequent children, if any, are instances of the elements annotation and/or
annotation-xml.
The semantics element also accepts the definitionURL and encoding attributes for use by external processing applications. One use
might be a URI for a semantic content dictionary, for example. Since the semantic mapping information might in some cases be provided
entirely by the definitionURL attribute, the annotation or annotation-xml elements are optional.
The annotation element is a container for arbitrary data. This data may be in the form of text, computer algebra encodings, C programs,
or whatever a processing application expects. annotation has an attribute "encoding" defining the form in use. Note that the content
model of annotation is PCDATA, so care must be taken that the particular encoding does not conflict with XML parsing rules.
171
The annotation-xml element is a container for semantic information in well-formed XML. For example, an XML form of the OpenMath
semantics could be given. Another possible use here is to embed, for example, the presentation tag form of a construct given in content
tag form in the first child element of semantics (or vice versa). annotation-xml has an attribute "encoding" defining the form in use.
For example:
<semantics>
<apply>
<divide/>
<cn>123</cn>
<cn>456</cn>
</apply>
<annotation encoding="Mathematica">
N[123/456, 39]
</annotation>
<annotation encoding="TeX">
$0.269736842105263157894736842105263157894\ldots$
</annotation>
<annotation encoding="Maple">
evalf(123/456, 39);
</annotation>
<annotation-xml encoding="MathML-Presentation">
<mrow>
<mn> 0.269736842105263157894 </mn>
<mover accent=’true’>
<mn> 736842105263157894 </mn>
<mo> ‾ </mo>
</mover>
</mrow>
</annotation-xml>
<annotation-xml encoding="OpenMath">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMS cd="arith1" name="divide"/>
<OMI>123</OMI>
<OMI>456</OMI>
</OMA>
</annotation-xml>
</semantics>
where OMA is the element defining the additional semantic information.
172
Of course, providing an explicit semantic mapping at all is optional, and in general would only be provided where there is some requirement
to process or manipulate the underlying mathematics.
Although semantic mappings can easily be provided by various proprietary, or highly specialized encodings, there are no widely available,
non-proprietary standard schemes for semantic mapping. In part to address this need, the goal of the OpenMath effort is to provide
a platform-independent, vendor-neutral standard for the exchange of mathematical objects between applications. Such mathematical
objects include semantic mapping information. The OpenMath group has defined an XML syntax for the encoding of this information
[OpenMath2000]. This element set could provide the basis of one annotation-xml element set.
An attractive side of this mechanism is that the OpenMath syntax is specified in XML, so that a MathML expression together with its
semantic annotations can be validated using XML parsers.
MathML provides a collection of predefined constants and symbols which represent frequently-encountered concepts in K-12 mathemat-
ics. These include symbols for well-known sets, such as integers and rationals, and also some widely known constant symbols such
as false, true, exponentiale.
MathML functions, operators and relations can all be thought of as mathematical functions if viewed in a sufficiently abstract way. For
example, the standard addition operator can be regarded as a function mapping pairs of real numbers to real numbers. Similarly, a relation
can be thought of as a function from some space of ordered pairs into the set of values true, false. To be mathematically meaningful, the
domain and codomain of a function must be precisely specified. In practical terms, this means that functions only make sense when
applied to certain kinds of operands. For example, thinking of the standard addition operator, it makes no sense to speak of ‘adding’ a set
to a function. Since MathML content markup seeks to encode mathematical expressions in a way that can be unambiguously evaluated,
it is no surprise that the types of operands is an issue.
MathML specifies the types of arguments in two ways. The first way is by providing precise instructions for processing applications about
the kinds of arguments expected by the MathML content elements denoting functions, operators and relations. These operand types
are defined in a dictionary of default semantic bindings for content elements, which is given in Appendix C. For example, the MathML
content dictionary specifies that for real scalar arguments the plus operator is the standard commutative addition operator over a field.
The elements cn has a type attribute with a default value of "real". Thus some processors will be able to use this information to verify
the validity of the indicated operations.
Although MathML specifies the types of arguments for functions, operators and relations, and provides a mechanism for typing arguments,
a MathML processor is not required to do any type checking. In other words, a MathML processor will not generate errors if argument
types are incorrect. If the processor is a computer algebra system, it may be unable to evaluate an expression, but no MathML error is
generated.
173
Content element attributes are all of the type CDATA, that is, any character string will be accepted as valid. In addition, each attribute has
a list of predefined values, which a content processor is expected to recognize and process. The reason that the attribute values are not
formally restricted to the list of predefined values is to allow for extension. A processor encountering a value (not in the predefined list)
which it does not recognize may validly process it as the default value for that attribute.
4.3.2.1 base
cn indicates numerical base of the number. Predefined values: any numeric string. The default value is "10"
4.3.2.2 closure
interval indicates closure of the interval. Predefined values: "open", "closed", "open-closed", "closed-open". The default value is
"closed"
4.3.2.3 definitionURL
csymbol, declare, semantics, any operator element points to an external definition of the semantics of the symbol or construct being
declared. The value is a URL or URI that should point to some kind of definition. This definition overrides the MathML default
semantics. At present, MathML does not specify the format in which external semantic definitions should be given. In particular,
there is no requirement that the target of the URI be loadable and parseable. An external definition could, for example, define
the semantics in human-readable form. Ideally, in most situations the definition pointed to by the definitionURL attribute
would be some standard, machine-readable format. However, there are reasons why MathML does not require such a format.
• No such format currently exists. There are several projects underway to develop and implement standard semantic en-
coding formats, most notably the OpenMath effort. By nature, the development of a comprehensive system of semantic
encoding is a very large enterprise, and while much work has been done, much additional work remains. Even though
the definitionURL is designed and intended for use with a formal semantic encoding language such as OpenMath, it
is premature to require any one particular format.
• There will always be situations where some non-standard format is preferable. This is particularly true in situations where
authors are describing new ideas. It is anticipated that in the near term, there will be a variety of renderer-dependent
implementations of the definitionURL attribute.
– A translation tool might simply prompt the user with the specified definition in situations where the proper semantics
have been overridden, and in this case, human-readable definitions will be most useful.
174
4.3.2.4 encoding
annotation, annotation-xml, csymbol, semantics, all operator elements indicates the encoding of the annotation, or in the case of
csymbol , semantics and operator elements, the syntax of the target referred to by definitionURL. Predefined values are
"MathML-Presentation", "MathML-Content". Other typical values: "TeX", "OpenMath". Note that this is unrelated to the
text encoding of the document as specified for example in the encoding pseudo-attribute of an XML declaration. The default
value is "", i.e. unspecified.
4.3.2.5 nargs
declare indicates number of arguments for function declarations. Pre-defined values: "nary", or any numeric string. The default value is
"1".
4.3.2.6 occurrence
declare indicates occurrence for operator declarations. Pre-defined values: "prefix", "infix", "function-model". The default value
is "function-model".
4.3.2.7 order
list indicates ordering on the list. Predefined values: "lexicographic", "numeric". The default value is "numeric".
4.3.2.8 scope
declare indicates scope of applicability of the declaration. Pre-defined values: "local", "global" (deprecated).
• "local" means the containing MathML element.
• "global" means the containing math element.
175
In MathML 2.0, a declare has been restricted to occur only at the beginning of a math element. Thus, there is no difference
between the two possible scope values and the scope attribute may be safely ignored. The "global" attribute value has been
deprecated for this role as "local" better represents the concept. Ideally, one would like to make document-wide declarations
by setting the value of the scope attribute to be "global-document". However, the proper mechanism for document-wide
declarations very much depends on details of the way in which XML will be embedded in HTML, future XML style sheet mecha-
nisms, and the underlying Document Object Model. Since these supporting technologies are still in flux at present, the MathML
specification does not include "global-document" as a pre-defined value of the scope attribute. It is anticipated, however,
that this issue will be revisited in future revisions of MathML as supporting technologies stabilize. In the near term, MathML
implementors that wish to simulate the effect of a document-wide declaration are encouraged to pre-process documents in
order to distribute document-wide declarations to each individual math element in the document.
4.3.2.9 type
cn indicates type of the number. Predefined values: "e-notation", "integer", "rational", "real", "complex-polar",
"complex-cartesian", "constant". The default value is "real". Note: Each data type implies that the data adheres to
certain formatting conventions, detailed below. If the data fails to conform to the expected format, an error is generated. Details
of the individual formats are:
real A real number is presented in decimal notation. Decimal notation consists of an optional sign (‘+’ or ‘-’) followed by a
string of digits possibly separated into an integer and a fractional part by a ‘decimal point’. Some examples are 0.3, 1,
and -31.56. If a different base is specified, then the digits are interpreted as being digits computed to that base.
e-notation A real number may also be presented in scientific notation. Such numbers have two parts (a mantissa and an
exponent) separated by sep. The first part is a real number, while the second part is an integer exponent indicating a
power of the base. For example, 12.3<sep/>5 represents 12.3 times 105 . The default presentation of this example is
12.3e5.
integer An integer is represented by an optional sign followed by a string of 1 or more ‘digits’. What a ‘digit’ is depends on the
base attribute. If base is present, it specifies the base for the digit encoding, and it specifies it base 10. Thus base=’16’
specifies a hex encoding. When base > 10, letters are added in alphabetical order as digits. The legitimate values for
base are therefore between 2 and 36.
rational A rational number is two integers separated by <sep/>. If base is present, it specifies the base used for the digit
encoding of both integers.
complex-cartesian A complex number is of the form two real point numbers separated by <sep/>.
complex-polar A complex number is specified in the form of a magnitude and an angle (in radians). The raw data is in the
form of two real numbers separated by <sep/>.
constant The "constant" type is used to denote named constants. Several important constants such as pi have been
included explicitly in MathML 2.0 as empty elements. This use of the cn is discouraged in favor of the defined constants,
or the use of csymbol with an appropriate value for the definitionURL. For example, instead of using the pi element, an
instance of <cn type="constant">π</cn> could be used. This should be interpreted as having the semantics of
the mathematical constant Pi. The data for a constant cn tag may be one of the following common constants:
176
Symbol Value
π The usual π of trigonometry: approximately 3.141592653...
ⅇ (or ⅇ) The base for natural logarithms: approximately 2.718281828...
ⅈ (or ⅈ) Square root of -1
γ Euler’s constant: approximately 0.5772156649...
∞ (or &infty;) Infinity. Proper interpretation varies with context
&true; the logical constant true
&false; the logical constant false
&NotANumber; (or &NaN;) represents the result of an ill-defined floating point division
ci indicates type of the identifier. Predefined values: "integer", "rational", "real", "complex", "complex-polar",
"complex-cartesian", "constant", "function" or the name of any content element. The meanings of the attribute values
shared with cn are the same as those listed for the cn element. The attribute value "complex" is intended for use when an
identifier represents a complex number but the particular representation (such as polar or cartesian) is either not known or is
irrelevant. The default value is "", i.e. unspecified.
declare indicates a type value that is to be attached to the first child of the declare. The first child of the declare must accept a type
attribute and the attribute value provided must be appropriate for that element. For example, if the first child is a ci element
then the attribute value must be valid for a ci element. The default value is unspecified.
set indicates type of the set. Predefined values: "normal", "multiset". "multiset" indicates that repetitions are allowed. The default
value is "normal".
tendsto is used to capture the notion of one quantity approaching another. It occurs as a container so that it can more easily be used in the
construction of a limit expression. Predefined values: "above", "below", "two-sided". The default value is "two-sided".
4.3.3.1 type
The type attribute, in addition to conveying semantic information, can be interpreted to provide rendering information. For example in
<ci type="vector">V</ci>
a renderer could display a bold V for the vector.
All content elements support the following general attributes that can be used to modify the rendering of the markup.
• class
• style
• id
• other
177
The "class", "style" and "id" attributes are intended for compatibility with Cascading Style Sheets (CSS), as described in Sec-
tion 2.4.5.
Content or semantic tagging goes along with the (frequently implicit) premise that, if you know the semantics, you can always work out
a presentation form. When an author’s main goal is to mark up re-usable, mathematical expressions that can be evaluated, the exact
rendering of the expression is probably not critical, provided that it is easily understandable. However, when an author’s goal is more along
the lines of providing enough additional semantic information to make a document more accessible by facilitating better visual rendering,
voice rendering, or specialized processing, controlling the exact notation used becomes more of an issue.
MathML elements accept an attribute other (see Section 7.2.3), which can be used to specify things not specifically documented in
MathML. On content tags, this attribute can be used by an author to express a preference between equivalent forms for a particular
content element construct, where the selection of the presentation has nothing to do with the semantics. Examples might be
• inline or displayed equations
• script-style fractions
• use of x with a dot for a derivative over dx/dt
Thus, if a particular renderer recognized a display attribute to select between script-style and display-style fractions, an author might write
<apply other=’display="scriptstyle"’>
<divide/>
<cn> 1 </cn>
<ci> x </ci>
</apply>
to indicate that the rendering 1/x is preferred.
The information provided in the other attribute is intended for use by specific renderers or processors, and therefore, the permitted values
are determined by the renderer being used. It is legal for a renderer to ignore this information. This might be intentional, as in the case of
a publisher imposing a house style, or simply because the renderer does not understand them, or is unable to carry them out.
When working with the content elements, it can be useful to keep in mind the following.
• The role of the content elements is analogous to data entry in a mathematical system. The information that is provided is there
to facilitate the successful parsing of an expression as the intended mathematical object by a receiving application.
178
• MathML content elements do not by themselves ‘perform’ any mathematical evaluations or operations. They do not ‘evaluate’
in a browser and any ‘action’ that is ultimately taken on those objects is determined entirely by the receiving mathematical
application. For example, editing programs and applications geared to computation for the lower grades would typically leave
3 + 4 as is, whereas computational systems targeting a more advanced audience might evaluate this as 7. Similarly, some
computational systems might evaluate sin(0) to 0, whereas others would leave it unevaluated. Yet other computational systems
might be unable to deal with pure symbolic expressions like sin(x) and may even regard them as data entry errors. None of
this has any bearing on the correctness of the original MathML representation. Where evaluation is mentioned at all in the
descriptions below, it is merely to help clarify the meaning of the underlying operation.
• Apart from the instances where there is an explicit interaction with presentation tagging, there is no required rendering (visual
or aural) - only a suggested default. As such, the presentations that are included in this section are merely to help communicate
to the reader the intended mathematical meaning by association with the same expression written in a more traditional notation.
The available content elements are:
• token elements
– cn
– ci
– csymbol (MathML 2.0)
• basic content elements
– apply
– reln (deprecated)
– fn (deprecated)
– interval
– inverse
– sep
– condition
– declare
– lambda
– compose
– ident
– domain (MathML 2.0)
– codomain (MathML 2.0)
– image (MathML 2.0)
– domainofapplication (MathML 2.0)
– piecewise (MathML 2.0)
– piece (MathML 2.0)
– otherwise (MathML 2.0)
• arithmetic, algebra and logic
– quotient
– factorial
179
– divide
– max and min
– minus
– plus
– power
– rem
– times
– root
– gcd
– and
– or
– xor
– not
– implies
– forall
– exists
– abs
– conjugate
– arg (MathML 2.0)
– real (MathML 2.0)
– imaginary (MathML 2.0)
– lcm (MathML 2.0)
– floor (MathML 2.0)
– ceiling (MathML 2.0)
• relations
– eq
– neq
– gt
– lt
– geq
– leq
– equivalent (MathML 2.0)
– approx (MathML 2.0)
– factorof (MathML 2.0)
• calculus and vector calculus
– int
– diff
– partialdiff
– lowlimit
180
– uplimit
– bvar
– degree
– divergence (MathML 2.0)
– grad (MathML 2.0)
– curl (MathML 2.0)
– laplacian (MathML 2.0)
• theory of sets
– set
– list
– union
– intersect
– in
– notin
– subset
– prsubset
– notsubset
– notprsubset
– setdiff
– card (MathML 2.0)
– cartesianproduct (MathML 2.0)
• sequences and series
– sum
– product
– limit
– tendsto
• elementary classical functions
– exp
– ln
– log
– sin
– cos
– tan
– sec
– csc
– cot
– sinh
– cosh
– tanh
181
– sech
– csch
– coth
– arcsin
– arccos
– arctan
– arccosh
– arccot
– arccoth
– arccsc
– arccsch
– arcsec
– arcsech
– arcsinh
– arctanh
• statistics
– mean
– sdev
– variance
– median
– mode
– moment
– momentabout (MathML 2.0)
• linear algebra
– vector
– matrix
– matrixrow
– determinant
– transpose
– selector
– vectorproduct (MathML 2.0)
– scalarproduct (MathML 2.0)
– outerproduct (MathML 2.0)
• semantic mapping elements
– annotation
– semantics
– annotation-xml
• constant and symbol elements
– integers (MathML2.0)
182
– reals (MathML2.0)
– rationals (MathML2.0)
– naturalnumbers (MathML2.0)
– complexes (MathML2.0)
– primes (MathML2.0)
– exponentiale (MathML2.0)
– imaginaryi (MathML2.0)
– notanumber (MathML2.0)
– true (MathML2.0)
– false (MathML2.0)
– emptyset (MathML2.0)
– pi (MathML2.0)
– eulergamma (MathML2.0)
– infinity (MathML2.0)
Discussion
The cn element is used to specify actual numerical constants. The content model must provide sufficient information that a number may
be entered as data into a computational system. By default, it represents a signed real number in base 10. Thus, the content normally
consists of PCDATA restricted to a sign, a string of decimal digits and possibly a decimal point, or alternatively one of the predefined
symbolic constants such as π.
The cn element uses the attribute type to represent other types of numbers such as, for example, integer, rational, real or complex, and
uses the attribute base to specify the numerical base.
In addition to simple PCDATA, cn accepts as content PCDATA separated by the (empty) element sep. This determines the different parts
needed to construct a rational or complex-cartesian number.
The cn element may also contain arbitrary presentation markup in its content (see Chapter 3) so that its presentation can be very
elaborate.
Alternative input notations for numbers are possible, but must be explicitly defined by using the definitionURL and encoding attributes,
to refer to a written specification of how a sequence of real numbers separated by <sep/> should be interpreted.
Attributes
Examples
Default Rendering
By default, a contiguous block of PCDATA contained in a cn element should render as if it were wrapped in an mn presentation element.
If an application supports bidirectional text rendering, then the rendering within a cn element follows the Unicode bidirectional rendering
rules just as if it were wrapped in an mn presentation element.
Similarly, presentation markup contained in a cn element should render as it normally would. A mixture of PCDATA and presentation
markup should render as if it were wrapped in an mrow element, with contiguous blocks of PCDATA wrapped in mn elements.
However, not all mathematical systems that encounter content based tagging do visual or aural rendering. The receiving applications are
free to make use of a number in the manner in which they normally handle numerical data. Some systems might simplify the rational
number 12342/2342342 to 6171/1171171 while pure floating point based systems might approximate this as 0.5269085385e-2. All num-
bers might be re-expressed in base 10. The role of MathML is simply to record enough information about the mathematical object and its
structure so that it may be properly parsed.
The following renderings of the above MathML expressions are included both to help clarify the meaning of the corresponding MathML
encoding and as suggestions for authors of rendering applications. In each case, no mathematical evaluation is intended or implied.
• 12345.7
• 12345
• AB316
• 12342 / 2342342
• 12.3 + 5 i
• Polar( 2 , 3.1415 )
• τ
184
Examples
<ci> x </ci>
<ci>
<msub>
<mi>x</mi>
<mi>i</mi>
</msub>
</ci>
Default Rendering
If the content of a ci element is tagged using presentation tags, that presentation is used. If no such tagging is supplied then the PCDATA
content is rendered as if it were the content of an mi element.
If an application supports bidirectional text rendering, then the rendering within a ci element follows the Unicode bidirectional rendering
rules just as if it were wrapped in an mi presentation element.
A renderer may wish to make use of the value of the type attribute to improve on this. For example, a symbol of type vector might be
rendered using a bold face. Typical renderings of the above symbols are:
185
• x
• V
• xi
Attributes
All attributes are CDATA:
definitionURL Pointer to external definition of the semantics of the symbol. MathML does not specify a particular syntax in which this
definition should be written.
encoding Gives the syntax of the definition pointed to by definitionURL. An application can then test the value of this attribute to determine
whether it is able to process the target of the definitionURL. This syntax might be text, or a formal syntax such as OpenMath.
Examples
Default Rendering
By default, a contiguous block of PCDATA contained in a csymbol element should render as if it were wrapped in an mo presentation
element.
If an application supports bidirectional text rendering, then the rendering within a csymbol element follows the Unicode bidirectional
rendering rules just as if it were wrapped in an mo presentation element.
Similarly, presentation markup contained in a csymbol element should render as it normally would. A mixture of PCDATA and presentation
markup should render as if it were contained wrapped in an mrow element, with contiguous blocks of PCDATA wrapped in mo elements.
The examples above would render by default as
• J0 (y)
• k
As csymbol is used to support reference to externally defined semantics, it is a MathML error to have embedded content MathML elements
within the csymbol element.
Discussion
The apply element allows a function or operator to be applied to its arguments. Nearly all expression construction in MathML content
markup is carried out by applying operators or functions to arguments. The first child of apply is the operator to be applied, with the other
child elements as arguments or qualifiers.
The apply element is conceptually necessary in order to distinguish between a function or operator, and an instance of its use. The
expression constructed by applying a function to 0 or more arguments is always an element from the codomain of the function.
Proper usage depends on the operator that is being applied. For example, the plus operator may have zero or more arguments, while
the minus operator requires one or two arguments to be properly formed.
If the object being applied as a function is not already one of the elements known to be a function (such as fn (deprecated), sin or plus)
then it is treated as if it were a function.
Some operators such as user defined functions defined using the declare or csymbol elements, diff and int make use of ‘named’
arguments. These special arguments are elements that appear as children of the apply element and identify ‘parameters’ such as the
variable of differentiation or the domain of integration. These elements are discussed further in Section 4.2.3.2.
187
Examples
<apply>
<factorial/>
<cn>3</cn>
</apply>
<apply>
<plus/>
<cn>3</cn>
<cn>4</cn>
</apply>
<apply>
<sin/>
<ci>x</ci>
</apply>
Default Rendering
A mathematical system that has been passed an apply element is free to do with it whatever it normally does with such mathematical
data. It may be that no rendering is involved (e.g. a syntax validator), or that the ‘function application’ is evaluated and that only the result
is rendered (e.g. sin(0) → 0).
When an unevaluated ‘function application’ is rendered there are a wide variety of appropriate renderings. The choice often depends on
the function or operator being applied. Applications of basic operations such as plus are generally presented using an infix notation while
applications of sin would use a more traditional functional notation such as sin(x). Consult the default rendering for the operator being
applied.
Applications of user-defined functions (see csymbol, fn) that are not evaluated by the receiving or rendering application would typically
render using a traditional functional notation unless an alternative presentation is specified using the semantics tag.
Examples
<reln>
<eq/>
<ci> a </ci>
<ci> b </ci>
</reln>
<reln>
<lt/>
<ci> a </ci>
<ci> b </ci>
</reln>
Default Rendering
• a=b
• a<b
Discussion
The fn element makes explicit the fact that a more general (possibly constructed) MathML object is being used in the same manner as if
it were a pre-defined function such as sin or plus.
fn has exactly one child element, used to give the name (or presentation form) of the function. When fn is used as the first child of an
apply, the number of following arguments is determined by the contents of the fn.
In MathML 1.0, fn was also the primary mechanism used to extend the collection of ‘known’ mathematical functions. The fn element
has been deprecated. To extend the collection of known mathematical functions without using the fn element, use the more generally
applicable csymbol element or use a declare in conjunction with a lambda expression.
Examples
<apply>
<fn>
<apply>
<plus/>
<ci> f </ci>
<ci> g </ci>
</apply>
</fn>
<ci>z</ci>
</apply>
Default Rendering
An fn object is rendered in the same way as its content. A rendering application may add additional adornments such as parentheses to
clarify the meaning.
• L
• ( f + g)z
Examples
<interval>
<ci> a </ci>
<ci> b </ci>
</interval>
190
<interval closure="open-closed">
<ci> a </ci>
<ci> b </ci>
</interval>
Default Rendering
• [a, b]
• (a, b]
Discussion
The inverse element is applied to a function in order to construct a generic expression for the functional inverse of that function. (See
also the discussion of inverse in Section 4.2.1.5). As with other MathML functions, inverse may either be applied to arguments, or it
may appear alone, in which case it represents an abstract inversion operator acting on other functions.
A typical use of the inverse element is in an HTML document discussing a number of alternative definitions for a particular function so
that there is a need to write and define f (−1) (x). To associate a particular definition with f (−1) , use the definitionURL and encoding
attributes.
Examples
<apply>
<inverse/>
<ci> f </ci>
</apply>
<apply>
<inverse definitionURL="../MyDefinition.htm" encoding="text"/>
<ci> f </ci>
</apply>
191
<apply>
<apply><inverse/>
<ci type="matrix"> a </ci>
</apply>
<ci> A </ci>
</apply>
Default Rendering
The default rendering for a functional inverse makes use of a parenthesized exponent as in f (−1) (x).
Examples
Default Rendering
The sep element is not directly rendered (see Section 4.4.1).
Examples
<condition>
<apply><in/><ci> x </ci><ci type="set"> A </ci></apply>
</condition>
<condition>
<apply>
<and/>
<apply><gt/><ci> x </ci><cn> 0 </cn></apply>
<apply><lt/><ci> x </ci><cn> 1 </cn></apply>
</apply>
</condition>
<apply>
<max/>
<bvar><ci> x </ci></bvar>
<condition>
<apply> <and/>
<apply><gt/><ci> x </ci><cn> 0 </cn></apply>
<apply><lt/><ci> x </ci><cn> 1 </cn></apply>
</apply>
</condition>
<apply>
<minus/>
<ci> x </ci>
<apply>
<sin/>
<ci> x </ci>
</apply>
</apply>
</apply>
Default Rendering
• x∈A
• x > 0∧x < 1
• maxx { x − sin x | 0 < x < 1 }
193
Discussion
The declare construct has two primary roles. The first is to change or set the default attribute values for a specific mathematical object.
The second is to establish an association between a ‘name’ and an object. Once a declaration is in effect, the ‘name’ object acquires the
new attribute settings, and (if the second object is present) all the properties of the associated object.
The various attributes of the declare element assign properties to the object being declared or determine where the declaration is in
effect. The list of allowed attributes varies depending on the object involved as it always includes the attributes associated with that object.
All declare elements must occur at the beginning of a math element. The scope of a declaration is ‘local’ to the surrounding math element.
The scope attribute can only be assigned to "local", but is intended to support future extensions. As discussed in Section 4.3.2.8,
MathML contains no provision for making document-wide declarations at present, though it is anticipated that this capability will be added
in future revisions of MathML, when supporting technologies become available.
declare takes one or two children. The first child, which is mandatory, is the object affected by the declaration. This is usually a ci
element providing the identifier that is being declared as in:
<declare type="vector">
<ci> V </ci>
<vector>
<cn> 1 </cn><cn> 2 </cn><cn> 3 </cn>
</vector>
</declare>
The constructor type and the type of the element declared must agree. For example, if the type attribute of the declaration is function, the
second child (constructor) must be an element that can serve as a function. (This would typically be something like a csymbol element,
a ci element, a lambda element, or any of the defined functions in the basic set of content tags.) If no type is specified in the declaration
then the type attribute of the declared name is set to the type of the constructor (second child) of the declaration.
An important case is when the first child is an identifier, and the second child is a semantics tag enclosing that identifier. In this case all
uses of the identifier acquire the associations implied by the use of the semantics element. without having to write out the full semantics
element for every use.
The actual instances of a declared ci element are normally recognized by comparing their content with that of the declared element.
Equality of two elements is determined by comparing the XML information set of the two expressions after XML space normalization (see
[XPath]).
194
When the content is more complex, semantics elements are involved, or the author simply wants to use multiple presentations for emphasis
without losing track of the relationship to the declared instance the author may choose to make the correspondence explicit by placing an
id attribute on a declared instance and referring back to it using a definitionURL attribute on the matching instances of the ci element
as in the following example.
<declare>
<ci id="var-A"> A </ci>
<vector>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</vector>
</declare>
<apply>
<eq/>
<ci> V </ci>
<apply>
<plus/>
<ci definitionURL="#var-A"> A </ci>
<ci> B </ci>
</apply>
</apply>
Attributes
Examples
The declaration
195
The declaration
<declare type="function">
<ci> J </ci>
<lambda>
<bvar><ci> x </ci></bvar>
<apply><ln/>
<ci> x </ci>
</apply>
</lambda>
</declare>
associates the name J with a one-variable function defined so that J (y) = ln y. (Note that because of the type attribute of the declare
element, the second argument must be something of function type , namely a known function like sin, or a lambda construct.)
The type attribute on the declaration is only necessary if the type cannot be inferred from the type of the second argument.
Even when a declaration is in effect it is still possible to override attributes values selectively as in <ci type="set"> S </ci>. This
capability is needed in order to write statements of the form ‘Let s be a member of S’.
Default Rendering
Since the declare construct is not directly rendered, most declarations are likely to be invisible to a reader. However, declarations can
produce quite different effects in an application which evaluates or manipulates MathML content. While the declaration
<declare>
<ci> v </ci>
<vector>
<cn> 1 </cn>
<cn> 2 </cn>
<cn> 3 </cn>
</vector>
</declare>
196
is active the symbol v acquires all the properties of the vector, and even its dimension and components have meaningful values. This may
affect how v is rendered by some applications, as well as how it is treated mathematically.
Discussion
The lambda element is used to construct a user-defined function from an expression, bound variables, and qualifiers. In a lambda construct
with n (possibly 0) bound variables, the first n children are bvar elements that identify the variables that are used as placeholders in the
last child for actual parameter values. The bound variables can be restricted by an optional domainofapplication qualifier or one of
its shorthand notations. The meaning of the lambda construct is an n-ary function that returns the expression in the last child where the
bound variables are replaced with the respective arguments. See Section 4.2.2.2 for further details.
Examples
<lambda>
<bvar><ci> b </ci></bvar>
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<lowlimit><ci> a </ci></lowlimit>
<uplimit><ci> b </ci></uplimit>
<apply>
<fn><ci> f </ci></fn>
<ci> x </ci>
</apply>
</apply>
</lambda>
Such constructs are often used in conjunction with declare to construct new functions.
The domainofapplication child restricts the possible values of the arguments of the constructed function. For instance, the following
two lambda constructs are representations of a function on the integers.
<lambda>
<bvar><ci> x </ci></bvar>
<domainofapplication><integers/></domainofapplication>
<apply><sin/><ci> x </ci></apply>
</lambda>
If a lambda construct does not contain bound variables, then the arity of the constructed function is unchanged, and the lambda construct
is redundant, unless it also contains a domainofapplication construct that restricts existing functional arguments, as in this example,
which is a variant representation for the function above.
<lambda>
<domainofapplication><integers/></domainofapplication>
<sin/>
</lambda>
In particular, if the last child of a lambda construct is not a function, say a number, then the lambda construct will not be a function, but
the same number. Of course, in this case a domainofapplication does not make sense
Default Rendering
• λ(x, sin x + 1)
λ(b, ab f (x) dx)
R
•
• λ(x: I, sin x)
• sin|I
198
Discussion
The compose element represents the function composition operator. Note that MathML makes no assumption about the domain and
codomain of the constituent functions in a composition; the domain of the resulting composition may be empty.
To override the default semantics for the compose element, or to associate a more specific definition for function composition, use the
definitionURL and encoding attributes.
The compose element is an n-ary operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as described in
4.2.3.2 Therefore it may take qualifiers.
Examples
<apply>
<compose/>
<fn><ci> f </ci></fn>
<fn><ci> g </ci></fn>
</apply>
<apply>
<compose/>
<ci type="function"> f </ci>
<ci type="function"> g </ci>
<ci type="function"> h </ci>
</apply>
<apply>
<apply><compose/>
<fn><ci> f </ci></fn>
<fn><ci> g </ci></fn>
</apply>
<ci> x </ci>
</apply>
199
<apply>
<fn><ci> f </ci></fn>
<apply>
<fn><ci> g </ci></fn>
<ci> x </ci>
</apply>
</apply>
Default Rendering
• f ◦g
• f ◦g◦h
• ( f ◦ g)(x)
• f (g(x))
Discussion
The ident element represents the identity function. MathML makes no assumption about the function space in which the identity function
resides. That is, proper interpretation of the domain (and hence codomain) of the identity function depends on the context in which it is
used.
To override the default semantics for the ident element, or to associate a more specific definition, use the definitionURL and encoding
attributes (see Section 4.2.3).
Examples
<apply>
<eq/>
<apply><compose/>
<fn><ci> f </ci></fn>
<apply><inverse/>
<fn><ci> f </ci></fn>
</apply>
</apply>
<ident/>
</apply>
200
Default Rendering
f ◦ f −1 = id
Discussion
The domain element denotes the domain of a given function, which is the set of values over which it is defined.
To override the default semantics for the domain element, or to associate a more specific definition, use the definitionURL and
encoding attributes (see Section 4.2.3).
Examples
<apply>
<eq/>
<apply><domain/>
<fn><ci> f </ci></fn>
</apply>
<reals/>
</apply>
Default Rendering
domain( f ) = R
Discussion
The codomain element denotes the codomain of a given function, which is a set containing all values taken by the function. It is not
necessarily the case that every point in the codomain is generated by the function applied to some point of the domain. (For example I
may know that a function is integer-valued, so its codomain is the integers, without knowing (or stating) which subset of the integers is
mapped to by the function.)
To override the default semantics for the codomain element, or to associate a more specific definition, use the definitionURL and
encoding attributes (see Section 4.2.3).
201
Examples
<apply>
<eq/>
<apply><codomain/>
<fn><ci> f </ci></fn>
</apply>
<rationals/>
</apply>
Default Rendering
codomain( f ) = Q
Discussion
The image element denotes the image of a given function, which is the set of values taken by the function. Every point in the image is
generated by the function applied to some point of the domain.
To override the default semantics for the image element, or to associate a more specific definition, use the definitionURL and encoding
attributes (see Section 4.2.3).
Examples
The real sin function is a function from the reals to the reals, taking values between -1 and 1.
<apply>
<eq/>
<apply><image/>
<sin/>
</apply>
<interval>
<cn>-1</cn>
<cn> 1</cn>
</interval>
</apply>
202
Default Rendering
image(sin) = [−1, 1]
Examples
The integral of a function f over an arbitrary domain C .
<apply>
<int/>
<domainofapplication>
<ci> C </ci>
</domainofapplication>
<ci> f </ci>
</apply>
Default Rendering
The default rendering depends on the particular function being applied.
R
C f
otherwise allows the specification of a value to be taken by the piecewise function when none of the conditions (second child elements
of the piece elements) is true, i.e. a default value.
It should be noted that no ‘order of execution’ is implied by the ordering of the piece child elements within piecewise. It is the responsi-
bility of the author to ensure that the subsets of the function domain defined by the second children of the piece elements are disjoint, or
that, where they overlap, the values of the corresponding first children of the piece elements coincide. If this is not the case, the meaning
of the expression is undefined.
Examples
<piecewise>
<piece>
<cn> 0 </cn>
<apply><lt/><ci> x </ci> <cn> 0 </cn></apply>
</piece>
<otherwise>
<ci> x </ci>
</otherwise>
</piecewise>
The following might be a definition of abs (x)
204
<apply>
<eq/>
<apply>
<abs/>
<ci> x </ci>
</apply>
<piecewise>
<piece>
<apply><minus/><ci> x </ci></apply>
<apply><lt/><ci> x </ci> <cn> 0 </cn></apply>
</piece>
<piece>
<cn> 0 </cn>
<apply><eq/><ci> x </ci> <cn> 0 </cn></apply>
</piece>
<piece>
<ci> x </ci>
<apply><gt/><ci> x </ci> <cn> 0 </cn></apply>
</piece>
</piecewise>
</apply>
Default Rendering
−x if x < 0
|x| = 0 if x = 0
x if x > 0
Example
<apply>
<quotient/>
<ci> a </ci>
<ci> b </ci>
</apply>
Various mathematical applications will use this data in different ways. Editing applications might choose an image such as shown below,
while a computationally based application would evaluate it to 2 when a=13 and b=5.
Default Rendering
There is no commonly used notation for this concept. Some possible renderings are
• quotient of a divided by b
• integer part of a / b
• ba/bc
Discussion
The factorial element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<factorial/>
<ci> n </ci>
</apply>
If this were evaluated at n = 5 it would evaluate to 120.
Default Rendering
n!
206
Discussion
The divide element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<divide/>
<ci> a </ci>
<ci> b </ci>
</apply>
As a MathML expression, this does not evaluate. However, on receiving such an expression, some applications may attempt to evaluate
and simplify the value. For example, when a=5 and b=2 some mathematical applications may evaluate this to 2.5 while others will treat is
as a rational number.
Default Rendering
a/b
Discussion
The elements max and min are used to compare the values of their arguments. They return the maximum and minimum of these values
respectively.
The max and min elements take the definitionURL and encoding attributes that can be used to override the default semantics.
The max and min elements are n-ary arithmetic operators (see Section 4.2.3). As n-ary operators, their operands may be listed explicitly
or constructed using a domain of application as described in 4.2.3.2.
Examples
When the objects are to be compared explicitly they are listed as arguments to the function as in:
207
<apply>
<max/>
<ci> a </ci>
<ci> b </ci>
</apply>
The elements to be compared may also be described using bound variables with a condition element and an expression to be maximized
(or minimized), as in:
<apply>
<min/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><notin/><ci> x </ci><ci type="set"> B </ci></apply>
</condition>
<apply>
<power/>
<ci> x </ci>
<cn> 2 </cn>
</apply>
</apply>
Note that the bound variable must be stated even if it might be implicit in conventional notation. In MathML1.0, the bound variable and
expression to be evaluated (x) could be omitted in the example below: this usage is deprecated in MathML2.0 in favor of explicitly stating
the bound variable and expression in all cases:
<apply>
<max/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>x</ci><ci type="set">B</ci></apply>
<apply><notin/><ci>x</ci><ci type="set">C</ci></apply>
</apply>
</condition>
<ci>x</ci>
</apply>
208
Default Rendering
• max{a, b}
• minx { x2 | x ∈
/ B}
• max{ x ∈ B ∧ x ∈ / C}
Discussion
The minus element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The minus element can be used as a unary arithmetic operator (e.g. to represent - x), or as a binary arithmetic operator (e.g. to represent
x- y).
Example
<apply> <minus/>
<ci> x </ci>
<ci> y </ci>
</apply>
If this were evaluated at x=5 and y=2 it would yield 3.
Default Rendering
x−y
Discussion
The plus element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The plus element is an n-ary arithmetic operator (see Section 4.2.3). The operands are usually listed explicitly. As an n-ary operator, the
operands may in principle also be provided using a domain of application as described in 4.2.3.2. However, such expressions can already
be represented explicitly using Section 4.4.7.1 so the plus does not normally take qualifiers.
209
Example
<apply>
<plus/>
<ci> x </ci>
<ci> y </ci>
<ci> z </ci>
</apply>
If this were evaluated at x = 5, y = 2 and z = 1 it would yield 8.
Default Rendering
x+y+z
Discussion
The power element is a generic exponentiation operator. That is, when applied to arguments a and b, it returns the value of ‘a to the
power of b’.
The power element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<power/>
<ci> x </ci>
<cn> 3 </cn>
</apply>
If this were evaluated at x= 5 it would yield 125.
Default Rendering
x3
210
Example
<apply>
<rem/>
<ci> a </ci>
<ci> b </ci>
</apply>
If this were evaluated at a = 15 and b = 8 it would yield 7.
Default Rendering
a mod b
Example
<apply>
<times/>
<ci> a </ci>
<ci> b </ci>
</apply>
211
Default Rendering
ab
Discussion
The root element is used to construct roots. The kind of root to be taken is specified by a degree element, which should be given as the
second child of the apply element enclosing the root element. Thus, square roots correspond to the case where degree contains the
value 2, cube roots correspond to 3, and so on. If no degree is present, a default value of 2 is used.
The root element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<root/>
<degree><ci type=’integer’> n </ci></degree>
<ci> a </ci>
</apply>
Default Rendering
√
n
a
Discussion
The gcd element is used to denote the greatest common divisor of its arguments.
The gcd takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The gcd element is an n-ary operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as described in
4.2.3.2 Therefore it may take qualifiers.
212
Example
<apply> <gcd/>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</apply>
If this were evaluated at a = 15, b = 21, c = 48, it would yield 3.
Default Rendering
gcd(a, b, c)
This default rendering is English-language locale specific: other locales may have different default renderings.
Discussion
The and element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The and element is an n-ary operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as described in
4.2.3.2 Therefore it may take qualifiers.
Example
<apply>
<and/>
<ci> a </ci>
<ci> b </ci>
</apply>
If this were evaluated and both a and b had truth values of "true", then the result would be "true".
Default Rendering
a∧b
213
4.4.3.13 Or (or)
Discussion
The or element is the Boolean ‘or’ operator.
The or element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The or element is an n-ary operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as described in 4.2.3.2
Therefore it may take qualifiers.
Example
<apply>
<or/>
<ci> a </ci>
<ci> b </ci>
</apply>
Default Rendering
a∨b
Example
<apply>
<xor/>
<ci> a </ci>
<ci> b </ci>
</apply>
214
Default Rendering
a xor b
Example
<apply>
<not/>
<ci> a </ci>
</apply>
Default Rendering
¬a
Example
<apply>
<implies/>
<ci> A </ci>
<ci> B </ci>
</apply>
Mathematical applications designed for the evaluation of such expressions would evaluate this to "true" when a = "false" and b =
"true".
215
Default Rendering
A⇒B
Discussion
The forall element represents the universal quantifier of logic. It is usually used in conjunction with one or more bound variables, an op-
tional condition element, and an assertion. It may also be used with a domain of application and function as described in Section 4.2.3.2
in which case the assertion corresponds to applying the function to an element of the specified domain. In MathML 1.0, the reln element
was also permitted here: this usage is now deprecated.
The forall element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
<apply>
<forall/>
<bvar><ci> x </ci></bvar>
<apply><eq/>
<apply>
<minus/><ci> x </ci><ci> x </ci>
</apply>
<cn>0</cn>
</apply>
</apply>
The next example is more involved, and makes use of an optional condition element.
216
<apply>
<forall/>
<bvar><ci> p </ci></bvar>
<bvar><ci> q </ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci> p </ci><rationals/></apply>
<apply><in/><ci> q </ci><rationals/></apply>
<apply><lt/><ci> p </ci><ci> q </ci></apply>
</apply>
</condition>
<apply><lt/>
<ci> p </ci>
<apply>
<power/>
<ci> q </ci>
<cn> 2 </cn>
</apply>
</apply>
</apply>
The final example uses both the forall and exists quantifiers.
217
<apply>
<forall/>
<bvar><ci> n </ci></bvar>
<condition>
<apply><and/>
<apply><gt/><ci> n </ci><cn> 0 </cn></apply>
<apply><in/><ci> n </ci><integers/></apply>
</apply>
</condition>
<apply>
<exists/>
<bvar><ci> x </ci></bvar>
<bvar><ci> y </ci></bvar>
<bvar><ci> z </ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci> x </ci><integers/></apply>
<apply><in/><ci> y </ci><integers/></apply>
<apply><in/><ci> z </ci><integers/></apply>
</apply>
</condition>
<apply>
<eq/>
<apply>
<plus/>
<apply><power/><ci> x </ci><ci> n </ci></apply>
<apply><power/><ci> y </ci><ci> n </ci></apply>
</apply>
<apply><power/><ci> z </ci><ci> n </ci></apply>
</apply>
</apply>
</apply>
Default Rendering
• ∀x : x − x = 0
• ∀p ∈ Q, q ∈ Q, p < q : p < q2
• ∀n > 0, n ∈ Z : ∃x ∈ Z, y ∈ Z, z ∈ Z : xn + yn = zn
218
Note: The second and third examples in this section are correct MathML expressions of False mathematical statements.
Example
The following example encodes the sense of the expression ‘there exists an x such that f (x) = 0’.
<apply>
<exists/>
<bvar><ci> x </ci></bvar>
<apply><eq/>
<apply>
<fn><ci> f </ci></fn>
<ci> x </ci>
</apply>
<cn>0</cn>
</apply>
</apply>
Default Rendering
∃x : f (x) = 0
Example
The following example encodes the absolute value of x.
<apply>
<abs/>
<ci> x </ci>
</apply>
Default Rendering
|x|
Example
The following example encodes the conjugate of x + i y.
<apply>
<conjugate/>
<apply>
<plus/>
<ci> x </ci>
<apply><times/>
<cn> ⅈ </cn>
<ci> y </ci>
</apply>
</apply>
</apply>
Default Rendering
x + iy
220
Discussion
The arg operator (introduced in MathML 2.0) gives the ‘argument’ of a complex number, which is the angle (in radians) it makes with the
positive real axis. Real negative numbers have argument equal to + π.
The arg element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<arg/>
<apply><plus/>
<ci> x </ci>
<apply><times/>
<cn> ⅈ </cn>
<ci> y </ci>
</apply>
</apply>
</apply>
Default Rendering
arg(x + iy)
Discussion
The real operator (introduced in MathML 2.0) gives the real part of a complex number, that is the x component in x + i y
The real element takes the attributes encoding and definitionURL that can be used to override the default semantics.
Example
<apply>
<real/>
<apply><plus/>
<ci> x </ci>
<apply><times/>
<cn> ⅈ </cn>
<ci> y </ci>
</apply>
</apply>
</apply>
A MathML-aware evaluation system would return the x component, suitably encoded.
Default Rendering
ℜ(x + iy)
Discussion
The imaginary operator (introduced in MathML 2.0) gives the imaginary part of a complex number, that is, the y component in x + i y.
The imaginary element takes the attributes encoding and definitionURL that can be used to override the default semantics.
Example
<apply>
<imaginary/>
<apply><plus/>
<ci> x </ci>
<apply><times/>
<cn> ⅈ </cn>
<ci> y </ci>
</apply>
</apply>
</apply>
A MathML-aware evaluation system would return the y component, suitably encoded.
Default Rendering
ℑ(x + iy)
Example
<apply> <lcm/>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</apply>
If this were evaluated at a = 2, b = 4, c = 6 it would yield 12.
Default Rendering
lcm(a, b, c)
This default rendering is English-language locale specific: other locales may have different default renderings.
223
Example
<apply> <floor/>
<ci> a </ci>
</apply>
If this were evaluated at a = 15.015, it would yield 15.
<apply> <forall/>
<bvar><ci> a </ci></bvar>
<apply><and/>
<apply><leq/>
<apply><floor/>
<ci>a</ci>
</apply>
<ci>a</ci>
</apply>
<apply><lt/>
<ci>a</ci>
<apply><plus/>
<apply><floor/>
<ci>a</ci>
</apply>
<cn>1</cn>
</apply>
</apply>
</apply>
</apply>
Default Rendering
bac
224
Example
<apply> <ceiling/>
<ci> a </ci>
</apply>
If this were evaluated at a = 15.015, it would yield 16.
<apply> <forall/>
<bvar><ci> a </ci></bvar>
<apply><and/>
<apply><lt/>
<apply><minus/>
<apply><ceiling/>
<ci>a</ci>
</apply>
<cn>1</cn>
</apply>
<ci>a</ci>
</apply>
<apply><leq/>
<ci>a</ci>
<apply><ceiling/>
<ci>a</ci>
</apply>
</apply>
</apply>
</apply>
Default Rendering
dae
225
4.4.4 Relations
4.4.4.1 Equals (eq)
Discussion
The eq element is the relational operator ‘equals’.
The eq element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The eq element is an n-ary operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as described in 4.2.3.2
Therefore it may take qualifiers.
Example
<apply>
<eq/>
<ci> a </ci>
<ci> b </ci>
</apply>
If this were tested at a = 5.5 and b = 6 it would yield the truth value false.
Default Rendering
a=b
Example
<apply>
<neq/>
<ci> a </ci>
<ci> b </ci>
</apply>
226
If this were tested at a = 5.5 and b = 6 it would yield the truth value true.
Default Rendering
a 6= b
Discussion
The gt element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The gt element is an n-ary relation (see Section 4.2.4). As an n-ary operator, its operands may also be generated as described in 4.2.3.2
Therefore it may take qualifiers.
Example
<apply>
<gt/>
<ci> a </ci>
<ci> b </ci>
</apply>
If this were tested at a = 5.5 and b = 6 it would yield the truth value false.
Default Rendering
a>b
Discussion
The lt element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The lt element is an n-ary relation (see Section 4.2.4). As an n-ary operator, its operands may also be generated as described in 4.2.3.2
Therefore it may take qualifiers.
227
Example
<apply>
<lt/>
<ci> a </ci>
<ci> b </ci>
</apply>
If this were tested at a = 5.5 and b = 6 it would yield the truth value ‘true’.
Default Rendering
a<b
Discussion
The geq element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The geq element is an n-ary relation (see Section 4.2.4). As an n-ary operator, its operands may also be generated as described in 4.2.3.2
Therefore it may take qualifiers.
Example
<apply>
<geq/>
<ci> a </ci>
<ci> b </ci>
</apply>
If this were tested for a = 5.5 and b = 5.5 it would yield the truth value true.
Default Rendering
a≥b
228
Discussion
The leq element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The leq element is an n-ary relation (see Section 4.2.4). As an n-ary operator, its operands may also be generated as described in 4.2.3.2
Therefore it may take qualifiers.
Example
<apply>
<leq/>
<ci> a </ci>
<ci> b </ci>
</apply>
If a = 5.4 and b = 5.5 this will yield the truth value true.
Default Rendering
a≤b
Discussion
The equivalent element takes the attributes encoding and definitionURL that can be used to override the default semantics.
The equivalent element is an n-ary relation (see Section 4.2.4). As special form of n-ary operator (see Section 4.2.3), its operands may
be generated by allowing a function or expression to vary over a domain of application. Therefore it may take qualifiers.
229
Example
<apply>
<equivalent/>
<ci> a </ci>
<apply>
<not/>
<apply> <not/> <ci> a </ci> </apply>
</apply>
</apply>
This yields the truth value true for all values of a.
Default Rendering
a ≡ ¬(¬a)
Discussion
The approx element is the relational operator ‘approximately equal’. This is a generic relational operator and no specific arithmetic
precision is implied
The approx element takes the attributes encoding and definitionURL that can be used to override the default semantics.
Example
<apply>
<approx/>
<cn type="rational"> 22 <sep/> 7 </cn>
<pi/>
</apply>
Default Rendering
22
≈π
7
230
Discussion
The factorof element is the relational operator element on two integers a and b specifying whether one is an integer factor of the other.
The factorof element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<factorof/>
<ci> a </ci>
<ci> b </ci>
</apply>
Default Rendering
a|b
Discussion
The int element is the operator element for an integral. Optional bound variables serve as the integration variables and definite integrals
are indicated by providing a domain of integration. This may be provided by an optional domainofapplication element or one of the
shortcut representations of the domain of application (see Section 4.2.3.2). For example, the integration variable and domain of application
can be given by the child elements lowlimit, uplimit and bvar in the enclosing apply element. The integrand is also specified as a
child element of the enclosing apply element.
The int element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
An indefinite integral can be represented with or without the explicit use of a bound variable. To represent it without the use of a bound
variable apply the int operator directly to a function as in
231
<apply>
<eq/>
<apply><int/><sin/></apply>
<cos/>
</apply>
The next example specifies the integrand using an expression involving a bound variable and makes it a definite integral by using the
qualifiers lowlimit, uplimit to place restrictions on the bound variable.
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<lowlimit><cn> 0 </cn></lowlimit>
<uplimit><ci> a </ci></uplimit>
<apply>
<ci> f </ci>
<ci> x </ci>
</apply>
</apply>
This example specifies an interval of the real line as the domain of integration with an interval element. In this form the integrand is
provided as a function and no mention is made of a bound variable..
<apply>
<int/>
<interval>
<ci> a </ci>
<ci> b </ci>
</interval>
<cos/>
</apply>
The final example specifies the domain of integration with a bound variable and a condition element.
232
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<condition>
<apply><in/>
<ci> x </ci>
<ci type="set"> D </ci>
</apply>
</condition>
<apply><ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
Default Rendering
Z
sin = cos
Za
f (x) dx
0
Zb
cos
a
Z
f (x) dx
x∈D
Discussion
The diff element is the differentiation operator element for functions of a single variable. It may be applied directly to an actual function
such as sine or cosine, thereby denoting a function which is the derivative of the original function, or it can be applied to an expression
involving a single variable such as sin(x), or cos(x). or a polynomial in x. For the expression case the actual variable is designated by a
bvar element that is a child of the containing apply element. The bvar element may also contain a degree element, which specifies the
order of the derivative to be taken.
The diff element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
The derivative of a function f (often displayed as f’) can be written as:
<apply>
<diff/>
<ci> f </ci>
</apply>
The derivative with respect to x of an expression in x such as f (x) can be written as:
<apply>
<diff/>
<bvar><ci> x </ci></bvar>
<apply><ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
Default Rendering
f0
d f (x)
dx
The partialdiff element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
<apply><partialdiff/>
<bvar><ci> x </ci><degree><ci> m </ci></degree></bvar>
<bvar><ci> y </ci><degree><ci> n </ci></degree></bvar>
<degree><ci> k </ci></degree>
<apply><ci type="function"> f </ci>
<ci> x </ci>
<ci> y </ci>
</apply>
</apply>
<apply><partialdiff/>
<bvar><ci> x </ci></bvar>
<bvar><ci> y </ci></bvar>
<apply><ci type="function"> f </ci>
<ci> x </ci>
<ci> y </ci>
</apply>
</apply>
<apply><partialdiff/>
<list><cn>1</cn><cn>1</cn><cn>3</cn></list>
<ci type="function">f</ci>
</apply>
Default Rendering
∂k
f (x, y)
∂xm ∂yn
∂2
f (x, y)
∂x ∂y
D1,1,3 ( f )
235
Example
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<lowlimit><ci> a </ci></lowlimit>
<uplimit><ci> b </ci></uplimit>
<apply>
<ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
Default Rendering
The default rendering of the lowlimit element and its contents depends on the context. In the preceding example, it should be rendered
as a subscript to the integral sign:
Zb
f (x) dx
a
Consult the descriptions of individual operators that make use of the lowlimit construct for default renderings.
Example
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<lowlimit><ci> a </ci></lowlimit>
<uplimit><ci> b </ci></uplimit>
<apply>
<ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
Default Rendering
The default rendering of the uplimit element and its contents depends on the context. In the preceding example, it should be rendered
as a superscript to the integral sign:
Zb
f (x) dx
a
Consult the descriptions of individual operators that make use of the uplimit construct for default renderings.
Discussion
The bvar element is the container element for the ‘bound variable’ of an operation. For example, in an integral it specifies the variable of
integration. In a derivative, it indicates the variable with respect to which a function is being differentiated. When the bvar element is used
to qualify a derivative, it may contain a child degree element that specifies the order of the derivative with respect to that variable. The
bvar element is also used for the internal variable in a number of operators taking qualifiers, including user defined operators, sums and
products and for the bound variable used with the universal and existential quantifiers forall and exists. When a bvar element has
more than one child element, the elements may appear in any order.
Instances of the bound variables are normally recognized by comparing the XML information sets of the relevant ci elements after first
carrying out XML space normalization. Such identification can be made explicit by placing an id on the ci element in the bvar element
and referring to it using the definitionURL attribute on all other instances. An example of this approach is
237
<set>
<bvar><ci id="var-x"> x </ci></bvar>
<condition>
<apply>
<lt/>
<ci definitionURL="#var-x"> x </ci>
<cn> 1 </cn>
</apply>
</condition>
</set>
This id based approach is especially helpful when constructions involving bound variables are nested.
It can be necessary to associate additional information with a bound variable one or more instances of it. The information might be
something like a detailed mathematical type, an alternative presentation or encoding or a domain of application. Such associations are
accomplished in the standard way by replacing a ci element (even inside the bvar element) by a semantics element containing both
it and the additional information. Recognition of and instance of the bound variable is still based on the actual ci elements and not the
semantics elements or anything else they may contain. The id based approach outlined above may still be used.
The meaning of the bvar element depends on the context it is being used in. For further details about how qualifiers are used in conjunction
with operators taking qualifiers, consult Section 4.2.3.2.
Examples
<apply>
<diff/>
<bvar>
<ci> x </ci>
<degree><cn> 2 </cn></degree>
</bvar>
<apply>
<power/>
<ci> x </ci>
<cn> 4 </cn>
</apply>
</apply>
238
<apply>
<int/>
<bvar><ci> x </ci></bvar>
<condition>
<apply><in/><ci> x </ci><ci> D </ci></apply>
</condition>
<apply><ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
Default Rendering
The default rendering of the bvar element and its contents depends on the context. In the preceding examples, it should be rendered as
the x in the dx of the integral, and as the x in the denominator of the derivative symbol, respectively:
d2 x4
2
Zdx
f (x) dx
x∈D
Note that in the case of the derivative, the default rendering of the degree child of the bvar element is as an exponent.
Consult the descriptions of individual operators that make use of the bvar construct for default renderings.
Discussion
The degree element is the container element for the ‘degree’ or ‘order’ of an operation. There are a number of basic mathematical
constructs that come in families, such as derivatives and moments. Rather than introduce special elements for each of these families,
MathML uses a single general construct, the degree element for this concept of ‘order’.
The meaning of the degree element depends on the context it is being used in. For further details about how qualifiers are used in
conjunction with operators taking qualifiers, consult Section 4.2.3.2.
239
Example
<apply>
<partialdiff/>
<bvar>
<ci> x </ci>
<degree><ci> n </ci></degree>
</bvar>
<bvar>
<ci> y </ci>
<degree><ci> m </ci></degree>
</bvar>
<apply><sin/>
<apply> <times/>
<ci> x </ci>
<ci> y </ci>
</apply>
</apply>
</apply>
Default Rendering
The default rendering of the degree element and its contents depends on the context. In the preceding example, the degree elements
would be rendered as the exponents in the differentiation symbols:
∂n+m
sin(xy)
∂xn ∂ym
Consult the descriptions of individual operators that make use of the degree construct for default renderings.
Discussion
The divergence element is the vector calculus divergence operator, often called div.
The divergence element takes the attributes encoding and definitionURL that can be used to override the default semantics.
Example
<apply>
<divergence/>
<ci> a </ci>
</apply>
Default Rendering
div a or ∇ · a
Example
<apply>
<grad/>
<ci> f</ci>
</apply>
Where for example f is a scalar function of three real variables.
Default Rendering
grad f or ∇a
Example
<apply>
<curl/>
<ci> a </ci>
</apply>
Where for example a is a vector field.
Default Rendering
curl a or ∇ × a
Discussion
The laplacian element takes the attributes encoding and definitionURL that can be used to override the default semantics.
Example
<apply>
<eq/>
<apply><laplacian/>
<ci> f </ci>
</apply>
<apply>
<divergence/>
<apply><grad/>
<ci> f </ci>
</apply>
</apply>
</apply>
Where for example f is a scalar function of three real variables.
242
Default Rendering
∇2 f
Examples
<set>
<ci> b </ci>
<ci> a </ci>
<ci> c </ci>
</set>
This constructs the set b, a, c
<set>
<bvar><ci> x </ci></bvar>
<condition>
<apply><and/>
<apply><lt/>
<ci> x </ci>
<cn> 5 </cn>
</apply>
<apply><in/>
<ci> x </ci>
<naturalnumbers/>
</apply>
</apply>
</condition>
<ci> x </ci>
</set>
243
This constructs the set of all natural numbers less than 5, i.e. the set 0, 1, 2, 3, 4. In general a set can be constructed by providing a
function and a domain of application. The elements of the set correspond to the values obtained by evaluating the function at the points
of the domain. The qualifications defined by a domainofapplication element can also be abbreviated in several ways including just a
condition element placing constraints directly on the bound variables as in this example
Default Rendering
• {a, b, c}
• {x | x < 5 ∧ x ∈ N}
Examples
<list>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</list>
<list order="numeric">
<bvar><ci> x </ci></bvar>
<condition>
<apply><lt/>
<ci> x </ci>
<cn> 5 </cn>
</apply>
</condition>
<ci> x </ci>
</list>
244
Default Rendering
• [a, b, c]
• [x | x < 5]
Discussion
The union element is the operator for a set-theoretic union or join of sets. The operands are usually listed explicitly.
The union element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The union element is an n-ary set operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as described
in 4.2.3.2 Therefore it may take qualifiers.
Example
<apply>
<union/>
<ci> A </ci>
<ci> B </ci>
</apply>
<apply>
<union/>
<bvar><ci type="set"> S </ci></bvar>
<domainofapplication><ci type="list">L</ci></domainofapplication>
<ci type="set"> S </ci>
</apply>
Default Rendering
A∪B
[
S
S∈L
245
Discussion
The intersect element is the operator for the set-theoretic intersection or meet of sets. The operands are usually listed explicitly.
The intersect element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The intersect element is an n-ary set operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as
described in 4.2.3.2 Therefore it may take qualifiers.
Example
<apply>
<intersect/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
<apply>
<intersect/>
<bvar><ci type="set"> S </ci></bvar>
<domainofapplication><ci type="list">L</ci></domainofapplication>
<ci type="set"> S </ci>
</apply>
Default Rendering
A∩B
\
S
S∈L
Discussion
The in element is the relational operator used for a set-theoretic inclusion (‘is in’ or ‘is a member of’).
The in element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<in/>
<ci> a </ci>
<ci type="set"> A </ci>
</apply>
Default Rendering
a∈A
Discussion
The notin element is the relational operator element used for set-theoretic exclusion (‘is not in’ or ‘is not a member of’).
The notin element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<notin/>
<ci> a </ci>
<ci> A </ci>
</apply>
Default Rendering
a∈
/A
Discussion
The subset element is the relational operator element for a set-theoretic containment (‘is a subset of’).
247
The subset element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The subset element is an n-ary set relation (see Section 4.2.4). As an n-ary operator, its operands may also be generated as described
in 4.2.3.2 Therefore it may take qualifiers.
Example
<apply>
<subset/>
<ci> A </ci>
<ci> B </ci>
</apply>
<apply>
<subset/>
<bvar><ci type="set">S</ci></bvar>
<condition>
<apply><in/>
<ci>S</ci>
<ci type="list">T</ci>
</apply>
</condition>
<ci>S</ci>
</apply>
Default Rendering
A⊆B
Discussion
The prsubset element is the relational operator element for set-theoretic proper containment (‘is a proper subset of’).
The prsubset element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The prsubset element is an n-ary set relation (see Section 4.2.4). As an n-ary operator, its operands may also be generated as described
in 4.2.3.2 Therefore it may take qualifiers.
248
Example
<apply>
<prsubset/>
<ci> A </ci>
<ci> B </ci>
</apply>
<apply>
<prsubset/>
<bvar><ci type="integer">i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>10</cn></uplimit>
<apply><selector/>
<ci type="vector_of_sets">S</ci>
<ci>i</ci>
</apply>
</apply>
Default Rendering
A⊂B
Example
<apply>
<notsubset/>
<ci> A </ci>
<ci> B </ci>
</apply>
249
Default Rendering
A*B
Example
<apply>
<notprsubset/>
<ci> A </ci>
<ci> B </ci>
</apply>
Default Rendering
A 6⊂ B
Example
<apply>
<setdiff/>
<ci> A </ci>
<ci> B </ci>
</apply>
250
Default Rendering
A\B
Discussion
The card element is the operator element for the size or cardinality of a set.
The card element takes the attributes definitionURL and encoding that can be used to override the default semantics.
Example
<apply>
<eq/>
<apply><card/>
<ci> A </ci>
</apply>
<ci> 5 </ci>
</apply>
where A is a set with 5 elements.
Default Rendering
|A| = 5
Discussion
The cartesianproduct element is the operator element for the Cartesian product of two or more sets. If A and B are two sets, then the
Cartesian product of A and B is the set of all pairs (a, b) with a in A and b in B.
The cartesianproduct element takes the attributes definitionURL and encoding that can be used to override the default semantics.
The cartesianproduct element is an n-ary operator (see Section 4.2.3). As an n-ary operator, its operands may also be generated as
described in 4.2.3.2 Therefore it may take qualifiers.
251
Example
<apply><cartesianproduct/>
<ci> A </ci>
<ci> B </ci>
</apply>
<apply><cartesianproduct/>
<reals/>
<reals/>
<reals/>
</apply>
Default Rendering
A×B
R×R×R
R3
Discussion
The sum element denotes the summation operator. The most general form of a sum specifies the terms of the sum by using a
domainofapplication element to specify a domain. If no bound variables are specified then terms of the sum correspond to those
produced by evaluating the function that is provided at the points of the domain, while if bound variables are present they are the index of
summation and they take on the values of points in the domain. In this case the terms of the sum correspond to the values of the expression
that is provided, evaluated at those points. Depending on the structure of the domain, the domain of summation can be abbreviated by
using uplimit and lowlimit to specify upper and lower limits for the sum.
The sum element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
<apply>
<sum/>
<bvar><ci> x </ci></bvar>
<lowlimit>
<ci> a </ci>
</lowlimit>
<uplimit>
<ci> b </ci>
</uplimit>
<apply><ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
<apply>
<sum/>
<bvar><ci> x </ci></bvar>
<condition>
<apply> <in/>
<ci> x </ci>
<ci type="set"> B </ci>
</apply>
</condition>
<apply><ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
<apply>
<sum/>
<domainofapplication>
<ci type="set"> B </ci>
</domainofapplication>
<ci type="function"> f </ci>
</apply>
253
Default Rendering
b
∑ f (x)
x=a
∑ f (x)
x∈B
∑f
B
Discussion
The product element denotes the product operator. The most general form of a product specifies the terms of the product by using
a domainofapplication element to specify the domain. If no bound variables are specified then terms of the product correspond to
those produced by evaluating the function that is provided at the points of the domain, while if bound variables are present they are the
index of product and they take on the values of points in the domain. In this case the terms of the product correspond to the values
of the expression that is provided, evaluated at those points. Depending on the structure of the domain, the domain of product can be
abbreviated by using uplimit and lowlimit to specify upper and lower limits for the product.
The product element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
<apply>
<product/>
<bvar><ci> x </ci></bvar>
<lowlimit><ci> a </ci></lowlimit>
<uplimit><ci> b </ci></uplimit>
<apply>
<ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
254
<apply>
<product/>
<bvar><ci> x </ci></bvar>
<condition>
<apply> <in/>
<ci> x </ci>
<ci type="set"> B </ci>
</apply>
</condition>
<apply><ci type="function"> f </ci>
<ci> x </ci>
</apply>
</apply>
Default Rendering
b
∏ f (x)
x=a
∏ f (x)
x∈B
Examples
<apply>
<limit/>
<bvar><ci> x </ci></bvar>
<lowlimit><cn> 0 </cn></lowlimit>
<apply><sin/><ci> x </ci></apply>
</apply>
255
<apply>
<limit/>
<bvar><ci> x </ci></bvar>
<condition>
<apply>
<tendsto type="above"/>
<ci> x </ci>
<ci> a </ci>
</apply>
</condition>
<apply><sin/>
<ci> x </ci>
</apply>
</apply>
Default Rendering
lim sin x
x→0
lim sin x
x&a
Discussion
The tendsto element is used to express the relation that a quantity is tending to a specified value. While this is used primarily as part of
the statement of a mathematical limit, it exists as a construct on its own to allow one to capture mathematical statements such as "As x
tends to y," and to provide a building block to construct more general kinds of limits that are not explicitly covered by the recommendation.
The tendsto element takes the attributes type to set the direction from which the limiting value is approached.
Examples
<apply>
<tendsto type="above"/>
<apply>
<power/>
<ci> x </ci>
<cn> 2 </cn>
</apply>
<apply>
<power/>
<ci> a </ci>
<cn> 2 </cn>
</apply>
</apply>
To express (x, y) →( f (x, y), g(x, y)), one might use vectors, as in:
<apply>
<tendsto/>
<vector>
<ci> x </ci>
<ci> y </ci>
</vector>
<vector>
<apply><ci type="function"> f </ci>
<ci> x </ci>
<ci> y </ci>
</apply>
<apply><ci type="function"> g </ci>
<ci> x </ci>
<ci> y </ci>
</apply>
</vector>
</apply>
Default Rendering
x2 & a2
257
The names of the common trigonometric functions supported by MathML are listed below. Since their standard interpretations are widely
known, they are discussed as a group.
sin cos tan
sec csc cot
sinh cosh tanh
sech csch coth
arcsin arccos arctan
arccosh arccot arccoth
arccsc arccsch arcsec
arcsech arcsinh arctanh
Discussion
These elements all take the definitionURL and encoding attributes, which can be used to override the default semantics.
Examples
<apply>
<sin/>
<ci> x </ci>
</apply>
258
<apply>
<sin/>
<apply>
<plus/>
<apply><cos/>
<ci> x </ci>
</apply>
<apply>
<power/>
<ci> x </ci>
<cn> 3 </cn>
</apply>
</apply>
</apply>
Default Rendering
• sin x
• sin(cos x + x3 )
Example
<apply>
<exp/>
<ci> x </ci>
</apply>
Default Rendering
ex
259
Discussion
The ln element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<ln/>
<ci> a </ci>
</apply>
If a = e, (where e is the base of the natural logarithms) this will yield the value 1.
Default Rendering
ln a
Discussion
The log element is the operator that returns a logarithm to a given base. The base may be specified using a logbase element, which
should be the first element following log, i.e. the second child of the containing apply element. If the logbase element is not present, a
default base of 10 is assumed.
The log element takes the definitionURL and encoding attributes, which can be used to override the default semantics.
The log element can be used as either an operator taking qualifiers or a unary calculus operator (see Section 4.2.3.2).
260
Example
<apply>
<log/>
<logbase>
<cn> 3 </cn>
</logbase>
<ci> x </ci>
</apply>
This markup represents ‘the base 3 logarithm of x’. For natural logarithms base e, the ln element should be used instead.
Default Rendering
log3 x
4.4.9 Statistics
Discussion
Example
<apply>
<mean/>
<ci> X </ci>
</apply>
Default Rendering
X̄ or hXi
261
Example
sdev is an n-ary operator (see Section 4.2.3).
<apply>
<sdev/>
<ci> X </ci>
</apply>
Default Rendering
σ(X)
Example
variance is an n-ary operator (see Section 4.2.3).
<apply>
<variance/>
<ci> X </ci>
</apply>
Default Rendering
σ(X)2
262
Discussion
Example
<apply>
<median/>
<ci> X </ci>
</apply>
Default Rendering
median(X)
Discussion
Example
<apply>
<mode/>
<ci> X </ci>
</apply>
Default Rendering
mode(X)
263
Discussion
The moment element represents the statistical moment operator. Use the qualifier degree for the n in ‘ n-th moment’. Use the qualifier
momentabout for the p in ‘moment about p’.
moment takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
moment is an operator taking qualifiers (see Section 4.2.3.2). The third moment of the distribution X about the point p is written:
<apply>
<moment/>
<degree><cn> 3 </cn></degree>
<momentabout>
<ci> p </ci>
</momentabout>
<ci> X </ci>
</apply>
Default Rendering
hX 3 i
Discussion
The momentabout element is a qualifier element used with the moment element to represent statistical moments. Use the qualifier
momentabout for the p in ‘moment about p’.
momentabout takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<moment/>
<degree><cn> 3 </cn></degree>
<momentabout><ci> p </ci></momentabout>
<ci> X </ci>
</apply>
Default Rendering
hX 3 i
Discussion
vector is the container element for a vector. The child elements form the components of the vector.
For purposes of interaction with matrices and matrix multiplication, vectors are regarded as equivalent to a matrix consisting of a single
column, and the transpose of a vector behaves the same as a matrix consisting of a single row. Note that vectors may be rendered either
as a single column or row.
In general a vector can be constructed by providing a function and a 1-dimensional domain of application. The entries of the vector
correspond to the values obtained by evaluating the function at the points of the domain. The qualifications defined by a
domainofapplication element can also be abbreviated in several ways including a condition placed on a bound variable and an
expression involving that variable.
Example
<vector>
<cn> 1 </cn>
<cn> 2 </cn>
<cn> 3 </cn>
<ci> x </ci>
</vector>
265
Default Rendering
1
2
3
x
(1, 2, 3, x)
Example
matrix is a constructor element (see Section 4.2.2.2).
<matrix>
<matrixrow>
<cn> 0 </cn> <cn> 1 </cn> <cn> 0 </cn>
</matrixrow>
<matrixrow>
<cn> 0 </cn> <cn> 0 </cn> <cn> 1 </cn>
</matrixrow>
<matrixrow>
<cn> 1 </cn> <cn> 0 </cn> <cn> 0 </cn>
</matrixrow>
</matrix>
Default Rendering
0 1 0
A= 0 0 1
1 0 0
266
Discussion
The matrixrow element is the container element for the rows of a matrix.
Example
<matrixrow>
<cn> 1 </cn>
<cn> 2 </cn>
</matrixrow>
<matrixrow>
<cn> 3 </cn>
<ci> x </ci>
</matrixrow>
Default Rendering
Matrix rows are not directly rendered by themselves outside of the context of a matrix.
Discussion
The determinant element is the operator for constructing the determinant of a matrix.
determinant takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<determinant/>
<ci type="matrix"> A </ci>
</apply>
267
Default Rendering
det A
Discussion
The transpose element is the operator for constructing the transpose of a matrix.
transpose takes the definitionURL and encoding attributes, which can be used to override the default semantics.
Example
<apply>
<transpose/>
<ci type="matrix"> A </ci>
</apply>
Default Rendering
AT
Discussion
The selector element is the operator for indexing into vectors matrices and lists. It accepts one or more arguments. The first argument
identifies the vector, matrix or list from which the selection is taking place, and the second and subsequent arguments, if any, indicate the
kind of selection taking place.
When selector is used with a single argument, it should be interpreted as giving the sequence of all elements in the list, vector or matrix
given. The ordering of elements in the sequence for a matrix is understood to be first by column, then by row. That is, for a matrix ( ai, j ),
where the indices denote row and column, the ordering would be a 1,1 , a 1,2 , ... a 2,1 , a2,2 ... etc.
When three arguments are given, the last one is ignored for a list or vector, and in the case of a matrix, the second and third arguments
specify the row and column of the selected element.
When two arguments are given, and the first is a vector or list, the second argument specifies an element in the list or vector. When a
matrix and only one index i is specified as in
268
<apply>
<selector/>
<matrix>
<matrixrow>
<cn> 1 </cn> <cn> 2 </cn>
</matrixrow>
<matrixrow>
<cn> 3 </cn> <cn> 4 </cn>
</matrixrow>
</matrix>
<cn> 1 </cn>
</apply>
it refers to the i-th matrixrow. Thus, the preceding example selects the following row:
Example
<apply>
<selector/>
<ci type="matrix"> A </ci>
<cn> 3 </cn>
<cn> 2 </cn>
</apply>
Default Rendering
The selector construct renders in a manner that indicates which sub-element of the parent object is selected. For vectors and matrices
this is normally done by specifying the parent object together with subscripted indices. For example, the selection
<apply>
<selector/>
<ci type="vector">V</ci>
<cn> 1 </cn>
</apply>
269
Discussion
The vectorproduct is the operator element for deriving the vector product of two vectors.
The vectorproduct element takes the attributes definitionURL and encoding that can be used to override the default semantics.
Example
<apply>
<eq/>
<apply><vectorproduct/>
<ci type="vector"> A </ci>
<ci type="vector"> B </ci>
</apply>
<apply><times/>
<ci> a </ci>
<ci> b </ci>
<apply><sin/>
<ci> θ </ci>
</apply>
<ci type="vector"> N </ci>
</apply>
</apply>
where A and B are vectors, N is a unit vector orthogonal to A and B, a, b are the magnitudes of A, B and θis the angle between A and B.
Default Rendering
A × B = ab sin θN
270
Discussion
The scalarproduct is the operator element for deriving the scalar product of two vectors.
The scalarproduct element takes the attributes definitionURL and encoding that can be used to override the default semantics.
Example
<apply>
<eq/>
<apply><scalarproduct/>
<ci type="vector"> A </ci>
<ci type="vector">B </ci>
</apply>
<apply><times/>
<ci> a </ci>
<ci> b </ci>
<apply><cos/>
<ci> θ </ci>
</apply>
</apply>
</apply>
where A and B are vectors, a, b are the magnitudes of A, B and θis the angle between A and B.
Default Rendering
A.B = ab cos θ
Discussion
The outerproduct is the operator element for deriving the outer product of two vectors.
The outerproduct element takes the attributes definitionURL and encoding that can be used to override the default semantics.
Example
<apply>
<outerproduct/>
<ci type="vector">A</ci>
<ci type="vector">B</ci>
</apply>
where A and B are vectors.
Default Rendering
A ⊗ B or A ∧ B
Example
The annotation element is a semantic mapping element. It is always used with semantics.
<semantics>
<apply>
<plus/>
<apply><sin/>
<ci> x </ci>
</apply>
<cn> 5 </cn>
</apply>
<annotation encoding="TeX">
\sin x + 5
</annotation>
</semantics>
272
Default Rendering
None. The information contained in annotations may optionally be used by a renderer able to process the kind of annotation given.
Discussion
The semantics element is the container element that associates additional representations with a given MathML construct. The
semantics element has as its first child the expression being annotated, and the subsequent children are the annotations. There is no
restriction on the kind of annotation that can be attached using the semantics element. For example, one might give a TEX encoding,
computer algebra input, or even detailed mathematical type information in an annotation. A definitionURL attribute is used on the
annotation to indicate when the semantics of an annotation differs significantly from that of the original expression.
The representations that are XML based are enclosed in an annotation-xml element while those representations that are to be parsed
as PCDATA are enclosed in an annotation element.
The semantics element takes the definitionURL and encoding attributes, which can be used to reference an external source for
some or all of the semantic information.
An important purpose of the semantics construct is to associate specific semantics with a particular presentation, or additional presen-
tation information with a content construct. The default rendering of a semantics element is the default rendering of its first child. When a
MathML-presentation annotation is provided, a MathML renderer may optionally use this information to render the MathML construct. This
would typically be the case when the first child is a MathML content construct and the annotation is provided to give a preferred rendering
differing from the default for the content elements.
Use of semantics to attach additional information in-line to a MathML construct can be contrasted with use of the csymbol for referencing
external semantics. See Section 4.4.1.3
Examples
<semantics>
<apply>
<plus/>
<apply>
<sin/>
<ci> x </ci>
</apply>
<cn> 5 </cn>
</apply>
<annotation encoding="Maple">
sin(x) + 5
</annotation>
<annotation-xml encoding="MathML-Presentation">
...
...
</annotation-xml>
<annotation encoding="Mathematica">
Sin[x] + 5
</annotation>
<annotation encoding="TeX">
\sin x + 5
</annotation>
<annotation-xml encoding="OpenMath">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMS cd="transc1" name="sin"/>
<OMI>5</OMI>
</OMA>
</annotation-xml>
</semantics>
Default Rendering
The default rendering of a semantics element is the default rendering of its first child.
274
Example
<semantics>
<apply>
<plus/>
<apply><sin/>
<ci> x </ci>
</apply>
<cn> 5 </cn>
</apply>
<annotation-xml encoding="OpenMath">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMS name="plus" cd="arith1"/>
<OMA><OMS name="sin" cd="transc1"/>
<OMV name="x"/>
</OMA>
<OMI>5</OMI>
</OMA>
</annotation-xml>
</semantics>
See also the discussion of semantics above.
Default Rendering
None. The information may optionally be used by a renderer able to process the kind of annotation given.
Example
<apply>
<in/>
<cn type="integer"> 42 </cn>
<integers/>
</apply>
Default Rendering
42 ∈ Z
Example
<apply>
<in/>
<cn type="real"> 44.997 </cn>
<reals/>
</apply>
Default Rendering
44.997 ∈ R
Example
<apply>
<in/>
<cn type="rational"> 22 <sep/>7</cn>
<rationals/>
</apply>
Default Rendering
22/7 ∈ Q
Discussion
naturalnumbers represents the set of all natural numbers, i.e. non-negative integers.
Example
<apply>
<in/>
<cn type="integer">1729</cn>
<naturalnumbers/>
</apply>
Default Rendering
1729 ∈ N
Discussion
complexes represents the set of all complex numbers, i.e. numbers which may have a real and an imaginary part.
277
Example
<apply>
<in/>
<cn type="complex-cartesian">17<sep/>29</cn>
<complexes/>
</apply>
Default Rendering
17 + 29i ∈ C
Discussion
primes represents the set of all natural prime numbers, i.e. integers greater than 1 which have no positive integer factor other than
themselves and 1.
Example
<apply>
<in/>
<cn type="integer">17</cn>
<primes/>
</apply>
Default Rendering
17 ∈ P
Discussion
exponentiale represents the mathematical constant which is the exponential base of the natural logarithms, commonly written e. It is
approximately 2.718281828..
278
Example
<apply> <eq/>
<apply>
<ln/>
<exponentiale/>
</apply>
<cn>1</cn>
</apply>
Default Rendering
ln e = 1
Discussion
imaginaryi represents the mathematical constant which is the square root of -1, commonly written i.
Example
<apply> <eq/>
<apply>
<power/>
<imaginaryi/>
<cn>2</cn>
</apply>
<cn>-1</cn>
</apply>
Default Rendering
i2 = −1
Discussion
notanumber represents the result of an ill-defined floating point operation, sometimes also called NaN.
279
Example
<apply> <eq/>
<apply>
<divide/>
<cn>0</cn>
<cn>0</cn>
</apply>
<notanumber/>
</apply>
Default Rendering
0/0 = NaN
Example
<apply> <eq/>
<apply>
<or/>
<true/>
<ci type = "logical">P</ci>
</apply>
<true/>
</apply>
Default Rendering
true ∨ P = true
Example
<apply> <eq/>
<apply>
<and/>
<false/>
<ci type = "logical">P</ci>
</apply>
<false/>
</apply>
Default Rendering
false ∧ P = false
Discussion
Example
<apply>
<neq/>
<integers/>
<emptyset/>
</apply>
Default Rendering
Z 6= 0/
4.4.12.13 pi (pi)
Discussion
pi represents the mathematical constant which is the ratio of a circle’s circumference to its diameter, approximately 3.141592653.
281
Example
<apply>
<approx/>
<pi/>
<cn type = "rational">22<sep/>7</cn>
</apply>
Default Rendering
π ≈ 22/7
Example
<eulergamma/>
Default Rendering
γ
Example
<infinity/>
Default Rendering
∞
Chapter 5
Presentation markup and content markup can be combined in two ways. The first manner is to intersperse content and presentation
elements in what is essentially a single tree. This is called mixed markup. The second manner is to provide both an explicit presentation
and an explicit content in a pair of trees. This is called parallel markup. This chapter describes both mixed and parallel markup, and how
they may used in conjunction with style sheets and other tools.
Since content markup is not directly concerned with how an expression is displayed, a renderer must infer how an expression should
be presented to a reader. While a sufficiently sophisticated renderer and style sheet mechanism could in principle allow a user to read
mathematical documents using personalized notational preferences, in practice, rendering content expressions with notational nuances
may still require intervention of some sort.
Employing content tags alone may limit the ability of the author to precisely control how an expression is rendered.
Both content and presentation tags are necessary in order to provide the full expressive capability one would expect in a mathematical
markup language. Often the same mathematical notation is used to represent several completely different concepts. For example, the
notation xi may be intended (in polynomial algebra) as the i-th power of the variable x, or as the i-th component of a vector x (in tensor
calculus). In other cases, the same mathematical concept may be displayed in one of various notations. For instance, the factorial of a
number might be expressed with an exclamation mark, a Gamma function, or a Pochhammer symbol.
Thus the same notation may represent several mathematical ideas, and, conversely, the same mathematical idea often has several
notations. In order to provide authors with the ability to precisely control notation while at the same time encoding meanings in a machine-
readable way, both content and presentation markup are needed.
In general, if it is important to control exactly how an expression is rendered, presentation markup will generally be more satisfactory. If
it is important that the meaning of an expression can be interpreted dependably and automatically, then content markup will generally be
more satisfactory.
In many common situations, an author or authoring tool may choose to generate either presentation or content markup exclusively. For
example, a program for translating legacy documents would most likely generate pure presentation markup. Similarly, an educational
software package might very well generate only content markup for evaluation in a computer algebra system. However, in many other
situations, there are advantages to mixing both presentation and content markup within a single expression.
If an author is primarily presentation-oriented, interspersing some content markup will often produce more accessible, more re-usable
results. For example, an author writing about linear algebra might write:
284
<mrow>
<apply>
<power/>
<ci>x</ci>
<cn>2</cn>
</apply>
<mo>+</mo>
<msup>
<mi>v</mi>
<mn>2</mn>
</msup>
</mrow>
where v is a vector and the superscript denotes a vector component, and x is a real variable. On account of the linear algebra context, a
visually impaired reader may have directed his or her voice synthesis software to render superscripts as vector components. By explicitly
encoding the power, the content markup yields a much better voice rendering than would likely happen by default.
If an author is primarily content-oriented, there are two reasons to intersperse presentation markup. First, using presentation markup
provides a way of modifying or refining how a content expression is rendered. For example, one might write:
<apply>
<in/>
<ci><mi mathvariant="bold">v</mi></ci>
<ci>S</ci>
</apply>
In this case, the use of embedded presentation markup allows the author to specify that v should be rendered in boldface. In the same
way, it is sometimes the case that a completely different notation is desired for a content expression. For example, here we express a fact
about factorials, n = n!/(n-1)!, using the ascending factorial notation:
285
<apply>
<equivalent/>
<ci>n</ci>
<apply>
<divide/>
<semantics>
<apply>
<factorial/>
<ci>n</ci>
</apply>
<annotation-xml encoding="MathML-Presentation">
<msup>
<mn>1</mn>
<mover accent="true">
<mi>n</mi>
<mo>‾</mo>
</mover>
</msup>
</annotation-xml>
</semantics>
<semantics>
<apply>
<factorial/>
<apply><minus/><ci>n</ci><cn>1</cn></apply>
</apply>
<annotation-xml encoding="MathML-Presentation">
<msup>
<mn>1</mn>
<mover accent="true">
<mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow>
<mo>‾</mo>
</mover>
</msup>
</annotation-xml>
</semantics>
</apply>
</apply>
286
n̄
This content expression would render using the given notation as: n ≡ 1n−1
1
A second reason to use presentation within content markup is that there is a continually growing list of areas of discourse that do not
have pre-defined content elements for encoding their objects and operators. As a consequence, any system of content markup inevitably
requires an extension mechanism that combines notation with semantics in some way. MathML content markup specifies several ways of
attaching an external semantic definitions to content objects. It is necessary, however, to use MathML presentation markup to specify how
such user-defined semantic extensions should be rendered.
For example, the ‘rank’ operator from linear algebra is not included as a pre-defined MathML content element. Thus, to express the
statement rank(uT v)=1 we use a semantics element to bind a semantic definition to the symbol rank.
<apply>
<eq/>
<apply>
<semantics>
<mi>rank</mi>
<annotation-xml encoding="OpenMath">
<OMS name="rank" cd="linalg4" xmlns="http://www.openmath.org/OpenMath"/>
</annotation-xml>
</semantics>
<apply>
<times/>
<apply> <transpose/> <ci>u</ci> </apply>
<ci>v</ci>
</apply>
</apply>
<cn>1</cn>
</apply>
Here, the semantics of rank have been given using a symbol from an OpenMath [OpenMath2000] content dictionary (CD).
The main consideration when presentation markup and content markup are mixed together in a single expression is that the result should
still make sense. When both kinds of markup are contained in a presentation expression, this means it should be possible to render the
resulting mixed expressions simply and sensibly. Conversely, when mixed markup appears in a content expression, it should be possible
to simply and sensibly assign a semantic interpretation to the expression as a whole. These requirements place a few natural constraints
on how presentation and content markup can be mixed in a single expression, in order to avoid ambiguous or otherwise problematic
expressions.
Two examples illustrate the kinds of problems that must be avoided in mixed markup. Consider:
287
<mrow>
<bvar> x </bvar> <mo> + </mo> <bvar> y </bvar>
</mrow>
In this example, the content element bvar has been indiscriminately embedded in a presentation expression. Since bvar requires an
enclosing context for its meaning, this expression is unclear.
Similarly, consider:
<apply>
<ci> x </ci> <mo> + </mo> <ci> y </ci>
</apply>
Here, the mo element is problematic. Should a renderer infer that the usual arithmetic operator is intended, and act as if the prefix content
element plus had been used? Or should this be literally interpreted as the operator x applied to two arguments, <mo>+</mo> and <mi>y
</mi> ? Even if we were to decide that <mo>+</mo> was the operator, then what should its meaning be? These questions do not have
particularly compelling answers, so this kind of mixing of content and presentation markup is also prohibited.
The use of presentation markup within content markup is limited to situations that do not effect the ability of content markup to unambigu-
ously encode mathematical meaning. Specifically, presentation markup may only appear in content markup in three ways:
1. within ci and cn token elements
2. within the csymbol element
3. within the semantics element
Any other presentation markup occurring within a content markup is a MathML error. More detailed discussion of these three cases
follows:
Presentation markup within token elements. The token elements ci and cn are permitted to contain any sequence of MathML char-
acters (defined in Chapter 6), presentation elements, and sep empty elements. Contiguous blocks of MathML characters in ci
and cn elements are rendered as if they were wrapped in mi and mn elements respectively. If a token element contains both
MathML characters and presentation elements, contiguous blocks of MathML characters (if any) are treated as if wrapped in
mi or mn elements as appropriate, and the resulting collection of presentation elements are rendered as if wrapped in an mrow
element.
Presentation markup within the csymbol element. The csymbol element may contain either MathML characters interspersed with
presentation markup, or content elements of the container type. It is a MathML error for a csymbol element to contain both
presentation and content elements. When the csymbol element contains both raw data and presentation markup, the same
rendering rules that apply to content elements of the token type should be used.
288
Presentation markup within the semantics element. One of the main purposes of the semantics element is to provide a mechanism
for incorporating arbitrary MathML expressions into content markup in a semantically meaningful way. In particular, any valid
presentation expression can be embedded in a content expression by placing it as the first child of a semantics element. The
meaning of this wrapped expression should be indicated by one or more annotation elements also contained in the semantics
element. Suggested rendering for a semantics element is discussed in Section 4.2.6.
<apply>
<compose/>
<sin/>
<apply>
<inverse/>
<root/>
</apply>
</apply>
289
<semantics>
<mrow>
<mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
<mo>⁢</mo>
<mrow><mo>(</mo><mi>c</mi> <mo>+</mo> <mi>d</mi><mo>)</mo></mrow>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply><and/>
<apply><xor/><ci>a</ci> <ci>b</ci></apply>
<apply><xor/><ci>c</ci> <ci>d</ci></apply>
</apply>
</annotation-xml>
</semantics>
This example is non-trivial in the sense that the content markup could not be easily derived from the presentation markup alone.
It is, in principle, possible to provide annotations for each presentation node by incorporating semantics elements recursively.
<semantics>
<mrow>
<semantics>
<mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
<annotation-xml encoding="MathML-Content">
<apply><plus/><ci>a</ci> <ci>b</ci></apply>
</annotation-xml>
</semantics>
<mo>⁢</mo>
<semantics>
<mrow><mo>(</mo><mi>c</mi> <mo>+</mo> <mi>d</mi><mo>)</mo></mrow>
<annotation-xml encoding="MathML-Content">
<apply><plus/><ci>c</ci> <ci>d</ci></apply>
</annotation-xml>
</semantics>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply><times/>
<apply><plus/><ci>a</ci> <ci>b</ci></apply>
<apply><plus/><ci>c</ci> <ci>d</ci></apply>
</apply>
</annotation-xml>
</semantics>
To be complete this example would be much more verbose, wrapping each of the individual leaves mi, mo and mn in a further seven
semantics elements.
This approach is very general and works for all kinds of annotations (including non-MathML annotations and multiple annotations). It
leads, however, to O(n log n) increase in size of the document. This is therefore not a suitable approach for fine-grained parallel markup
of large objects.
The following example shows this cross-referencing for the boolean arithmetic expression (a+b)(c+d ).
<semantics>
<mrow id="E">
<mrow id="E.1">
<mo id="E.1.1">(</mo>
<mi id="E.1.2">a</mi>
<mo id="E.1.3">+</mo>
<mi id="E.1.4">b</mi>
<mo id="E.1.5">)</mo>
</mrow>
<mo id="E.2">⁢</mo>
<mrow id="E.3">
<mo id="E.3.1">(</mo>
<mi id="E.3.2">c</mi>
<mo id="E.3.3">+</mo>
<mi id="E.3.4">d</mi>
<mo id="E.3.5">)</mo>
</mrow>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply xref="E">
<and xref="E.2"/>
<apply xref="E.1">
<xor xref="E.1.3"/><ci xref="E.1.2">a</ci><ci xref="E.1.4">b</ci>
</apply>
<apply xref="E.3">
<xor xref="E.3.3"/><ci xref="E.3.2">c</ci><ci xref="E.3.4">d</ci>
</apply>
</apply>
</annotation-xml>
</semantics>
An id attribute and a corresponding xref appearing within the same semantics element create a correspondence between sub-
expressions.
292
In creating these correspondences by cross-reference, all of the id attributes referenced by any xref must be in the same branch of an
enclosing semantics element. This constraint guarantees that these correspondences do not create unintentional cycles. (Note that this
restriction does not exclude the use of id attributes within the other branches of the enclosing semantics element. It does, however,
exclude references to these other id attributes originating in the same semantics element.)
There is no restriction on which branch of the semantics element may contain the destination id attributes. It is up to the application to
determine which branch to use.
In general, there will not be a one-to-one correspondence between nodes in parallel branches. For example, a presentation tree may
contain elements, such as parentheses, that have no correspondents in the content tree. It is therefore often useful to put the id attributes
on the branch with the finest-grained node structure. Then all of the other branches will have xref attributes to some subset of the id
attributes.
In absence of other criteria, the first branch of the semantics element is a sensible choice to contain the id attributes. Applications that
add or remove annotations will then not have to re-assign attributes to the semantics trees.
In general, the use of id and xref attributes allows a full correspondence between sub-expressions to be given in text that is at most
a constant factor larger than the original. The direction of the references should not be taken to imply that sub-expression selection is
intended to be permitted only on one child of the semantics element. It is equally feasible to select a subtree in any branch and to recover
the corresponding subtrees of the other branches.
It is possible to give cross-references between a MathML expression and a non-MathML XML annotation using the XLink protocol [XLink].
As an example, the boolean expression of the previous section can be annotated with OpenMath, and cross-linked as follows:
293
<semantics>
<mrow id="E">
<mrow id="E.1">
<mo id="E.1.1">(</mo>
<mi id="E.1.2">a</mi>
<mo id="E.1.3">+</mo>
<mi id="E.1.4">b</mi>
<mo id="E.1.5">)</mo>
</mrow>
<mo id="E.2">⁢</mo>
<mrow id="E.3">
<mo id="E.3.1">(</mo>
<mi id="E.3.2">c</mi>
<mo id="E.3.3">+</mo>
<mi id="E.3.4">d</mi>
<mo id="E.3.5">)</mo>
</mrow>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply xref="E">
<and xref="E.2"/>
<apply xref="E.1">
<xor xref="E.1.3"/><ci xref="E.1.2">a</ci><ci xref="E.1.4">b</ci>
</apply>
<apply xref="E.3">
<xor xref="E.3.3"/><ci xref="E.3.2">c</ci><ci xref="E.3.4">d</ci>
</apply>
</apply>
</annotation-xml>
<annotation-xml encoding="OpenMath"
xmlns:om="http://www.openmath.org/OpenMath"
xmlns:xlink="http://www.w3.org/1999/xlink">
Note that the application might or might not have a mechanism for extending DTDs. It will be the case, therefore that some applications
will give well-formed, but not "valid", XML within annotation-xml elements. Consequently, some MathML applications using
annotation-xml will not be validated. More flexibility is offered by the use of XML Schemas.
In general, the interaction of content and presentation is handled via transformation rules on MathML trees. These transformation rules are
sometimes called ‘macros’. In principle, these rules can be expressed using any one of a number of mechanisms, including DSSSL, Java
programs operating on a DOM, etc. We anticipate, however, that the principal mechanism for these transformations in most applications
shall be XSLT.
In this section we discuss transformation rules for two specific purposes: for notational style sheets, and to simplify parallel markup.
295
Authors who make use of content markup may be required to deploy their documents in locales with notational conventions different than
the default content rendering. It is therefore expected that transformation tools will be used to determine notations for content elements
in different settings. Certain elements, e.g. lambda, mean and transpose, have widely varying common notations and will often require
notational selection. Some examples of notational variations are given below.
• V versus ~V
• tan x versus tg x
n m n m
• m versus nC versus Cm versus Cn
• a0 + | 1a1| + . . . + | 1a | versus [a0 , a1 , . . . , ak ]
k
Other elements, for example plus and sin, are less likely to require these features.
Selection of notational style is sometimes necessary for correct understanding of documents by locale. For instance, the binomial coeffi-
n in French notation is equivalent to Cm in Russian notation.
cient Cm n
A natural way for a MathML application to bind a particular notation to the set of content tags is with an XSLT style sheet [XSLT]. The
examples of this section shall assume this is the mechanism to express style choices. (Other choices are equally possible, for example
an application program may provide menus offering a number of rendering choices for all content tags.)
When writing XSLT style sheets for mathematical notation, some transformation rules can be purely local, while others will require multi-
node context to determine the correct output notation. The following example gives a local transformation rule that could be included in a
notational style sheet displaying open intervals as ]a,b[ rather than as (a,b).
296
<xsl:template match="m:interval">
<m:mrow>
<xsl:choose>
<xsl:when test="@closure=’closed’">
<m:mfenced open="[" close="]" separators=",">
<xsl:apply-templates/>
</m:mfenced>
</xsl:when>
<xsl:when test="@closure=’open’">
<m:mfenced open="]" close="[" separators=",">
<xsl:apply-templates/>
</m:mfenced>
</xsl:when>
<xsl:when test="@closure=’open-closed’">
<m:mfenced open="]" close="]" separators=",">
<xsl:apply-templates/>
</m:mfenced>
</xsl:when>
<xsl:when test="@closure=’closed-open’">
<m:mfenced open="[" close="[" separators=",">
<xsl:apply-templates/>
</m:mfenced>
</xsl:when>
<xsl:otherwise>
<m:mfenced open="[" close="]" separators=",">
<xsl:apply-templates/>
</m:mfenced>
</xsl:otherwise>
</xsl:choose>
</m:mrow>
</xsl:template>
Here m is established as the MathML namespace.
<xsl:template match="m:apply[m:factorial]">
<m:mrow>
<xsl:choose>
<xsl:when test="not(*[2]=m:ci) and not(*[2]=m:cn)">
<m:mrow>
<m:mo>(</m:mo>
<xsl:apply-templates select="*[2]" />
<m:mo>)</m:mo>
</m:mrow>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="*[2]" />
</xsl:otherwise>
</xsl:choose>
<m:mo>!</m:mo>
</m:mrow>
</xsl:template>
Other examples of context-dependent transformations would be, e.g. for the apply of a plus to render a-b+c, rather than a+ -b+c, or for
the apply of a power to render sin2 x, rather than sin x2 .
Notational variation will occur both for built-in content elements as well as extensions. Notational style for extensions can be handled as
described above, with rules matching the names of any extension tags, and with the content handling (in a content-faithful style sheet)
proceeding as described in Section 5.4.3.
<xsl:template match="m:math">
<m:semantics>
<xsl:apply-templates/>
298
<m:annotation-xml m:encoding="MathML-Content">
<xsl:copy-of select="."/>
</m:annotation-xml>
</m:semantics>
</xsl:template>
The notation would be generated by additional rules for producing presentation from content, such as those in Section 5.4.1. Fine-grained
parallel markup can be achieved with additional rules treating id attributes. A detailed example is given in [RodWatt2000].
The presentation tags of MathML form a closed vocabulary of notational structures, but are quite rich and can be used to express
a rendering of most mathematical notations. Complex notations can be composed from the basic elements provided for presentation
markup. In this sense, the presentation ability of MathML is open-ended. It is often useful, however, to give a name to new notational
schemas if they are going to be used often. For example, we can shorten and clarify the ascending factorial example of Section 5.2.1,
with a rule which replaces
<mx:a-factorial>X</mx:a-factorial>
with
<semantics>
<apply> <factorial/> <ci>X</ci> </apply>
<annotation-xml encoding="MathML-Presentation">
<msup>
<mn>1</mn>
<mover accent="true">
<mi>X</mi>
<mo>‾</mo>
</mover>
</msup>
</annotation-xml>
</semantics>
Then the example would be more clearly written as:
299
<apply>
<equivalent/>
<ci>n</ci>
<apply>
<divide/>
<mx:a-factorial><ci>n</ci></mx:a-factorial>
<mx:a-factorial>
<apply><minus/><ci>n</ci><cn>1</cn></apply>
</mx:a-factorial>
</apply>
</apply>
Likewise, the content tags form a fixed vocabulary of concepts covering the types of mathematics seen in most common applications. It
is not reasonable to expect users to compose existing MathML content tags to construct new content concepts. (This approach is fraught
with technical difficulties even for professional mathematicians.) Instead, it is anticipated that applications whose mathematical content
concepts extend beyond what is offered by MathML will use annotations and attributes within semantics and csymbol elements, and
that these annotations will use content description languages outside of MathML.
Often the naming of a notation and the identification of a new semantic concept are related. This allows a single transformation rule to
capture both a presentation and a content markup for an expression. This is one of the areas of MathML that benefits most strongly from
the use of macro processing.
<mx:rank/>
and
<mx:tr>X</mx:tr>
and respectively transform them to
<semantics>
<ci><mo>rank</mo></ci>
<annotation-xml encoding="OpenMath">
<OMS name="rank" cd="linalg4" xmlns="http://www.openmath.org/OpenMath"/>
</annotation-xml>
</semantics>
and
300
<apply>
<transpose/>
<ci>X</ci>
</apply>
The lengthy sample encoding of rank(uT v)=1, from Section 5.2.1 could then be condensed to
<apply>
<eq/>
<apply>
<mx:rank/>
<apply> <times/> <mx:tr>u</mx:tr> <ci>v</ci> </apply>
</apply>
<cn>1</cn>
</apply>
From this example we see how the combination of presentation and content markup could become much simpler and effective to generate
as standard style sheet libraries become available.
Chapter 6
6.1 Introduction
Notation and symbols have proved very important for mathematics. Mathematics has grown in part because its notation continually
changes toward being succinct and suggestive. There have been many new signs developed for use in mathematical notation, and
mathematicians have not held back from making use of many symbols originally introduced elsewhere. The result is that mathematics
makes use of a very large collection of symbols. It is difficult to write mathematics fluently if these characters are not available for use. It
is difficult to read mathematics if corresponding glyphs are not available for presentation on specific display devices.
The W3C Math Working Group therefore took on directly the task of specifying part of the full mechanism needed to proceed from notation
to final presentation, and started collaboration with organizations undertaking specification of the rest.
This chapter of the MathML specification contains a listing of character names for use with MathML, recommendations for their use, and
warnings to pay attention to the correct form of the corresponding code points given in the UCS (Universal Character Set) as codified in
Unicode and ISO 10646 [see [Unicode] and the Unicode Web site]. For simplicity we shall refer to this character set by the short name
Unicode. Though Unicode changes from time to time so that it is specified exactly by using version numbers, unless this brings clarity
on some point we shall not use them. The specification of MathML 2.0 [MathML2] used to make use of some characters that were not
part of Unicode 3.0 but which had been proposed to the Unicode Technical Committee (UTC), and thus for inclusion in ISO 10646. They
have been included in the revisions Unicode 3.1 and 3.2. As of the publication of the MathML 2.0 (Second Edition) the current version is
Unicode 4.0. (For more detail about this see Section 6.4.4.)
While a long process of review and adoption by UTC and ISO/IEC of the characters of special interest to mathematics and MathML is
now complete there remains the possibility of some further modification of the lists of characters accepted. To make sure any possible
corrections to relevant standards are taken into account, and for the latest character tables and font information, see the W3C Math
Working Group home page and the Unicode site (see, for instance, Unicode Work in Progress).
302
As always in XML, any character allowed by XML may be used in MathML in an XML document. The legal characters have the hexadecimal
code numbers 09 (tab = U+0009), 0A (line feed = U+000A), 0D (carriage return = U+000D), 20-D7FF (U+0020..U+D7FF), E000-FFFD
(U+E000..U+FFFD), and 10000-10FFFF (U+010000..U+10FFFF). The notation, just introduced in parentheses, beginning with U+ is that
recommended by Unicode for referring to Unicode characters [see [Unicode], page xxviii]. The exclusions above code number D7FF are
of the blocks used in surrogate pairs, and the two characters guaranteed not to be Unicode characters at all. U+FFFE is excluded to allow
determination of byte order in certain encodings.
For special purposes, one may need to use a character which is not in Unicode. In these cases one may use the mglyph element for
direct access to a glyph from some font and creation of a MathML substitute for the corresponding character. All MathML token elements
that accept character data also accept an mglyph in their content.
Beware, however, that the font chosen may not be available to all MathML processors.
A noticeable feature of mathematical and scientific writing is the use of single letters to denote variables and constants in a given context.
The increasing complexity of science has led to the use of certain common alphabet and font variations to provide enough special symbols
of this letter-like type. These denotations are in fact not letters that may be used to make up words with recognized meanings, but individual
carriers of semantics themselves. Writing a string of such symbols is usually interpreted in terms of some composition law, for instance,
multiplication. Many letter-like symbols may be quickly interpreted by specialists in a given area as of a certain mathematical type: for
instance, bold symbols, whether based on Latin or Greek letters, as vectors in physics or engineering, or fraktur symbols as Lie algebras
in part of pure mathematics. Again, in given areas of science, some constants are recognizable letter forms. When you look carefully at the
range of letter-like mathematical symbols in common use today, as the STIX project supported by major scientific and technical publishers
did, you come up with perhaps surprisingly many. A proposal to facilitate mathematical publishing by inclusion of mathematical alphabetic
symbols in the UCS was made, and has been favorably handled.
The additional Mathematical Alphanumeric Symbols provided in Unicode 3.1 have code points in Plane 1, that is, in the first plane with
Unicode values higher than 216 . This plane of characters is also known as the Secondary Multilingual Plane (SMP), in contrast to the Basic
Multilingual Plane (BMP) which was originally the entire extent of Unicode. Support for Plane 1 characters in currently deployed software
is not always reliable, and in particular support for these Mathematical Alphanumeric Symbol characters is not likely to be widespread
until after public fonts covering the characters adopted for mathematics are available.
As discussed in Section 3.2.2, MathML offers an alternative mechanism to specify mathematical alphabetic characters. This alternative
spans the gap between the specification of Unicode 3.1 and its associated deployment in software and fonts. Namely, one uses the
mathvariant attribute on the surrounding token element, which will most commonly be mi. In this section we detail the correspondence
that a MathML processor should apply between certain characters in Plane 0 (BMP) of Unicode, modified by the mathvariant attribute,
and the Plane 1 Mathematical Alphanumeric Symbol characters.
The basic idea of the correspondence is fairly simple. For example, a Mathematical Fraktur alphabet is in Plane 1, and the code point for
Mathematical Fraktur A is U+1D504. Thus using these characters, a typical example might be
<mi>𝔄</mi>
However, an alternative, equivalent markup would be to use the standard A and modify the identifier using the mathvariant attribute, as
follows:
<mi mathvariant="fraktur">A</mi>
304
The exact correspondence between a mathematical alphabetic character and an unstyled character is complicated by the fact that certain
characters that were already present in Unicode are not in the ’expected’ sequence.
Mathematical Alphanumeric Symbol characters should not be used for styled text. For example, Mathematical Fraktur A must not be
used to just select a blackletter font for an uppercase A. Doing this sort of thing would create problems for searching, restyling (e.g. for
accessibility), and many other kinds of processing.
Some characters, although important for the quality of print or alternative rendering, do not have glyph marks that correspond directly to
them. They are called here non-marking characters. Their roles are discussed in Chapter 3 and Chapter 4.
In MathML 2 control of page composition, such as line-breaking, is effected by the use of the proper attributes on the mspace element.
The characters below are not simple spacers. They are especially important new additions to the UCS because they provide textual clues
which can increase the quality of print rendering, permit correct audio rendering, and allow the unique recovery of mathematical semantics
from text which is visually ambiguous.
Character name Unicode Description
⁢ 02062 marks multiplication when it is understood without a mark (Section 3.2.5
⁣ 02063 used as a separator, e.g., in indices (Section 3.2.5
⁡ 02061 character showing function application in presentation tagging (Section 3.2.5
The characters are given with entity names as well as Unicode numbers. To facilitate comprehension of a fairly large list of names, which
totals over 2000 in this case, we offer more than one way to find to a given character. A corresponding full set of entity declarations is in
the DTD in Appendix A. For discussion of entity declarations see that appendix.
The characters are listed by name, and sample glyphs provided for all of them. Each character name is accompanied by a code for a
character grouping chosen from a list given below, a short verbal description, and a Unicode hex code drawn from ISO 10646.
The character listings by alphabetical and Unicode order in Section 6.3.7 are in harmony with the ISO character sets given, in that if some
part of a set is included then the entire set is included.
305
To begin we list separately a few of the special characters which MathML has introduced. These now have Unicode values. Rather like
the non-marking characters above, they provide very useful capabilities in the context of machinable mathematics.
Entity name Unicode Description
ⅅ 02145 D for use in differentials, e.g. within integrals
ⅆ 02146 d for use in differentials, e.g. within integrals
ⅇ 02147 e for use for the exponential base of the natural logarithms
ⅈ 02148 i for use as a square root of -1
The first table offered is a very large ASCII listing of characters considered particularly relevant to mathematics. This is given in Unicode
order. Most, but not all, of these characters have MathML names defined via entity declarations in the DTD. Those that do not are usually
symbols which seem mathematically peripheral, such as dingbats, machine graphics or technical symbols.
A second table lists those characters that do have MathML entity names, ordered alphabetically, with a lower-case letter preceding its
upper-case counterpart.
The tables in this section detail Unicode code points (displayed with 256 code points per table) that have mathematically significant
characters. The sample glyph images link to the table of characters ordered by Unicode given in the previous section. The names of the
blocks are those of the Unicode blocks included in the numerical range given; bracketing indicates glyphs for characters of that type are
not shown in these tables.
306
In addition to the Unicode Characters so far listed, one may use the combining characters U+0338 (/), U+20D2 (|) and U+20E5 (\) to
produce negated or canceled forms of characters. A combining character should be placed immediately after its ’base’ character, with no
intervening markup or space, just as is the case for combining accents.
In principle, the negation characters may be applied to any Unicode character, although fonts designed for mathematics typically have
some negated glyphs ready composed. A MathML renderer should be able to use these pre-composed glyphs in these cases. A compound
character code either represents a UCS character that is already available, as in the case of U+003D+00338 which amounts to U+2260,
or it does not as is the case for U+2202+0338. The common cases of negations, of the latter type, that have been identified are listed in
the table
• cancellations
307
Note that it is the policy of the W3C and of Unicode that if a single character is already defined for what can be achieved with a combining
character, that character must be used instead of the decomposed form. It is also intended that no new single characters representing
what can be done by with existing compositions will be introduced. For further information on these matters see the Unicode Standard
Annex 15, Unicode Normalization Forms [UAX15], especially the discussion of Normalization Form C.
The character listings by alphabetical and Unicode order in Section 6.3.7 have now been brought more into line with the corresponding
ISO character sets than was the case in MathML 1.0, in that if some part of a set is included then the entire set is included. In addition,
the group ISOCHEM has been dropped as more properly the concern of chemists. All the ISO mathematical alphabets are listed, since
there are now Unicode characters to point to, in particular the bold Greek of ISOGRK3. These changes have also been reflected in the
entity declarations in the DTD in Appendix A.
A significant change after MathML 1.0 occurred in the movement toward adoption of more characters for mathematics in the UCS and
availability of public fonts for mathematics. The encoding of characters in the UCS is done jointly by the Unicode Technical Committee and
by ISO/IEC JTC1/SC2/WG2. The process of encoding takes quite some time from the deliberation of first proposals to the final approval.
The characters mentioned in this chapter and listed in the associated tables have been though the various stages of this approval process.
At the time of the preparation of the MathML 2.0 specification [MathML2] the characters relevant to mathematics fell into three categories:
fully accepted characters, characters in final (JTC1) ISO/IEC ballot, and characters before the final ISO/IEC ballot.
• Fully accepted characters included a large number of Latin, Greek, and Cyrillic letters, a large number of Mathematical Op-
erators and symbols, including arrows, and so on. Fully accepted characters were exactly those that are in both Unicode 3.0
[Unicode] and ISO/IEC 10646-1:2000 [ISOIEC10646-1], which are identical code point by code point. Those of obvious special
interest to mathematics numbered over 1,500, depending on how you count.
• In April 2001, the Mathematical Alphanumeric Symbols came up for a final ballot together with a large number of ideographs
and other characters not directly relevant for mathematics. There were just about 1,000 of these. The additions were published
as ISO/IEC 10646-2, and became part of Unicode 3.1.
• Characters relevant to MathML that were before final ballot made up a long list of operators and symbols, including some
special constants and non-marking characters (see Section 6.2.4 and Section 6.3.1). They numbered about 590 in all. With
some small technical improvements and compromises the proposed additions accepted were published as an amendment to
[ISO/IEC 10646-1], and became part of Unicode 3.2. Even with the good will shown to the mathematical community by the
Unicode process a small number of characters of special interest to some may not yet have been included. The obvious solution
of avoiding their use may not satisfy all. For these characters the Unicode mechanism involving Private Use Area codes could
be deployed, in spite of all the dangers of confusion and collisions of conventions this brings with it. However, this is the situation
for which mglyph was introduced. The use of mglyph is recommended to refer to symbols not included in Unicode.
Chapter 7
To be effective, MathML must work well with a wide variety of renderers, processors, translators and editors. This chapter addresses
some of the interface issues involved in generating and rendering MathML. Since MathML exists primarily to encode mathematics in Web
documents, perhaps the most important interface issues are related to embedding MathML in [HTML4] and [XHTML].
There are three kinds of interface issues that arise in embedding MathML in other XML documents. First, MathML must be semantically
integrated. MathML markup must be recognized as valid embedded XML content, and not as an error. This is primarily a question of
managing namespaces in XML [Namespaces].
Second, in the case of HTML/XHTML, MathML rendering must be integrated into browser software. Some browsers already implement
MathML rendering natively, and one can expect more browsers will do so in the future. At the same time, other browsers have developed
infrastructure to facilitate the rendering of MathML and other embedded XML content by third-party software. Using these browser specific
mechanisms generally requires some additional interface markup of some sort to activate them.
Third, other tools for generating and processing MathML must be able to intercommunicate. A number of MathML tools have been or
are being developed, including editors, translators, computer algebra systems, and other scientific software. However, since MathML
expressions tend to be lengthy, and prone to error when entered by hand, special emphasis must be given to insuring that MathML can be
easily generated by user-friendly conversion and authoring tools, and that these tools work together in a dependable, platform and vendor
independent way.
The W3C Math Working Group is committed to providing support to software vendors developing any kind of MathML tool. The Working
Group monitors the public mailing list [email protected], and will attempt to answer questions about the MathML specification. The
Working Group works with MathML developer and user groups. For current information about MathML tools, applications and user support
activities, consult the home page of the W3C Math Working Group.
In particular, the focus here is on the mechanics of embedding MathML in [XHTML]. XHTML is a W3C Recommendation formulating a
family of current and future XML-based document types and modules that reproduce, subset, and extend HTML. While [HTML4] is the
dominant language of the Web at the time of this writing, one may anticipate a shift from HTML to XHTML. Indeed, XHTML can already
be made to render properly in most HTML user agents.
Since MathML and XHTML share a common XML framework, namespaces provide a standard mechanism for embedding MathML in
XHTML. While some popular user agents also support inclusion of MathML directly in HTML as "XML data islands," this is a transitional
strategy. Consult user agent documentation for specific information on its support for embedding XML in HTML.
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>...</mrow>
</math>
When the xmlns attribute is used as a prefix, it declares a prefix which can then be used to explicitly associate other elements and
attributes with a particular namespace.
Example:
<body xmlns:m="http://www.w3.org/1998/Math/MathML">
...
<m:math><m:mrow>...</m:mrow></m:math>
...
</body>
These two methods of namespace declaration can be used together. For example, by using both an explicit document-wide namespace
prefix, and default namespace declarations on individual mathematical elements, it is possible to localize namespace related markup to
the top-level math element.
312
Example:
<body xmlns:m="http://www.w3.org/1998/Math/MathML">
...
<m:math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>...<mrow>
</m:math>
...
</body>
1. When using namespace prefixes with MathML markup, use m: as a conventional prefix for the MathML namespace. Using an
explicit prefix is probably safer for compatibility in current user agents.
2. When using namespace prefixes, pick one and use it consistently within a document.
3. Explicitly declare the MathML namespace on all math elements.
Examples.
<body>
...
<m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
<m:mrow>...<m:mrow>
</m:math>
...
</body>
Or
<body>
...
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>...<mrow>
</math>
...
</body>
Note that these suggestions alone may not be sufficient for creating functional Web pages containing MathML markup. It will generally be
the case that some additional document-wide markup will be required. Additional work may also be required to make all MathML instances
in a document compatible with document-wide declarations. This is particularly true when documents are created by cutting and pasting
MathML expressions, since current tools will probably not be able to query global namespace information.
Consult the W3C Math Working Group home page for compatibility and implementation suggestions for current browsers and other
MathML-aware tools.
MathML specifies a single top-level or root math element, which encapsulates each instance of MathML markup within a document. All
other MathML content must be contained in a math element; equivalently, every valid, complete MathML expression must be contained
in <math> tags. The math element must always be the outermost element in a MathML expression; it is an error for one math element to
contain another.
314
Applications that return sub-expressions of other MathML expressions, for example, as the result of a cut-and-paste operation, should
always wrap them in <math> tags. Ideally, the presence of enclosing <math> tags should be a very good heuristic test for MathML
material. Similarly, applications which insert MathML expressions in other MathML expressions must take care to remove the <math> tags
from the inner expressions.
The math element can contain an arbitrary number of children schemata. The children schemata render by default as if they were
contained in an mrow element.
While general mechanisms for attaching rendering behaviors to elements in XML documents are under development, wide variations in
strategy and level of implementation remain between various existing user agents. Consequently, the remainder of this section describes
attributes and functionality that are desirable for integrating third-party rendering modules with user agents:
overflow In cases where size negotiation is not possible or fails (for example in the case of an extremely long equation), this attribute is
provided to suggest an alternative processing method to the renderer. Allowed values are
scroll The window provides a viewport into the larger complete display of the mathematical expression. Horizontal or vertical
scrollbars are added to the window as necessary to allow the viewport to be moved to a different position.
elide The display is abbreviated by removing enough of it so that the remainder fits into the window. For example, a large
polynomial might have the first and last terms displayed with ‘+ ... +’ between them. Advanced renderers may provide a
facility to zoom in on elided areas.
truncate The display is abbreviated by simply truncating it at the right and bottom borders. It is recommended that some
indication of truncation is made to the viewer.
scale The fonts used to display the mathematical expression are chosen so that the full expression fits in the window. Note
that this only happens if the expression is too large. In the case of a window larger than necessary, the expression is
shown at its normal size within the larger window.
315
altimg This attribute provides a graceful fall-back for browsers that do not support embedded elements. The value of the attribute is an
URL.
alttext This attribute provides a graceful fall-back for browsers that do not support embedded elements or images. The value of the
attribute is a text string.
In browsers where MathML is not natively supported, it is anticipated that MathML rendering will be carried out via embedded objects such
as plug-ins, applets, or helper applications. The direction which has begun emerging for invoking third-party rendering and processing
software is elucidated in the W3C Working Draft "Behavioral Extensions to CSS" [Behaviors].
Behavioral extensions use the linking mechanism of CSS to attach executable components to elements. Typically, the executable compo-
nents involve script code which manipulate the DOM to instantiate other MathML processing components. Using experimental implemen-
tations of behavior extensions in current user agents, it is possible to attach processing components to math elements which then carry
out the rendering of MathML markup in an XHTML page.
Work on on Behavior Extensions to CSS is ongoing at W3C, and existing implementations must be regarded as non-standard at this time.
However, it offers a very promising direction for powerful and flexible invocation of third-party MathML processors.
MIME types [RFC2045], [RFC2046] offer an alternative strategy that can also be used in current user agents to invoke a MathML renderer.
This is primarily useful when referencing separate files containing MathML markup from an embed or object element. [RFC3023] assigns
MathML the MIME type application/mathml+xml. The W3C Math Working Group recommends the standard file extension .mml used
for browser registry.
In MathML 1.0, text/mathml was given as the suggested MIME type. This has been superceded by RFC3023.
Although rendering MathML expressions typically occurs in place in a Web browser, other MathML processing functions take place more
naturally in other applications. Particularly common tasks include opening a MathML expression in an equation editor or computer algebra
system.
At present, there is no standard way of selecting between various applications which might be used to render or process embedded
MathML. As work progresses on coordination between browsers and embedded elements and the Document Object Model [DOM],
providing this kind of functionality should be a priority. Both authors and readers should be able to indicate a preference about what
MathML application to use in a given context. For example, one might imagine that some mouse gesture over a MathML expression
causes a browser to present the reader with a pop-up menu, showing the various kinds of MathML processing available on the system,
and the MathML processors recommended by the author.
316
Since MathML is most often generated by authoring tools, it is particularly important that opening a MathML expression in an editor should
be easy to do and to implement. In many cases, it will be desirable for an authoring tool to record some information about its internal state
along with a MathML expression, so that an author can pick up editing where he or she left off. The MathML specification does not explicitly
contain provisions for recording information about the authoring tool. In some circumstances, it may be possible to include authoring tool
information that applies to an entire document in the form of meta-data; interested readers are encouraged to consult the W3C Metadata
Activity for current information about metadata and resource definition. For encoding authoring tool state information that applies to a
particular MathML instance, readers are referred to the possible use of the semantics element for this purpose Section 4.4.11.2.
In the short term, regardless of the methodology, implementors of embedded MathML processing applications are encouraged to try to
allow for the following kinds of functionality:
• An author wishing to reach an audience as wide as possible might want MathML to be rendered by any available processor.
• An author targeting a specific audience might want to indicate that a particular MathML processor be used.
• A reader might wish to specify which of several available processors installed locally should be used.
In order to fully integrate MathML into XHTML, it should be possible not only to embed MathML in XHTML, but also to embed XHTML
in MathML. However, the problem of supporting XHTML in MathML presents many difficulties. Therefore, at present, the MathML specifi-
cation does not permit any XHTML elements within a MathML expression, although this may be subject to change in a future revision of
MathML.
In most cases, XHTML elements (headings, paragraphs, lists, etc.) either do not apply in mathematical contexts, or MathML already
provides equivalent or better functionality specifically tailored to mathematical content (tables, mathematics style changes, etc.). However,
there are two notable exceptions, the XHTML anchor and image elements. For this functionality, MathML relies on the general XML linking
and graphics mechanisms being developed by other W3C Activities.
7.1.4.1 Linking
MathML has no element that corresponds to the XHTML anchor element a. In XHTML, anchors are used both to make links, and to
provide locations to which a link can be made. MathML, as an XML application, defines links by the use of the mechanism described in
the W3C Recommendation "XML Linking Language" [XLink].
A MathML element is designated as a link by the presence of the attribute xlink:href. To use the attribute xlink:href, it is also
necessary to declare the appropriate namespace. Thus, a typical MathML link might look like:
<mrow xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="sample.xml">
...
</mrow>
317
MathML designates that almost all elements can be used as XML linking elements. The only elements that cannot serve as linking
elements are those such as the sep element, which exist primarily to disambiguate other MathML constructs and in general do not
correspond to any part of a typical visual rendering. The full list of exceptional elements that cannot be used as linking elements is given
in the table below.
MathML elements that cannot be linking elements.
mprescripts none sep
malignmark maligngroup
Note that the XML Linking [XLink] and XML Pointer Language [XPointer] specifications also define how to link into a MathML expressions.
Be aware, however, that such links may or may not be properly interpreted in current software.
7.1.4.2 Images
The img element has no MathML equivalent. The decision to omit a general mechanism for image inclusion from MathML was based
on several factors. However, the main reason for not providing an image facility is that MathML takes great pains to make the notational
structure and mathematical content it encodes easily available to processors, whereas information contained in images is only available
to a human reader looking at a visual representation. Thus, for example, in the MathML paradigm, it would be preferable to introduce new
glyphs via the mglyph element which at a minimum identifies them as glyphs, rather than simply including them as images.
Apart from the introduction of new glyphs, many of the situations where one might be inclined to use an image amount to displaying
labeled diagrams. For example, knot diagrams, Venn diagrams, Dynkin diagrams, Feynman diagrams and commutative diagrams all fall
into this category. As such, their content would be better encoded via some combination of structured graphics and MathML markup.
However, at the time of this writing, it is beyond the scope of the W3C Math Activity to define a markup language to encode such a general
concept as ‘labeled diagrams.’ (See http://www.w3.org/Math for current W3C activity in mathematics and http://www.w3.org/Graphics for
the W3C graphics activity.)
One mechanism for embedding additional graphical content is via the semantics element, as in the following example:
318
<semantics>
<apply>
<intersect/>
<ci>A</ci>
<ci>B</ci>
</apply>
<annotation-xml encoding="SVG1.1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 290 180">
<clipPath id="a">
<circle cy="90" cx="100" r="60"/>
</clipPath>
<circle fill="#AAAAAA" cy="90" cx="190"
r="60" style="clip-path:url(#a)"/>
<circle stroke="black" fill="none" cy="90" cx="100" r="60"/>
<circle stroke="black" fill="none" cy="90" cx="190" r="60"/>
</svg>
</annotation-xml>
<annotation-xml encoding="application/xhtml+xml">
<img xmlns="http://www.w3.org/1999/xhtml" src="intersect.gif" alt="A intersect B"/>
</annotation-xml>
</semantics>
Here, the annotation-xml elements are used to indicate alternative representations of the Content MathML depiction of the intersection
of two sets. The first one is in the ‘Scalable Vector Graphics’ format [SVG1.1] (see [XHTML-MathML-SVG] for the definition of an XHTML
profile integrating MathML and SVG), the second one uses the XHTML img element embedded as an XHTML fragment. In this situation,
a MathML processor can use any of these representations for display, perhaps producing a graphical format such as the image below.
Note that the semantics representation of this example is given in the Content MathML markup, as the first child of the semantics
element. In this regard, it is the representation most analogous to the alt attribute of the img element in XHTML, and would likely be the
best choice for non-visual rendering.
319
math *.[mathsize="small"] {
font-size: 80%
}
This rule sets the CSS font-size properties for all children of the math element that have the mathsize attribute set to small. A MathML
renderer would then query the style engine for the CSS environment, and use the values returned as input to its own layout algorithms.
MathML does not specify the mechanism by which style information is inherited from the environment. However, some suggested rendering
rules for the interaction between properties of the ambient style environment and MathML-specific rendering rules are discussed in
Section 3.2.2, and more generally throughout Chapter 3.
It should be stressed, however, that some caution is required in writing CSS stylesheets for MathML. Because changing typographic
properties of mathematics symbols can change the meaning of an equation, stylesheet should be written in a way such that changes to
document-wide typographic styles do not affect embedded MathML expressions. By using the MathML 2.0 mathematics style attributes
as selectors for CSS rules, this danger is minimized.
320
Another pitfall to be avoided is using CSS to provide typographic style information necessary to the proper understanding of an expression.
Expressions dependent on CSS for meaning will not be portable to non-CSS environments such as computer algebra systems. By using
the logical values of the new MathML 2.0 mathematics style attributes as selectors for CSS rules, it can be assured that style information
necessary to the sense of an expression is encoded directly in the MathML.
MathML 2.0 does not specify how a user agent should process style information, because there are many non-CSS MathML environments,
and because different users agents and renderers have widely varying degrees of access to CSS information. In general, however,
developers are urged to provide as much CSS support for MathML as possible.
7.2 Conformance
Information is increasingly generated, processed and rendered by software tools. The exponential growth of the Web is fueling the
development of advanced systems for automatically searching, categorizing, and interconnecting information. Thus, although MathML
can be written by hand and read by humans, the future of MathML is largely tied to the ability to process it with software tools.
There are many different kinds of MathML processors: editors for authoring MathML expressions, translators for converting to and from
other encodings, validators for checking MathML expressions, computation engines that evaluate, manipulate or compare MathML ex-
pressions, and rendering engines that produce visual, aural or tactile representations of mathematical notation. What it means to support
MathML varies widely between applications. For example, the issues that arise with a validating parser are very different from those for a
equation editor.
In this section, guidelines are given for describing different types of MathML support, and for quantifying the extent of MathML support in
a given application. Developers, users and reviewers are encouraged to use these guidelines in characterizing products. The intention be-
hind these guidelines is to facilitate reuse and interoperability between MathML applications by accurately characterizing their capabilities
in quantifiable terms.
The W3C Math Working Group maintains MathML 2.0 Conformance Guidelines. Consult this document for future updates on conformance
activities and resources.
A valid MathML expression is an XML construct determined by the MathML DTD together with the additional requirements given in this
specification.
Define a ‘MathML processor’ to mean any application that can accept, produce, or ‘roundtrip’ a valid MathML expression. An example of
an application that might round-trip a MathML expression might be an editor that writes a new file even though no modifications are made.
Three forms of MathML conformance are specified:
1. A MathML-input-conformant processor must accept all valid MathML expressions, and faithfully translate all MathML expres-
sions into application-specific form allowing native application operations to be performed.
2. A MathML-output-conformant processor must generate valid MathML, faithfully representing all application-specific data.
321
3. A MathML-roundtrip-conformant processor must preserve MathML equivalence. Two MathML expressions are ‘equivalent’ if
and only if both expressions have the same interpretation (as stated by the MathML DTD and specification) under any circum-
stances, by any MathML processor. Equivalence on an element-by-element basis is discussed elsewhere in this document.
Beyond the above definitions, the MathML specification makes no demands of individual processors. In order to guide developers, the
MathML specification includes advisory material; for example, there are many suggested rendering rules throughout Chapter 3. However,
in general, developers are given wide latitude in interpreting what kind of MathML implementation is meaningful for their own particular
application.
To clarify the difference between conformance and interpretation of what is meaningful, consider some examples:
1. In order to be MathML-input-conformant, a validating parser needs only to accept expressions, and return ‘true’ for expressions
that are valid MathML. In particular, it need not render or interpret the MathML expressions at all.
2. A MathML computer-algebra interface based on content markup might choose to ignore all presentation markup. Provided the
interface accepts all valid MathML expressions including those containing presentation markup, it would be technically correct
to characterize the application as MathML-input-conformant.
3. An equation editor might have an internal data representation that makes it easy to export some equations as MathML but not
others. If the editor exports the simple equations as valid MathML, and merely displays an error message to the effect that
conversion failed for the others, it is still technically MathML-output-conformant.
As the previous examples show, to be useful, the concept of MathML conformance frequently involves a judgment about what parts of
the language are meaningfully implemented, as opposed to parts that are merely processed in a technically correct way with respect
to the definitions of conformance. This requires some mechanism for giving a quantitative statement about which parts of MathML are
meaningfully implemented by a given application. To this end, the W3C Math Working Group has provided a test suite.
The test suite consists of a large number of MathML expressions categorized by markup category and dominant MathML element being
tested. The existence of this test suite makes it possible, for example, to characterize quantitatively the hypothetical computer algebra
interface mentioned above by saying that it is a MathML-input-conformant processor which meaningfully implements MathML content
markup, including all of the expressions in the content markup section of the test suite.
Developers who choose not to implement parts of the MathML specification in a meaningful way are encouraged to itemize the parts they
leave out by referring to specific categories in the test suite.
For MathML-output-conformant processors, there is also a MathML validator accessible over the Web. Developers of MathML-output-
conformant processors are encouraged to verify their output using this validator.
Customers of MathML applications who wish to verify claims as to which parts of the MathML specification are implemented by an
application are encouraged to use the test suites as a part of their decision processes.
322
MathML 2.0 contains a number of MathML 1.x features which are now deprecated. The following points define what it means for a feature
to be deprecated, and clarify the relation between deprecated features and MathML 2.0 conformance.
1. In order to be MathML-output-conformant, authoring tools may not generate MathML markup containing deprecated features.
2. In order to be MathML-input-conformant, rendering/reading tools must support deprecated features if they are to be in confor-
mance with MathML 1.x. They do not have to support deprecated features to be considered in conformance with MathML 2.0.
However, all tools are encouraged to support the old forms as much as possible.
3. In order to be MathML-roundtrip-conformant, a processor need only preserve MathML equivalence on expressions containing
no deprecated features.
MathML 2.0 defines three extension mechanisms: The mglyph element provides a way of displaying glyphs for non-Unicode characters,
and glyph variants for existing Unicode characters; the maction element uses attributes from other namespaces to obtain implementation-
specific parameters; and content markup makes use of the definitionURL attribute to point to external definitions of mathematical
semantics.
These extension mechanisms are important because they provide a way of encoding concepts that are beyond the scope of MathML 2.0,
which allows MathML to be used for exploring new ideas not yet susceptible to standardization. However, as new ideas take hold, they
may become part of future standards. For example, an emerging character that must be represented by an mglyph element today may be
assigned a Unicode codepoint in the future. At that time, representing the character directly by its Unicode codepoint would be preferable.
Because the possibility of future obsolescence is inherent in the use of extension mechanisms to facilitate the discussion of new ideas,
MathML 2.0 makes no conformance requirement concerning the use of extension mechanisms, even when alternative standard markup
is available. For example, using an mglyph element to represent an ’x’ is permitted. However, authors and implementors are strongly
encouraged to use standard markup whenever possible. Similarly, maintainers of documents employing MathML 2.0 extension mecha-
nisms are encouraged to monitor relevant standards activity (e.g. Unicode, OpenMath, etc) and update documents as more standardized
markup becomes available.
If a MathML-input-conformant application receives input containing one or more elements with an illegal number or type of attributes or
child schemata, it should nonetheless attempt to render all the input in an intelligible way, i.e. to render normally those parts of the input
that were valid, and to render error messages (rendered as if enclosed in an merror element) in place of invalid expressions.
MathML-output-conformant applications such as editors and translators may choose to generate merror expressions to signal errors in
their input. This is usually preferable to generating valid, but possibly erroneous, MathML.
323
The MathML attributes described in the MathML specification are necessary for presentation and content markup. Ideally, the MathML
attributes should be an open-ended list so that users can add specific attributes for specific renderers. However, this cannot be done
within the confines of a single XML DTD. Although it can be done using extensions of the standard DTD, some authors will wish to use
non-standard attributes to take advantage of renderer-specific capabilities while remaining strictly in conformance with the standard DTD.
To allow this, the MathML 1.0 specification [MathML1] allowed the attribute other on all elements, for use as a hook to pass on renderer-
specific information. In particular, it was intended as a hook for passing information to audio renderers, computer algebra systems, and
for pattern matching in future macro/extension mechanisms. The motivation for this approach to the problem was historical, looking to
PostScript, for example, where comments are widely used to pass information that is not part of PostScript.
In the meantime, however, the development of a general XML namespace mechanism has made the use of the other attribute obsolete.
In MathML 2.0, the other attribute is deprecated in favor of the use of namespace prefixes to identify non-MathML attributes.
For example, in MathML 1.0, it was recommended that if additional information was used in a renderer-specific implementation for the
maction element (Section 3.6.1), that information should be passed in using the other attribute:
<body xmlns:my="http://www.example.com/MathML/extensions">
...
<maction actiontype="highlight" my:color="#ff0000"> expression </maction>
...
</body>
Note that the intent of allowing non-standard attributes is not to encourage software developers to use this as a loophole for circumventing
the core conventions for MathML markup. Authors and applications should use non-standard attributes judiciously.
Similarly, there are several kinds of functionality that are fairly obvious candidates for future MathML extensions. These include macros,
style sheets, and perhaps a general facility for ‘labeled diagrams’. However, there will no doubt be other desirable extensions to MathML
that will only emerge as MathML is widely used. For these extensions, the W3C Math Working Group relies on the extensible architecture
of XML, and the common sense of the larger Web community.
324
MathML renderers are allowed, but not required, to accept non-standard elements and attributes, and to render them in any way. If a
renderer does not accept some or all non-standard tags, it is encouraged either to handle them as errors as described above for elements
with the wrong number of arguments, or to render their arguments as if they were arguments to an mrow, in either case rendering all
standard parts of the input in the normal way.
Chapter 8
8.1 Introduction
This document extends the Core API of the DOM Level 2 to describe objects and methods specific to MathML elements in documents. The
functionality needed to manipulate basic hierarchical document structures, elements, and attributes will be found in the core document;
functionality that depends on the specific elements defined in MathML will be found in this document.
MathML specifies rules that are invisible to generic XML processors and validators. The fact that MathML DOM objects are required to
respect these rules, and to throw exceptions when those rules are violated, is an important reason for providing a MathML-specific DOM
extension.
There are basically two kinds of additional MathML grammar and syntax rules. One kind involves placing additional criteria on attribute
values. For example, it is not possible in pure XML to require that an attribute value be a positive integer. The second kind of rule specifies
more detailed restrictions on the child elements (for example on ordering) than are given in the DTD. For example, it is not possible in
XML to specify that the first child be interpreted one way, and the second in another. The MathML DOM objects are required to provide
this interpretation.
MathML ignores whitespace occurring outside token elements. Non-whitespace characters are not allowed there. Whitespace occurring
within the content of token elements is ‘trimmed’ from the ends (i.e. all whitespace at the beginning and end of the content is removed),
and ‘collapsed’ internally (i.e. each sequence of 1 or more whitespace characters is replaced with one blank character). The MathML DOM
elements perform this whitespace trimming as necessary. In MathML, as in XML, ‘whitespace’ means blanks, tabs, newlines, or carriage
returns, i.e. characters with hexadecimal Unicode codes U+0020, U+0009, U+000a, or U+000d, respectively.
Parsing MathML
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, discusses the MathML DTD, which forms
a normative part of the specification. Following that, Section A.3, 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.
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 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
<!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) 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:
331
<!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. 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.
A.2.4 SGML
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].
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.
->
333
<!ENTITY % MATHML.NamespaceDecl.attrib
"%MATHML.xmlns.attrib;"
>
<!ENTITY % MATHML.Common.attrib
"%MATHML.NamespaceDecl.attrib;
<!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
334
<!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
335
<!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;"
>
336
<!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
337
<!ENTITY % att-rowalign
"rowalign CDATA #IMPLIED" >
<!ENTITY % att-columnalign
"columnalign CDATA #IMPLIED" >
<!ENTITY % att-columnwidth
"columnwidth CDATA #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" >
338
<!ENTITY % att-framespacing
"framespacing CDATA #IMPLIED" >
<!ENTITY % att-equalrows
"equalrows CDATA #IMPLIED" >
<!ENTITY % att-equalcolumns
"equalcolumns CDATA #IMPLIED" >
<!ENTITY % att-tableinfo
"%att-align;
%att-columnwidth;
%att-alignmentscope;
%att-rowspacing;
%att-columnspacing;
%att-rowlines;
%att-columnlines;
%att-frame;
%att-framespacing;
%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
339
<!ENTITY % att-name
"name CDATA #IMPLIED" >
<!ENTITY % att-alt
"alt CDATA #IMPLIED" >
<!ENTITY % att-index
"index CDATA #IMPLIED" >
<!ENTITY % att-bevelled
"bevelled CDATA #IMPLIED" >
<!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;
340
%att-fontinfo;
>
<!ATTLIST %ms.qname;
%MATHML.Common.attrib;
%att-fontinfo;
%att-lquote;
%att-rquote;
>
<!ENTITY % petoken
"%mspace.qname;" >
<!ELEMENT %mspace.qname; EMPTY >
<!ATTLIST %mspace.qname;
%att-sizeinfo;
%att-linebreak;
%MATHML.Common.attrib;
>
<!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-linethickness;
341
>
<!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;
342
%att-rowspan;
%att-columnspan;
%att-edge;
%att-selection;
>
<!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;
>
<!ENTITY % pscrschema
"%msub.qname; | %msup.qname; | %msubsup.qname; | %munder.qname;
| %mover.qname; | %munderover.qname; | %mmultiscripts.qname;" >
<!ATTLIST %msub.qname;
%MATHML.Common.attrib;
%att-subscriptshift;
343
>
<!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;
>
<!ENTITY % pscreschema
"%mprescripts.qname; | %none.qname;" >
344
<!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;
>
<!ATTLIST %mlabeledtr.qname;
%MATHML.Common.attrib;
%att-rowalign;
>
<!ATTLIST %mtd.qname;
%MATHML.Common.attrib;
%att-rowalign;
%att-columnalign;
345
%att-rowspan;
%att-columnspan;
>
<!ENTITY % plschema
"%pgenschema; | %pscrschema; | %ptabschema;" >
<!ENTITY % peschema
"%maligngroup.qname; | %malignmark.qname;" >
<!ATTLIST %malignmark.qname;
%att-edge; >
<!ENTITY % pactions
"%maction.qname;" >
<!ATTLIST %maction.qname;
%MATHML.Common.attrib;
%att-actiontype;
%att-selection;
>
346
<!ENTITY % PresInCont
"%ptoken; | %petoken; |
%plschema; | %peschema; | %pactions;" >
<!ENTITY % Presentation
"%ptoken; | %petoken; | %pscreschema; |
%plschema; | %peschema; | %pactions;">
<!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
347
<!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;
>
<!ENTITY % cspecial
"%apply.qname; | %reln.qname; |
%lambda.qname;" >
<!ATTLIST %apply.qname;
%MATHML.Common.attrib;
>
348
<!ATTLIST %reln.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %lambda.qname;
%MATHML.Common.attrib;
>
<!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;
>
<!ENTITY % csemantics
"%semantics.qname; | %annotation.qname; |
%annotation-xml.qname;" >
<!ATTLIST %semantics.qname;
349
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ATTLIST %annotation.qname;
%MATHML.Common.attrib;
%att-encoding;
>
<!ATTLIST %annotation-xml.qname;
%MATHML.Common.attrib;
%att-encoding;
>
<!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;
350
>
<!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;
>
<!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; |
351
%eulergamma.qname; |
%infinity.qname;" >
<!ATTLIST %primes.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
>
<!ENTITY % cfuncop1ary
"%inverse.qname; | %ident.qname;|
%domain.qname; | %codomain.qname; |
%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;
>
%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;" >
<!ATTLIST %real.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
%att-encoding;
>
<!ENTITY % carithop1or2ary
"%minus.qname;" >
<!ENTITY % carithop2ary
"%quotient.qname; | %divide.qname; | %power.qname; | %rem.qname;" >
%att-definition;
%att-encoding;
>
<!ENTITY % carithopnary
"%plus.qname; | %times.qname; | %max.qname;
| %min.qname; | %gcd.qname; | %lcm.qname;" >
%att-definition;
%att-encoding;
>
<!ENTITY % carithoproot
"%root.qname;" >
<!ENTITY % clogicopquant
"%exists.qname; | %forall.qname;" >
<!ENTITY % clogicopnary
360
<!ENTITY % clogicop1ary
"%not.qname;" >
<!ENTITY % clogicop2ary
"%implies.qname;" >
%att-definition;
%att-encoding;
>
<!ENTITY % ccalcop
"%log.qname; | %int.qname; | %diff.qname; | %partialdiff.qname; |
%divergence.qname; | %grad.qname; | %curl.qname; | %laplacian.qname;" >
%att-definition;
%att-encoding;
>
<!ENTITY % ccalcop1ary
"%ln.qname;" >
<!ENTITY % csetop1ary
"%card.qname;" >
<!ATTLIST %card.qname;
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetop2ary
"%setdiff.qname;" >
<!ENTITY % csetopnary
"%union.qname; | %intersect.qname; | %cartesianproduct.qname; " >
<!ENTITY % cseqop
"%sum.qname; | %product.qname; | %limit.qname;" >
<!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;
" >
%att-definition;
%att-encoding;
>
%att-encoding;
>
%att-definition;
%att-encoding;
>
<!ENTITY % cstatopnary
"%mean.qname; | %sdev.qname; |
%variance.qname; | %median.qname; |
%mode.qname;" >
<!ENTITY % cstatopmoment
"%moment.qname;" >
<!ENTITY % clalgop1ary
"%determinant.qname; |
%transpose.qname;" >
%att-encoding;
>
<!ENTITY % clalgop2ary
"%vectorproduct.qname;
| %scalarproduct.qname;
| %outerproduct.qname;" >
<!ENTITY % clalgopnary
"%selector.qname;" >
<!ENTITY % cgenrel2ary
"%neq.qname; | %factorof.qname;" >
<!ENTITY % cgenrelnary
"%eq.qname; | %leq.qname; | %lt.qname; | %geq.qname;
| %gt.qname;| %equivalent.qname; | %approx.qname;" >
%MATHML.Common.attrib;
%att-definition;
%att-encoding;
>
<!ENTITY % csetrel2ary
"%in.qname; | %notin.qname; | %notsubset.qname; | %notprsubset.qname;" >
%att-definition;
%att-encoding;
>
<!ENTITY % csetrelnary
"%subset.qname; | %prsubset.qname;" >
%att-encoding;
>
<!ENTITY % cseqrel2ary
"%tendsto.qname;" >
<!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;
376
>
<!ATTLIST %momentabout.qname;
%MATHML.Common.attrib;
>
<!ATTLIST %domainofapplication.qname;
%MATHML.Common.attrib;
>
<!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;" >
<!ENTITY % crel2ary
"%cgenrel2ary; | %csetrel2ary; | %cseqrel2ary;" >
<!ENTITY % crelnary
"%cgenrelnary; | %csetrelnary;" >
<!ENTITY % Content
377
<!ENTITY % ContInPres
"%ci.qname; |%csymbol.qname;| %cn.qname; | %c0ary; |
%apply.qname; | %fn.qname; |
%lambda.qname; | %reln.qname; |
%cconstructor; |
%semantics.qname; |%declare.qname;" >
<!ENTITY % ContentExpression
"(%Content; | %PresInCont;)*" >
<!ENTITY % semanticsContentExpression "%ContentExpression;">
<!ENTITY % PresExpression
"(%Presentation; | %ContInPres;)*" >
<!ENTITY % MathExpression
"(%PresInCont; | %ContInPres;)*" >
<!ENTITY % att-macros
"macros CDATA #IMPLIED" >
<!ENTITY % att-mode
"mode CDATA #IMPLIED" >
<!ENTITY % att-display
"display CDATA #IMPLIED" >
381
<!ENTITY % att-schemalocation
<!ENTITY % att-topinfo
"%MATHML.Common.attrib;
%att-macros;
%att-mode;
%att-display;" >
<!ENTITY % att-baseline
"baseline CDATA #IMPLIED" >
<!ENTITY % att-overflow
"overflow ( scroll | elide | truncate | scale ) ’scroll’" >
<!ENTITY % att-altimg
"altimg CDATA #IMPLIED" >
<!ENTITY % att-alttext
"alttext CDATA #IMPLIED" >
<!ENTITY % att-browif
"%att-type;
%att-name;
%att-height;
%att-width;
%att-baseline;
%att-overflow;
%att-altimg;
%att-alttext;" >
<!ATTLIST %math.qname;
%att-topinfo;
%att-browif; >
->
In its current version the schema does not declare deprecated markup such as the fn element, so documents using such deprecated
features will be declared invalid.
Similarly to the DOCTYPE declaration used in documents, it is possible to link a MathML fragment to the XML Schema, as shown below.
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1998/Math/MathML
http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd">
...
</mml:math>
The xsi:schemaLocation attribute belongs to the XML Schema instance namespace, defined in [XMLSchemas]. The value of the
attribute is a pair of URIs: the first is the MathML namespace URI and the second is the location of the schema for that namespace. The
second URI may be changed to that of a local copy if required.
As the XML Schema specification indicates, the use of the schemaLocation attribute is only a hint for schema processors: validation by
a MathML-aware processor can be performed without requiring that the schemaLocation attribute be declared in the instance. Moreover,
a processor can even ignore or override the specified schema URI, if it is directed to.
Note that the file mathml.xsd at the URI given above is only the main body of the schema, and is one of many files that constitute the
MathML XML Schema. However the complete set of files is available as a gzipped tar archive for local use.
Although validating a MathML fragment with the XML Schema provided performs more checks regarding the structure of the fragment
than the DTD, DTD processing is still necessary if the MathML markup contains entity references for characters and symbols, as XML
Schema does not provide a mechanism for expanding named entities. Therefore the MathML DOCTYPE declaration must still be present
if one wishes to use entities for mathematical symbols, such as ⅆ. An example of a MathML document linking to both
the MathML DTD and the XML Schema is shown below.
<!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">
]>
385
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1998/Math/MathML
http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd">
...
<mml:mo> ⅆ </mml:mo>
...
</mml:math>
The use of character references to represent characters and symbols, such as ⅆ (which is equivalent to ⅆ)
does not necessitate the use of a DOCTYPE declaration.
Appendix B
This presents an informal EBNF grammar that can be used to validate the structure of Content Markup.
• It defines the valid expression trees in content markup. It does not define the rules for attribute validation. That must be done
separately.
• The non-terminal Presentation_tags is a placeholder for a valid presentation element start tag or end tag.
• The string #PCDATA denotes XML parsed character data.
• Symbols beginning with ’_’ (for example _mmlarg) are internal symbols. A recursive grammar is usually required for their
recognition.
• Symbols which are all in lowercase symbols (for example ’ci’) are terminal symbols representing MathML content elements.
• Symbols beginning with Uppercase letters are terminals representating other tokens.
[4] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* valid XML chars */
387
relations
[23] _relation ::= _genrel | _setrel | _seqrel2ary
[24] _genrel ::= _genrel2ary | _genrelnary
[25] _genrel2ary ::= ne
[26] _genrelnary ::= eq | leq | lt | geq | gt
[27] _setrel ::= _seqrel2ary | _setrelnary
[28] _setrel2ary ::= in | notin | notsubset | notprsubset
[29] _setrelnary ::= subset | prsubset
[30] _seqrel2ary ::= tendsto
operators
[31] _operator ::= _funcop | _arithop | _calcop | _vcalcop | _seqop | _trigop | _classop | _statop | _lalgop | _logicop | _setop
functional operators
[32] _funcop ::= _funcop1ary | _funcopnary
[33] _funcop1ary ::= inverse | ident | domain | codomain | image
[34] _funcopnary ::= fn| compose /* general user-defined function is n-ary */
389
arithmetic operators
[35] _arithop ::= _arithop1ary | _arithop2ary | _arithopnary | root
[36] _arithop1ary ::= abs | conjugate | factorial | minus | arg | real | imaginary | floor | ceiling
[37] _arithop2ary ::= quotient | divide | minus | power | rem
[38] _arithopnary ::= plus | times | max | min | gcd | lcm
statistics operators
[44] _statop ::= _statopnary | moment
[45] _statopnary ::= mean | sdev | variance | median | mode
logical operators
[50] _logicop ::= _logicop1ary | _logicopnary | _logicop2ary | _logicopquant
[51] _logicop1ary ::= not
[52] _logicop2ary ::= implies | equivalent | approx | factorof
[53] _logicopnary ::= and | or | xor
[54] _logicopquant ::= forall | exists
390
operator groups
[59] _unaryop ::= _funcop1ary | _arithop1ary | _trigop | _classop | _calcop | _vcalcop | _logicop1ary | _lalgop1ary | _setop1ary
[60] _binaryop ::= _arithop2ary | _setop2ary | _logicop2ary | _lalgop2ary
[61] _naryop ::= _arithopnary | _statopnary | _logicopnary | _lalgopnary | _setopnary | _funcopnary
[62] _specialop ::= _special | ci | csymbol
[63] _ispop ::= int | sum | product
[64] _diffop ::= diff | partialdiff
[65] _binaryrel ::= _genrel2ary | _setrel2ary | _seqrel2ary
[66] _naryrel ::= _genrelnary | _setrelnary
separator
[67] sep ::= _ey(sep)
condition
[73] condition ::= _sg(condition) reln | apply | set _eg(condition)
apply construct
[76] apply ::= _sg(apply) _applybody | _relnbody _eg(apply)
[77] _applybody ::= ( _unaryop _mmlarg ) /* 1-ary ops */
| (_binaryop _mmlarg _mmlarg) /* 2-ary ops */
| (_naryop _mmlarg*) /* n-ary ops, enumerated arguments */
| (_naryop bvar* _domainofapp? _mmlarg) /* n-ary ops, over domain of application */
| (_specialop _mmlarg*) /* special ops can be applied to anything */
| (_specialop bvar* _domainofapp? _mmlarg) /* special ops, over domain of application */
| (_ispop bvar* _domainofapp? _mmlarg) /* integral, sum, product */
| (_diffop bvar* _mmlarg) /* differential ops */
| (log logbase? _mmlarg) /* logs */
| (moment degree? momentabout? _mmlarg*) /* statistical moment */
| (root degree? _mmlarg) /* radicals - default is square-root */
| (limit bvar* lowlimit? condition? _mmlarg) /* limits */
| (_logicopquant bvar* _domainofapp? _mmlarg) /* quantifier with explicit bound variables */
Equations and relations - reln uses lisp-like syntax (like apply) the bvar and condition elements are used to construct a "such that"
or "where" constraint on the relation. Note that reln is deprecated but still valid in MathML2.0.
lambda construct
[82] lambda ::= _sg(lambda) _lambdabody _eg(lambda)
[83] _lambdabody ::= bvar* _domainofapp? _mmlarg /* multivariate lambda calculus */
declare construct
[84] declare ::= _sg(declare) _declarebody _eg(declare)
[85] _declarebody ::= ci (fn | constructor)?
392
constructors
[86] interval ::= _sg(interval) _mmlarg _mmlarg _eg(interval) /* start, end define interval */
[87] set ::= _sg(set) _lsbody _eg(set)
[88] list ::= _sg(list) _lsbody _eg(list)
[89] _lsbody ::= _mmlarg* /* enumerated arguments */
| (bvar* _domainofapp _mmlarg) /* generated arguments */
[90] matrix ::= _sg(matrix) matrixrow* _eg(matrix)
| _sg(matrix) bvar* _domainofapp? _mmlarg _eg(matrix) /* vectors over domain of application */
[91] matrixrow ::= _sg(matrixrow) _mmlarg* _eg(matrixrow) /* allows matrix of operators */
[92] vector ::= _sg(vector) _mmlarg* _eg(vector)
| _sg(vector) bvar* _domainofapp? _mmlarg _eg(vector) /* vectors over domain of application */
[93] piecewise ::= _sg(piecewise) piece* otherwise? _eg(piecewise)
[94] piece ::= _sg(piece) _mmlarg _mmlarg _eg(piece) /* used by piecewise */
[95] otherwise ::= _sg(otherwise) _mmlarg _eg(otherwise) /* used by piecewise */
bound variables
[96] _cisemantics ::= _sg(semantics) _citoken _annot* _eg(semantics)
[97] _citoken ::= ci | _cisemantics
[98] bvar ::= _sg(bvar) _citoken degree? _eg(bvar)
[99] degree ::= _sg(degree) _mmlarg _eg(degree)
math
The mathematical definitions below are not restricted to any one format. There are several reasons for allowing this, nearly all derived
from the fact that it is extremely important to allow authors to make use of existing definitions from the mathematical literature.
1. There is no suitable notation in common use. For example, the mathematical libraries of even the most extensive mathemat-
ical computation systems in use today capture only a small fraction of the mathematical literature and furthermore much of
mathematics is not computational.
2. In most cases, the translation of a mathematical definition into a new notation is an inappropriate use of an author’s energy and
time.
3. The task of designing a new machine readable language suitable for recording semantic descriptions is one that goes substan-
tially beyond the scope of this particular recommendation. It would also overlap substantially with the efforts of such groups as
the OpenMath Consortium (see also the North American OpenMath Initiative, and the European OpenMath Consortium).
The key issues for both archival and computational purposes are that there be a definition and that the author have a mechanism to
specify which definition is intended for a given instance of a notational construct. This requirement is important whether or not there is
an implementation of a particular concept or object in a mathematical computation system. The definition may be as vague as claiming
that, say, F is an unknown but differentiable function from the real numbers to the real numbers, or as complicated as requiring that F be
an elaborate function or operation as defined in a specific research paper. The important thing is that the reader always have a way of
determining how the notation is being used.
394
An author’s decision to use content elements is a decision to use defined objects. To make this easier, default definitions are provided. In
this way, an author need only provide explicit definitions where the usage differs from the default. Where possible the default definitions
have naturally been chosen to reflect common usage.
Definitions are overridden in a particular instance by making use of the definitionURL attribute. The value of this attribute is a URI
(notwithstanding its old-style name) and beyond that its format is unspecified. It may even be the case that the definitionURL’s value is
just a name invented by the author. In that case it serves to warn the reader (and computational systems) that the author is using a private
local definition. It may be the URL of a mathematical paper, or a reference to a traditional source in which the construct is defined. If the
author’s mathematical operator matches exactly an operator in a particular computational system, an appropriate definition might use a
MathML semantics element to establish a correspondence between two encodings. Whatever format is chosen, the only requirement is
that some sort of definition be indicated.
The rest of this appendix provides detailed descriptions of the default semantics associated with each of the MathML content elements.
Since this is exactly the role intended for the encodings under development by the OpenMath Consortium, and one of our goals is to
foster cooperation in such standardization efforts, we have presented the default definitions in a format modeled on OpenMath’s content
dictionaries. While the actual details differ somewhat from the OpenMath specification, the underlying principles are the same.
Several of the definitions provided here refer to one or more of the standard mathematical references Abramowitz and Stegun [Abramowitz1997]
and Standard Mathematical Tables and Formulae [Zwillinger1988].
In the XML source for this appendix each MathML element is described using an XML vocabulary designed for the purpose. Though well
adapted to machine processing the XML form of the definitions is difficult to read for humans. Therefore the text below is composed in a
way automatically derived by XSL transformations (and typesetting in the case of the PDF versions of the MathML specification) from the
XML source, but formatted so that it is much easier to read and comprehend. The conventions employed will be explained just below in
the course of going through the elements of the XML markup in the XML source. The first example definition, but only that one, will be
provided in both the more legible form and in raw XML, so the difference can be appreciated.
The top element is MMLdefinition. The sub-elements identify the various parts of the description and include:
name PCDATA providing the name of the MathML element.
description A CDATA description of the object that an element represents. This will often reference more traditional texts or papers or
existing papers on the Web.
classification Each MathML element must be classified according to its mathematical role.
punctuation Some elements exist simply as an aid to parsing. For example the sep element is used to separate the CDATA
defining a rational number into two parts in a manner that is easily parsed by an XML application. These objects are
referred to as punctuation.
395
descriptor Some elements exist simply to modify the properties of an existing element or mathematical object. For example
the declare construct is used to reset the default attribute values, or to associate a name with a specific instance of an
object. These kinds of elements are referred to as descriptors and the type of the resulting object is the same as that of
element being modified, but with the new attribute values.
function (operator) The traditional mathematical functions and operators are represented in MathML by empty XML elements
such as plus and sin. These function elements can be assigned alternative definitions (indicating, for example, that they
represent operations on elements from some author defined algebra) through use of the definitionURL attribute. They
can be included in expressions on their own such as when discussing the properties of a function, or they can be applied
to arguments using apply. The latter case is referred to as function application. Functions are often classified according
to how they are used. For example the plus element is an n-ary operator. This additional information is captured by the
signature. The signature of a function (see below) describes how it is to be used as a mathematical function inside an
apply element. Each combination of types of function arguments used inside an apply gives rise to an apply element
of a given type.
constant Mathematical constants are generally represented by empty elements and are distinguished from functions by the
fact that they are not used as the first argument of an apply. Their signature is simply the type of the object they represent.
constructor The remaining objects that ‘contain’ sub-elements are all object constructors of some sort or another. They
combine the sub-elements into a compound mathematical object such as a constant, set, list, or a function application.
For example, the lambda element constructs a function definition from a list of variables and an expression. while the
apply element constructs a function application. By function application we mean the result of applying the first element
of the apply (the function) to the zero or more remaining elements (the arguments). A function application represents
an object in the range of the function. For each given combination of type and order of XML children, the signature of a
constructor indicates the type (and sometimes subtype) of the resulting object.
MMLattribute Some of the XML attributes of a MathML content element have a direct impact on the mathematical semantics of the
object. For example the type attribute of the cn element is used to determine what type of constant (integer, real, etc.) is being
constructed. Only those attributes that affect the mathematical properties of an object are listed here and typically these also
appear explicitly in the signature.
signature The signature is a systematic representation that associates the types of different possible combinations of attributes and
function arguments with the type of mathematical object that is constructed. The possible combinations of parameter and
argument types (the left-hand side) each result in an object of some type (the right-hand side). In effect, it describes how to
resolve operator overloading. For constructors, the left-hand side of the signature describes the types of the child elements and
the right-hand side describes the type of object that is constructed. For functions, the left-hand side of the signature indicates
the types of the parameters and arguments that would be expected when it is applied, or used to construct a relation, and the
right-hand side represents the mathematical type of the object constructed by the apply. Modifiers modify the attributes of an
existing object. For example, a symbol might become a symbol of type vector. The signature must be able to record specific
attribute values and argument types on the left, and parameterized types on the right.. The syntax used for signatures is of the
general form:
[<attribute name>=<attribute-value>]( <list of argument types> )
-> <mathematical result type>(<mathematical subtype>)
396
The MMLattributes, if any, appear in the form <name>=<value>. They are separated notationally from the rest of the arguments
by square brackets. The possible values are usually taken from an enumerated list, and the signature is usually affected
by selection of a specific value. For the actual function arguments and named parameters on the left, the focus is on the
mathematical types involved. The function argument types are presented in a syntax similar to that used for a DTD, with the
one main exception. The types of the named parameters appear in the signature as <elementname>=<type> in a manner
analogous for that used for attribute values. For example, if the argument is named (e.g. bvar) then it is represented in the
signature by an equation as in:
comment These elements contain only PCDATA and can occur as a child of the MMLdefinition at any point.
C.2.1.1 MMLdefinition: cn
Description The cn element is used to encode numerical constants. The mathematical type of number is given as an attribute. The
default type is "real". Numbers such as e-notation, rational and complex, require two parts for a complete specification. The
parts of such a number are separated by an empty sep element.
Many of the commonly occurring numeric constants such as π have their own elements.
See also Section 4.4.1.1.
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type integer | rational | complex-cartesian | complex-polar | real | e-notation | MathMLtype real
base integer between 2 and 36 10
Signature [type=integer](numstring) -> constant(integer)
[base=base-value](numstring) -> constant(integer)
[type=rational](numstring,numstring) -> constant(rational)
[type=complex-cartesian](numstring,numstring) -> constant(complex)
[type=e-notation](numstring,numstring) -> constant(e-notation)
[type=complex-polar](numstring,numstring) -> constant(rational)
[definitionURL=definition](numstring*) -> constant(user-defined)
Property <apply><eq/><cn base="16"> A </cn><cn> 10 </cn></apply>
Property <apply><eq/><cn base="16"> B </cn><cn> 11 </cn></apply>
Property <apply><eq/><cn base="16"> C </cn><cn> 12 </cn></apply>
Property <apply><eq/><cn base="16"> D </cn><cn> 13 </cn></apply>
Property <apply><eq/><cn base="16"> E </cn><cn> 14 </cn></apply>
Property <apply><eq/><cn base="16"> F </cn><cn> 15 </cn></apply>
Example <cn> 245 </cn>
Example <cn type="integer"> 245 </cn>
Example <cn type="integer" base="16"> A </cn>
Example <cn type="rational"> 245 <sep/> 351 </cn>
Example <cn type="complex-cartesian"> 1 <sep/> 2 </cn>
Example <cn> 245 </cn>
398
Example <apply><eq/>
<cn type="e-notation"> 2 <sep/> 5 </cn>
<apply><times/><cn>2</cn><apply><power/><cn>10</cn><cn>5</cn></apply></apply>
</apply>
C.2.1.2 MMLdefinition: ci
Description This element constructs an identifier (symbolic name). The type attribute is used to indicate the type of object being specified.
By default, the type is real.
See also Section 4.4.1.2.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type constant | matrix | set | vector | list | MathMLtype real
Signature (string|mmlpresentation) -> symbol
[type=typename](string|mmlpresentation) -> symbol(typename)
Example <ci> xyz </ci>
Example <ci type="vector"> v </ci>
Description The csymbol element allows a writer to introduce new objects into MathML. The objects are linked to external definitions by
means of the definitionURL attribute and encoding attribute. The csymbol element becomes the "name" of the new object. The
new objects are typically either constants or functions.
See also Section 4.4.1.3.
Classification constant function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature [definitionURL=definition](string|mmlpresentation) -> defined_symbol
[type=typename](string|mmlpresentation) -> defined_symbol(typename)
Example <csymbol definitionURL=".../mydefinitionofPi">π</csymbol>
Description This is the MathML constructor for function application. The first argument is applied to the remaining arguments. It may be
the case that some of the child elements are named elements. (See the signature.)
See also Section 4.4.2.1.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function,anything*) -> apply
Example <apply><plus/>
<ci>x</ci>
<cn>1</cn>
</apply>
Example <apply><sin/>
<ci>x</ci>
</apply>
Description This constructor has been deprecated. All uses of reln are replaced by apply.
This is the MathML 1.0 constructor for expressing a relation between two or more mathematical objects. The first argument
indicates the type of "relation" between the remaining arguments. (See the signature.) No assumptions are made about the
truth value of such a relation. Typically, the relation is used as a component in the construction of some logical assertion.
Relations may be combined into sets, etc. just like any other mathematical object.
See also Section 4.4.2.2.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function,anything*) -> apply
Example
Description No examples of deprecated constructions are provided.
C.2.2.3 MMLdefinition: fn
This was the MathML 1.0 constructor for building new functions. Its role was to identify a general MathML content object as a
function in such a way that it could have a definition and be used in a function context such as in apply and declare. This is
now accomplished through the use of definitionURL and the fact that declare and apply allow any content element as their first
argument.
See also Section 4.4.2.3.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (anything) -> function
[definitionURL=functiondef](anything) ->function
Example
Description No examples of deprecated constructions are provided.
Description This is the MathML constructor element for building an interval on the real line. While an interval can be expressed by
combining relations appropriately, they occur here explicitly because of the frequency of their use.
See also Section 4.4.2.4.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
type closed | open | open-closed | closed-open closed
Signature [type=interval-type](algebraic,algebraic) -> interval(interval-type)
Example
Example
Example
Example
401
Description This MathML element is applied to a function in order to construct a new function that is to be interpreted as the inverse
function of the original function. For a particular function F, inverse(F) composed with F behaves like the identity map on the
domain of F and F composed with inverse(F) should be an identity function on a suitably restricted subset of the Range of F.
The MathML definitionURL attribute should be used to resolve notational ambiguities, or to restrict the inverse to a particular
domain or to make it one-sided.
See also Section 4.4.2.5.
Classification operator
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> function
[definitionURL=URI](function) -> function(definition)
Property
Description ForAll( y, such y in domain( f^(-1) ), f( f^(-1)(y) ) = y
<apply><forall/>
<bvar><ci>y</ci></bvar>
<bvar><ci type="function">f</ci></bvar>
<condition>
<apply><in/>
<ci>y</ci>
<apply><csymbol definitionURL="domain"><mtext>Domain</mtext></csymbol>
<apply><inverse/><ci type="function">f</ci></apply>
</apply>
</apply>
</condition>
<apply><eq/>
<apply><ci type="function">f</ci>
<apply><apply><inverse/><ci type="function">f</ci></apply>
<ci>y</ci>
</apply>
</apply>
<ci>y</ci>
</apply>
</apply>
402
Example <apply><inverse/>
<sin/>
</apply>
Example <apply><inverse definitionURL="www.example.com/MathML/Content/arcsin"/>
<sin/>
</apply>
Description This is the MathML infix constructor used to sub-divide PCDATA into separate components. This is used in the description
of a multi-part number such as a rational or a complex number.
See also Section 4.4.2.6.
Classification punctuation
Example <cn type="complex-polar">123<sep/>456</cn>
Example <cn>123</cn>
Description This is the MathML constructor for building conditions. A condition differs from a relation in how it is used. A relation is simply
an expression, while a condition is used as a predicate to place conditions on bound variables.
You can build compound conditions by applying operators such as "and" or "or" .
See also Section 4.4.2.7.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (apply) -> predicate
(boolean) -> predicate
Example <condition>
<apply><lt/>
<apply><power/><ci>x</ci><cn>5</cn></apply>
<cn>3</cn>
</apply>
</condition>
Example
403
Description This is the MathML constructor for associating default attribute values and values with mathematical objects. For example V
may be an identifier declared to be a vector (has the attribute of being a vector), or V may be a name that stands for a particular
vector.
The attribute values of the declare statement itself become the default attribute values of the first argument of the declare.
If there is a second argument, the first argument becomes an alias for the second argument and it also assumes all the
properties of the second argument . For example, a ci identifier v, declared to be the vector (1,2,3) would appear in the type
style of a vector, and would have a norm which is the norm of (1,2,3)
See also Section 4.4.2.8.
Classification modifier
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLtype none
nargs number of arguments for an object of operator *
occurrence infix | prefix prefix
Signature [(attributename=attributevalue)*](anything) -> [(attributename=attributevalue)*](anything)
[(attributename=attributevalue)*](anything,anything) -> [(attributename=attributevalue)*](anything)
(anything,anything) -> (anything)
Example <declare>
<ci>y</ci>
<apply><plus/><ci>x</ci><cn>3</cn></apply>
</declare>
Example <declare type="vector"> <ci> V </ci> </declare>
Example <declare type="vector">
<ci> V </ci>
<vector><cn> 1 </cn><cn> 2 </cn><cn> 3 </cn></vector>
</declare>
Description This is the operation of lambda calculus that constructs a function from an expression and a variable. Lambda is an n-ary
function, where all but an optional domain of application and the last argument are bound variables and the last argument is
an expression possibly involving those variables. The lambda function can be viewed as the inverse of function application.
For example, Lambda( x, F ) is written as \lambda x [F] in the lambda calculus literature. The expression F may contain x but
the full lambda expression is regarded to be free of x. A computational application receiving a MathML lambda expression
should not evaluate x or test for x. Such an application may apply the lambda expression as a function to arguments in which
case any result that is computed is computed through parameter substitutions into F.
404
Note that a lambda expression on an arbitrary function applied to a the bound variable is equivalent to that arbitrary function. A
domain of application can be used to restrict the defined function to a specific domain.
See also Section 4.4.2.9.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (bvar*,anything) -> function
(domainofapp,function) -> function
(bvar+,domainofapp,anything) -> function
Property
Description ForAll( F, lambda(x,F(x)) = F )
<apply><forall/>
<bvar><ci>F</ci></bvar>
<apply><eq/>
<lambda>
<bvar><ci>x</ci></bvar>
<apply><ci>F</ci><ci>x</ci></apply>
</lambda>
<ci>F</ci>
</apply>
</apply>
Example <lambda>
<bvar><ci>x</ci></bvar>
<apply><sin/><apply><plus/><ci> x </ci><cn> 3 </cn></apply></apply>
</lambda>
Description This is the MathML constructor for composing functions. In order for a composition to be meaningful, the range of the first
function should be the domain of the second function, etc. . However, since no evaluation takes place in MathML, such a
construct can safely be used to make statements such as that f composed with g is undefined.
The result is a new function whose domain is the domain of the first function and whose range is the range of the last function
and whose definition is equivalent to applying each function to the previous outcome in turn as in:
(f @ g )( x ) == f( g(x) ).
This function is often denoted by a small circle infix operator.
See also Section 4.4.2.10.
405
Classification function
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function*) -> function
Property
Description ForAll( x, (f@g)(x) = f(g(x) )
<apply><forall/>
<bvar><ci>x</ci></bvar><bvar><ci>f</ci></bvar><bvar><ci>g</ci></bvar>
<apply><eq/>
<apply><apply><compose/><ci>f</ci><ci>g</ci></apply>
<ci>x</ci>
</apply>
<apply><ci>f</ci><apply><ci>g</ci><ci>x</ci></apply></apply>
</apply>
</apply>
Example
Description The use of fn is deprecated. Use type="function" instead.
<apply><compose/>
<ci type="function"> f </ci>
<ci type="function"> g </ci>
<sin/>
</apply>
<apply><forall/>
<bvar><ci>x</ci></bvar>
<apply><eq/>
<apply><ident/><ci>x</ci></apply>
<ci>x</ci>
</apply>
</apply>
Example <apply><eq/>
<apply><compose/>
<ci type="function"> f </ci>
<apply><inverse/><ci type="function"> f </ci></apply>
</apply>
<ident/>
</apply>
Description The domain element denotes the domain of a given function, which is the set of values over which it is defined.
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.2.12.
Classification function
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> set
Example <apply><eq/>
<apply><domain/><ci>f</ci></apply>
<reals/>
</apply>
Description The codomain (range) element denotes the codomain of a given function, which is a set containing all values taken by the
function. The codomain may contain additional points which are not realized by applying the the function to elements of the
domain.
407
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.2.13.
Classification function
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> set
Property
Description ForAll( y, Exists(x,y =f(x)), member(y,codomain(f)) )
Example <apply><eq/>
<apply><codomain/><ci>f</ci></apply>
<rationals/>
</apply>
Description The image element denotes the image of a given function, which is the set of values taken by the function. Every point in
the image is generated by the function applied to some point of the domain.
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.2.14.
Classification function
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> set
Property
Description ForAll( x, x in image(f), ThereExists(y,f(y)=x) )
Example <apply><eq/>
<apply><image/><sin/></apply>
<interval><cn>-1</cn><cn> 1</cn></interval>
</apply>
Example
408
Description The domainofapplication element is a qualifier used by a number of defined functions. It denotes the domain over which
a given function is being applied. Special cases of this qualifier can be abbreviated using one of interval condition or an
(lowlimit,uplimit) pair. It is constructed from a set or the name of a set.
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.2.15.
Classification function
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set) -> domain
(identifier) -> domain
Example <apply><int/>
<domainofapplication><ci>C</ci></domainofapplication>
<ci>f </ci>
</apply>
Example
Description The piecewise, piece, and otherwise elements are used to support ’piecewise’ declarations of the form H(x) = 0 if x less than
0, H(x) = 1 otherwise. The piece and otherwise elements describe evaluation rules. If no rule applies or if more than one rule
applies but they give different answers then the expression is undefined.
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.2.16.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (piece*, otherwise?) -> algebraic
(piece*, otherwise?) -> anything
Property
Description ForAll( x, x in domain(f), the evaluation rules collectively produce at most one value in codomain(f) )
409
Example <piecewise>
<piece><cn> 0</cn><apply><lt/><ci> x</ci> <cn> 0</cn></apply></piece>
<otherwise><ci>x</ci></otherwise>
</piecewise>
Example
Description The value of the abs function evaluated at x can be written as:
<piecewise>
<piece>
<apply><minus/><ci>x</ci></apply>
<apply><lt/><ci> x</ci><cn> 0</cn></apply>
</piece>
<piece>
<cn>0</cn>
<apply><eq/><ci>x</ci><cn>0</cn></apply>
</piece>
<piece>
<ci>x</ci>
<apply><gt/><ci>x</ci><cn>0</cn></apply>
</piece>
</piecewise>
Description The piece element is used to construct the conditionally defined values as part of a piecewise object.
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.8.1.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (algebraic, boolean) -> piece
(anything, boolean) -> piece
Example <piecewise>
<piece><cn>0</cn><apply><lt/><ci> x</ci> <cn> 0</cn></apply></piece>
<otherwise><ci>x</ci></otherwise>
</piecewise>
410
Description The otherwise element is used to describe the value of a piecewise construct when none of the conditions of the associated
pieces are satisfied.
To override the default semantics for this element, or to associate a more specific definition, use the definitionURL and encoding
attributes
See also Section 4.4.8.1.
Classification constructor
MMLattribute
Name Value Default
definitionURL a URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (algebraic) -> otherwise
(anything) -> otherwise
Example <piecewise>
<piece><cn> 0</cn><apply><lt/><ci> x</ci> <cn> 0</cn></apply></piece>
<otherwise><ci>x</ci></otherwise>
</piecewise>
Description quotient is the binary function used to represent the operation of integer division. quotient(a,b) denotes q such that a = b*q+r,
with |r| less than |b| and a*r non-negative.
See also Section 4.4.3.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature (integer, integer) -> integer
Property
Description ForAll( [a,b], b != 0, a = b*quotient(a,b) + rem(a,b) )
411
<apply><forall/>
<bvar><ci>a</ci></bvar>
<bvar><ci>b</ci></bvar>
<condition><apply><neq/><ci>b</ci><cn>0</cn></apply></condition>
<apply><eq/>
<ci>a</ci>
<apply><plus/>
<apply><times/>
<ci>b</ci>
<apply><quotient/><ci>a</ci><ci>b</ci></apply>
</apply>
<apply><rem/><ci>a</ci><ci>b</ci></apply>
</apply>
</apply>
</apply>
Example <apply><quotient/>
<ci> a </ci>
<ci> b </ci>
</apply>
Example <apply>
<quotient/>
<cn>5</cn>
<cn>4</cn>
</apply>
Description This is the unary operator used to construct factorials. Factorials are defined by n! = n*(n-1)* ... * 1
See also Section 4.4.3.2.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature (algebraic) -> algebraic
(integer) -> integer
Property
Description ForAll( n, n \gt 0, n! = n*(n-1)! )
412
<apply><forall/>
<bvar><ci>n</ci></bvar>
<condition><apply><gt/><ci>n</ci><cn>0</cn></apply></condition>
<apply><eq/>
<apply><factorial/><ci>n</ci></apply>
<apply><times/>
<ci>n</ci>
<apply><factorial/>
<apply><minus/><ci>n</ci><cn>1</cn></apply>
</apply>
</apply>
</apply>
</apply>
Property
Description 0! = 1
<apply>
<apply><factorial/><cn>0</cn></apply>
<cn>1</cn>
</apply>
Example <apply><factorial/>
<ci>n</ci>
</apply>
Description This is the binary MathML operator that is used indicate the mathematical operation a "divided by" b.
See also Section 4.4.3.3.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature (algebraic, algebraic) -> algebraic
(complex, complex) -> complex
(real, real) -> real
(rational, rational) -> rational
413
<apply><forall/>
<bvar><ci>a</ci></bvar>
<apply><eq/>
<apply><divide/><ci> a </ci><cn> 0 </cn>
<notanumber/>
</apply>
Property
Description ForAll( a, a!= 0, a/a = 1 )
<apply><forall/>
<bvar><ci>a</ci></bvar>
<condition><apply><neq/><ci>a</ci><cn>0</cn></apply></condition>
<apply><eq/>
<apply><divide/><ci>a</ci><ci>a</ci></apply>
<cn>1</cn>
</apply>
</apply>
Example <apply><divide/>
<ci> a </ci>
<ci> b </ci>
</apply>
Description This is the n-ary operator used to represent the maximum of a set of elements. The elements may be listed explicitly or they
may be described by a domainofapplication, for example, the maximum over all x in the set A. The domainofapplication is often
abbreviated by placing a condition directly on a bound variable.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
414
Example
Description Maximum of a finite listing of elements
<apply><max/><cn>2</cn><cn>3</cn><cn>5</cn></apply>
Example
Description Max(y^3, y in (0,1))
<apply>
<max/>
<bvar><ci>y</ci></bvar>
<condition>
<apply><in/><ci>y</ci><interval><cn>0</cn><cn>1</cn></interval></apply>
</condition>
<apply><power/><ci> y</ci><cn>3</cn></apply>
</apply>
Description This is the n-ary operator used to represent the minimum of a set of elements. The elements may be listed explicitly or they
may be described by a condition, e.g., the minimum over all x in the set A.
The elements must all be comparable if the result is to be well defined.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature (algebraic*) -> algebraic
(domainofapp,function) -> algebraic
(bvar+,domainofapp,anything) -> algebraic
Example
415
<apply><min/><cn>2</cn><cn>3</cn><cn>5</cn></apply>
Example
Description min(y^2, y in (0,1))
<apply>
<min/>
<bvar><ci>y</ci></bvar>
<condition>
<apply><in/><ci>y</ci><interval><cn>0</cn><cn>1</cn></interval></apply>
</condition>
<apply><power/><ci> y</ci><cn>2</cn></apply>
</apply>
<apply><forall/>
<bvar><ci> x </ci></bvar>
<apply><eq/>
<apply><minus/><ci> x </ci><ci> x </ci></apply>
<cn>0</cn>
</apply>
</apply>
Example <apply><minus/>
<cn>3</cn>
<cn>5</cn>
</apply>
Example <apply><minus/>
<cn>3</cn>
</apply>
Description This is the n-ary addition operator of an algebraic structure. Ordinarily, the operands are provided explicitly. As an n-ary
operation the operands can also be generated by allowing a function or expression vary over a domain of application though
the sum element is normally used for that purpose. If no operands are provided, the expression represents the additive identity.
If one operand, a, is provided the expression evaluates to "a". If two or more operands are provided, the expression represents
the (semi) group element corresponding to a left associative binary pairing of the operands. The meaning of mixed operand
types not covered by the signatures shown here are left up to the target system.
To use different type coercion rules different from those indicated by the signatures, use the definitionURL attribute to identify
a new definition.
See also Section 4.4.3.6.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature [type=MathMLtype](anything*) -> MathMLtype
(set*) -> set
(multiset*) -> multiset
(algebraic*) -> algebraic
(real*) -> real
(complex*) -> complex
417
<apply><eq/>
<apply><plus/></apply>
<cn>0</cn>
</apply>
Property
Description a sum of one term is equal to itself
<apply><forall/>
<bvar><ci>a</ci></bvar>
<apply><eq/>
<apply><plus/><ci>a</ci></apply>
<cn>a</cn>
</apply>
</apply>
Property
Description Commutativity
<apply><forall/>
<bvar><ci>a</ci></bvar>
<bvar><ci>b</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>a</ci><reals/></apply>
<apply><in/><ci>b</ci><reals/></apply>
</apply>
</condition>
<apply><eq/>
<apply><plus/><ci>a</ci><ci>b</ci></apply>
<apply><plus/><ci>b</ci><ci>a</ci></apply>
</apply>
</apply>
418
Example <apply><plus/>
<cn>3</cn>
</apply>
Example <apply><plus/>
<cn>3</cn>
<cn>5</cn>
</apply>
Example <apply><plus/>
<cn>3</cn>
<cn>5</cn>
<cn>7</cn>
</apply>
Description This is the binary powering operator that is used to construct expressions such as a "to the power of" b. In particular, it is the
operation for which a "to the power of" 2 is equivalent to a * a.
See also Section 4.4.3.7.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature (algebraic, algebraic) -> algebraic
(complex, complex) -> complex
(real, real) -> complex
(rational, integer) -> rational
(integer, integer) -> rational
[type=MathMLtype](anything,anything) -> MathMLtype
Property
Description ForAll( a, a!=0, a^0=1 )
419
<apply><forall/>
<bvar><ci>a</ci></bvar>
<condition><apply><neq/><ci>a</ci><cn>0</cn></apply></condition>
<apply><eq/>
<apply><power/><ci>a</ci><cn>0</cn></apply>
<cn>1</cn>
</apply>
</apply>
Property
Description ForAll( a, a^1=a )
<apply><forall/>
<bvar><ci>a</ci></bvar>
<apply><eq/>
<apply><power/><ci>a</ci><cn>1</cn></apply>
<ci>a</ci>
</apply>
</apply>
Property
Description ForAll( a, 1^a=1 )
<apply><forall/>
<bvar><ci>a</ci></bvar>
<apply><eq/>
<apply><power/><cn>1</cn><ci>a</ci></apply>
<cn>1</cn>
</apply>
</apply>
Example <apply><power/><cn>2</cn><ci>x</ci></apply>
Example <apply><power/><ci> x </ci><cn> 3 </cn></apply>
Description This is the binary operator used to represent the integer remainder a mod b. For arguments a and b, such that a = b*q + r
with |r| < |b| it represents the value r.
See also Section 4.4.3.8.
Classification function
420
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature (integer, integer) -> integer
[type=MathMLtype](MathMLtype,MathMLtype) -> MathMLtype
Property
Description rem(a, 0) is undefined
Property
Description ForAll( [a,b], b!=0, a = b*quotient(a,b) + rem(a,b))
<apply><forall/>
<bvar><ci>a</ci></bvar>
<bvar><ci>b</ci></bvar>
<condition><apply><neq/><ci>b</ci><cn>0</cn></apply></condition>
<apply><eq/>
<ci>a</ci>
<apply><plus/>
<apply><times/>
<ci>b</ci>
<apply><quotient/><ci>a</ci><ci>b</ci></apply>
</apply>
<apply><rem/>
<ci>a</ci>
<ci>b</ci>
</apply>
</apply>
</apply>
Example <apply><rem/><ci> a </ci><ci> b </ci></apply>
421
Property
Description ForAll( [a,b,c], Associative, a*(b*c)=(a*b)*c ), associativity
Property
Description multiplicative identity
<apply><forall/>
<bvar><ci>a</ci></bvar>
<apply><eq/>
<apply><times/><cn>1</cn><ci>a</ci></apply>
<ci>a</ci>
</apply>
</apply>
Property
Description a*0=0
422
Property
Description Commutative property
<apply><forall/>
<bvar><ci>a</ci></bvar>
<bvar><ci>b</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>a</ci><reals/></apply>
<apply><in/><ci>b</ci><reals/></apply>
</apply>
</condition>
<apply><eq/>
<apply><times/><ci>a</ci><ci>b</ci></apply>
<apply><times/><ci>b</ci><ci>a</ci></apply>
</apply>
</apply>
Property
Description a*0=0
<apply><forall/>
<bvar><ci>a</ci></bvar>
<apply><eq/>
<apply><times/><cn>0</cn><ci>a</ci></apply>
<cn>0</cn>
</apply>
</apply>
Example <apply>
<times/>
<ci> a </ci>
<ci> b </ci>
</apply>
Description This is the binary operator used to construct the nth root of an expression. The first argument "a" is the expression and the
second object "n" denotes the root, as in ( a ) ^ (1/n)
423
Example
Description nth root of a
<apply><root/>
<ci> n </ci>
<ci> a </ci>
</apply>
Description This is the n-ary operator used to construct an expression which represents the greatest common divisor of its arguments.
If no argument is provided, the gcd is 0. If one argument is provided, the gcd is that argument.
See also Section 4.4.3.11.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature [type=MathMLtype](MathMLtype*) ->MathMLtype
(integer*) -> integer
(domainofapp,function) -> algebraic
(bvar+,domainofapp,algebraic) -> algebraic
Property <apply><forall/>
424
<bvar><ci>x</ci></bvar>
<apply><eq/>
<apply><gcd/>
<ci>x</ci>
<cn>1</cn>
</apply>
<cn>1</cn>
</apply>
</apply>
Example <apply><gcd/>
<cn>12</cn>
<cn>17</cn>
</apply>
Example <apply><gcd/>
<cn>3</cn>
<cn>5</cn>
<cn>7</cn>
</apply>
Description This is the n-ary logical "and" operator. It is used to construct the logical expression which were it to be evaluated would
have a value of "true" when all of its operands have a truth value of "true", and "false" otherwise.
See also Section 4.4.3.12.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType boolean
Signature (boolean*) -> boolean
Property
Description ForAll( p, (true and p = p) )
Property
Description ForAll( [p,q], (p and q = q and p) )
425
Property
Description x and not(x) = false
Example <apply><and/>
<ci>p</ci>
<ci>q</ci>
</apply>
C.2.3.14 MMLdefinition: or
Description The is the n-ary logical "or" operator. The constructed expression has a truth value of true if at least one of its arguments is
true.
See also Section 4.4.3.13.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType boolean
Signature (boolean*) -> boolean
[type="boolean"](symbolic*) -> boolean
Example <apply>
<or/>
<ci> a </ci>
<ci> b </ci>
</apply>
Description The is the n-ary logical "xor" operator. The constructed expression has a truth value of true if an odd number of its arguments
are true.
See also Section 4.4.3.14.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType boolean
426
Property
Description x xor not(x) = true
Example <apply>
<xor/>
<ci> a </ci>
<ci> b </ci>
</apply>
Description This is the unary logical "not" operator. It negates the truth value of its single argument. e.g., not P is true when P is false
and false when P is true.
See also Section 4.4.3.15.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType boolean
Signature (boolean) -> boolean
[type="boolean"](algebraic) -> boolean
Example <apply>
<not/>
<ci> a </ci>
</apply>
Description This is the binary "implies" operator. It is used to construct the logical expression "A implies B".
See also Section 4.4.3.16.
Classification function
427
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType boolean
Signature (boolean,boolean) -> boolean
Property
Description false implies x
Example <apply>
<implies/>
<ci> A </ci>
<ci> B </ci>
</apply>
Example
Description This is the MathML operator that is used to assert existence, as in "There exists an x such that x is real and x is positive."
- The first argument indicates the bound variable,
- The second optional argument places conditions on that bound variable.
- The last argument is the expression that is asserted to be true.
See also Section 4.4.3.18.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType boolean
Signature (bvar+,boolean) -> boolean
(bvar+,domainofapp,anything) -> boolean
Example <apply><exists/>
<bvar><ci>x</ci></bvar>
<apply><eq/>
<apply><ci>f</ci>
<ci>x</ci>
</apply>
<cn>0</cn>
</apply>
</apply>
429
Example <apply>
<exists/>
<bvar><ci> x </ci></bvar>
<domainofapplication>
<ci type="set">C</ci>
</domainofapplication>
<apply>
<eq/>
<apply>
<power/><ci>x</ci><cn>2</cn>
</apply>
<cn>4</cn>
</apply>
</apply>
Description A unary operator which represents the absolute value of its argument. In the complex case this is often referred to as the
modulus.
See also Section 4.4.3.19.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature (algebraic) -> algebraic
(real) -> real
(complex) -> real
Property
Description for all x and y, abs(x) + abs(y) >= abs(x+y)
Example <apply><abs/><ci>x</ci></apply>
Description The unary "conjugate" arithmetic operator is used to represent the complex conjugate of its argument.
See also Section 4.4.3.20.
430
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (algebraic) -> algebraic
(complex) -> complex
Example <apply><conjugate/>
<apply><plus/>
<ci> x </ci>
<apply><times/>
<imaginaryi/>
<ci> y </ci>
</apply>
</apply>
</apply>
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature (complex) -> real
Property
Description ForAll( [x,y], x in R, Y in R, real(x+i*y)=x) )
<apply><forall/>
<bvar><ci>x</ci></bvar>
<bvar><ci>y</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>x</ci><reals/></apply>
<apply><in/><ci>y</ci><reals/></apply>
</apply>
</condition>
<apply><eq/>
<apply><real/>
<apply><plus/>
<ci> x </ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
<ci> x </ci>
</apply>
</apply>
Example <apply><real/>
<apply><plus/>
<ci> x </ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
Description The unary function used to construct an expression which represents the imaginary part of a complex number.
See also Section 4.4.3.23.
432
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType real
Signature (complex) -> real
Property
Description ForAll( [x,y], Imaginary(x + i*y) = y )
<apply><forall/>
<bvar><ci type="real"> x </ci></bvar>
<bvar><ci type="real"> y </ci></bvar>
<apply><eq/>
<apply><imaginary/>
<apply><plus/>
<ci type="real"> x </ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
<ci type="real"> y </ci>
</apply>
</apply>
Example <apply><imaginary/>
<apply><plus/>
<ci> x </ci>
<apply><times/><imaginaryi/><ci>y</ci></apply>
</apply>
</apply>
Description This n-ary operator is used to construct an expression which represents the least common multiple of its arguments. If no
argument is provided, the lcm is 1. If one argument is provided, the lcm is that argument. The least common multiple of x and
1 is x.
See also Section 4.4.3.24.
Classification function
433
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature [type=MathMLtype](MathMLtype*) -> MathMLtype
(integer*) -> integer
(algebraic*) -> algebraic
(domainofapp,function) -> algebraic
(bvar+,domainofapp,anything) -> algebraic
Property
Description ForAll( x, lcm(x,1)=x )
<apply><forall/>
<bvar><ci>x</ci></bvar>
<apply><eq/>
<apply><lcm/><ci>x</ci><cn>1</cn></apply>
<ci>x</ci>
</apply>
</apply>
Example <apply><lcm/>
<cn>12</cn>
<cn>17</cn>
</apply>
Example <apply><lcm/>
<cn>3</cn>
<cn>5</cn>
<cn>7</cn>
</apply>
Description The ceiling element is used to denote the round-up (towards +infinity) operator.
See also Section 4.4.3.26.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature (real) -> integer
[type=MathMLtype](algebraic) -> algebraic
Property
Description ForAll( x, ceiling(x) >= x )
435
<apply><forall/>
<bvar><ci>x</ci></bvar>
<apply><geq/>
<apply><ceiling/>
<ci>x</ci>
</apply>
<ci>x</ci>
</apply>
</apply>
Example <apply> <ceiling/>
<ci> a </ci>
</apply>
C.2.4 Relations
C.2.4.1 MMLdefinition: eq
Description This n-ary function is used to indicate that two or more quantities are equal. There must be at least two arguments.
See also Section 4.4.4.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real,real+) -> boolean
(boolean, boolean+) -> boolean
(set,set+) -> set
(multiset,multiset+) -> multiset
(domainofapp,function) -> boolean
(bvar+,domainofapp,anything) -> boolean
Property
Description Symmetric
Property
Description Transitive
Property
Description Reflexive
436
Example <apply><eq/>
<cn type="rational">2<sep/>4</cn><cn type="rational">1<sep/>2</cn>
</apply>
Example <apply><eq/><ci type="set">A</ci><ci type="set">B</ci></apply>
Example <apply><eq/><ci type="multiset">A</ci><ci type="multiset">B</ci></apply>
Example <apply><neq/><cn>3</cn><cn>4</cn></apply>
C.2.4.3 MMLdefinition: gt
Description This n-ary function represents the relation "greater than" which returns true if each argument in turn is greater than the one
following it. There must be at least two arguments.
See also Section 4.4.4.3.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real,real+) -> boolean
(domainofapp,function) -> boolean
(bvar+,domainofapp,algebraic) -> boolean
437
Property
Description Transitive
Example <apply><gt/><cn>3</cn><cn>2</cn></apply>
C.2.4.4 MMLdefinition: lt
Description This n-ary function represents the relation "less than" which returns true if each argument in turn is less than the one
following it. There must be at least two arguments.
See also Section 4.4.4.4.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real,real+) -> boolean
( domainofapp , function ) -> boolean
( bvar+ , domainofapp , algebraic) -> boolean
Property
Description Transitive
Example <apply><lt/><cn>2</cn><cn>3</cn><cn>4</cn></apply>
Property
Description Reflexive
Example <apply><geq/><cn>4</cn><cn>3</cn><cn>3</cn></apply>
Description This n-ary function represents the relation "less than or equal to" which returns true if each argument in turn is less or equal
to the one following it. There must be at least two arguments.
See also Section 4.4.4.6.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real,real+) -> boolean
( domainofapp , function ) -> boolean
( bvar+ , domainofapp , arithmetic ) -> boolean
Property
Description Transitive
Property
Description Reflexive
Example <apply><leq/><cn>3</cn><cn>3</cn><cn>4</cn></apply>
Description This element represents the n-ary logical equivalence function in which two boolean expressions are said to be equivalent if
their truth values are equal for all choices of values of the boolean variables appearing in them.
See also Section 4.4.4.7.
Classification function
439
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (boolean,boolean+) -> boolean
(domainofapp,function) -> boolean
(bvar+,domainofapp,boolean) -> boolean
Property
Description Symmetric
Property
Description Transitive
Property
Description Reflexive
Example <apply><equivalent/>
<ci>a</ci>
<apply><not/>
<apply<not/><ci>a</ci></apply>
</apply>
<apply>
Property
Description Symmetric
Property
Description Transitive
Property
Description Reflexive
Description This is the binary MathML operator that is used indicate the mathematical relationship a "is a factor of" b. This relationship
is true just if b mod a = 0
See also Section 4.4.4.9.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type MathMLType integer
Signature (integer, integer) -> boolean
Property
Description ForAll( [a,b], a and b integers, a divides b if there is an integer c such that a*c = b )
Example <apply><factorof/>
<ci> a </ci>
<ci> b </ci>
</apply>
Example <apply><int/>
<bvar><ci>x</ci></bvar>
<domainofapplication>
<ci type="set"> D </ci>
</domainofapplication>
<apply>
<ci type="function"> f </ci>
<bvar><ci>x</ci></bvar>
</apply>
</apply>
Description This occurs in two forms, one for functions and one for expressions involving a bound variable.
For expressions in the bound variable x, the expression to be differentiated follows the bound variable.
If there is only one argument, a function, the result of applying diff to that function is a new function, the derivative of f, often
written as f’ .
See also Section 4.4.5.2.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type function | algebraic algebraic
Signature (bvar,algebraic) -> algebraic
(function) -> function
Property
Description ForAll( [x,n], n!=0, diff( x^n , x ) = n*x^(n-1) )
Example
Description diff( sin(x) , x ) = cos(x)
443
<apply><eq/>
<apply><diff/>
<bvar><ci>x</ci></bvar>
<apply><sin/><ci>x</ci></apply>
</apply>
<apply><cos/><ci>x</ci></apply>
</apply>
Example
Description diff(x^2,x)
<apply><diff/>
<bvar><ci>x</ci></bvar>
<apply><power/><ci>x</ci><cn>2</cn></apply>
</apply>
Example
Description diff(f(x),x)
<apply><diff/><bvar><ci> x </ci></bvar>
<apply><ci type="function"> f </ci><ci> x </ci></apply>
</apply>
Example
Description diff(sin) = cos
<apply><eq/><apply><diff/><sin/></apply><cos/></apply>
Description This symbol is used to express partial differentiation. It occurs in two forms: one form corresponding to the differentiation
of algebraic expressions (often displayed using the Leibnitz notation), and the other to express partial derivatives of actual
functions (often expressed as D_1, 2 f )
For the first form, the arguments are the bound variables followed by the algebraic expression. The result is an algebraic
expression. Repetitions of the bound variables are indicated using the degree element. The total degree is indicated by use of
a degree element at the top level.
For the second form, there are two arguments: a list of indices indicating by position which coordinates are involved in con-
structing the partial derivatives, and the actual function. The coordinates may be repeated.
See also Section 4.4.5.3.
Classification function
444
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type function | algebraic algebraic
Signature (bvar+,degree?,algebraic) -> algebraic
(vector,function) -> function
Property
Description ForAll( [x,y], partialdiff( x * y , x ) = partialdiff(x,x)*y + partialdiff(y,x)*x )
Property
Description ForAll( [x,a,b], partialdiff( a + b , x ) = partialdiff(a,x) + partialdiff(b,x) )
Example
Description d^k/(dx^m dy^n) f(x,y)
<apply><partialdiff/>
<bvar><ci> x </ci><degree><ci> m </ci></degree></bvar>
<bvar><ci> y </ci><degree><ci> n </ci></degree></bvar>
<degree><ci>k</ci></degree>
<apply><ci type="function"> f </ci>
<ci> x </ci>
<ci> y </ci>
</apply>
</apply>
Example
Description d^2/(dx dy) f(x,y)
<apply><partialdiff/>
<bvar><ci> x </ci></bvar>
<bvar><ci> y </ci></bvar>
<apply><ci type="function"> f </ci>
<ci> x </ci>
<ci> y </ci>
</apply>
</apply>
Example
Description D_1,1,3(f)
445
<apply><partialdiff/>
<list><cn>1</cn><cn>1</cn><cn>3</cn></list>
<ci type="function">f</ci>
</apply>
Description This is a qualifier. It is typically used to construct a lower limit on a bound variable. Upper and lower limits are used in some
integrals and sums as alternative way of describing the interval. It can also be used with user defined functions created using
csymbol. Use a vector argument to convey limits on more than one bound variable.
See also Section 4.4.5.4.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (algebraic) -> lowlimit
Example
Description See C.2.5.1
Description This is a qualifier. It is typically used to construct a upper limit on a bound variable. Upper and lower limits are used in some
integrals and sums as alternative way of describing the interval. It can also be used with user defined functions created using
csymbol. Use a vector argument to convey limits on more than one bound variable.
See also Section 4.4.5.5.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (algebraic) -> uplimit
Example
Description See C.2.5.1
446
Description The bvar element is a special qualifier element that is used to denote the "bound variable" of an operation. A variable that
is to be bound is placed in this container. For example, in an integral it specifies the variable of integration. In a derivative, it
indicates which variable with respect to which a function is being differentiated. When the bvar element is used to qualify a
derivative, the bvar element may contain a child degree element that specifies the order of the derivative with respect to that
variable. The bvar element is also used for the internal variable in sums and products and may be used with user defined
functions.
See also Section 4.4.5.6.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (symbol,degree?) -> bvar
Example <apply><forall/><bvar><ci>x</ci></bvar>
<condition><apply><in/><ci>x</ci><reals/></apply></condition>
<apply><eq/><apply><minus/><ci>x</ci><ci>x</ci></apply><cn>0</cn></apply>
</apply>
Example <apply><diff/>
<bvar><ci>x</ci><degree><cn>2</cn></degree></bvar>
<apply><power/><ci>x</ci><cn>5</cn></apply>
</apply>
Description The degree element is a qualifer used by some MathML schemata to specify that, for example, a bound variable is repeated
several times.
See also Section 4.4.5.7.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (algebraic) -> degree
Example <apply><diff/>
<bvar><ci>x</ci><degree><cn>2</cn></degree></bvar>
<apply><power/><ci>x</ci><cn>5</cn></apply>
</apply>
447
Description The gradient element is the vector calculus gradient operator, often called grad. It represents the operation that constructs a
vector of partial derivatives vector( df/dx_1 , df/dx_2, ... df/dx_n )
See also Section 4.4.5.9.
Classification function
448
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> vector(function)
(bvar+,algebraic) -> vector(algebraic)
Example <apply><grad/><ci type="function"> f</ci></apply>
Example
Example <apply>
<curl/>
<ci type="vector" > f</ci>
</apply>
Description The set element is the container element that constructs a set of elements. They may be explicitly listed, or defined by
expressions or functions evaluated over a domain of application. The domain of application may be given explicitly, or provided
by means of one of the shortcut notations.
See also Section 4.4.6.1.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type set | multiset set
Signature (anything*) -> set
(domainofapp,function) -> set
(bvar+,domainofapp,anything) -> set
Example <set>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</set>
450
Example <set>
<bvar><ci> x </ci></bvar>
<condition>
<apply><lt/>
<ci> x </ci>
<cn> 5 </cn>
</apply>
</condition>
<ci>x</ci>
</set>
Example <set>
<domainofapplication>
<ci type="set">C</ci>
</domainofapplication>
<ci type="function">f</ci>
</set>
Description The list element is the container element that constructs a list of elements. They may be explicitly listed, or defined by
expressions or functions evaluated over a domain of application. The domain of application may be given explicitly, or provided
by means of one of the shortcut notations.
See also Section 4.4.6.2.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
order lexicographic | numeric none
Signature (anything*) -> list
[order=ordering](anything*) -> list
(domainofapp,function) -> list
(bvar+,domainofapp,anything) -> list
[order=ordering](domainofapp,function) -> list(ordering)
[order=ordering](bvar*,domainofapp,anything) -> list(ordering)
451
Example <list>
<ci> a </ci>
<ci> b </ci>
<ci> c </ci>
</list>
Example <list order="numeric">
<bvar><ci> x </ci></bvar>
<condition>
<apply><lt/>
<ci> x </ci>
<cn> 5 </cn>
</apply>
</condition>
</list>
Description This is the set-theoretic operation of union of sets. This n-ary operator generalizes to operations on multisets by tracking
the frequency of occurrence of each element in the union. As an n-ary operation the operands can be generated by allowing a
function or expression to range over the elements of a domain of application. Thus it accepts qualifiers.
See also Section 4.4.6.3.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set*) -> set
(multiset*) -> multiset
(domainofapp, set_valued_function) -> set
(bvar+,domainofapp,set_valued_expression) -> set
(domainofapp, multiset_valued_function) -> multiset
(bvar+,domainofapp,multiset_valued_expression) -> multiset
Example <apply><union/>
<ci> A </ci>
<ci> B </ci>
</apply>
452
Description This n-ary operator indicates the intersection of sets. If the two sets are multisets, the result is a multiset. in which each
element is present with a repetition determined by the smallest number of occurrences in any of the sets (multisets) that occur
as arguments.
See also Section 4.4.6.4.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set*) -> set
(multiset*) -> multiset
(domainofapp, set_valued_function) -> set
(bvar+,domainofapp,set_valued_expression) -> set
(domainofapp, multiset_valued_function) -> multiset
(bvar+,domainofapp,multiset_valued_expression) -> multiset
Example <apply><intersect/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
C.2.6.5 MMLdefinition: in
Description The in element is the relational operator used for a set-theoretic inclusion (’is in’ or ’is a member of’).
See also Section 4.4.6.5.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (anything,set) -> boolean
(anything,multiset) -> boolean
Example <apply><in/>
<ci> a </ci>
<ci type="set"> A </ci>
</apply>
453
Description The notin element is the relational operator element used to construct set-theoretic exclusion (’is not in’ or ’is not a member
of’).
See also Section 4.4.6.6.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (anything,set) -> boolean
(anything,multiset) -> boolean
Example <apply><notin/>
<ci> a </ci>
<ci type="set"> A </ci>
</apply>
Description The subset element is the n-ary relational operator element for a set-theoretic containment (’is a subset of’).
See also Section 4.4.6.7.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set*) -> boolean
(multiset*) -> boolean
(domainofapp,function) -> boolean
(bvar+,domainofapp,algebraic) -> boolean
Example <apply><subset/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
454
Example <apply>
<subset/>
<subset/>
<bvar><ci type="set">S</ci></bvar>
<condition>
<apply><in/>
<ci>S</ci>
<ci type="list">T</ci>
</apply>
</condition>
<ci>S</ci>
</apply>
Description The prsubset element is the n-ary relational operator element for set-theoretic proper containment (’is a proper subset of’).
See also Section 4.4.6.8.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set*) -> boolean
(multiset*) -> boolean
(domainofapp,function) -> boolean
(bvar+,domainofapp,boolean) -> boolean
Example <apply><prsubset/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
455
Example <apply>
<prsubset/>
<bvar><ci type="integer">i</ci></bvar>
<lowlimit><cn>0</cn></lowlimit>
<uplimit><cn>10</cn></uplimit>
<apply><selector/>
<ci type="vector_of_sets">S</ci>
<ci>i</ci>
</apply>
</apply>
Description The notsubset element is the relational operator element for the set-theoretic relation ’is not a subset of’.
See also Section 4.4.6.9.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set, set) -> boolean
(multiset,multiset) -> boolean
Example <apply><notsubset/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
Description The notprsubset element is the element for constructing the set-theoretic relation ’is not a proper subset of’.
See also Section 4.4.6.10.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set,set) -> boolean
(multiset,multiset) -> boolean
456
Example <apply><notprsubset/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
Description The setdiff element is the operator element for a set-theoretic difference of two sets.
See also Section 4.4.6.11.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set,set) -> set
(multiset,multiset) -> multiset
Example <apply><setdiff/>
<ci type="set"> A </ci>
<ci type="set"> B </ci>
</apply>
Description The card element is the operator element for deriving the size or cardinality of a set. The size of a multset is simply the total
number of elements in the multiset.
See also Section 4.4.6.12.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set) -> scalar
(multiset) -> scalar
Example <apply><eq/>
<apply><card/><ci> A </ci></apply>
<ci> 5 </ci>
</apply>
457
Description The cartesianproduct element is the operator for a set-theoretic cartesian product of two (or more) sets. The cartesian
product of multisets produces a multiset since n-tuples may be repeated if elements in the base sets are repeated.
See also Section 4.4.6.13.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (set*) -> set
(multiset*) -> multiset
Example <apply><cartesianproduct/>
<ci> A </ci>
<ci> B </ci>
</apply>
Example <apply><cartesianproduct/>
<reals/>
<reals/>
<reals/>
</apply>
Description The sum element denotes the summation operator. It may be qualified by providing a domainofapplication. This may be
provided using one of the shorthand notations for domainofapplication such as an uplimit,lowlimit pair or a condition or an
interval. The index for the summation is specified by a bvar element.
See also Section 4.4.7.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function ) -> function
(bvar,algebraic ) -> algebraic
(domainofapp,function) -> function
(bvar+,domainofapp,algebraic) -> algebraic
458
Example <apply><sum/>
<bvar> <ci> x </ci></bvar>
<lowlimit><ci> a </ci></lowlimit>
<uplimit><ci> b </ci></uplimit>
<apply><ci> f </ci><ci> x </ci></apply>
</apply>
Example <apply><sum/>
<bvar><ci> x </ci></bvar>
<condition><apply> <in/><ci> x </ci><ci type="set">B</ci></apply></condition>
<apply><ci type="function"> f </ci><ci> x </ci></apply>
</apply>
Description The product element denotes the product operator. It may be qualified by providing a domainofapplication. This may be
provided using one of the shorthand notations for domainofapplication such as an uplimit,lowlimit pair or a condition or an
interval. The index for the product is specified by a bvar element.
See also Section 4.4.7.2.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> function
(bvar,algebraic) -> algebraic
(domainofapp,function) -> function
(bvar+,domainofapp,algebraic) -> algebraic
Example <apply><product/>
<bvar><ci> x </ci></bvar>
<lowlimit> <ci> a </ci></lowlimit>
<uplimit><ci> b </ci></uplimit>
<apply><ci type="function"> f </ci><ci> x </ci></apply>
</apply>
Example <apply><product/>
<bvar><ci> x </ci></bvar>
<condition><apply> <in/><ci> x </ci><ci type="set">B</ci></apply></condition>
<apply><ci> f </ci><ci> x </ci></apply>
</apply>
459
Description The limit element represents the operation of taking a limit of a sequence. The limit point is expressed by specifying a lowlimit
and a bvar, or by specifying a condition on one or more bound variables.
See also Section 4.4.7.3.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (bvar+, lowlimit, uplimit, algebraic) -> real
(bvar+, condition , algebraic) -> real
Example <apply>
<limit/>
<bvar><ci> x </ci></bvar>
<lowlimit><cn> 0 </cn></lowlimit>
<apply><sin/><ci> x </ci></apply>
</apply>
Example <apply><limit/>
</condition>
<apply><sin/><ci>x</ci></apply>
</apply>
Description The tendsto element is used to express the relation that a quantity is tending to a specified value.
See also Section 4.4.7.4.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type above | below | all | MathMLType all
Signature (algebraic,algebraic) -> tendsto
[ type=direction ](algebraic,algebraic) -> tendsto(direction)
Example <apply><tendsto type="above"/>
<apply><power/><ci> x </ci><cn> 2 </cn></apply>
<apply><power/><ci> a </ci><cn> 2 </cn></apply>
</apply>
460
Example <apply><tendsto/>
<vector><ci> x </ci><ci> y </ci></vector>
<vector>
<apply><ci type="function">f</ci><ci> x </ci><ci> y </ci></apply>
<apply><ci type="function">g</ci><ci> x </ci><ci> y </ci></apply>
</vector>
</apply>
Description This element represents the exponentiation function as described in Abramowitz and Stegun, section 4.2. It takes one
argument.
See also Section 4.4.8.2.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property <apply><eq/>
<apply><exp/><cn>0</cn></apply>
<cn>1</cn>
</apply>
Property
Description for all k if k is an integer then e^(z+2*pi*k*i)=e^z
C.2.8.2 MMLdefinition: ln
Description This element represents the ln function (natural logarithm) as described in Abramowitz and Stegun, section 4.1. It takes one
argument.
See also Section 4.4.8.3.
Classification function
461
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description -pi lt Im ln x leq pi
Example <apply><log/>
<logbase><cn> 3 </cn></logbase>
<ci> x </ci>
</apply>
Example <apply><log/><ci>x</ci></apply>
Property
Description sin(integer*Pi) = 0
Property
Description sin(x) = (exp(ix)-exp(-ix))/2i
Property
Description cos(integer*Pi+Pi/2) = 0
463
Property
Description cos(x) = (exp(ix)+exp(-ix))/2
Example <apply><cos/><ci>x</ci></apply>
Description This element represents the tan function as described in Abramowitz and Stegun, section 4.3. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description tan(integer*Pi) = 0
Property
Description tan(x) = sin(x)/cos(x)
Example <apply><tan/><ci>x</ci></apply>
Description This element represents the sec function as described in Abramowitz and Stegun, section 4.3. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description sec(x) = 1/cos(x)
464
Example <apply><sec/><ci>x</ci></apply>
Example <apply><csc/><ci>x</ci></apply>
Property
Description cot(x) = cos(x)/sin(x)
465
Property
Description cot A = 1/tan A
Example <apply><cot/><ci>x</ci></apply>
Example <apply><sinh/><ci>x</ci></apply>
Example <apply><cosh/><ci>x</ci></apply>
466
Description This element represents the tanh function as described in Abramowitz and Stegun, section 4.5. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description tanh A = sinh A / cosh A
Example <apply><tanh/><ci>x</ci></apply>
Description This element represents the sech function as described in Abramowitz and Stegun, section 4.5. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description sech A = 1/cosh A
Example <apply><sech/><ci>x</ci></apply>
Description This element represents the csch function as described in Abramowitz and Stegun, section 4.5. It takes one argument.
See also Section 4.4.8.1.
Classification function
467
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description csch A = 1/sinh A
Example <apply><csch/><ci>x</ci></apply>
Description This element represents the coth function as described in Abramowitz and Stegun, section 4.5. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description coth A = 1/tanh A
Example <apply><coth/><ci>x</ci></apply>
Description This element represents the arcsin function which is the inverse of the sin function as described in Abramowitz and Stegun,
section 4.4. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
468
Example <apply><arcsin/><ci>x</ci></apply>
Example <apply><arccos/><ci>x</ci></apply>
Example <apply><arctan/><ci>x</ci></apply>
Example <apply><arccosh/><ci>x</ci></apply>
Example <apply><arccot/><ci>x</ci></apply>
Example <apply><arccoth/><ci>x</ci></apply>
Description This element represents the arccsc function as described in Abramowitz and Stegun, section 4.4. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description arccsc(z) = -i ln(i/z + \sqrt(1 - 1/z^2))
Example <apply><arccsc/><ci>x</ci></apply>
Description This element represents the arccsch function as described in Abramowitz and Stegun, section 4.6. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
471
Example <apply><arccsch/><ci>x</ci></apply>
Example <apply><arcsec/><ci>x</ci></apply>
Example <apply><arcsech/><ci>x</ci></apply>
Description This element represents the arcsinh function as described in Abramowitz and Stegun, section 4.6. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description arcsinh z = ln(z + \sqrt(1+z^2))
Example <apply><arcsinh/><ci>x</ci></apply>
Description This element represents the arctanh function as described in Abramowitz and Stegun, section 4.6. It takes one argument.
See also Section 4.4.8.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (real) -> real
(complex) -> complex
Property
Description arctanh(z) = - i * arctan(i * z)
Example <apply><arctanh/><ci>x</ci></apply>
C.2.9 Statistics
473
Description The mean value of a set of data, or of a random variable. See CRC Standard Mathematical Tables and Formulae, editor:
Dan Zwillinger, CRC Press Inc., 1996, section 7.7.1
See also Section 4.4.9.1.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (random_variable) -> scalar
(scalar+) -> scalar
Example <apply><mean/><ci type="discrete_random_variable"> X </ci></apply>
Example <apply><mean/><cn>3</cn><cn>4</cn><cn>3</cn><cn>7</cn><cn>4</cn></apply>
Example <apply><mean/><ci> X </ci></apply>
Description This element represents a function denoting the sample standard deviation of its arguments. The arguments are either all
data, or a discrete random variable, or a continuous random variable.
For numeric data at least two values are required and this is the square root of (the sum of the squares of the deviations from
the mean of the arguments, divided by the number of arguments less one). For a "discrete_random_variable", this is the square
root of the second moment about the mean. This further generalizes to identifiers of type continuous_random_variable.
See CRC Standard Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC Press Inc., 1996, (7.7.11) section 7.7.1.
See also Section 4.4.9.2.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (scalar,scalar+) -> scalar
(discrete_random_variable) -> scalar
(continuous_random_variable) -> scalar
Example <apply><sdev/><cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn></apply>
Example <apply><sdev/>
<ci type="discrete_random_variable"> X </ci>
</apply>
474
Description This symbol represents a function denoting the variance of its arguments, that is, the square of the standard deviation. The
arguments are either all data in which case there are two or more of them, or an identifier of type discrete_random_variable, or
continuous_random_variable. See CRC Standard Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC Press Inc.,
1996, [7.1.2] and [7.7].
See also Section 4.4.9.3.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (scalar,scalar+) -> scalar
(descrete_random_variable) -> scalar
(continuous_random_variable) -> scalar
Example <apply><variance/><cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn></apply>
Example <apply><variance/>
<ci type="discrete_random_variable"> X </ci>
</apply>
Description This symbol represents an n-ary function denoting the median of its arguments. That is, if the data were placed in ascending
order then it denotes the middle one (in the case of an odd amount of data) or the average of the middle two (in the case of an
even amount of data). See CRC Standard Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC Press Inc., 1996,
section 7.7.1
See also Section 4.4.9.4.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (scalar+) -> scalar
Example <apply><median/><cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn></apply>
Description This represents the mode of n data values. The mode is the data value that occurs with the greatest frequency. See CRC
Standard Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC Press Inc., 1996, section 7.7.1
See also Section 4.4.9.5.
475
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA
Signature (scalar+) -> scalar
Example <apply><mode/><cn>3</cn><cn>4</cn><cn>2</cn><cn>2</cn></apply>
Description This symbol is used to denote the i’th moment of a set of data, or a random variable. Unless otherwise specified, the moment
is about the origin. For example, the i’th moment of X about the origin is given by moment( i , 0 , x ).
The first argument indicates which moment about that point is being specified. For the i’th moment the first argument should
be i. The second argument specifies the point about which the moment is computed. It is either an actual point ( e.g. 0 ), or a
function which can be used on the data to compute that point. To indicate a central moment, specify the element "mean". The
third argument is either a discrete or continuous random variable, or the start of a sequence of data. If there is a sequence of
data then the i’th moment is (1/n) (x_1^i + x_2^i + ... + x_n^i).
See CRC Standard Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC Press Inc., 1996, section 7.7.1
See also Section 4.4.9.6.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (degree,momentabout?,scalar+) -> scalar
(degree,momentabout?,discrete_random_variable) -> scalar
(degree,momentabout?,continuous_random_variable) -> scalar
Example
Description The third moment about the point p of a discrete random variable
<apply> <moment/>
<degree><cn>3</cn></degree>
<momentabout><ci>p</ci></momentabout>
<ci>X</ci>
</apply>
Example
Description The 3rd central moment of a set of data.
476
<apply><moment/>
<degree><cn>3</cn></degree>
<momentabout><mean/></momentabout>
<cn>6</cn><cn>4</cn><cn>2</cn><cn>2</cn><cn>5</cn>
</apply>
Example
Description The 3rd central moment of a discrete random variable.
<apply><moment/>
<degree><cn>3</cn></degree>
<momentabout><mean/></momentabout>
<ci type="discrete_random_variable"> X </ci>
</apply>
Example
Description The 3rd moment about the origin of a set of data.
<apply><moment/>
<degree><cn>3</cn></degree>
<momentabout><cn>0</cn></momentabout>
<cn>6</cn><cn>4</cn><cn>2</cn><cn>2</cn>
</apply>
Description This qualifier element is used to identify the point about which a moment is to be computed. It may be an explicit point, or it
may identify a method by which the point is to be computed from the given data. For example the moment may be computed
about the mean by specifying the element used for the mean.
See also Section 4.4.9.7.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (function) -> method
(scalar) -> point
Example
Description The third moment about the point p of a discrete random variable
477
<apply> <moment/>
<degree> <cn> 3 </cn> </degree>
<momentabout> <ci> p </ci> </momentabout>
<ci> X </ci>
</apply>
Example
Description The 3rd central moment of a set of data.
<apply><moment/>
<degree><cn> 3 </cn></degree>
<momentabout><mean/></momentabout>
<cn>6</cn><cn>4</cn><cn>2</cn><cn>2</cn><cn>5</cn>
</apply>
Description A vector is an ordered n-tuple of values representing an element of an n-dimensional vector space. The "values" are all
from the same ring, typically real or complex. Where orientation is important, such as for pre or post multiplication by a matrix
a vector is treated as if it were a column vector and its transpose is treated a row vector. The type attribute can be used to
explicitly specify that a vector is a "row" vector. See CRC Standard Mathematical Tables and Formulae, editor: Dan Zwillinger,
CRC Press Inc., 1996, [2.4]
See also Section 4.4.10.1.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type row | column | MathMLType column
Signature (real*) -> vector(type=real)
[type=vectortype]((anything)*) -> vector(type=vectortype)
(domainofapp,function) -> vector
(bvar+,domainofapp,anything) -> vector
Property
Description vector=column_vector
Property
478
Property
Description matrix * column_vector = column_ vector
Property
Description row_vector*matrix = row_vector
Property
Description transpose(vector) = row_vector
Property
Description transpose(column_vector) = row_vector
Property
Description transpose(row_vector) = column_vector
Property
Description distributive over scalars
Property
Description associativity.
Property
Description Matrix * column vector
Property
Description row vector * Matrix
479
Example <vector>
<cn> 1 </cn>
<cn> 2 </cn>
<cn> 3 </cn>
<ci> x </ci>
</vector>
Example <vector type="row">
<cn> 1 </cn>
<cn> 2 </cn>
<cn> 3 </cn>
<ci> x </ci>
</vector>
Example <vector>
<bvar><ci type="integer">i</ci></bvar>
<lowlimit><ci>1</ci></lowlimit>
<uplimit><ci>10</ci></uplimit>
<apply><power/>
<ci>x</ci>
<ci>i</ci>
</apply>
</vector>
Description This is the constructor for a matrix. It requires matrixrow’s as arguments. It is used to represent matrices. See CRC Standard
Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC Press Inc., 1996, [2.5.1].
See also Section 4.4.10.2.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
type real | complex | integer | symbolic | integer | MathMLType real
Signature (matrixrow*) -> matrix
[type=matrixtype](matrixrow*) -> matrix(type=matrixtype)
(domainofapp,function) -> matrix
(bvar,bvar,domainofapp,anything) -> matrix
Property
Description scalar multiplication
480
Property
Description scalar multiplication
Matrix*column vector
Property
Description scalar multiplication
Addition
Property
Description scalar multiplication
Matrix*Matrix
Example <matrix>
<matrixrow><cn> 0 </cn> <cn> 1 </cn> <cn> 0 </cn></matrixrow>
<matrixrow><cn> 0 </cn> <cn> 0 </cn> <cn> 1 </cn></matrixrow>
<matrixrow><cn> 1 </cn> <cn> 0 </cn> <cn> 0 </cn></matrixrow>
</matrix>
Example <matrix>
<bvar><ci type="integer">i</ci></bvar>
<bvar><ci type="integer">j</ci></bvar>
<condition>
<apply><and/>
<apply><in/>
<ci>i</ci>
<interval><ci>1</ci><ci>5</ci></interval>
</apply>
<apply><in/>
<ci>j</ci>
<interval><ci>5</ci><ci>9</ci></interval>
</apply>
</apply>
</condition>
<apply><power/>
<ci>i</ci>
<ci>j</ci>
</apply>
</vector>
481
Description This symbol is an n-ary constructor used to represent rows of matrices. Its arguments should be members of a ring.
See also Section 4.4.10.3.
Classification constructor
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (ringelement+) -> matrixrow
Example <matrixrow>
<cn> 1 </cn>
<cn> 2 </cn>
</matrixrow>
Description The "determinant" of a matrix. This is a unary function. See CRC Standard Mathematical Tables and Formulae, editor: Dan
Zwillinger, CRC Press Inc., 1996, [2.5.4].
See also Section 4.4.10.4.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA
Signature (matrix)-> scalar
Example <apply><determinant/>
<ci type="matrix"> A </ci>
</apply>
Description The transpose of a matrix or vector. See CRC Standard Mathematical Tables and Formulae, editor: Dan Zwillinger, CRC
Press Inc., 1996, [2.4] and [2.5.1].
See also Section 4.4.10.5.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
482
Signature (vector)->vector(type=row)
(matrix)->matrix
(vector[type=row])->vector
Property
Description transpose(transpose(A))= A
Property
Description transpose(transpose(V))= V
Example <apply><transpose/>
<ci type="matrix"> A </ci>
</apply>
Example <apply><transpose/>
<ci type="vector"> V </ci>
</apply>
Description The operator used to extract sub-objects from vectors, matrices matrix rows and lists. Elements are accessed by providing
one index element for each dimension. For matrices, sub-matrices are selected by providing fewer index items. For a matrix
A and a column vector V : select(i, j, A) is the i,j th element of A. select(i, A) is the matrixrow formed from the i’th row of A.
select(i, V) is the i’th element of V. select(V) is the sequence of all elements of V. select(A) is the sequence of all elements of
A, extracted row by row. select(i, L) is the i’th element of a list. select(L) is the sequence of elements of a list.
See also Section 4.4.10.6.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (matrix,scalar,scalar)->scalar
(matrix,scalar)->matrixrow
(matrix)->scalar*
((vector|list|matrixrow),scalar )->scalar
(vector|list|matrixrow)->scalar*
Property
Description For all vectors V, V = vector(selector(V))
483
Property
Description For all matrix rows Mrow, Mrow = matrixrow(selector(Mrow))
Example <apply><vectorproduct/><ci>u</ci><ci>v</ci></apply>
Example <apply><scalarproduct/><ci>u</ci><ci>v</ci></apply>
Description This symbol represents the outer product function. It takes two vector arguments and returns a matrix. It is defined as follows:
if we write the i,j’th element of the matrix to be returned as m_i,j, then: m_i,j=a_i * b_j where a_i,b_j are the i’th and j’th elements
of a, b respectively.
See also Section 4.4.10.9.
Classification function
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature (vector,vector) -> matrix
Example <apply><outerproduct/><ci>u</ci><ci>v</ci></apply>
<apply><implies/>
<apply><in/><ci>n</ci><integers/></apply>
<apply><in/><apply><plus/><ci>n</ci><cn>1</cn></apply><integers/></apply>
</apply>
Property
Description 0 is an integer
485
<apply><in/><cn>0</cn><integers/></apply>
Property
Description n is an integer implies -n is an integer
<apply><implies/>
<apply><in/><ci>n</ci><integers/></apply>
<apply><in/><apply><minus/><ci>n</ci></apply><integers/></apply>
</apply>
Example <apply><in/>
<cn type="integer"> 42 </cn>
<integers/>
</apply>
Property
Description for all a,b | a,b rational with a<b implies there exists rational a,c s.t. a<c and c<b
Example <apply><in/>
<cn type="real"> 44.997 </cn>
<reals/>
</apply>
486
<apply><forall/>
<bvar><ci>z</ci></bvar>
<condition><apply><in/><ci>z</ci><rationals/></apply></condition>
<apply><exists/>
<bvar><ci>p</ci></bvar>
<bvar><ci>q</ci></bvar>
<apply><and/>
<apply><in/><ci>p</ci><integers/></apply>
<apply><in/><ci>q</ci><integers/></apply>
<apply><eq/>
<apply><divide/><ci>p</ci><ci>q</ci></apply>
<ci>z</ci>
</apply>
</apply>
</apply>
Property
Description ForAll( [a,b], a and b are rational, a < b implies there exists c such that a < c and c < b )
Example <apply><in/>
<cn type="rational"> 22 <sep/>7</cn>
<rationals/>
</apply>
487
Description naturalnumbers represents the set of all natural numbers, i.e.. non-negative integers.
See also Section 4.4.12.4.
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature set
Property
Description For all n | n is a natural number implies n+1 is a natural number.
<apply><forall/>
<bvar><ci>n</ci></bvar>
<apply><implies/>
<apply><in/><ci>n</ci><naturalnumbers/></apply>
<apply><in/>
<apply><plus/><ci>n</ci><cn>1</cn></apply>
<naturalnumbers/>
</apply>
</apply>
</apply>
Property
Description 0 is a natural number.
<apply><in/><cn>0</cn><naturalnumbers/></apply>
Property
Description for all n | n in the natural numbers is equivalent to saying n=0 or n-1 is a natural number
Example <apply><in/>
<cn type="integer">1729</cn>
<naturalnumbers/>
</apply>
Description complexes represents the set of all complex numbers, i.e., numbers which may have a real and an imaginary part.
See also Section 4.4.12.5.
488
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature set
Property
Description for all z | if z is complex then there exist reals x,y s.t. z = x + i * y
Example <apply><in/>
<cn type="complex">17<sep/>29</cn>
<complexes/>
</apply>
Description primes represents the set of all natural prime numbers, i.e., integers greater than 1 which have no positive integer factor
other than themselves and 1.
See also Section 4.4.12.6.
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature set
Property
Description ForAll( [d,p], p is prime, Implies( d | p , d=1 or d=p ) )
489
<apply><forall/>
<bvar><ci>d</ci></bvar>
<bvar><ci>p</ci></bvar>
<condition>
<apply><and/>
<apply><in/><ci>p</ci><primes/></apply>
<apply><in/><ci>d</ci><naturalnumbers/></apply>
</apply>
</condition>
<apply><implies/>
<apply><factorof/><ci>d</ci><ci>p</ci></apply>
<apply><or/>
<apply><eq/><ci>d</ci><cn>1</cn></apply>
<apply><eq/><ci>d</ci><ci>p</ci></apply>
</apply>
</apply>
</apply>
Example <apply>
<in/>
<cn type="integer">17</cn>
<primes/>
</apply>
Description exponentiale represents the mathematical constant which is the exponential base of the natural logarithms, commonly written
e . It is approximately 2.718281828..
See also Section 4.4.12.7.
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature real constant
Property
Description ln(e) = 1
490
<apply><eq/>
<apply><ln/><exponentiale/></apply>
<cn>1</cn>
</apply>
Property
Description e is approximately 2.718281828
Property
Description e = the sum as j ranges from 0 to infinity of 1/(j!)
<apply><eq/>
<apply><not/><true/></apply>
<false/>
</apply>
Property
Description For all boolean p, p or true is true
<declare type="boolean"><ci>p</ci></declare>
<apply><forall/>
<bvar><ci>p</ci></bvar>
<apply><eq/>
<apply><or/><ci>p</ci><true/></apply>
<true/>
</apply>
</apply>
492
<apply><eq/>
<apply><not/><true/></apply>
<false/>
</apply>
Property
Description p and false = false
<declare type="boolean"><ci>p</ci></declare>
<apply><forall/>
<bvar><ci>p</ci></bvar>
<apply><and/><ci>p</ci><false/></apply>
<false/>
</apply>
493
Example <apply><eq/>
<apply><and/>
<false/>
<ci type = "boolean">P</ci>
</apply>
<false/>
</apply>
<apply><forall/><bvar><ci type="set">S</ci></bvar>
<apply><eq/>
<apply><intersect/><emptyset/><ci>S</ci></apply>
<emptyset/>
</apply>
</apply>
Example <apply><neq/>
<integers/>
<emptyset/>
</apply>
C.2.11.13 MMLdefinition: pi
Description pi represents the mathematical constant which is the ratio of a circle’s circumference to its diameter, approximately 3.141592653.
See also Section 4.4.12.13.
Classification constant
494
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature real
Property <apply><approx/>
<cn>pi</cn>
<cn> 3.141592654 </cn>
</apply>
Property
Description pi = 4 * the sum as j ranges from 0 to infinity of ((1/(4j+1))-(1/(4j+3)))
Example <apply><approx/>
<pi/>
<cn type = "rational">22<sep/>7</cn>
</apply>
Description A symbol to convey the notion of the gamma constant as defined in Abramowitz and Stegun, Handbook of Mathematical
Functions, section 6.1.3. It is the limit of 1 + 1/2 + 1/3 + ... + 1/m - ln m as m tends to infinity, this is approximately 0.5772 15664.
See also Section 4.4.12.14.
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature real
Property
Description gamma is approx. 0.5772156649
<apply><approx/>
<eulergamma/>
<cn> .5772156649 </cn>
</apply>
Property
Description gamma = limit_(m -> infinity)(sum_(j ranges from 1 to m)(1/j) - ln m)
495
Example <apply><approx/>
<eulergamma/>
<cn>0.5772156649</cn>
</apply>
Description Infinity. Interpretation depends on the context. The default value is the positive infinity used to extend the real number line.
The "type" attribute can be use to indicate that this is a "complex" infinity.
See also Section 4.4.12.15.
Classification constant
MMLattribute
Name Value Default
definitionURL URI identifying the definition APPENDIX_C
encoding CDATA MathML
Signature constant
Property
Description infinity/infinity is not defined.
<apply><eq/>
<apply><divide/><infinity/><infinity/></apply>
<notanumber/>
</apply>
Property
Description for all reals x, x \lt infinity
<apply><forall/>
<bvar><ci>n</ci></bvar>
<condition><apply><in/><ci>n</ci><reals/></apply></condition>
<apply><lt/><ci>n</ci><infinity/></apply>
</apply>
Example <apply><eq/>
<apply><limit/>
<bvar><ci>x</ci></bvar>
<condition><apply><tendsto/><ci>x</ci><infinity/></apply></condition>
<apply><divide/><cn>1</cn><ci>x</ci></apply>
</apply>
<cn>0</cn>
</apply>
Appendix D
The following sections describe the interfaces that have been defined in the Document Object Model for MathML. Please refer to Chapter 8
for more information.
Interface MathMLDOMImplementation
Extends: DOMImplementation
This interface extends the DOMImplementation interface by adding a method to create a MathMLDocument.
IDL Definition
Methods
createMathMLDocument
Creates a MathMLDocument with a minimal tree containing only a MathMLMathElement corresponding to a MathML math
element. The MathMLMathElement is empty, having no child elements or non-default attributes; it is the root element of the
document, and is the element accessed via the documentElement attribute of the MathMLDocument. Note that a
MathMLDocument object should only be created for a stand-alone MathML document.
497
Return value
MathMLDocument The MathMLDocument created.
This method raises no exceptions.
Interface MathMLDocument
Extends: Document
This interface extends the Document interface to add access to document properties relating to navigation. The documentElement
attribute for a MathMLDocument should be the MathMLMathElement representing the top-level math element which is the root of the
document.
IDL Definition
Attributes
referrer of type DOMString, readonly The URI of the page that linked to this document, if available. This is null if the user navigated
directly to the page. If this is not a stand-alone MathML document (e.g. is embedded in an XHTML document), this may be
retrieved from the parent Document if available.
domain of type DOMString, readonly The domain name of the server that served the document, or null if the server cannot be
identified by a domain name, or if it is not available. If this is not a stand-alone MathML document (e.g. is embedded in an
XHTML document), this may be retrieved from the parent Document if available.
URI of type DOMString, readonly The complete URI of this document. This is null if this is not a stand-alone MathML document.
Interface MathMLNodeList
Extends: NodeList
This interface is provided as a specialization of the NodeList interface. The child Nodes of this NodeList must be MathMLElements
or Text nodes. Note that MathMLNodeLists are frequently used in the DOM as values of readonly attributes, encapsulating, for
instance, various collections of child elements. When used in this way, these objects are always understood to be live, in the sense that
changes to the document are immediately reflected in them.
498
IDL Definition
interface MathMLNodeList: NodeList {
};
IDL Definition
interface MathMLElement: Element {
attribute DOMString className;
attribute DOMString mathElementStyle;
attribute DOMString id;
attribute DOMString xref;
attribute DOMString href;
readonly attribute MathMLMathElement ownerMathElement;
};
Attributes
className of type DOMString The class attribute of the element. See the discussion elsewhere in this document of the class
attribute; see also the HTML definition of this attribute.
mathElementStyle of type DOMString A string identifying the element’s style attribute.
id of type DOMString The element’s identifier. See the discussion elsewhere in this document of the id attribute; see also the HTML
definition.
xref of type DOMString The xref attribute of the element. See the discussion elsewhere in this document of the xref attribute.
href of type DOMString The xlink:href attribute of the element. See the discussion elsewhere in this document of the xlink:href
attribute; see also the definition of this attribute in the XLink specification.
ownerMathElement of type MathMLMathElement, readonly The MathMLMathElement corresponding to the nearest math element
ancestor of this element. Should be null if this element is a top-level math element.
Interface MathMLContainer
This is an abstract interface containing functionality required by MathML elements that may contain arbitrarily many child elements. No
elements are directly supported by this interface; all instances are instances of either MathMLPresentationContainer,
MathMLContentContainer, or MathMLMathElement.
499
IDL Definition
interface MathMLContainer {
readonly attribute unsigned long nArguments;
readonly attribute MathMLNodeList arguments;
readonly attribute MathMLNodeList declarations;
MathMLElement getArgument(in unsigned long index);
MathMLElement setArgument(in MathMLElement newArgument, in unsigned long index);
MathMLElement insertArgument(in MathMLElement newArgument, in unsigned long index);
void deleteArgument(in unsigned long index);
MathMLElement removeArgument(in unsigned long index);
MathMLDeclareElement getDeclaration(in unsigned long index);
MathMLDeclareElement setDeclaration(in MathMLDeclareElement newDeclaration, in unsigned long index);
MathMLDeclareElement insertDeclaration(in MathMLDeclareElement newDeclaration, in unsigned long index);
MathMLDeclareElement removeDeclaration(in unsigned long index);
void deleteDeclaration(in unsigned long index);
};
Attributes
nArguments of type unsigned long, readonly The number of child elements of this element which represent arguments of the el-
ement, as opposed to qualifiers or declare elements. Thus for a MathMLContentContainer it does not contain elements
representing bound variables, conditions, separators, degrees, or upper or lower limits (bvar, condition, sep, degree,
lowlimit, or uplimit).
arguments of type MathMLNodeList, readonly This attribute accesses the child MathMLElements of this element which are argu-
ments of it, as a MathMLNodeList. Note that this list does not contain any MathMLElements representing qualifier elements
or declare elements.
declarations of type MathMLNodeList, readonly Provides access to the declare elements which are children of this element, in a
MathMLNodeList. All Nodes in this list must be MathMLDeclareElements.
Methods
getArgument
This method returns the indexth child argument element of this element. This frequently differs from the value of
Node::childNodes().item(index), as qualifier elements and declare elements are not counted.
Parameters
unsigned long index The one-based index of the argument to be retrieved.
Return value
MathMLElement A MathMLElement representing the index-th argument of this element.
Exceptions
500
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of child elements.
setArgument
This method sets newArgument as the index-th argument of this element. If there is currently an index-th argument, it is
replaced by newArgument. This frequently differs from setting the node at Node::childNodes().item(index), as qualifier
elements and declare elements are not counted.
Parameters
MathMLElement newArgument A MathMLElement representing the element that is to be set as the index-th argument
of this element.
unsigned long index The index of the argument that is to be set to newArgument. The first argument is num-
bered 1. If index is one more than the current number of arguments, a new argument
is appended.
Return value
MathMLElement The MathMLElement child of this element that represents the new argument in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child element of the type of
newArgument, if this is a MathMLContentContainer and newArgument is a qualifier element, or if newElement is
a MathMLDeclareElement. INDEX_SIZE_ERR: Raised if index is greater than one more than the number of child
elements.
insertArgument
This method inserts newArgument before the current index-th argument of this element. If index is 0, or if index is one more
than the current number of arguments, newArgument is appended as the last argument. This frequently differs from setting the
node at Node::childNodes().item(index), as qualifier elements and declare elements are not counted.
Parameters
MathMLElement newArgument A MathMLElement representing the element that is to be inserted as a child argument
of this element.
unsigned long index The one-based index of the position before which newArgument is to be inserted. The
first argument is numbered 1.
Return value
MathMLElement The MathMLElement child of this element that represents the new argument in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child argument of the type of
newArgument, or, for MathMLContentContainers, if newArgument represents a qualifier element. INDEX_SIZE_ERR:
Raised if index is greater than one more than the number of child arguments.
deleteArgument
This method deletes the index-th child element that is an argument of this element. Note that child elements which are qualifier
elements or declare elements are not counted in determining the index-th argument.
Parameters
unsigned long index The one-based index of the argument to be deleted.
Return value
501
void None.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of child elements.
removeArgument
This method deletes the index-th child element that is an argument of this element, and returns it to the caller. Note that child
elements that are qualifier elements or declare elements are not counted in determining the index-th argument.
Parameters
unsigned long index The one-based index of the argument to be removed.
Return value
MathMLElement A MathMLElement representing the argument being removed.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of child elements.
getDeclaration
This method retrieves the index-th child declare element of this element.
Parameters
unsigned long index A one-based index into the list of child declare elements of this element giving the position of
the declare element to be retrieved.
Return value
MathMLDeclareElement The MathMLDeclareElement representing the index-th child declare.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of child declare elements.
setDeclaration
This method inserts newDeclaration as the index-th child declaration of this element. If there is already an index-th
declare child element, it is replaced by newDeclaration.
Parameters
MathMLDeclareElement newDeclaration A MathMLDeclareElement to be inserted as the index-th child declare
element.
unsigned long index A one-based index into the list of child declare elements of this element
giving the position into which newDeclaration is to be inserted. If index
is one more than the number of declare children of this element,
newDeclaration is appended as the last declare child.
Return value
MathMLDeclareElement The MathMLDeclareElement being inserted.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the number of child declare elements.
HIERARCHY_REQUEST_ERR: Raised if this element does not permit child declare elements.
insertDeclaration
This method inserts newDeclaration before the current index-th child declare element of this element. If index is 0,
newDeclaration is appended as the last child declare element.
502
Parameters
MathMLDeclareElement newDeclaration A MathMLDeclareElement to be inserted as the index-th child declare
element.
unsigned long index A one-based index into the list of child declare elements of this element
giving the position before which newDeclaration is to be inserted. If
index is 0 or if it is one more than the number of child declare children,
newDeclaration is appended as the last child declare element.
Return value
MathMLDeclareElement The MathMLDeclareElement child of this element representing newDeclaration in the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the number of child declare elements.
HIERARCHY_REQUEST_ERR: Raised if this element does not permit child declare elements.
removeDeclaration
This method removes the MathMLDeclareElement representing the index-th declare child element of this element, and
returns it to the caller. Note that index is the position in the list of declare element children, as opposed to the position in the
list of all child Nodes.
Parameters
unsigned long index The one-based index of the declare element to be removed.
Return value
MathMLDeclareElement The MathMLDeclareElement being removed as a child Node of this element.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of child declare elements.
deleteDeclaration
This method deletes the MathMLDeclareElement representing the index-th declare child element of this element. Note that
index is the position in the list of declare element children, as opposed to the position in the list of all child Nodes.
Parameters
unsigned long index The one-based index of the declare element to be removed.
Return value
void None.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of child declare elements.
Interface MathMLMathElement
This interface represents the top-level MathML math element. It may become useful for interfacing between the Document Object Model
objects encoding an enclosing document and the MathML DOM elements that are its children. It could also be used for some purposes as
a MathML DOM surrogate for a Document object. For instance, MathML-specific factory methods could be placed here, as could methods
for creating MathML-specific Iterators or TreeWalkers. However, this functionality is as yet undefined.
503
IDL Definition
Attributes
macros of type DOMString Represents the macros attribute of the math element. See Section 7.1.2.
display of type DOMString Represents the display attribute of the math element. This value is either "block" or "inline". See
Section 7.1.2.
Interface MathMLSemanticsElement
Extends: MathMLElement
IDL Definition
Attributes
body of type MathMLElement This attribute represents the first child of the semantics element, i.e. the child giving the ‘primary’
content represented by the element.
nAnnotations of type unsigned long, readonly Represents the number of annotation or annotation-xml children of the
semantics element, i.e. the number of alternate content forms for this element.
504
Methods
getAnnotation
This method gives access to the index-th ‘alternate’ content associated with a semantics element.
Parameters
unsigned long index The one-based index of the annotation being retrieved.
Return value
MathMLElement The MathMLAnnotationElement or MathMLXMLAnnotationElement representing the index-th
annotation or annotation-xml child of the semantics element. Note that all child elements of a
semantics element other than the first are required to be of one of these types.
This method raises no exceptions.
insertAnnotation
This method inserts newAnnotation before the current index-th ‘alternate’ content associated with a semantics element. If
index is 0, newAnnotation is appended as the last annotation or annotation-xml child of this element.
Parameters
MathMLElement newAnnotation A MathMLAnnotationElement or MathMLXMLAnnotationElement representing
the new annotation or annotation-xml to be inserted.
unsigned long index The position in the list of annotation or annotation-xml children before which
newAnnotation is to be inserted. The first annotation is numbered 1.
Return value
MathMLElement The MathMLAnnotationElement or MathMLXMLAnnotationElement child of this element that repre-
sents the new annotation in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newAnnotation is not a MathMLAnnotationElement or
MathMLXMLAnnotationElement. INDEX_SIZE_ERR: Raised if index is greater than the current number of
annotation or annotation-xml children of this semantics element.
setAnnotation
This method allows setting or replacement of the index-th ‘alternate’ content associated with a semantics element. If there
is already an annotation or annotation-xml element with this index, it is replaced by newAnnotation.
Parameters
MathMLElement newAnnotation A MathMLAnnotationElement or MathMLXMLAnnotationElement representing
the new value of the index-th annotation or annotation-xml child of this
semantics element.
unsigned long index The position in the list of annotation or annotation-xml children of this
semantics element that is to be occupied by newAnnotation. The first annotation
element is numbered 1.
Return value
MathMLElement The MathMLAnnotationElement or MathMLXMLAnnotationElement child of this element that repre-
sents the new annotation in the DOM.
Exceptions
505
Interface MathMLAnnotationElement
Extends: MathMLElement
IDL Definition
Attributes
Interface MathMLXMLAnnotationElement
Extends: MathMLElement
IDL Definition
Attributes
encoding of type DOMString Provides access to the encoding attribute of an annotation-xml element.
Interface MathMLPresentationElement
Extends: MathMLElement
This interface is provided to serve as a base interface for various MathML Presentation interfaces. It contains no new attributes or
methods at this time; however, it is felt that the distinction between Presentation and Content MathML entities should be indicated in the
MathMLElement hierarchy. In particular, future versions of the MathML DOM may add functionality on this interface; it may also serve as
an aid to implementors.
IDL Definition
Interface MathMLGlyphElement
Extends: MathMLPresentationElement
IDL Definition
Attributes
alt of type DOMString A string giving an alternate name for the character. Represents the mglyph’s alt attribute.
fontfamily of type DOMString A string representing the font family.
index of type unsigned long An unsigned integer giving the glyph’s position within the font.
Interface MathMLSpaceElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML space element mspace. Note that this is not derived
from MathMLPresentationToken, despite the fact that mspace is classified as a token element, since it does not carry the attributes
declared for MathMLPresentationToken.
IDL Definition
Attributes
width of type DOMString A string of the form ‘number h-unit’; represents the width attribute for the mspace element, if specified.
height of type DOMString A string of the form ‘number v-unit’; represents the height attribute for the mspace element, if specified.
depth of type DOMString A string of the form ‘number v-unit’; represents the depth attribute for the mspace element, if specified.
linebreak of type DOMString One of the strings "auto", "newline", "indentingnewline", "nobreak", "goodbreak" and
"badbreak". This attribute gives a linebreaking hint to the renderer.
508
Interfaces representing the MathML Presentation token elements that may have content are described here.
Interface MathMLPresentationToken
Extends: MathMLPresentationElement
This interface extends the MathMLElement interface to include access for attributes specific to text presentation. It serves as the base
class for all MathML presentation token elements. Access to the body of the element is via the nodeValue attribute inherited from Node.
Elements that expose only the core presentation token attributes are directly supported by this object. These elements are:
mi identifier element
mn number element
mtext text element
IDL Definition
Attributes
mathvariant of type DOMString The mathvariant attribute for the element, if specified. One of the values "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", or "monospace".
mathsize of type DOMString The mathsize attribute for the element, if specified. Either "small", "normal" or "big", or of the form
"number v-unit".
mathcolor of type DOMString The mathcolor attribute for the element, if specified. The DOMString returned should be in one of the
forms "#rgb" or "#rrggbb", or should be an html-color-name, as specified in Section 3.2.2.2.
mathbackground of type DOMString The mathbackground attribute for the element, if specified. The DOMString returned should be
in one of the forms "#rgb" or "#rrggbb", or an html-color-name, as specified in Section 3.2.2.2, or the keyword "transparent".
contents of type MathMLNodeList, readonly Returns the child Nodes of the element. These should consist only of Text nodes,
MathMLGlyphElements, and MathMLAlignMarkElements. Should behave the same as the base class’s Node::childNodes
attribute; however, it is provided here for clarity.
509
Interface MathMLOperatorElement
Extends: MathMLPresentationToken
This interface extends the MathMLPresentationToken interface for the MathML operator element mo.
IDL Definition
Attributes
form of type DOMString The form attribute ("prefix", "infix" or "postfix") for the mo element, if specified.
fence of type DOMString The fence attribute ("true" or "false") for the mo element, if specified.
separator of type DOMString The separator attribute ("true" or "false") for the mo element, if specified.
lspace of type DOMString The lspace attribute (spacing to left) of the mo element, if specified.
rspace of type DOMString The rspace attribute (spacing to right) of the mo element, if specified.
stretchy of type DOMString The stretchy attribute ("true" or "false") for the mo element, if specified.
symmetric of type DOMString The symmetric attribute ("true" or "false") for the mo element, if specified.
maxsize of type DOMString The maxsize attribute for the mo element, if specified.
minsize of type DOMString The minsize attribute for the mo element, if specified.
largeop of type DOMString The largeop attribute for the mo element, if specified.
movablelimits of type DOMString The movablelimits ("true" or "false") attribute for the mo element, if specified.
accent of type DOMString The accent attribute ("true" or "false") for the mo element, if specified.
510
Interface MathMLStringLitElement
Extends: MathMLPresentationToken
This interface extends the MathMLPresentationToken interface for the MathML string literal element ms.
IDL Definition
Attributes
lquote of type DOMString A string giving the opening delimiter for the string literal; represents the lquote attribute for the ms element,
if specified.
rquote of type DOMString A string giving the closing delimiter for the string literal; represents the rquote attribute for the ms element,
if specified.
Interfaces designed to represent MathML Presentation elements that can contain arbitrary numbers of child MathMLElements are included
under the heading of Presentation Container Elements.
Interface MathMLPresentationContainer
This interface represents MathML Presentation elements that may contain arbitrarily many child elements. Elements directly supported by
this interface include mrow, mphantom and merror. All attributes and methods are derived from the base MathMLPresentationElement
and MathMLContainer interfaces.
IDL Definition
Interface MathMLStyleElement
Extends: MathMLPresentationContainer
This interface extends the MathMLElement interface for the MathML style element mstyle. While the mstyle element may contain any
attributes allowable on any MathML presentation element, only attributes specific to the mstyle element are included in the interface
below. Other attributes should be accessed using the methods on the base Element class, particularly the Element::getAttribute
and Element::setAttribute methods, or even the Node::attributes attribute to access all of them at once. Not only does this
obviate a lengthy list below, but it seems likely that most implementations will find this a considerably more useful interface to a
MathMLStyleElement.
IDL Definition
Attributes
scriptlevel of type DOMString A string of the form ‘+/- unsigned integer ’; represents the scriptlevel attribute for the mstyle ele-
ment, if specified. See also the discussion of this attribute.
512
displaystyle of type DOMString Either "true" or "false"; a string representing the displaystyle attribute for the mstyle element,
if specified. See also the discussion of this attribute.
scriptsizemultiplier of type DOMString A string of the form ‘number ’; represents the scriptsizemultiplier attribute for the
mstyle element, if specified. See also the discussion of this attribute.
scriptminsize of type DOMString A string of the form ‘number v-unit’; represents the scriptminsize attribute for the mstyle ele-
ment, if specified. See also the discussion of this attribute.
background of type DOMString A string representation of a color or the string "transparent"; represents the background attribute
for the mstyle element, if specified. See also the discussion of this attribute.
veryverythinmathspace of type DOMString A string of the form ‘number h-unit’; represents the "veryverythinmathspace" at-
tribute for the mstyle element, if specified. See also the discussion of this attribute.
verythinmathspace of type DOMString A string of the form ‘number h-unit’; represents the "verythinmathspace" attribute for the
mstyle element, if specified. See also the discussion of this attribute.
thinmathspace of type DOMString A string of the form ‘number h-unit’; represents the "thinmathspace" attribute for the mstyle
element, if specified. See also the discussion of this attribute.
mediummathspace of type DOMString A string of the form ‘number h-unit’; represents the "mediummathspace" attribute for the
mstyle element, if specified. See also the discussion of this attribute.
thickmathspace of type DOMString A string of the form ‘number h-unit’; represents the "thickmathspace" attribute for the mstyle
element, if specified. See also the discussion of this attribute.
verythickmathspace of type DOMString A string of the form ‘number h-unit’; represents the "verythickmathspace" attribute for the
mstyle element, if specified. See also the discussion of this attribute.
veryverythickmathspace of type DOMString A string of the form ‘number h-unit’; represents the "veryverythickmathspace" at-
tribute for the mstyle element, if specified. See also the discussion of this attribute.
negativeveryverythinmathspace of type DOMString A string of the form ‘number h-unit’; represents the
"negativeveryverythinmathspace" attribute for the mstyle element, if specified. See also the discussion of this attribute.
negativeverythinmathspace of type DOMString A string of the form ‘number h-unit’; represents the
"negativeverythinmathspace" attribute for the mstyle element, if specified. See also the discussion of this attribute.
negativethinmathspace of type DOMString A string of the form ‘number h-unit’; represents the "negativethinmathspace" attribute
for the mstyle element, if specified. See also the discussion of this attribute.
negativemediummathspace of type DOMString A string of the form ‘number h-unit’; represents the "negativemediummathspace"
attribute for the mstyle element, if specified. See also the discussion of this attribute.
negativethickmathspace of type DOMString A string of the form ‘number h-unit’; represents the "negativethickmathspace" at-
tribute for the mstyle element, if specified. See also the discussion of this attribute.
negativeverythickmathspace of type DOMString A string of the form ‘number h-unit’; represents the
"negativeverythickmathspace" attribute for the mstyle element, if specified. See also the discussion of this attribute.
negativeveryverythickmathspace of type DOMString A string of the form ‘number h-unit’; represents the
"negativeveryverythickmathspace" attribute for the mstyle element, if specified. See also the discussion of this attribute.
513
Interface MathMLPaddedElement
Extends: MathMLPresentationContainer
This interface extends the MathMLElement interface for the MathML spacing adjustment element mpadded.
IDL Definition
Attributes
width of type DOMString A string representing the total width of the mpadded element, if specified. See also the discussion of this
attribute.
lspace of type DOMString A string representing the lspace attribute - the additional space to the left - of the mpadded element, if
specified. See also the discussion of this attribute.
height of type DOMString A string representing the height above the baseline of the mpadded element, if specified. See also the
discussion of this attribute.
depth of type DOMString A string representing the depth beneath the baseline of the mpadded element, if specified. See also the
discussion of this attribute.
Interface MathMLFencedElement
Extends: MathMLPresentationContainer
This interface extends the MathMLPresentationContainer interface for the MathML fenced content element mfenced.
IDL Definition
Attributes
open of type DOMString A string representing the opening-fence for the mfenced element, if specified; this is the element’s open
attribute.
close of type DOMString A string representing the closing-fence for the mfenced element, if specified; this is the element’s close
attribute.
separators of type DOMString A string representing any separating characters inside the mfenced element, if specified; this is the
element’s separators attribute.
Interface MathMLEncloseElement
Extends: MathMLPresentationContainer
IDL Definition
Attributes
notation of type DOMString A string giving a name for the notation enclosing the element’s contents. Represents the notation at-
tribute of the menclose. Any string is allowed as a value; predefined values include "longdiv", "actuarial", "radical",
"box", "roundedbox", "circle", "left", "right", "top", "bottom", "updiagonalstrike", "downdiagonalstrike",
"verticalstrike", "horizontalstrike", or combinations of these strings separated by whitespace (see Section 3.3.9).
Interface MathMLActionElement
Extends: MathMLPresentationContainer
This interface extends the MathMLPresentationContainer interface for the MathML enlivening expression element maction.
IDL Definition
Attributes
actiontype of type DOMString A string specifying the action. Possible values include "toggle", "statusline", "tooltip", and
"highlight".
selection of type DOMString A string specifying an integer that selects the current subject of the action.
IDL Definition
interface MathMLFractionElement: MathMLPresentationElement {
attribute DOMString linethickness;
attribute DOMString numalign;
attribute DOMString denomalign;
attribute DOMString bevelled;
attribute MathMLElement numerator;
attribute MathMLElement denominator;
};
Attributes
linethickness of type DOMString A string representing the linethickness attribute of the mfrac, if specified.
numalign of type DOMString One of the strings "left", "center" and "right". Represents the numalign attribute of the mfrac, if
specified.
denomalign of type DOMString One of the strings "left", "center" and "right". Represents the denomalign attribute of the
mfrac, if specified.
bevelled of type DOMString One of the strings "true" and "false". Represents the bevelled attribute of the mfrac, if specified.
numerator of type MathMLElement The first child MathMLElement of the MathMLFractionElement; represents the numerator of the
represented fraction.
denominator of type MathMLElement The second child MathMLElement of the MathMLFractionElement; represents the denomi-
nator of the represented fraction.
Interface MathMLRadicalElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML radical and square root elements mroot and msqrt.
516
IDL Definition
Attributes
radicand of type MathMLElement The first child MathMLElement of the MathMLRadicalElement; represents the base of the repre-
sented radical.
index of type MathMLElement The second child MathMLElement of the MathMLRadicalElement; represents the index of the repre-
sented radical. This must be null for msqrt elements.
Interface MathMLScriptElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML subscript, superscript and subscript-superscript pair
elements msub, msup, and msubsup.
IDL Definition
Attributes
subscriptshift of type DOMString A string representing the minimum amount to shift the baseline of the subscript down, if specified;
this is the element’s subscriptshift attribute. This must return null for an msup.
superscriptshift of type DOMString A string representing the minimum amount to shift the baseline of the superscript up, if specified;
this is the element’s superscriptshift attribute. This must return null for a msub.
base of type MathMLElement A MathMLElement representing the base of the script. This is the first child of the element.
subscript of type MathMLElement A MathMLElement representing the subscript of the script. This is the second child of a msub or
msubsup; retrieval must return null for an msup.
517
Interface MathMLUnderOverElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML underscript, overscript and overscript-underscript
pair elements munder, mover and munderover.
IDL Definition
interface MathMLUnderOverElement: MathMLPresentationElement {
attribute DOMString accentunder;
attribute DOMString accent;
attribute MathMLElement base;
attribute MathMLElement underscript;
attribute MathMLElement overscript;
};
Attributes
accentunder of type DOMString Either "true" or "false" if present; a string controlling whether underscript is drawn as an ‘accent’
or as a ‘limit’, if specified; this is the element’s accentunder attribute. This must return null for an mover.
accent of type DOMString Either "true" or "false" if present; a string controlling whether overscript is drawn as an ‘accent’ or as a
‘limit’, if specified; this is the element’s accent attribute. This must return null for an munder.
base of type MathMLElement A MathMLElement representing the base of the script. This is the first child of the element.
underscript of type MathMLElement A MathMLElement representing the underscript of the script. This is the second child of a munder
or munderover; retrieval must return null for an mover.
DOMException HIERARCHY_REQUEST_ERR: Raised when the element is a mover.
overscript of type MathMLElement A MathMLElement representing the overscript of the script. This is the second child of a mover or
the third child of a munderover; retrieval must return null for an munder.
DOMException HIERARCHY_REQUEST_ERR: Raised when the element is a munder.
Interface MathMLMultiScriptsElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML multiscripts (including prescripts or tensors) element
mmultiscripts.
518
IDL Definition
Attributes
subscriptshift of type DOMString A string representing the minimum amount to shift the baseline of the subscripts down, if specified;
this is the element’s subscriptshift attribute.
superscriptshift of type DOMString A string representing the minimum amount to shift the baseline of the superscripts up, if specified;
this is the element’s superscriptshift attribute.
base of type MathMLElement A MathMLElement representing the base of the script. This is the first child of the element.
prescripts of type MathMLNodeList, readonly A NodeList representing the prescripts of the script, which appear in the order de-
scribed by the expression (prescript presuperscript)*. This is the same as traversing the contents of the NodeList returned by
Node::childNodes() from the Node following the <mprescripts/> (if present) to the end of the list.
scripts of type MathMLNodeList, readonly A MathMLNodeList representing the scripts of the script, which appear in the order de-
scribed by the expression (script superscript)*. This is the same as traversing the contents of the NodeList returned by
Node::childNodes() from the first Node up to and including the Node preceding the <mprescripts/> (if present).
numprescriptcolumns of type unsigned long, readonly The number of script/subscript columns preceding (to the left of) the base.
Should always be half of getprescripts().length()
519
numscriptcolumns of type unsigned long, readonly The number of script/subscript columns following (to the right of) the base.
Should always be half of getscripts().length()
Methods
getPreSubScript
A convenience method to retrieve pre-subscript children of the element, referenced by column index .
Parameters
unsigned long colIndex Column index of prescript (where 1 represents the leftmost prescript column).
Return value
MathMLElement Returns the MathMLElement representing the colIndex-th presubscript (to the left of the base, counting
from 1 at the far left). Note that this may be the MathMLElement corresponding to the special element
<none/> in the case of a ‘missing’ presubscript (see the discussion of mmultiscripts), or it may be
null if colIndex is out of range for the element.
This method raises no exceptions.
getSubScript
A convenience method to retrieve subscript children of the element, referenced by column index.
Parameters
unsigned long colIndex Column index of script (where 1 represents the leftmost script column, the first to the right
of the base).
Return value
MathMLElement Returns the MathMLElement representing the colIndex-th subscript to the right of the base. Note that
this may be the MathMLElement corresponding to the special element <none/> in the case of a ‘missing’
subscript (see the discussion of mmultiscripts), or it may be null if colIndex is out of range for the
element.
This method raises no exceptions.
getPreSuperScript
A convenience method to retrieve pre-superscript children of the element, referenced by column index .
Parameters
unsigned long colIndex Column index of pre-superscript (where 1 represents the leftmost prescript column).
Return value
MathMLElement Returns the MathMLElement representing the colIndex-th presuperscript (to the left of the base, counting
from 1 at the far left). Note that this may be the MathMLElement corresponding to the special element
<none/> in the case of a ‘missing’ presuperscript (see the discussion of mmultiscripts), or it may be
null if colIndex is out of range for the element.
This method raises no exceptions.
getSuperScript
A convenience method to retrieve superscript children of the element, referenced by column index .
Parameters
unsigned long colIndex Column index of script (where 1 represents the leftmost script column, the first to the right
of the base)
520
Return value
MathMLElement Returns the MathMLElement representing the colIndex-th superscript to the right of the base. Note that
this may be the MathMLElement corresponding to the special element <none/> in the case of a ‘missing’
superscript (see the discussion of mmultiscripts), or it may be null if colIndex is out of range for
the element.
This method raises no exceptions.
insertPreSubScriptBefore
A convenience method to insert a pre-subscript before the position referenced by column index. If colIndex is 0, the new
pre-subscript is appended as the last pre-subscript of the mmultiscripts element; if colIndex is 1, a new pre-subscript is
prepended at the far left. Note that inserting a new pre-subscript will cause the insertion of an empty pre-superscript in the
same column.
Parameters
unsigned long colIndex Column index of pre-subscript (where 1 represents the leftmost prescript column).
MathMLElement newScript A MathMLElement representing the element to be inserted as a pre-subscript.
Return value
MathMLElement The MathMLElement child of this MathMLMultiScriptsElement representing the new script in the
DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a pre-subscript.
INDEX_SIZE_ERR: Raised if colIndex is greater than the number of pre-scripts of the element.
setPreSubScriptAt
A convenience method to set the pre-subscript child at the position referenced by colIndex. If there is currently a pre-subscript
at this position, it is replaced by newScript.
Parameters
unsigned long colIndex Column index of pre-subscript (where 1 represents the leftmost prescript column).
MathMLElement newScript MathMLElement representing the element that is to be set as the colIndex-th pre-
subscript child of this element.
Return value
MathMLElement The MathMLElement child of this MathMLMultiScriptsElement representing the new pre-subscript in
the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a pre-subscript.
INDEX_SIZE_ERR: Raised if colIndex is greater than one more than the number of pre-scripts of the element.
insertSubScriptBefore
A convenience method to insert a subscript before the position referenced by column index. If colIndex is 0, the new subscript
is appended as the last subscript of the mmultiscripts element; if colIndex is 1, a new subscript is prepended at the far left.
Note that inserting a new subscript will cause the insertion of an empty superscript in the same column.
Parameters
unsigned long colIndex Column index of subscript, where 1 represents the leftmost script column (the first to the
right of the base).
MathMLElement newScript A MathMLElement representing the element to be inserted as a subscript.
521
Return value
MathMLElement The MathMLElement child of this MathMLMultiScriptsElement that represents the new subscript in
the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a subscript. IN-
DEX_SIZE_ERR: Raised if colIndex is greater than the number of scripts of the element.
setSubScriptAt
A convenience method to set the subscript child at the position referenced by colIndex. If there is currently a subscript at this
position, it is replaced by newScript.
Parameters
unsigned long colIndex Column index of subscript, where 1 represents the leftmost script column (the first to the
right of the base).
MathMLElement newScript MathMLElement representing the element that is to be set as the colIndex-th subscript
child of this element.
Return value
MathMLElement The MathMLElement child of this element representing the new subscript in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a subscript. IN-
DEX_SIZE_ERR: Raised if colIndex is greater than one more than the number of scripts of the element.
insertPreSuperScriptBefore
A convenience method to insert a pre-superscript before the position referenced by column index. If colIndex is 0, the new
pre-superscript is appended as the last pre-superscript of the mmultiscripts element; if colIndex is 1, a new pre-superscript
is prepended at the far left. Note that inserting a new pre-superscript will cause the insertion of an empty pre-subscript in the
same column.
Parameters
unsigned long colIndex Column index of pre-superscript (where 1 represents the leftmost prescript column).
MathMLElement newScript A MathMLElement representing the element to be inserted as a pre-superscript.
Return value
MathMLElement The MathMLElement child of this element that represents the new pre-superscript in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a pre-superscript.
INDEX_SIZE_ERR: Raised if colIndex is greater than the number of pre-scripts of the element.
setPreSuperScriptAt
A convenience method to set the pre-superscript child at the position referenced by colIndex. If there is currently a pre-
superscript at this position, it is replaced by newScript.
Parameters
unsigned long colIndex Column index of pre-superscript (where 1 represents the leftmost prescript column).
MathMLElement newScript MathMLElement representing the element that is to be set as the colIndex-th pre-
superscript child of this element.
Return value
522
MathMLElement The MathMLElement child of this element that represents the new pre-superscript in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a pre-superscript.
INDEX_SIZE_ERR: Raised if colIndex is greater than one more than the number of pre-scripts of the element.
insertSuperScriptBefore
A convenience method to insert a superscript before the position referenced by column index. If colIndex is 0, the new
superscript is appended as the last superscript of the mmultiscripts element; if colIndex is 1, a new superscript is prepended
at the far left. Note that inserting a new superscript will cause the insertion of an empty subscript in the same column.
Parameters
unsigned long colIndex Column index of superscript, where 1 represents the leftmost script column (the first to the
right of the base).
MathMLElement newScript A MathMLElement representing the element to be inserted as a superscript.
Return value
MathMLElement The MathMLElement child of this element that represents the new superscript in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a superscript.
INDEX_SIZE_ERR: Raised if colIndex is greater than the number of scripts of the element.
setSuperScriptAt
A convenience method to set the superscript child at the position referenced by colIndex. If there is currently a superscript at
this position, it is replaced by newScript.
Parameters
unsigned long colIndex Column index of superscript, where 1 represents the leftmost script column (the first to the
right of the base).
MathMLElement newScript MathMLElement representing the element that is to be set as the colIndex-th superscript
child of this element.
Return value
MathMLElement The MathMLElement child of this element that represents the new superscript in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newScript represents an element that cannot be a superscript.
INDEX_SIZE_ERR: Raised if colIndex is greater than one more than the number of scripts of the element.
Interface MathMLTableElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML table or matrix element mtable.
523
IDL Definition
interface MathMLTableElement: MathMLPresentationElement {
attribute DOMString align;
attribute DOMString rowalign;
attribute DOMString columnalign;
attribute DOMString groupalign;
attribute DOMString alignmentscope;
attribute DOMString columnwidth;
attribute DOMString width;
attribute DOMString rowspacing;
attribute DOMString columnspacing;
attribute DOMString rowlines;
attribute DOMString columnlines;
attribute DOMString frame;
attribute DOMString framespacing;
attribute DOMString equalrows;
attribute DOMString equalcolumns;
attribute DOMString displaystyle;
attribute DOMString side;
attribute DOMString minlabelspacing;
readonly attribute MathMLNodeList rows;
MathMLTableRowElement insertEmptyRow(in long index);
MathMLLabeledRowElement insertEmptyLabeledRow(in long index);
MathMLTableRowElement getRow(in long index);
MathMLTableRowElement insertRow(in long index, in MathMLTableRowElement newRow);
MathMLTableRowElement setRow(in long index, in MathMLTableRowElement newRow);
void deleteRow(in long index);
MathMLTableRowElement removeRow(in long index);
};
Attributes
align of type DOMString A string representing the vertical alignment of the table with the adjacent text. Allowed values are ("top" |
"bottom" | "center" | "baseline" | "axis")[rownumber ], where rownumber is between 1 and n (for a table with n rows) or
-1 and -n.
rowalign of type DOMString A string representing the alignment of entries in each row, consisting of a space-separated sequence of
alignment specifiers, each of which can have the following values: "top", "bottom", "center", "baseline", or "axis".
columnalign of type DOMString A string representing the alignment of entries in each column, consisting of a space-separated se-
quence of alignment specifiers, each of which can have the following values: "left", "center", or "right".
524
groupalign of type DOMString A string specifying how the alignment groups within the cells of each row are to be aligned with the
corresponding items above or below them in the same column. The string consists of a sequence of braced group alignment
lists. Each group alignment list is a space-separated sequence, each of which can have the following values: "left", "right",
"center", or "decimalpoint".
alignmentscope of type DOMString A string consisting of the values "true" or "false" indicating, for each column, whether it can
be used as an alignment scope.
columnwidth of type DOMString A string consisting of a space-separated sequence of specifiers, each of which can have one of the
following forms: "auto", number h-unit, namedspace, or "fit". (A value of the form namedspace is one of
"veryverythinmathspace", "verythinmathspace", "thinmathspace", "mediummathspace", "thickmathspace",
"verythickmathspace", or "veryverythickmathspace".) This represents the element’s columnwidth attribute.
width of type DOMString A string that is either of the form number h-unit or is the string "auto". This represents the element’s
width attribute.
rowspacing of type DOMString A string consisting of a space-separated sequence of specifiers of the form number v-unit repre-
senting the space to be added between rows.
columnspacing of type DOMString A string consisting of a space-separated sequence of specifiers of the form number h-unit rep-
resenting the space to be added between columns.
rowlines of type DOMString A string specifying whether and what kind of lines should be added between each row. The string consists
of a space-separated sequence of specifiers, each of which can have the following values: "none", "solid", or "dashed".
columnlines of type DOMString A string specifying whether and what kind of lines should be added between each column. The string
consists of a space-separated sequence of specifiers, each of which can have the following values: "none", "solid", or
"dashed".
frame of type DOMString A string specifying a frame around the table. Allowed values are (none | solid | dashed).
framespacing of type DOMString A string of the form number h-unit number v-unit specifying the spacing between table and its
frame.
equalrows of type DOMString A string with the values "true" or "false".
equalcolumns of type DOMString A string with the values "true" or "false".
displaystyle of type DOMString A string with the values "true" or "false".
side of type DOMString A string with the values "left", "right", "leftoverlap", or "rightoverlap".
minlabelspacing of type DOMString A string of the form number h-unit, specifying the minimum space between a label and the
adjacent entry in the labeled row.
rows of type MathMLNodeList, readonly A MathMLNodeList consisting of MathMLTableRowElements and
MathMLLabeledRowElements representing the rows of the table. This is a live object.
Methods
insertEmptyRow
A convenience method to insert a new (empty) row (mtr) in the table before the current index-th row. If index is less than 0,
the new row is inserted before the -index-th row counting up from the current last row; if index is equal to the current number
of rows, the new row is appended as the last row.
525
Parameters
long index Position before which to insert the new row, where 0 represents the first row. Negative numbers are used to
count backwards from the last row.
Return value
MathMLTableRowElement Returns the MathMLTableRowElement child of this MathMLTableElement that represents
the new mtr element being inserted.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the current number of rows of this mtable element or
less than minus this number.
insertEmptyLabeledRow
A convenience method to insert a new (empty) labeled row (mlabeledtr) in the table before the current index-th row. If index
is less than 0, the new row is inserted before the -index-th row counting up from the current last row; if index is equal to the
current number of rows, the new row is appended as the last row.
Parameters
long index Position before which to insert the new row, where 0 represents the first row. Negative numbers are used to
count backwards from the last row.
Return value
MathMLLabeledRowElement Returns the MathMLLabeledRowElement child of this MathMLTableElement representing
the mtr element being inserted.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the current number of rows of this mtable element or
less than minus this number.
getRow
A convenience method to retrieve the index-th row from the table. If index is less than 0, the -index-th row from the bottom
of the table is retrieved. (So, for instance, if index is -2, the next-to-last row is retrieved.) If index is not a valid value (i.e. is
greater than or equal to the number of rows, or is less than minus the number of rows), a null MathMLTableRowElement is
returned.
Parameters
long index Index of the row to be returned, where 0 represents the first row. Negative numbers are used to count
backwards from the last row.
Return value
MathMLTableRowElement Returns the MathMLTableRowElement representing the index-th row of the table.
This method raises no exceptions.
insertRow
A convenience method to insert the new row or labeled row (mtr or mlabeledtr) represented by newRow in the table before
the current index-th row. If index is equal to the current number of rows, newRow is appended as the last row in the table. If
index is less than 0, the new row is inserted before the -index-th row from the bottom of the table. (So, for instance, if index
is -2, the new row is inserted before the next-to-last current row.)
Parameters
526
long index Index before which to insert newRow, where 0 represents the first row. Negative
numbers are used to count backwards from the current last row.
MathMLTableRowElement newRow A MathMLTableRowElement or MathMLLabeledRowElement representing the row
to be inserted.
Return value
MathMLTableRowElement The MathMLTableRowElement or MathMLLabeledRowElement child of this
MathMLTableElement representing the mtr element being inserted.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newRow is not a MathMLTableRowElement or
MathMLLabeledRowElement. INDEX_SIZE_ERR: Raised if index is greater than the current number of rows or less
than minus the current number of rows of this mtable element.
setRow
A method to set the value of the row in the table at the specified index to the mtr or mlabeledtr represented by newRow. If
index is less than 0, the -index-th row counting up from the last is replaced by newRow; if index is one more than the current
number of rows, the new row is appended as the last row in the table.
Parameters
long index Index of the row to be set to newRow, where 0 represents the first row. Negative
numbers are used to count backwards from the last row.
MathMLTableRowElement newRow A MathMLTableRowElement representing the row that is to be the new index-th
row.
Return value
MathMLTableRowElement Returns the MathMLTableRowElement or MathMLLabeledRowElement child of this element
that represents the new row in the DOM.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if newRow is not a MathMLTableRowElement or
MathMLLabeledRowElement. INDEX_SIZE_ERR: Raised if index is greater than the current number of rows of this
mtable element or less than minus this number.
deleteRow
A convenience method to delete the row of the table at the specified index. If index is less than 0, the -index-th row from the
bottom of the table is deleted. (So, for instance, if index is -2, the next-to-last row is deleted.)
Parameters
long index Index of row to be deleted, where 0 represents the first row.
Return value
void None.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than or equal to the current number of rows of this mtable
element or less than minus this number.
removeRow
A convenience method to delete the row of the table at the specified index and return it to the caller. If index is less than 0, the
-index-th row from the bottom of the table is deleted. (So, for instance, if index is -2, the next-to-last row is deleted.)
527
Parameters
long index Index of row to be removed, where 0 represents the first row.
Return value
MathMLTableRowElement A MathMLTableRowElement representing the row being deleted.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than or equal to the number of rows of this mtable element or
less than minus this number.
Interface MathMLTableRowElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML table or matrix row element mtr.
IDL Definition
Attributes
rowalign of type DOMString A string representing an override of the row alignment specified in the containing mtable. Allowed values
are "top", "bottom", "center", "baseline", and "axis".
columnalign of type DOMString A string representing an override of the column alignment specified in the containing mtable. Allowed
values are "left", "center", and "right".
groupalign of type DOMString A string specifying how the alignment groups within the cells of each row are to be aligned with the
corresponding items above or below them in the same column. The string consists of a sequence of braced group alignment
lists. Each group alignment list is a space-separated sequence, each of which can have the following values: "left", "right",
"center", or "decimalpoint".
cells of type MathMLNodeList, readonly A MathMLNodeList consisting of the cells of the row. Note that this does not include the
label if this is a MathMLLabeledRowElement!
528
Methods
insertEmptyCell
A convenience method to insert a new (empty) cell in the row.
Parameters
unsigned long index Index of the cell before which the new cell is to be inserted, where the first cell is numbered
0. If index is equal to the current number of cells, the new cell is appended as the last cell of
the row. Note that the index will differ from the index of the corresponding Node in the collection
returned by Node::childNodes if this is a MathMLLabeledRowElement!
Return value
MathMLTableCellElement Returns the MathMLTableCellElement representing the mtd element being inserted.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the current number of cells of this mtr element.
insertCell
A convenience method to insert a new cell in the row.
Parameters
MathMLTableCellElement newCell A MathMLTableCellElement representing the new cell (mtd element) to be in-
serted.
unsigned long index Index of the cell before which the new cell is to be inserted, where the first cell is
numbered 0. If index equals the current number of cells, the new cell is appended
as the last cell of the row. Note that the index will differ from the index of the
corresponding Node in Node::childNodes if this is a
MathMLLabeledRowElement!
Return value
MathMLTableCellElement The MathMLTableCellElement representing the mtd element being inserted.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the current number of cells of this mtr element.
setCell
A convenience method to set the value of a cell in the row to newCell. If index is equal to the current number of cells, newCell
is appended as the last cell in the row.
Parameters
MathMLTableCellElement newCell A MathMLTableCellElement representing the cell (mtd element) that is to be
inserted.
unsigned long index Index of the cell that is to be replaced by the new cell, where the first cell is
numbered 0. Note that the index will differ from the index of the corresponding
Node in the collection returned by Node::childNodes if this is a
MathMLLabeledRowElement!
Return value
MathMLTableCellElement The MathMLTableCellElement child of this MathMLTableRowElement representing the
new mtd element.
This method raises no exceptions.
529
deleteCell
A convenience method to delete a cell in the row.
Parameters
unsigned long index Index of cell to be deleted. Note that the count will differ from the index-th child node if this is a
MathMLLabeledRowElement!
Return value
void None.
This method raises no exceptions.
Interface MathMLLabeledRowElement
Extends: MathMLTableRowElement
This interface extends the MathMLTableRowElement interface to represent the mlabeledtr element Section 3.5.3. Note that the pres-
ence of a label causes the indexth child node to differ from the index-th cell!
IDL Definition
Attributes
label of type MathMLElement A MathMLElement representing the label of this row. Note that retrieving this should have the same
effect as a call to Node::getfirstChild(), while setting it should have the same effect as
Node::replaceChild(Node::getfirstChild()).
DOMException NO_MODIFICATION_ALLOWED_ERR: Raised if this MathMLElement or the new MathMLElement is read-
only.
Interface MathMLTableCellElement
Extends: MathMLPresentationContainer
This interface extends the MathMLPresentationContainer interface for the MathML table or matrix cell element mtd.
530
IDL Definition
interface MathMLTableCellElement: MathMLPresentationContainer {
attribute DOMString rowspan;
attribute DOMString columnspan;
attribute DOMString rowalign;
attribute DOMString columnalign;
attribute DOMString groupalign;
readonly attribute boolean hasaligngroups;
readonly attribute DOMString cellindex;
};
Attributes
rowspan of type DOMString A string representing a positive integer that specifies the number of rows spanned by this cell. The default
is 1.
columnspan of type DOMString A string representing a positive integer that specifies the number of columns spanned by this cell. The
default is 1.
rowalign of type DOMString A string specifying an override of the inherited vertical alignment of this cell within the table row. Allowed
values are "top", "bottom", "center", "baseline", and "axis".
columnalign of type DOMString A string specifying an override of the inherited horizontal alignment of this cell within the table column.
Allowed values are "left", "center", and "right".
groupalign of type DOMString A string specifying how the alignment groups within the cell are to be aligned with those in cells above
or below this cell. The string consists of a space-separated sequence of specifiers, each of which can have the following values:
"left", "right", "center", or "decimalpoint".
hasaligngroups of type boolean, readonly A string with the values "true" or "false" indicating whether the cell contains align
groups.
cellindex of type DOMString, readonly A string representing the integer index (1-based?) of the cell in its containing row. [What about
spanning cells? How do these affect this value?]
Interface MathMLAlignGroupElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML group -alignment element <maligngroup/>.
IDL Definition
interface MathMLAlignGroupElement: MathMLPresentationElement {
attribute DOMString groupalign;
};
531
Attributes
groupalign of type DOMString A string specifying how the alignment group is to be aligned with other alignment groups above or below
it. Allowed values are "left", "right", "center", or "decimalpoint".
Interface MathMLAlignMarkElement
Extends: MathMLPresentationElement
This interface extends the MathMLPresentationElement interface for the MathML alignment mark element <malignmark/>.
IDL Definition
Attributes
edge of type DOMString A string specifying alignment on the right edge of the preceding element or the left edge of the following
element. Allowed values are "left" and "right".
Interface MathMLContentElement
Extends: MathMLElement
This interface is provided to serve as a base interface for various MathML Content interfaces. It contains no new attributes or methods at
this time; however, it is felt that the distinction between Presentation and Content MathML entities should be indicated in the MathMLEle-
ment hierarchy. In particular, future versions of the MathML DOM may add functionality on this interface; it may also serve as an aid to
implementors.
IDL Definition
IDL Definition
interface MathMLContentToken: MathMLContentElement {
readonly attribute MathMLNodeList arguments;
attribute DOMString definitionURL;
attribute DOMString encoding;
Node getArgument(in unsigned long index);
Node insertArgument(in Node newArgument, in unsigned long index);
Node setArgument(in Node newArgument, in unsigned long index);
void deleteArgument(in unsigned long index);
Node removeArgument(in unsigned long index);
};
Attributes
arguments of type MathMLNodeList, readonly The arguments of this element, returned as a MathMLNodeList. Note that this is not
necessarily the same as Node::childNodes, particularly in the case of the cn element. The reason is that the sep elements
that are used to separate the arguments of a cn are not returned.
definitionURL of type DOMString A URI pointing to a semantic definition for this content element. Note that there is no stipulation
about the form this definition may take!
encoding of type DOMString A string describing the syntax in which the definition located at definitionURL is given.
Methods
getArgument
A convenience method to retrieve the child argument at the position referenced by index. Note that this is not necessarily the
same as the index-th child Node of this Element; in particular, sep elements will not be counted.
Parameters
unsigned long index Position of desired argument in the list of arguments. The first argument is numbered 1.
Return value
Node The Node retrieved.
This method raises no exceptions.
533
insertArgument
A convenience method to insert newArgument before the current index-th argument child of this element. If index is 0,
newArgument is appended as the last argument.
Parameters
Node newArgument Node to be inserted as the index-th argument. This will either be a MathMLElement or
a Text node.
unsigned long index Position before which newArgument is to be inserted. The first argument is numbered
1.Note that this is not necessarily the index of the Node in the list of child nodes, as
nodes representing such elements as sep are not counted as arguments.
Return value
Node The Node inserted. This is the element within the DOM.
This method raises no exceptions.
setArgument
A convenience method to set an argument child at the position referenced by index. If there is currently an argument at this
position, it is replaced by newArgument.
Parameters
Node newArgument Node to be inserted as the argument. This will either be a MathMLElement or a Text
node.
unsigned long index Position of the argument that is to be set to newArgument in the list of arguments. The
first argument is numbered 1. Note that this is not necessarily the index of the Node in
the list of child nodes, as nodes representing such elements as sep are not counted as
arguments.
Return value
Node The Node inserted. This is the element within the DOM.
This method raises no exceptions.
deleteArgument
A convenience method to delete the argument child located at the position referenced by index.
Parameters
unsigned long index Position of the argument to be deleted from the list of arguments. The first argument is numbered
1.
Return value
void None.
This method raises no exceptions.
removeArgument
A convenience method to delete the argument child located at the position referenced by index, and to return it to the caller.
Parameters
unsigned long index Position of the argument to be deleted from the list of arguments. The first argument is numbered
1.
Return value
Node A Node representing the deleted argument.
534
Interface MathMLCnElement
Extends: MathMLContentToken
IDL Definition
Attributes
type of type DOMString Values include, but are not restricted to, "e-notation", "integer", "rational", "real", "complex",
"complex-polar", "complex-cartesian", and "constant".
base of type DOMString A string representing an integer between 2 and 36; the base of the numerical representation.
nargs of type unsigned long, readonly The number of sep-separated arguments.
Interface MathMLCiElement
Extends: MathMLContentToken
IDL Definition
Attributes
type of type DOMString Values include "integer", "rational", "real", "complex", "complex-polar", "complex-cartesian",
"constant", "function", any of the MathML content container types ("vector", "matrix", "set", "list" etc.) or their
types.
535
Interface MathMLCsymbolElement
Extends: MathMLContentToken
This interface represents the csymbol element. Although it currently has no attributes or methods distinct from those of
MathMLContentToken, a separate interface is provided to emphasize the conceptual role of the csymbol element.
IDL Definition
We have added interfaces for content elements that are containers, i.e. elements that may contain child elements corresponding to
arguments, bound variables, conditions, or lower or upper limits.
Interface MathMLContentContainer
This interface supports the MathML Content elements that may contain child Content elements. The elements directly supported by
MathMLContentContainer include: reln (deprecated), lambda, lowlimit, uplimit, degree, domainofapplication, and
momentabout. Interfaces derived from MathMLContentContainer support the elements apply, fn, interval, condition, declare,
bvar, set, list, vector, matrix, and matrixrow.
IDL Definition
Attributes
nBoundVariables of type unsigned long, readonly The number of bvar child elements of this element.
condition of type MathMLConditionElement This attribute represents the condition child element of this node. See Section 4.2.3.2.
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child condition element. In partic-
ular, raised if this element is not a apply, set, or list.
opDegree of type MathMLElement This attribute represents the degree child element of this node. This expresses, for instance, the
degree of differentiation if this element is a bvar child of an apply element whose first child is a diff or partialdiff. If
this is an apply element whose first child is a partialdiff, the opDegree attribute, if present, represents the total degree of
differentiation. See Section 4.2.3.2.
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child degree element. In particular,
raised if this element is not a bvar or apply.
domainOfApplication of type MathMLElement This attribute represents the domainofapplication child element of this node, if
present. This may express, for instance, the domain of integration if this element is an apply element whose first child is an
integral operator (int). See Section 4.2.3.2.
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child domainofapplication ele-
ment.
momentAbout of type MathMLElement This attribute represents the momentabout child element of this node, if present. This typically
expresses the point about which a statistical moment is to be calculated, if this element is an apply element whose first child
is a moment. See Section 4.2.3.2.
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child momentabout element. In
particular, raised if this element is not an apply whose first child is a moment.
Methods
getBoundVariable
This method retrieves the index-th MathMLBvarElement child of the MathMLElement. Note that only bvar child elements
are counted in determining the index-th bound variable.
Parameters
unsigned long index The one-based index into the bound variable children of this element of the
MathMLBvarElement to be retrieved.
Return value
MathMLBvarElement The MathMLBvarElement representing the index-th bvar child of this element.
This method raises no exceptions.
insertBoundVariable
This method inserts a MathMLBvarElement as a child node before the current index-th bound variable child of this
MathMLElement. If index is 0, newBVar is appended as the last bound variable child. This has the effect of adding a bound
variable to the expression this element represents. Note that the new bound variable is inserted as the index-th bvar child
node, not necessarily as the index-th child node. The point of the method is to allow insertion of bound variables without
requiring the caller to calculate the exact order of child qualifier elements.
537
Parameters
MathMLBvarElement newBVar A MathMLBvarElement representing the bvar element being added.
unsigned long index The one-based index into the bound variable children of this element before which
newBVar is to be inserted.
Return value
MathMLBvarElement The MathMLBvarElement being added.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit child bvar elements.
setBoundVariable
This method sets the index-th bound variable child of this MathMLElement to newBVar. This has the effect of setting a bound
variable in the expression this element represents. Note that the new bound variable is inserted as the index-th bvar child
node, not necessarily as the index-th child node. The point of the method is to allow insertion of bound variables without
requiring the caller to calculate the exact order of child qualifier elements. If there is already a bvar at the index-th position, it
is replaced by newBVar.
Parameters
MathMLBvarElement newBVar The new MathMLBvarElement child of this element being set.
unsigned long index The one-based index into the bound variable children of this element at which newBVar
is to be inserted.
Return value
MathMLBvarElement The MathMLBvarElement being set.
Exceptions
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit child bvar elements.
deleteBoundVariable
This method deletes the index-th MathMLBvarElement child of the MathMLElement. This has the effect of removing this
bound variable from the list of qualifiers affecting the element this represents.
Parameters
unsigned long index The one-based index into the bound variable children of this element of the
MathMLBvarElement to be removed.
Return value
void None.
This method raises no exceptions.
removeBoundVariable
This method removes the index-th MathMLBvarElement child of the MathMLElement and returns it to the caller. This has the
effect of removing this bound variable from the list of qualifiers affecting the element this represents.
Parameters
unsigned long index The one-based index into the bound variable children of this element of the
MathMLBvarElement to be removed.
Return value
MathMLBvarElement The MathMLBvarElement being removed.
This method raises no exceptions.
538
Interface MathMLApplyElement
Extends: MathMLContentContainer
IDL Definition
Attributes
operator of type MathMLElement The MathML element representing the function or operator that is applied to the list of arguments.
lowLimit of type MathMLElement This attribute represents the lowlimit child element of this node (if any). This expresses, for in-
stance, the lower limit of integration if this is an apply element whose first child is a int. See Section 4.2.3.2.
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child lowlimit element. In partic-
ular, raised if this element is not an apply element whose first child is an int, sum, product, or limit element.
upLimit of type MathMLElement This attribute represents the uplimit child element of this node (if any). This expresses, for instance,
the upper limit of integration if this is an apply element whose first child is a int. See Section 4.2.3.2.
DOMException HIERARCHY_REQUEST_ERR: Raised if this element does not permit a child uplimit element. In particular,
raised if this element is not an apply element whose first child is an int, sum, or product element.
Interface MathMLFnElement
Extends: MathMLContentContainer
The fn element makes explicit the fact that a more general MathML object is intended to be used in the same manner as if it were a
pre-defined function such as sin or plus.
IDL Definition
Attributes
definitionURL of type DOMString A URI pointing to a definition for this function-type element. Note that there is no stipulation about
the form this definition may take!
encoding of type DOMString A string describing the syntax in which the definition located at definitionURL is given.
Interface MathMLLambdaElement
Extends: MathMLContentContainer
The lambda element is used to construct a user-defined function from an expression and one or more free variables.
IDL Definition
interface MathMLLambdaElement: MathMLContentContainer {
attribute MathMLElement expression;
};
Attributes
expression of type MathMLElement The MathMLElement representing the expression. This is included only as a convenience; getting
it should give the same result as MathMLContentContainer::getArgument(1).
Interface MathMLSetElement
Extends: MathMLContentContainer
The set element is the container element that represents a set of elements. The elements of a set can be defined either by explicitly
listing the elements, or by using the bvar and condition elements.
IDL Definition
interface MathMLSetElement: MathMLContentContainer {
readonly attribute boolean isExplicit;
attribute DOMString type;
};
Attributes
isExplicit of type boolean, readonly This is true if the set is specified by giving the list of its elements explicitly.
type of type DOMString The type attribute of the represented element. Predefined values are "normal" and "multiset". See Sec-
tion 4.4.6 and Section 4.3.
540
Interface MathMLListElement
Extends: MathMLContentContainer
The list element is the container element which represents a list of elements. Elements can be defined either by explicitly listing the
elements, or by using the bvar and condition elements.
IDL Definition
Attributes
isExplicit of type boolean, readonly This is true if the list is specified by giving its elements explicitly.
ordering of type DOMString The order attribute of the represented element. Predefined values are "numeric" and
"lexicographic". See Section 4.4.6 and Section 4.3.
Interface MathMLBvarElement
Extends: MathMLContentContainer
This interface represents the MathML bound variable element bvar. The interface currently provides no functionality beyond that of
MathMLContentContainer, but is useful for defining the type of bound variable access functions.
IDL Definition
Interface MathMLPredefinedSymbol
Extends: MathMLContentElement
541
This interface supports all of the empty built-in operator, relation, function, and constant and symbol elements that have the
definitionURL and encoding attributes in addition to the standard set of attributes. The elements supported in order of their appearance
in Section 4.4 are: inverse, compose, ident, domain, codomain, image, quotient, exp, factorial, divide, max, min, minus, plus,
power, rem, times, root, gcd, and, or, xor, not, implies, forall, exists, abs, conjugate, arg, real, imaginary, lcm, floor,
ceiling, eq, neq, gt, lt, geq, leq, equivalent, approx, factorof, ln, log, int, diff, partialdiff, divergence, grad, curl,
laplacian, union, intersect, in, notin, subset, prsubset, notsubset, notprsubset, setdiff, card, cartesianproduct, sum,
product, limit, sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth, arcsin, arccos, arctan, arcsec, arccsc,
arccot, arcsinh, arccosh, arctanh, arcsech, arccsch, arccoth, mean, sdev, variance, median, mode, moment, determinant,
transpose, selector, vectorproduct, scalarproduct, outerproduct, integers, reals, rationals, naturalnumbers,
complexes, primes, exponentiale, imaginaryi, notanumber, true, false, emptyset, pi, eulergamma, and infinity.
IDL Definition
interface MathMLPredefinedSymbol: MathMLContentElement {
attribute DOMString definitionURL;
attribute DOMString encoding;
readonly attribute DOMString arity;
readonly attribute DOMString symbolName;
};
Attributes
definitionURL of type DOMString A string that provides an override to the default semantics, or provides a more specific definition
encoding of type DOMString A string describing the syntax in which the definition located at definitionURL is given.
arity of type DOMString, readonly A string representing the number of arguments. Values include 0, 1, ... and variable.
symbolName of type DOMString, readonly A string giving the name of the MathML element represented. This is a convenience at-
tribute only; accessing it should be synonymous with accessing the Element::tagName attribute.
Interface MathMLTendsToElement
Extends: MathMLPredefinedSymbol
The tendsto element expresses that a quantity is tending to a specified value. An interface derived from the MathMLPredefinedSymbol
is used to allow for the inclusion of the type attribute.
IDL Definition
interface MathMLTendsToElement: MathMLPredefinedSymbol {
attribute DOMString type;
};
542
Attributes
type of type DOMString A string describing how the quantity approaches the specified value. Predefined values of the string include
"above", "below", and "two-sided". The default value is "two-sided".
IDL Definition
interface MathMLIntervalElement: MathMLContentElement {
attribute DOMString closure;
attribute MathMLContentElement start;
attribute MathMLContentElement end;
};
Attributes
closure of type DOMString A string with value "open", "closed", "open-closed" or "closed-open". The default value is
"closed".
start of type MathMLContentElement A MathMLContentElement representing the real number defining the start of the interval. If
end has not already been set, it becomes the same as start until set otherwise.
end of type MathMLContentElement A MathMLContentElement representing the real number defining the end of the interval. If
start has not already been set, it becomes the same as end until set otherwise.
Interface MathMLConditionElement
Extends: MathMLContentElement
The condition element is used to place a condition on one or more free variables or identifiers.
IDL Definition
interface MathMLConditionElement: MathMLContentElement {
attribute MathMLApplyElement condition;
};
543
Attributes
Interface MathMLDeclareElement
Extends: MathMLContentElement
The declare construct has two primary roles. The first is to change or set the default attribute values for a specific mathematical object.
The second is to establish an association between a ‘name’ and an object.
IDL Definition
Attributes
type of type DOMString A string indicating the type of the identifier. It must be compatible with the type of the constructor, if a
constructor is present. The type is inferred from the constructor if present, otherwise it must be specified.
nargs of type unsigned long If the identifier is a function, this attribute specifies the number of arguments the function takes. This
represents the declare element’s nargs attribute; see Section 4.4.2.8.
occurrence of type DOMString A string with the values " prefix", "infix", "postfix", or "function-model".
definitionURL of type DOMString A URI specifying the detailed semantics of the element.
encoding of type DOMString A description of the syntax used in definitionURL.
identifier of type MathMLCiElement A MathMLCiElement representing the name being declared.
constructor of type MathMLElement An optional MathMLElement providing an initial value for the object being declared.
Interface MathMLVectorElement
Extends: MathMLContentElement
IDL Definition
Attributes
ncomponents of type unsigned long, readonly The number of components in the vector.
Methods
getComponent
A convenience method to retrieve a component.
Parameters
unsigned long index Position of the component in the list of components. The first element is numbered 1.
Return value
MathMLContentElement The MathMLContentElement component at the position specified by index. If index is not a
valid index (i.e. is greater than the number of components of the vector or less than 1), a null
MathMLContentElement is returned.
This method raises no exceptions.
insertComponent
A convenience method to insert a new component in the vector before the current index-th component. If index is 0 or is one
more than the number of components currently in the vector, newComponent is appended as the last component of the vector.
Parameters
MathMLContentElement newComponent A MathMLContentElement representing the component that is to be added.
unsigned long index Position of the component in the list of components. The first component is
numbered 1.
Return value
MathMLContentElement The MathMLContentElement child of this MathMLVectorElement representing the new com-
ponent in the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the current number of components of this
vector element.
545
setComponent
A convenience method to set the index-th component of the vector to newComponent. If index is one more than the current
number of components, newComponent is appended as the last component.
Parameters
MathMLContentElement newComponent A MathMLContentElement representing the element that is to be the index-
th component of the vector.
unsigned long index Position of the component in the list of components. The first element is num-
bered 1.
Return value
MathMLContentElement The MathMLContentElement child of this MathMLVectorElement that represents the new
component in the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the current number of components of this
vector element.
deleteComponent
A convenience method to delete an element. The deletion changes the indices of the following components.
Parameters
unsigned long index Position of the component in the vector. The position of the first component is 1
Return value
None
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the current number of components of this vector ele-
ment.
removeComponent
A convenience method to remove a component from a vector and return it to the caller. If index is greater than the number of
components or is 0, a null MathMLContentElement is returned.
Parameters
unsigned long index Position of the component in the list of components. The first element is numbered 1.
Return value
MathMLContentElement The MathMLContentElement component being removed.
This method raises no exceptions.
Interface MathMLMatrixElement
Extends: MathMLContentElement
IDL Definition
Attributes
nrows of type unsigned long, readonly The number of rows in the represented matrix.
ncols of type unsigned long, readonly The number of columns in the represented matrix.
rows of type MathMLNodeList, readonly The rows of the matrix, returned as a MathMLNodeList consisting of
MathMLMatrixrowElements.
Methods
getRow
A convenience method to retrieve a specified row.
Parameters
unsigned long index Position of the row in the list of rows. The first row is numbered 1.
Return value
MathMLMatrixrowElement The MathMLMatrixrowElement representing the index-th row.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of rows in the matrix.
insertRow
A convenience method to insert a row before the row that is currently the index-th row of this matrix. If index is 0, newRow
is appended as the last row of the matrix.
Parameters
MathMLMatrixrowElement newRow MathMLMatrixrowElement to be inserted into the matrix.
unsigned long index Unsigned integer giving the row position before which newRow is to be inserted.
The first row is numbered 1.
Return value
MathMLMatrixrowElement The MathMLMatrixrowElement added. This is the new element within the DOM.
Exceptions
547
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the number of rows in the matrix. HIER-
ARCHY_REQUEST_ERR: Raised if the number of cells in newRow doesn’t match the number of columns in the matrix.
setRow
A convenience method to set the value of the index-th child matrixrow element of this element. If there is already a row at
the specified index, it is replaced by newRow.
Parameters
MathMLMatrixrowElement newRow MathMLMatrixrowElement representing the matrixrow which is to become the
index-th row of the matrix.
unsigned long index Unsigned integer giving the row which is to be set to newRow. The first row is
numbered 1.
Return value
MathMLMatrixrowElement The MathMLMatrixrowElement child of this MathMLMatrixrowElement representing
newRow within the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of rows in the matrix. HIERARCHY_REQUEST_ERR
Raised if the number of cells in newRow doesn’t match the number of columns in the matrix.
deleteRow
A convenience method to delete a row. The deletion changes the indices of the following rows.
Parameters
unsigned long index Position of the row to be deleted in the list of rows
Return value
None
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of rows in the matrix.
removeRow
A convenience method to remove a row and return it to the caller. The deletion changes the indices of the following rows.
Parameters
unsigned long index Position of the row to be removed in the list of rows. The first row is numbered 1.
Return value
MathMLMatrixrowElement The MathMLMatrixrowElement being removed.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of rows in the matrix.
Interface MathMLMatrixrowElement
Extends: MathMLContentElement
The matrixrow element is the container element for the elements of a matrix.
548
IDL Definition
interface MathMLMatrixrowElement: MathMLContentElement {
readonly attribute unsigned long nEntries;
MathMLContentElement getEntry(in unsigned long index);
MathMLContentElement insertEntry(in MathMLContentElement newEntry, in unsigned long index);
MathMLContentElement setEntry(in MathMLContentElement newEntry, in unsigned long index);
deleteEntry(in unsigned long index);
MathMLContentElement removeEntry(in unsigned long index);
};
Attributes
nEntries of type unsigned long, readonly The number of entries in the row.
Methods
getEntry
A convenience method to retrieve the contents of an entry by index.
Parameters
unsigned long index Position of the entry in the row. The first entry is numbered 1.
Return value
MathMLContentElement The MathMLContentElement element representing the index-th entry in the row.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of entries in the row.
insertEntry
A convenience method to insert an entry before the current index-th entry of the row. If index is 0, newEntry is appended as
the last entry. Note that this method increases the size of the matrixrow.
Parameters
MathMLContentElement newEntry The MathMLContentElement to be representing the new entry to be inserted into
the row.
unsigned long index The index before which newEntry is to be inserted in the row. The first entry is
numbered 1.
Return value
MathMLContentElement The MathMLContentElement child of this MathMLMatrixrowElement representing newEntry
in the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of entries in the row.
setEntry
A convenience method to set the contents of the entry at position index in the row to newEntry. If there is already a entry at
the specified index, it is replaced by the new entry.
549
Parameters
MathMLContentElement newEntry The MathMLContentElement representing the element that is to be the index-th
entry.
unsigned long index The index of the entry that is to be set equal to newEntry. The first entry is num-
bered 1.
Return value
MathMLContentElement The MathMLContentElement child of this MathMLMatrixRowElement representing newEntry
in the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the number of elements in the row.
deleteEntry
A convenience method to delete an entry. The deletion changes the indices of the following entries.
Parameters
unsigned long index Position of the entry to be deleted in the row. The first entry is numbered 1.
Return value
None
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of entries in the row.
removeEntry
A convenience method to remove an entry from the row and return the removed entry to the caller.
Parameters
unsigned long index Position of the entry to be removed from the row. The first entry is numbered 1.
Return value
MathMLContentElement The MathMLContentElement being removed from the row.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of entries in the row.
Interface MathMLPiecewiseElement
Extends: MathMLContentElement
The piecewise element represents the piecewise definition of a function. It contains child piece elements, each represented by a
MathMLCaseElement, giving the various conditions and associated function value specifications in the function definition, and an optional
otherwise child element, represented by a MathMLContentElement, giving the ‘default’ value of the function - that is, the value to be
assigned when none of the conditions specified in the piece child elements hold.
550
IDL Definition
Attributes
pieces of type MathMLNodeList, readonly A MathMLNodeList containing one MathMLCaseElement representing each of the piece
element children of this MathMLPiecewiseElement. The otherwise child (if present) is not contained in this
MathMLNodeList.
otherwise of type MathMLContentElement Returns a MathMLContentElement representing the value to be taken by the piecewise
function when none of the conditions described in the piece children is true.
Methods
getCase
A convenience method to retrieve the child piece at the position referenced by index.
Parameters
unsigned long index Position of desired case in the list of cases. The first piece is numbered 1; the otherwise child
(if present) is not counted, regardless of its position. If index is greater than the number of
pieces, a null MathMLCaseElement is returned; no error is generated.
Return value
MathMLCaseElement The MathMLCaseElement retrieved.
This method raises no exceptions.
setCase
A convenience method to set the value of the child piece at the position referenced by index to the value of case.
Parameters
551
unsigned long index Position of the piece to be set to case. The first piece is numbered 1; the otherwise
child (if present) is not counted, regardless of its position. If there is currently a piece at
this position, it will be replaced by case. If index is one more than the number of piece
child elements, a new one will be appended.
MathMLCaseElement case A MathMLCaseElement representing the new value of the indexth piece child.
Return value
MathMLCaseElement The new MathMLCaseElement created.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than one more than the number of pieces in this element.
deleteCase
A convenience method to delete the child piece at the position referenced by index. The deletion changes the indices of the
following pieces.
Parameters
unsigned long index Position of the piece to be deleted. The first piece is numbered 1; the otherwise child (if
present) is not counted, regardless of its position.
Return value
void None.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of pieces in this element.
removeCase
A convenience method to remove the child piece at the position referenced by index and return it to the caller. The removal
changes the indices of the following pieces.
Parameters
unsigned long index Position of the piece to be removed. The first piece is numbered 1; the otherwise child (if
present) is not counted, regardless of its position.
Return value
MathMLCaseElement The MathMLCaseElement removed.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of pieces in this element.
insertCase
A convenience method to insert a new piece child into this element.
Parameters
unsigned long index Position before which case is to be inserted. If index is 0, newCase is appended as
the last piece child of this element. The otherwise child (if present) is not counted,
regardless of its position.
MathMLCaseElement newCase A MathMLCaseElement representing the piece to be inserted.
Return value
MathMLCaseElement The new MathMLCaseElement inserted. This is the actual Element in the DOM.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater one more than the number of pieces in this element.
552
getCaseValue
A convenience method to retrieve the child of the indexth piece in this element which specifies the function value for that
case.
Parameters
unsigned long index Position of the piece whose value is being requested in the list of pieces. The first piece is
numbered 1; the otherwise child (if present) is not counted, regardless of its position.
Return value
MathMLContentElement The MathMLContentElement representing the value to be taken by the function in the indexth
case.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of pieces in this element.
setCaseValue
A convenience method to set the function value for the indexth piece in this element.
Parameters
unsigned long index Position of the piece whose value is being set in the list of pieces. The first piece is
numbered 1; the otherwise child (if present) is not counted, regardless of its position.
MathMLContentElement value A MathMLContentElement representing the function value to be assigned in the
indexth case.
Return value
MathMLContentElement The MathMLContentElement representing the value to be taken by the function in the indexth
case.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of pieces in this element.
getCaseCondition
A convenience method to retrieve the child of the piece at the position referenced by index which gives the condition for this
case.
Parameters
unsigned long index Position of the piece whose condition is being requested in the list of pieces. The first piece is
numbered 1; the otherwise child (if present) is not counted, regardless of its position.
Return value
MathMLContentElement The MathMLContentElement representing the condition to be satisfied for the indexth case.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of pieces in this element.
setCaseCondition
A convenience method to set the condition for the indexth piece in this element.
Parameters
unsigned long index Position of the piece whose condition is being set in the list of pieces. The first
piece is numbered 1; the otherwise child (if present) is not counted, regardless
of its position.
MathMLContentElement condition A MathMLContentElement representing the condition to be associated to the
indexth case.
553
Return value
MathMLContentElement The MathMLContentElement which is inserted as the condition child of the indexth piece.
Exceptions
DOMException INDEX_SIZE_ERR: Raised if index is greater than the number of pieces in this element.
Interface MathMLCaseElement
Extends: MathMLContentElement
The piece element represents one of a sequence of cases used in the piecewise definition of a function. It contains two child elements,
each represented by a MathMLContentElement. The first child determines the subset of the domain affected, normally by giving a
condition to be satisfied. The second gives the value of the function over the indicated subset of its domain.
IDL Definition
Attributes
caseCondition of type MathMLContentElement Accesses the MathMLContentElement representing the condition to be satisfied in
order for this branch of the piecewise definition to be used.
caseValue of type MathMLContentElement Accesses the MathMLContentElement representing the value to be taken by the piece-
wise function when the condition described by caseCondition is true.
• MathMLDOMImplementation
• MathMLDocument
• MathMLNodeList
• MathMLElement
– MathMLSemanticsElement
– MathMLAnnotationElement
– MathMLXMLAnnotationElement
– MathMLPresentationElement
554
∗ MathMLGlyphElement
∗ MathMLSpaceElement
∗ MathMLPresentationToken
· MathMLOperatorElement
· MathMLStringLitElement
∗ MathMLFractionElement
∗ MathMLRadicalElement
∗ MathMLScriptElement
∗ MathMLUnderOverElement
∗ MathMLMultiScriptsElement
∗ MathMLTableElement
∗ MathMLTableRowElement
· MathMLLabeledRowElement
∗ MathMLAlignGroupElement
∗ MathMLAlignMarkElement
– MathMLContentElement
∗ MathMLContentToken
· MathMLCnElement
· MathMLCiElement
· MathMLCsymbolElement
∗ MathMLPredefinedSymbol
· MathMLTendsToElement
∗ MathMLIntervalElement
∗ MathMLConditionElement
∗ MathMLDeclareElement
∗ MathMLVectorElement
∗ MathMLMatrixElement
∗ MathMLMatrixrowElement
∗ MathMLPiecewiseElement
∗ MathMLCaseElement
• MathMLContainer
// File: mathml-dom.idl
#ifndef _MATHMLDOM_IDL_
#define _MATHMLDOM_IDL_
#include "dom.idl"
module mathml_dom
{
interface MathMLDocument;
interface MathMLMathElement;
interface MathMLTableRowElement;
interface MathMLLabeledRowElement;
interface MathMLTableCellElement;
interface MathMLBvarElement;
interface MathMLConditionElement;
interface MathMLDeclareElement;
interface MathMLMatrixrowElement;
interface MathMLCaseElement;
MathMLDocument createMathMLDocument();
};
interface MathMLContainer
{
readonly attribute unsigned long nArguments;
readonly attribute MathMLNodeList arguments;
readonly attribute MathMLNodeList declarations;
MathMLElement getArgument(in unsigned long index)
raises(DOMException);
MathMLElement setArgument(in MathMLElement newArgument,
in unsigned long index)
raises(DOMException);
MathMLElement insertArgument(in MathMLElement newArgument,
in unsigned long index)
raises(DOMException);
void deleteArgument(in unsigned long index)
raises(DOMException);
562
raises(DOMException);
MathMLTableCellElement insertCell(in MathMLTableCellElement newCell,
in unsigned long index)
raises(DOMException);
MathMLTableCellElement setCell(in MathMLTableCellElement newCell,
in unsigned long index);
void deleteCell(in unsigned long index);
};
// raises(DOMException) on setting
attribute MathMLElement momentAbout;
// raises(DOMException) on setting
MathMLBvarElement getBoundVariable(in unsigned long index);
MathMLBvarElement insertBoundVariable(in MathMLBvarElement newBVar,
in unsigned long index)
raises(DOMException);
MathMLBvarElement setBoundVariable(in MathMLBvarElement newBVar,
in unsigned long index)
raises(DOMException);
void deleteBoundVariable(in unsigned long index);
MathMLBvarElement removeBoundVariable(in unsigned long index);
};
raises(DOMException);
};
raises(DOMException);
MathMLContentElement getCaseCondition(in unsigned long index)
raises(DOMException);
MathMLContentElement setCaseCondition(in unsigned long index,
in MathMLContentElement condition)
raises(DOMException);
};
};
#endif
E.2.1 org/w3c/mathmldom/MathMLDOMImplementation.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMImplementation;
E.2.2 org/w3c/mathmldom/MathMLDocument.java
package org.w3c.dom.mathml;
576
import org.w3c.dom.Document;
E.2.3 org/w3c/mathmldom/MathMLNodeList.java
package org.w3c.dom.mathml;
import org.w3c.dom.NodeList;
E.2.4 org/w3c/mathmldom/MathMLElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.Element;
577
E.2.5 org/w3c/mathmldom/MathMLContainer.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
578
E.2.6 org/w3c/mathmldom/MathMLMathElement.java
package org.w3c.dom.mathml;
579
E.2.7 org/w3c/mathmldom/MathMLSemanticsElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
E.2.8 org/w3c/mathmldom/MathMLAnnotationElement.java
package org.w3c.dom.mathml;
580
E.2.9 org/w3c/mathmldom/MathMLXMLAnnotationElement.java
package org.w3c.dom.mathml;
E.2.10 org/w3c/mathmldom/MathMLPresentationElement.java
package org.w3c.dom.mathml;
E.2.11 org/w3c/mathmldom/MathMLGlyphElement.java
package org.w3c.dom.mathml;
581
E.2.12 org/w3c/mathmldom/MathMLSpaceElement.java
package org.w3c.dom.mathml;
E.2.13 org/w3c/mathmldom/MathMLPresentationToken.java
package org.w3c.dom.mathml;
582
E.2.14 org/w3c/mathmldom/MathMLOperatorElement.java
package org.w3c.dom.mathml;
583
E.2.15 org/w3c/mathmldom/MathMLStringLitElement.java
package org.w3c.dom.mathml;
584
E.2.16 org/w3c/mathmldom/MathMLPresentationContainer.java
package org.w3c.dom.mathml;
E.2.17 org/w3c/mathmldom/MathMLStyleElement.java
package org.w3c.dom.mathml;
585
E.2.18 org/w3c/mathmldom/MathMLPaddedElement.java
package org.w3c.dom.mathml;
E.2.19 org/w3c/mathmldom/MathMLFencedElement.java
package org.w3c.dom.mathml;
E.2.20 org/w3c/mathmldom/MathMLEncloseElement.java
package org.w3c.dom.mathml;
E.2.21 org/w3c/mathmldom/MathMLActionElement.java
package org.w3c.dom.mathml;
E.2.22 org/w3c/mathmldom/MathMLFractionElement.java
package org.w3c.dom.mathml;
588
E.2.23 org/w3c/mathmldom/MathMLRadicalElement.java
package org.w3c.dom.mathml;
E.2.24 org/w3c/mathmldom/MathMLScriptElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
589
E.2.25 org/w3c/mathmldom/MathMLUnderOverElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
E.2.26 org/w3c/mathmldom/MathMLMultiScriptsElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
MathMLElement newScript)
throws DOMException;
public MathMLElement insertSuperScriptBefore(int colIndex,
MathMLElement newScript)
throws DOMException;
public MathMLElement setSuperScriptAt(int colIndex,
MathMLElement newScript)
throws DOMException;
};
E.2.27 org/w3c/mathmldom/MathMLTableElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
E.2.28 org/w3c/mathmldom/MathMLTableRowElement.java
package org.w3c.dom.mathml;
593
import org.w3c.dom.DOMException;
E.2.29 org/w3c/mathmldom/MathMLLabeledRowElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
E.2.30 org/w3c/mathmldom/MathMLTableCellElement.java
594
package org.w3c.dom.mathml;
E.2.31 org/w3c/mathmldom/MathMLAlignGroupElement.java
package org.w3c.dom.mathml;
E.2.32 org/w3c/mathmldom/MathMLAlignMarkElement.java
package org.w3c.dom.mathml;
595
E.2.33 org/w3c/mathmldom/MathMLContentElement.java
package org.w3c.dom.mathml;
E.2.34 org/w3c/mathmldom/MathMLContentToken.java
package org.w3c.dom.mathml;
import org.w3c.dom.Node;
E.2.35 org/w3c/mathmldom/MathMLCnElement.java
package org.w3c.dom.mathml;
E.2.36 org/w3c/mathmldom/MathMLCiElement.java
package org.w3c.dom.mathml;
E.2.37 org/w3c/mathmldom/MathMLCsymbolElement.java
package org.w3c.dom.mathml;
E.2.38 org/w3c/mathmldom/MathMLContentContainer.java
597
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
E.2.39 org/w3c/mathmldom/MathMLApplyElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
598
E.2.40 org/w3c/mathmldom/MathMLFnElement.java
package org.w3c.dom.mathml;
E.2.41 org/w3c/mathmldom/MathMLLambdaElement.java
package org.w3c.dom.mathml;
E.2.42 org/w3c/mathmldom/MathMLSetElement.java
package org.w3c.dom.mathml;
E.2.43 org/w3c/mathmldom/MathMLListElement.java
package org.w3c.dom.mathml;
E.2.44 org/w3c/mathmldom/MathMLBvarElement.java
package org.w3c.dom.mathml;
E.2.45 org/w3c/mathmldom/MathMLPredefinedSymbol.java
package org.w3c.dom.mathml;
600
E.2.46 org/w3c/mathmldom/MathMLTendsToElement.java
package org.w3c.dom.mathml;
E.2.47 org/w3c/mathmldom/MathMLIntervalElement.java
package org.w3c.dom.mathml;
E.2.48 org/w3c/mathmldom/MathMLConditionElement.java
package org.w3c.dom.mathml;
E.2.49 org/w3c/mathmldom/MathMLDeclareElement.java
package org.w3c.dom.mathml;
E.2.50 org/w3c/mathmldom/MathMLVectorElement.java
package org.w3c.dom.mathml;
602
import org.w3c.dom.DOMException;
E.2.51 org/w3c/mathmldom/MathMLMatrixElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
603
E.2.52 org/w3c/mathmldom/MathMLMatrixrowElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
604
E.2.53 org/w3c/mathmldom/MathMLPiecewiseElement.java
package org.w3c.dom.mathml;
import org.w3c.dom.DOMException;
605
E.2.54 org/w3c/mathmldom/MathMLCaseElement.java
package org.w3c.dom.mathml;
606
MathMLDOMImplementation has all the properties and methods of DOMImplementation as well as the properties and methods defined
below.
The MathMLDOMImplementation object has the following methods:
createMathMLDocument() This method returns a MathMLDocument.
MathMLDocument has all the properties and methods of Document as well as the properties and methods defined below.
The MathMLDocument object has the following properties:
referrer This property is of type DOMString.
domain This property is of type DOMString.
URI This property is of type DOMString.
MathMLNodeList has all the properties and methods of NodeList as well as the properties and methods defined below.
MathMLElement has all the properties and methods of Element as well as the properties and methods defined below.
The MathMLElement object has the following properties:
className This property is of type DOMString.
mathElementStyle This property is of type DOMString.
id This property is of type DOMString.
xref This property is of type DOMString.
607
MathMLAnnotationElement has all the properties and methods of MathMLElement as well as the properties and methods defined
below.
The MathMLAnnotationElement object has the following properties:
body This property is of type DOMString.
encoding This property is of type DOMString.
MathMLXMLAnnotationElement has all the properties and methods of MathMLElement as well as the properties and methods defined
below.
The MathMLXMLAnnotationElement object has the following properties:
encoding This property is of type DOMString.
MathMLPresentationElement has all the properties and methods of MathMLElement as well as the properties and methods defined
below.
MathMLGlyphElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLGlyphElement object has the following properties:
alt This property is of type DOMString.
fontfamily This property is of type DOMString.
index This property is of type unsigned long.
609
MathMLSpaceElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLSpaceElement object has the following properties:
width This property is of type DOMString.
height This property is of type DOMString.
depth This property is of type DOMString.
linebreak This property is of type DOMString.
MathMLPresentationToken has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLPresentationToken object has the following properties:
mathvariant This property is of type DOMString.
mathsize This property is of type DOMString.
mathcolor This property is of type DOMString.
mathbackground This property is of type DOMString.
contents This property is of type MathMLNodeList.
MathMLOperatorElement has all the properties and methods of MathMLPresentationToken as well as the properties and methods
defined below.
The MathMLOperatorElement object has the following properties:
form This property is of type DOMString.
fence This property is of type DOMString.
separator This property is of type DOMString.
lspace This property is of type DOMString.
rspace This property is of type DOMString.
stretchy This property is of type DOMString.
symmetric This property is of type DOMString.
maxsize This property is of type DOMString.
minsize This property is of type DOMString.
largeop This property is of type DOMString.
movablelimits This property is of type DOMString.
accent This property is of type DOMString.
610
MathMLStringLitElement has all the properties and methods of MathMLPresentationToken as well as the properties and methods
defined below.
The MathMLStringLitElement object has the following properties:
lquote This property is of type DOMString.
rquote This property is of type DOMString.
MathMLPresentationContainer has all the properties and methods of MathMLPresentationElement, MathMLContainer as well as the
properties and methods defined below.
MathMLStyleElement has all the properties and methods of MathMLPresentationContainer as well as the properties and methods
defined below.
The MathMLStyleElement object has the following properties:
scriptlevel This property is of type DOMString.
displaystyle This property is of type DOMString.
scriptsizemultiplier This property is of type DOMString.
scriptminsize This property is of type DOMString.
background This property is of type DOMString.
veryverythinmathspace This property is of type DOMString.
verythinmathspace This property is of type DOMString.
thinmathspace This property is of type DOMString.
mediummathspace This property is of type DOMString.
thickmathspace This property is of type DOMString.
verythickmathspace This property is of type DOMString.
veryverythickmathspace This property is of type DOMString.
negativeveryverythinmathspace This property is of type DOMString.
negativeverythinmathspace This property is of type DOMString.
negativethinmathspace This property is of type DOMString.
negativemediummathspace This property is of type DOMString.
negativethickmathspace This property is of type DOMString.
negativeverythickmathspace This property is of type DOMString.
negativeveryverythickmathspace This property is of type DOMString.
611
MathMLPaddedElement has all the properties and methods of MathMLPresentationContainer as well as the properties and methods
defined below.
The MathMLPaddedElement object has the following properties:
width This property is of type DOMString.
lspace This property is of type DOMString.
height This property is of type DOMString.
depth This property is of type DOMString.
MathMLFencedElement has all the properties and methods of MathMLPresentationContainer as well as the properties and methods
defined below.
The MathMLFencedElement object has the following properties:
open This property is of type DOMString.
close This property is of type DOMString.
separators This property is of type DOMString.
MathMLEncloseElement has all the properties and methods of MathMLPresentationContainer as well as the properties and methods
defined below.
The MathMLEncloseElement object has the following properties:
notation This property is of type DOMString.
MathMLActionElement has all the properties and methods of MathMLPresentationContainer as well as the properties and methods
defined below.
The MathMLActionElement object has the following properties:
actiontype This property is of type DOMString.
selection This property is of type DOMString.
MathMLFractionElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
612
MathMLRadicalElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLRadicalElement object has the following properties:
radicand This property is of type MathMLElement.
index This property is of type MathMLElement.
MathMLScriptElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLScriptElement object has the following properties:
subscriptshift This property is of type DOMString.
superscriptshift This property is of type DOMString.
base This property is of type MathMLElement.
subscript This property is of type MathMLElement.
superscript This property is of type MathMLElement.
MathMLUnderOverElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLUnderOverElement object has the following properties:
accentunder This property is of type DOMString.
accent This property is of type DOMString.
base This property is of type MathMLElement.
underscript This property is of type MathMLElement.
overscript This property is of type MathMLElement.
613
MathMLMultiScriptsElement has all the properties and methods of MathMLPresentationElement as well as the properties and meth-
ods defined below.
The MathMLMultiScriptsElement object has the following properties:
subscriptshift This property is of type DOMString.
superscriptshift This property is of type DOMString.
base This property is of type MathMLElement.
prescripts This property is of type MathMLNodeList.
scripts This property is of type MathMLNodeList.
numprescriptcolumns This property is of type unsigned long.
numscriptcolumns This property is of type unsigned long.
The MathMLMultiScriptsElement object has the following methods:
getPreSubScript(colIndex) This method returns a MathMLElement. The colIndex parameter is of type unsigned long.
getSubScript(colIndex) This method returns a MathMLElement. The colIndex parameter is of type unsigned long.
getPreSuperScript(colIndex) This method returns a MathMLElement. The colIndex parameter is of type unsigned long.
getSuperScript(colIndex) This method returns a MathMLElement. The colIndex parameter is of type unsigned long.
insertPreSubScriptBefore(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type
unsigned long. The newScript parameter is of type MathMLElement.
setPreSubScriptAt(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type un-
signed long. The newScript parameter is of type MathMLElement.
insertSubScriptBefore(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type
unsigned long. The newScript parameter is of type MathMLElement.
setSubScriptAt(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type unsigned
long. The newScript parameter is of type MathMLElement.
insertPreSuperScriptBefore(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of
type unsigned long. The newScript parameter is of type MathMLElement.
setPreSuperScriptAt(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type un-
signed long. The newScript parameter is of type MathMLElement.
insertSuperScriptBefore(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type
unsigned long. The newScript parameter is of type MathMLElement.
setSuperScriptAt(colIndex,newScript) This method returns a MathMLElement. The colIndex parameter is of type un-
signed long. The newScript parameter is of type MathMLElement.
MathMLTableElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLTableElement object has the following properties:
614
MathMLTableRowElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLTableRowElement object has the following properties:
rowalign This property is of type DOMString.
columnalign This property is of type DOMString.
groupalign This property is of type DOMString.
cells This property is of type MathMLNodeList.
615
MathMLLabeledRowElement has all the properties and methods of MathMLTableRowElement as well as the properties and methods
defined below.
The MathMLLabeledRowElement object has the following properties:
label This property is of type MathMLElement.
MathMLTableCellElement has all the properties and methods of MathMLPresentationContainer as well as the properties and methods
defined below.
The MathMLTableCellElement object has the following properties:
rowspan This property is of type DOMString.
columnspan This property is of type DOMString.
rowalign This property is of type DOMString.
columnalign This property is of type DOMString.
groupalign This property is of type DOMString.
hasaligngroups This property is of type boolean.
cellindex This property is of type DOMString.
MathMLAlignGroupElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLAlignGroupElement object has the following properties:
groupalign This property is of type DOMString.
616
MathMLAlignMarkElement has all the properties and methods of MathMLPresentationElement as well as the properties and methods
defined below.
The MathMLAlignMarkElement object has the following properties:
edge This property is of type DOMString.
MathMLContentElement has all the properties and methods of MathMLElement as well as the properties and methods defined below.
MathMLContentToken has all the properties and methods of MathMLContentElement as well as the properties and methods defined
below.
The MathMLContentToken object has the following properties:
arguments This property is of type MathMLNodeList.
definitionURL This property is of type DOMString.
encoding This property is of type DOMString.
The MathMLContentToken object has the following methods:
getArgument(index) This method returns a Node. The index parameter is of type unsigned long.
insertArgument(newArgument,index) This method returns a Node. The newArgument parameter is of type Node. The
index parameter is of type unsigned long.
setArgument(newArgument,index) This method returns a Node. The newArgument parameter is of type Node. The index
parameter is of type unsigned long.
deleteArgument(index) This method returns a void. The index parameter is of type unsigned long.
removeArgument(index) This method returns a Node. The index parameter is of type unsigned long.
MathMLCnElement has all the properties and methods of MathMLContentToken as well as the properties and methods defined below.
The MathMLCnElement object has the following properties:
type This property is of type DOMString.
base This property is of type DOMString.
nargs This property is of type unsigned long.
617
MathMLCiElement has all the properties and methods of MathMLContentToken as well as the properties and methods defined below.
The MathMLCiElement object has the following properties:
type This property is of type DOMString.
MathMLCsymbolElement has all the properties and methods of MathMLContentToken as well as the properties and methods defined
below.
MathMLContentContainer has all the properties and methods of MathMLContentElement, MathMLContainer as well as the properties
and methods defined below.
The MathMLContentContainer object has the following properties:
nBoundVariables This property is of type unsigned long.
condition This property is of type MathMLConditionElement.
opDegree This property is of type MathMLElement.
domainOfApplication This property is of type MathMLElement.
momentAbout This property is of type MathMLElement.
The MathMLContentContainer object has the following methods:
getBoundVariable(index) This method returns a MathMLBvarElement. The index parameter is of type unsigned long.
insertBoundVariable(newBVar,index) This method returns a MathMLBvarElement. The newBVar parameter is of type
MathMLBvarElement. The index parameter is of type unsigned long.
setBoundVariable(newBVar,index) This method returns a MathMLBvarElement. The newBVar parameter is of type MathML-
BvarElement. The index parameter is of type unsigned long.
deleteBoundVariable(index) This method returns a void. The index parameter is of type unsigned long.
removeBoundVariable(index) This method returns a MathMLBvarElement. The index parameter is of type unsigned long.
MathMLApplyElement has all the properties and methods of MathMLContentContainer as well as the properties and methods defined
below.
The MathMLApplyElement object has the following properties:
operator This property is of type MathMLElement.
lowLimit This property is of type MathMLElement.
upLimit This property is of type MathMLElement.
618
MathMLFnElement has all the properties and methods of MathMLContentContainer as well as the properties and methods defined
below.
The MathMLFnElement object has the following properties:
definitionURL This property is of type DOMString.
encoding This property is of type DOMString.
MathMLLambdaElement has all the properties and methods of MathMLContentContainer as well as the properties and methods
defined below.
The MathMLLambdaElement object has the following properties:
expression This property is of type MathMLElement.
MathMLSetElement has all the properties and methods of MathMLContentContainer as well as the properties and methods defined
below.
The MathMLSetElement object has the following properties:
isExplicit This property is of type boolean.
type This property is of type DOMString.
MathMLListElement has all the properties and methods of MathMLContentContainer as well as the properties and methods defined
below.
The MathMLListElement object has the following properties:
isExplicit This property is of type boolean.
ordering This property is of type DOMString.
MathMLBvarElement has all the properties and methods of MathMLContentContainer as well as the properties and methods defined
below.
619
MathMLPredefinedSymbol has all the properties and methods of MathMLContentElement as well as the properties and methods
defined below.
The MathMLPredefinedSymbol object has the following properties:
definitionURL This property is of type DOMString.
encoding This property is of type DOMString.
arity This property is of type DOMString.
symbolName This property is of type DOMString.
MathMLTendsToElement has all the properties and methods of MathMLPredefinedSymbol as well as the properties and methods
defined below.
The MathMLTendsToElement object has the following properties:
type This property is of type DOMString.
MathMLIntervalElement has all the properties and methods of MathMLContentElement as well as the properties and methods defined
below.
The MathMLIntervalElement object has the following properties:
closure This property is of type DOMString.
start This property is of type MathMLContentElement.
end This property is of type MathMLContentElement.
MathMLConditionElement has all the properties and methods of MathMLContentElement as well as the properties and methods
defined below.
The MathMLConditionElement object has the following properties:
condition This property is of type MathMLApplyElement.
MathMLDeclareElement has all the properties and methods of MathMLContentElement as well as the properties and methods defined
below.
The MathMLDeclareElement object has the following properties:
620
MathMLMatrixrowElement has all the properties and methods of MathMLContentElement as well as the properties and methods
defined below.
The MathMLMatrixrowElement object has the following properties:
nEntries This property is of type unsigned long.
The MathMLMatrixrowElement object has the following methods:
getEntry(index) This method returns a MathMLContentElement. The index parameter is of type unsigned long.
insertEntry(newEntry,index) This method returns a MathMLContentElement. The newEntry parameter is of type MathML-
ContentElement. The index parameter is of type unsigned long.
setEntry(newEntry,index) This method returns a MathMLContentElement. The newEntry parameter is of type MathML-
ContentElement. The index parameter is of type unsigned long.
deleteEntry(index) This method returns a void The index parameter is of type unsigned long.
removeEntry(index) This method returns a MathMLContentElement. The index parameter is of type unsigned long.
MathMLPiecewiseElement has all the properties and methods of MathMLContentElement as well as the properties and methods
defined below.
The MathMLPiecewiseElement object has the following properties:
pieces This property is of type MathMLNodeList.
otherwise This property is of type MathMLContentElement.
The MathMLPiecewiseElement object has the following methods:
getCase(index) This method returns a MathMLCaseElement. The index parameter is of type unsigned long.
setCase(index,case) This method returns a MathMLCaseElement. The index parameter is of type unsigned long. The
case parameter is of type MathMLCaseElement.
deleteCase(index) This method returns a void. The index parameter is of type unsigned long.
removeCase(index) This method returns a MathMLCaseElement. The index parameter is of type unsigned long.
insertCase(index,newCase) This method returns a MathMLCaseElement. The index parameter is of type unsigned long.
The newCase parameter is of type MathMLCaseElement.
getCaseValue(index) This method returns a MathMLContentElement. The index parameter is of type unsigned long.
setCaseValue(index,value) This method returns a MathMLContentElement. The index parameter is of type unsigned long.
The value parameter is of type MathMLContentElement.
getCaseCondition(index) This method returns a MathMLContentElement. The index parameter is of type unsigned long.
setCaseCondition(index,condition) This method returns a MathMLContentElement. The index parameter is of type un-
signed long. The condition parameter is of type MathMLContentElement.
622
MathMLCaseElement has all the properties and methods of MathMLContentElement as well as the properties and methods defined
below.
The MathMLCaseElement object has the following properties:
caseCondition This property is of type MathMLContentElement.
caseValue This property is of type MathMLContentElement.
Appendix F
The following table gives the suggested dictionary of rendering properties for operators, fences, separators, and accents in MathML, all of
which are represented by mo elements. For brevity, all such elements will be called simply ‘operators’ in this Appendix.
This entry means that, for MathML renderers which use this suggested operator dictionary, giving the element <mo form="prefix"> (
</mo> alone, or simply <mo> ( </mo> in a position for which form="prefix" would be inferred (see below), is equivalent to giving the
element with all attributes as shown above.
The Cascading Style Sheet sample given here is not normative. It is provided as a guide to illustrate the sort of CSS style sheet rules
which a MathML renderer should include in its default style sheet in order to comply with both the CSS and MathML specifications. In
particular, there is a need to provide rules to prevent the descent of CSS font rules into MathML expressions embedded in ambient text,
and to provide support for the mathfamily, mathslant, mathweight, mathsize, mathcolor and mathbackground attributes.
We expect that implementation experience will allow us to provide a more authoritative default MathML style sheet in the future. In the
interim, it is hoped that this illustrative sample will be helpful.
math, math[mode="inline"] {
display: inline;
font-family: CMSY10, CMEX10, Symbol, Times;
font-style: normal;
}
math[mode="display"] {
display: block;
text-align: center;
font-family: CMSY10, CMEX10, Symbol, Times;
font-style: normal;
}
math *.[mathvariant="normal"] {
font-family: "Times New Roman", Courier, Garamond, serif;
font-weight: normal;
font-style: normal;
}
math *.[mathvariant="bold"] {
font-family: "Times New Roman", Courier, Garamond, serif;
font-weight: bold;
font-style: normal;
}
math *.[mathvariant="italic"] {
font-family: "Times New Roman", Courier, Garamond, serif;
font-weight: normal;
font-style: italic;
}
math *.[mathvariant="bold-italic"] {
font-family: "Times New Roman", Courier, Garamond, serif;
font-weight: bold;
font-style: italic;
}
math *.[mathvariant="double-struck"] {
font-family: msbm;
font-weight: normal;
font-style: normal;
}
math *.[mathvariant="script"] {
font-family: eusb;
font-weight: normal;
font-style: normal;
}
math *.[mathvariant="bold-script"] {
font-family: eusb;
633
font-weight: bold;
font-style: normal;
}
math *.[mathvariant="fraktur"] {
font-family: eufm;
font-weight: normal;
font-style: normal;
}
math *.[mathvariant="bold-fraktur"] {
font-family: eufm;
font-weight: bold;
font-style: italic;
}
math *.[mathvariant="sans-serif"] {
font-family: Arial, "Lucida Sans Unicode", Verdana, sans-serif;
font-weight: normal;
font-style: normal;
}
math *.[mathvariant="bold-sans-serif"] {
font-family: Arial, "Lucida Sans Unicode", Verdana, sans-serif;
font-weight: bold;
font-style: normal;
}
math *.[mathvariant="sans-serif-italic"] {
font-family: Arial, "Lucida Sans Unicode", Verdana, sans-serif;
font-weight: normal;
font-style: italic;
}
math *.[mathvariant="sans-serif-bold-italic"] {
font-family: Arial, "Lucida Sans Unicode", Verdana, sans-serif;
font-weight: bold;
font-style: italic;
}
634
math *.[mathvariant="monospace"] {
font-family: monospace
}
math *.[mathsize="small"] {
font-size: 80%
}
math *.[mathsize="normal"] {
/* font-size: 100% - which is unnecessary */
}
math *.[mathsize="big"] {
font-size: 125%
}
/*Set size values for the "base" children of script and limit schema to
distinguish them from the script or limit children:
*/
msub>*:first-child[mathsize="big"],
msup>*:first-child[mathsize="big"],
msubsup>*:first-child[mathsize="big"],
munder>*:first-child[mathsize="big"],
mover>*:first-child[mathsize="big"],
munderover>*:first-child[mathsize="big"],
mmultiscripts>*:first-child[mathsize="big"],
mroot>*:first-child[mathsize="big"] {
font-size: 125%
}
msub>*:first-child[mathsize="small"],
msup>*:first-child[mathsize="small"],
msubsup>*:first-child[mathsize="small"],
munder>*:first-child[mathsize="small"],
635
mover>*:first-child[mathsize="small"],
munderover>*:first-child[mathsize="small"],
mmultiscripts>*:first-child[mathsize="small"],
mroot>*:first-child[mathsize="small"] {
font-size: 80%
}
msub>*:first-child,
msup>*:first-child,
msubsup>*:first-child,
munder>*:first-child,
mover>*:first-child,
munderover>*:first-child,
mmultiscripts>*:first-child,
mroot>*:first-child {
font-size: 100%
}
/*Set size values for the other children of script and limit schema (the
script and limit children) - include scriptlevel increment attribute?
*/
msub>*[mathsize="big"],
msup>*[mathsize="big"],
msubsup>*[mathsize="big"],
munder>*[mathsize="big"],
mover>*[mathsize="big"],
munderover>*[mathsize="big"],
mmultiscripts>*[mathsize="big"],
math[display="inline"] mfrac>*[mathsize="big"],
math *[scriptlevel="+1"][mathsize="big"] {
font-size: 89% /* (.71 times 1.25) */
}
msub>* [mathsize="small"],
msup>*[mathsize="small"],
msubsup>*[mathsize="small"],
munder>*[mathsize="small"],
mover>*[mathsize="small"],
636
munderover>*[mathsize="small"],
mmultiscripts>*[mathsize="small"],
math[display="inline"] mfrac>*[mathsize="small"],
math *[scriptlevel="+1"][mathsize="small"] {
font-size: 57% /* (.71 times .80) */
}
msub>*,
msup>*,
msubsup>*,
munder>*,
mover>*,
munderover>*,
mmultiscripts>*,
math[display="inline"] mfrac>*,
math *[scriptlevel="+1"] {
font-size: 71%
}
mroot>*[mathsize="big"] {
font-size: 62% /* (.50 times 1.25) */
}
mroot>*[mathsize="small"] {
font-size: 40% /* (.50 times .80) */
}
mroot>* {
font-size: 50%
}
math *[scriptlevel="+2"][mathsize="big"] {
font-size: 63% /* (.71 times .71 times 1.25) */
}
math *[scriptlevel="+2"][mathsize="small"] {
font-size: 36% /* (.71 times .71 times .71) */
637
math *[scriptlevel="+2"] {
font-size: 50% /* .71 times .71 */
}
math *.[mathcolor="green"] {
color: green
}
math *.[mathcolor="black"] {
color: black
}
math *.[mathcolor="red"] {
color: red
}
math *.[mathcolor="blue"] {
color: blue
}
math *.[mathcolor="olive"] {
color: olive
}
math *.[mathcolor="purple"] {
color: purple
}
math *.[mathcolor="teal"] {
color: teal
}
math *.[mathcolor="aqua"] {
color: aqua
}
math *.[mathcolor="gray"] {
638
color: gray
}
math *.[mathbackground="blue"] {
background-color: blue
}
math *.[mathbackground="green"] {
background-color: green
}
math *.[mathbackground="white"] {
background-color: white
}
math *.[mathbackground="yellow"] {
background-color: yellow
}
math *.[mathbackground="aqua"] {
background-color: aqua
}
@media aural {
}
Appendix H
Glossary (Non-Normative)
Several of the following definitions of terms have been borrowed or modified from similar definitions in documents originating from W3C
or standards organizations. See the individual definitions for more information.
Argument A child of a presentation layout schema. That is, ‘A is an argument of B’ means ‘A is a child of B and B is a presentation layout
schema’. Thus, token elements have no arguments, even if they have children (which can only be malignmark).
Attribute A parameter used to specify some property of an SGML or XML element type. It is defined in terms of an attribute name,
attribute type, and a default value. A value may be specified for it on a start-tag for that element type.
Axis The axis is an imaginary alignment line upon which a fraction line is centered. Often, operators as well as characters that can stretch,
such as parentheses, brackets, braces, summation signs etc., are centered on the axis, and are symmetric with respect to it.
Baseline The baseline is an imaginary alignment line upon which a glyph without a descender rests. The baseline is an intrinsic property
of the glyph (namely a horizontal line). Often baselines are aligned (joined) during typesetting.
Black box The bounding box of the actual size taken up by the viewable portion (ink) of a glyph or expression.
Bounding box The rectangular box of smallest size, taking into account the constraints on boxes allowed in a particular context, which
contains some specific part of a rendered display.
Box A rectangular plane area considered to contain a character or further sub-boxes, used in discussions of rendering for display. It is
usually considered to have a baseline, height, depth and width.
Cascading Style Sheets (CSS) A language that allows authors and readers to attach style (e.g. fonts, colors and spacing) to HTML and
XML documents.
Character A member of a set of identifiers used for the organization, control or representation of text. ISO/IEC Standard 10646-1:1993
uses the word ‘data’ here instead of ‘text’.
Character data (CDATA) A data type in SGML and XML for raw data that does not include markup or entity references. Attributes of type
CDATA may contain entity references. These are expanded by an XML processor before the attribute value is processed as
CDATA.
Character or expression depth Distance between the baseline and bottom edge of the character glyph or expression. Also known as
the descent.
Character or expression height Distance between the baseline and top edge of the character glyph or expression. Also known as the
ascent.
640
Character or expression width Horizontal distance taken by the character glyph as indicated in the font metrics, or the total width of an
expression.
Condition A MathML content element used to place a mathematical condition on one or more variables.
Contained (element A is contained in element B) A is part of B’s content.
Container (Constructor) A non-empty MathML Content element that is used to construct a mathematical object such as a number, set,
or list.
Content elements MathML elements that explicitly specify the mathematical meaning of a portion of a MathML expression (defined in
Chapter 4).
Content token element Content element having only PCDATA, sep and presentation expressions as content. Represents either an iden-
tifier (ci) or a number (cn).
Context (of a given MathML expression) Information provided during the rendering of some MathML data to the rendering process for
the given MathML expression; especially information about the MathML markup surrounding the expression.
Declaration An instance of the declare element.
Depth (of a box) The distance from the baseline of the box to the bottom edge of the box.
Direct sub-expression (of a MathML expression ‘E’) A sub-expression directly contained in E.
Directly contained (element A in element B) A is a child of B (as defined in XML), in other words A is contained in B, but not in any
element that is itself contained in B.
Document Object Model A model in which the document or Web page is treated as an object repository. This model is developed by the
DOM Working Group (DOM) of the W3C.
Document Style Semantics and Specification Language (DSSSL) A method of specifying the formatting and transformation of SGML
documents. ISO International Standard 10179:1996.
Document Type Definition (DTD) In SGML or XML, a DTD is a formal definition of the elements and the relationship among the data
elements (the structure) for a particular type of document.
Em A font-relative measure encoded by the font. Before electronic typesetting, an "em" was the width of an ‘M’ in the font. In modern
usage, an "em" is either specified by the designer of the font or is taken to be the height (point size) of the font. Em’s are
typically used for font-relative horizontal sizes.
Ex A font-relative measure that is the height of an ‘x’ in the font. "ex"s are typically used for font-relative vertical sizes.
Height (of a box) The distance from the baseline of the box to the top edge of the box.
Inferred mrow An mrow element that is ‘inferred’ around the contents of certain layout schemata when they have other than exactly one
argument. Defined precisely in Section 3.1.6
Embedded object Embedded objects such as Java applets, Microsoft Component Object Model (COM) objects (e.g. ActiveX Controls
and ActiveX Document embeddings), and plug-ins that reside in an HTML document.
Embellished operator An operator, including any ‘embellishment’ it may have, such as superscripts or style information. The ‘embellish-
ment’ is represented by a layout schema that contains the operator itself. Defined precisely in Section 3.2.5.
Entity reference A sequence of ASCII characters of the form &name; representing some other data, typically a non-ASCII character, a
sequence of characters, or an external source of data, e.g. a file containing a set of standard entity definitions such as ISO
Latin 1.
Extensible Markup Language (XML) A simple dialect of SGML intended to enable generic SGML to be served, received, and processed
on the Web.
641
Fences In typesetting, bracketing tokens like parentheses, braces, and brackets, which usually appear in matched pairs.
Font A particular collection of glyphs of a typeface of a given size, weight and style, for example ‘Times Roman Bold 12 point’.
Glyph The actual shape (bit pattern, outline) of a character. ISO/IEC Standard 9541-1:1991 defines a glyph as a recognizable abstract
graphic symbol that is independent of any specific design.
Indirectly contained A is contained in B, but not directly contained in B.
Instance of MathML A single instance of the top level element of MathML, and/or a single instance of embedded MathML in some other
data format.
Inverse function A mathematical function that, when composed with the original function acts like an identity function.
Lambda expression A mathematical expression used to define a function in terms of variables and an expression in those variables.
Layout schema (plural: schemata) A presentation element defined in chapter 3, other than the token elements and empty elements
defined there (i.e. not the elements defined in Section 3.2 and Section 3.5.5, or the empty elements none and mprescripts
defined in Section 3.4.7). The layout schemata are never empty elements (though their content may contain nothing in some
cases), are always expressions, and all allow any MathML expressions as arguments (except for requirements on argument
count, and the requirement for a certain empty element in mmultiscripts).
Mathematical Markup Language (MathML) The markup language specified in this document for describing the structure of mathemati-
cal expressions, together with a mathematical context.
MathML element An XML element that forms part of the logical structure of a MathML document.
MathML expression (within some valid MathML data) A single instance of a presentation element, except for the empty elements
none or mprescripts, or an instance of malignmark within a token element (defined below); or a single instance of certain
of the content elements (see Chapter 4 for a precise definition of which ones).
Multi-purpose Internet Mail Extensions (MIME) A set of specifications that offers a way to interchange text in languages with different
character sets, and multimedia content among many different computer systems that use Internet mail standards.
Operator, content element A mathematical object that is applied to arguments using the apply element.
Operator, an mo element Used to represent ordinary operators, fences, separators in MathML presentation. (The token element mo is
defined in Section 3.2.5).
OpenMath A general representation language for communicating mathematical objects between application programs.
Parsed character data (PCDATA) An SGML/XML data type for raw data occurring in a context where text is parsed and markup (for
instance entity references and element start/end tags) is recognized.
Point Point is often abbreviated ‘pt’. The value of 1 pt is approximately 1/72 inch. Points are typically used to specify absolute sizes for
font-related objects.
Pre-defined function One of the empty elements defined in Section 4.2.3 and used with the apply construct to build function applica-
tions.
Presentation elements MathML tags and entities intended to express the syntactic structure of mathematical notation (defined in Chap-
ter 3).
Presentation layout schema A presentation element that can have other MathML elements as content.
Presentation token element A presentation element that can contain only parsed character data or the malignmark element.
Qualifier A MathML content element that is used to specify the value of a specific named parameter in the application of selected
pre-defined functions.
Relation A MathML content element used to construct expressions such as a < b.
642
Render Faithfully translate into application-specific form allowing native application operations to be performed.
Schema Schema (plural: schemata or schemas). See ‘presentation layout schema’.
Scope of a declaration The portion of a MathML document in which a particular definition is active.
Selected sub-expression (of an maction element) The argument of an maction element (a layout schema defined in Section 3.6) that
is (at any given time) ‘selected’ within the viewing state of a MathML renderer, or by the selection attribute when the element
exists only in MathML data. Defined precisely in the abovementioned section.
Space-like (MathML expression) A MathML expression that is ignored by the suggested rendering rules for MathML presentation el-
ements when they determine operator forms and effective operator rendering attributes based on operator positions in mrow
elements. Defined precisely in Section 3.2.7.
Standard Generalized Markup Language (SGML) An ISO standard (ISO 8879:1986) that provides a formal mechanism for the defi-
nition of document structure via DTDs (Document Type Definitions), and a notation for the markup of document instances
conforming to a DTD.
Sub-expression (of a MathML expression ‘E’) A MathML expression contained (directly or indirectly) in the content of E.
Suggested rendering rules for MathML presentation elements Defined throughout Chapter 3; the ones that use other terms defined
here occur mainly in Section 3.2.5 and in Section 3.6.
TEX A software system developed by Professor Donald Knuth for typesetting documents.
Token element Presentation token element or a Content token element. (See above.)
Top-level element (of MathML) math (defined in Chapter 7).
Typeface A typeface is a specific design of a set of letters, numbers and symbols, such as ‘Times Roman’ or ‘Chicago’.
Valid MathML data MathML data that (1) conforms to the MathML DTD, (2) obeys the additional rules defined in the MathML standard
for the legal contents and attribute values of each MathML element, and (3) satisfies the EBNF grammar for content elements.
Width (of a box) The distance from the left edge of the box to the right edge of the box.
Extensible Style Language (XSL) A style language for XML developed by W3C. See XSL FO and XSLT.
XSL Formatting Objects (XSL FO) An XML vocabulary to express formatting, which is a part of XSL.
XSL Transformation (XSLT) A language to express the transformation of XML documents into other XML documents.
Appendix I
Participants in the Working Group responsible for MathML 2.0, second edition are:
• Ron Ausbrooks, Mackichan Software, Las Cruces NM, USA
• Laurent Bernardin, Waterloo Maple, Inc., Waterloo ON, CAN
• Stephen Buswell, Stilo Technology Ltd., Bristol, UK
• David Carlisle, NAG Ltd., Oxford, UK
• Stéphane Dalmas, INRIA, Sophia Antipolis, FR
• Stan Devitt, Stratum Technical Services Ltd., Waterloo ON, CAN (earlier with Waterloo Maple, Inc., Waterloo ON, CAN)
• Max Froumentin, W3C, Sophia-Antipolis, FRA
• Patrick Ion, Mathematical Reviews (American Mathematical Society), Ann Arbor MI, USA
• Michael Kohlhase, DFKI, GER
• Robert Miner, Design Science Inc., Long Beach CA, USA
• Luca Padovani, University of Bologna, IT
• Ivor Philips, Boeing, Seattle WA, USA
• Murray Sargent III, Microsoft, Redmond WA, USA
• Neil Soiffer, Wolfram Research Inc., Champaign IL, USA
• Paul Topping, Design Science Inc., Long Beach CA, USA
• Stephen Watt, University of Western Ontario, London ON, CAN
Earlier active participants of the W3C Math Working Group (2001 - 2003) have included:
• Angel Diaz, IBM Research Division, Yorktown Heights NY, USA
• Sam Dooley, IBM Research, Yorktown Heights NY, USA
• Barry MacKichan, MacKichan Software, Las Cruces NM, USA
644
The W3C Math Working Group was co-chaired by Patrick Ion of the AMS, and Angel Diaz of IBM from July 1998 to December 2000.
Participants in the Math Working Group responsible for the finished MathML 1.0 specification were:
• Stephen Buswell, Stilo Technology Ltd., Cardiff, UK
• Stéphane Dalmas, INRIA, Sophia Antipolis, FR
• Stan Devitt, Maplesoft Inc., Waterloo ON, CAN
• Angel Diaz, IBM Research Division, Yorktown Heights NY, USA
• Brenda Hunt, Wolfram Research Inc., Champaign IL, USA
645
I.2 Acknowledgments
The Working Group benefited from the help of many other people in developing the specification for MathML 1.0. We would like to
particularly name Barbara Beeton, Chris Hamlin, John Jenkins, Ira Polans, Arthur Smith, Robby Villegas and Joe Yurvati for help and
information in assembling the character tables in Chapter 6, as well as Peter Flynn, Russell S.S. O’Connor, Andreas Strotmann, and other
contributors to the www-math mailing list for their careful proofreading and constructive criticisms.
As the Math Working Group went on to MathML 2.0, it again was helped by many from the W3C family of Working Groups with whom
we necessarily had a great deal of interaction. Outside the W3C, a particularly active relevant front was the interface with the Unicode
Technical Committee (UTC) and the NTSC WG2 dealing with ISO 10646. There the STIX project put together a proposal for the addition
of characters for mathematical notation to Unicode, and this work was again spearheaded by Barbara Beeton of the AMS. The whole
problem ended split into three proposals, two of which were advanced by Murray Sargent of Microsoft, a Math WG member and member
of the UTC. But the mathematical community should be grateful for essential help and guidance over a couple of years of refinement of
the proposals to help mathematics provided by Kenneth Whistler of Sybase, and a UTC and WG2 member, and by Asmus Freytag, also
involved in the UTC and WG2 deliberations, and always a stalwart and knowledgeable supporter of the needs of scientific notation.
Appendix J
Changes (Non-Normative)
J.1 Changes between MathML 2.0 and MathML 2.0 Second Edition
• Changes to frontmatter.
– New text in and Status.
• Changes to Chapter 1.
– Additional markup for bibliographic references in Section 1.3 and Section 1.2.4.
• Changes to Section 2.1.
– Modify description of namespace declarations in Section 2.2.
– Modify description of entity usage in Section 2.3.1.
– Correct the MathML and default rendering of quatratic formula example in Section 2.3.2.
– Wording changes in Section 2.4.5.
• Changes to Chapter 3.
– Delete incorrect reference to default em units in Section 3.2.5.7.
– Delete references to Negative Space Characters in Section 3.2.6 and Section 3.3.4.
– Editorial changes to the wording in Section 3.2.8.
– Correct description of lspace value in Section 3.3.6.
– Add warning that attempts to render outside the bounding box of the MathML expression will give implemetation specific
results in Section 3.3.6.
– Modify text to match example and refer to over brace rather than over bar in Section 3.4.5.
– Correct description of displaystyle in Section 3.3.2 (may be set on mtable).
– Extend the description of Section 3.3.9 to clarify that the list of notations is open-ended, and extend the example list to
include boxes and strikeouts of various forms. The example in this section omitted units in the columnspacing and
rowspacing attributes.
– Correct the example MathML in Section 3.5.1.
– Correct the description of minlabelspacing and include mlabeledtr in list of elements with inferred mrows in Sec-
tion 3.5.5.
– Clarify rowspan and columnspan must be positive integers in Section 3.5.4.2.
647
– Editorial changes to use consistent terminology to describe conformance criteria for MathML processors in Section 7.2.1.1,
Section 7.2.1.2, Section 7.2.2, and Section 7.3.
• Changes to Appendix A.
– New section, Section A.1 describing use without a DTD.
– The location of the MathML DTDs described in Section A.2.1 and Section A.2.3 are now in the Math Working group area
rather than distributed with this Recommendation.
– New sections descriping parameterisation possibilities for the DTD: Section A.2.2.1 and Section A.2.2.2.
– In Section A.2.4, the link to the W3C Note on SGML and XML has been corrected and changed to a bibliography reference.
– The MathML DTD as shown in Section A.2.5 Incorporates several corrections as listed in the MathML 2.0 Errata docu-
ment, or listed in the change log at the end of the DTD.
– New section, Section A.3 describing the use of the W3C XML Schema for MathML.
• Changes to Appendix B.
– Many corrections, and new display format for the productions given in the grammar for Content Markup in Appendix B.
• Changes to Appendix C.
– Many corrections to the MathML Examples in C.2.1.1, C.2.1.2, C.2.2.4, C.2.3.2, C.2.3.9, C.2.3.11, C.2.3.12, C.2.3.3,
C.2.3.7, C.2.4.7, C.2.5.3, C.2.5.8, C.2.5.9, C.2.7.3, C.2.9.6, C.2.10.6, C.2.11.3, C.2.11.7, C.2.11.8, C.2.2.2, C.2.2.7,
C.2.2.9, C.2.2.10, C.2.2.13, C.2.2.14, C.2.2.15, C.2.2.16, C.2.2.17, C.2.3.1, C.2.3.5, C.2.3.18, C.2.5.1, C.2.3.4, C.2.3.6,
C.2.3.10, C.2.4.1, C.2.5.4, C.2.3.20, C.2.3.25, C.2.4.3, C.2.4.4, C.2.4.5, C.2.4.6, C.2.5.4, C.2.5.5, C.2.5.6, C.2.5.7, C.2.5.10,
C.2.6.1, C.2.6.2, C.2.6.3, C.2.6.4, C.2.6.7, C.2.6.8, C.2.7.1, C.2.7.2, C.2.8.1, C.2.8.2, C.2.8.3, C.2.8.4, C.2.8.5, C.2.8.6,
C.2.8.7, C.2.8.8, C.2.8.9, C.2.8.10, C.2.8.11, C.2.8.12, C.2.8.13, C.2.8.14, C.2.8.15, C.2.8.16, C.2.8.17, C.2.8.18, C.2.8.19,
C.2.8.20, C.2.8.21, C.2.8.22, C.2.8.23, C.2.8.24, C.2.8.25, C.2.8.26, C.2.8.27, C.2.9.7, C.2.10.1, C.2.10.2, C.2.10.5,
C.2.11.2, C.2.3.8, C.2.3.19, C.2.3.26, C.2.3.27, C.2.4.8, C.2.11.10, C.2.11.11, C.2.11.13, C.2.11.14, C.2.2.18.
– Clarify the use of definitionURL in Section C.1.
• Changes to Appendix D.
– Corrections to the following interfaces: MathMLPresentationToken, MathMLContentToken, MathMLSpaceElement, MathM-
LOperatorElement, MathMLStyleElement, MathMLFencedElement, MathMLFractionElement, MathMLContentElement,
MathMLIntervalElement, MathMLApplyElement, MathMLEncloseElement, MathMLActionElement, MathMLTableRowEle-
ment, MathMLCnElement, MathMLCiElement, MathMLTendsToElement.
– Modification of the description of tendsto in Section D.2.2.
• Changes to Appendix F.
– Blank lines in Section F.5 used in the inferred mrow grouping algorithm were omitted. They have been restored based on
the groupings in MathML 1.01.
– Some entity names in Section F.5 have been corrected and/or deleted to match the names in the MathML DTD.
• Changes to Appendix I.
– Document changes in Working Group membership in Section I.1.
– Editorial changes in Section I.2.
• Changes to Appendix J.
– New section Section J.1 describing changes in the Second Edition.
– Minor edits to the description of the earlier changes in Section J.2.
650
• Changes to Appendix K.
– Added and updated many entries: [Behaviors], [CSS1], [CSS2], [DOM], [HTML4], [MathML1], [MathML2], [Modularization],
[Namespaces], [RFC2045], [RFC2046], [sgml-xml], [SVG1.1], [XHTML], [XHTML-MathML-SVG], [XLink], [XML], [XMLSchemas],
[XPath], [XPointer], [XSLT], [UAX15].
• Changes to Appendix L.
– New Appendix Appendix L incorporating Section L.1 and Section L.2
• changes to Chapter 5
– added description of content-faithful transformation
– updated examples to reflect MathML 2.0
– define list of content that can appear in presentation
– add attribute xref for cross-referencing purposes
– added examples using XLink and namespaces
– make use of encoding attribute more uniform
– miscellaneous typographical corrections
• changes to Chapter 6
– added a new section describing the methods of using Unicode data within MathML
– added a new section describing the correspondence between Math Alphabet characters and the mathvariant attribute
– completely revised and reformatted the MathML character tables to reflect changes in Unicode since MathML 1.01
• changes to Chapter 7
– reworked the text in acknowledgement of the fact that the top-level and interface elements for MathML are now in practice
the same
– rewrote the text about linking to reflect changes in XLink since MathML 1.01
– revised material about interactions with embedded renderers to reflect the current state of DOM implementation
– added a definition of deprecated features in MathML 2
– updated the text to reflect the use of namespaces and the introduction of XHTML. 2.0
– added a new section on the appropriate use of CSS and the new mathematics style attributes in rendering environments
with support CSS
• changes to Chapter 8
– this is a completely new chapter
• changes to Appendix A
– renamed attribute occurence to occurrence
– added global attribute xref
– add links to tables for each entity set
• changes to Appendix B
– Updated to reflect MathML 2.0.
• changes to Appendix C
– completely rewritten to reflect changes in MathML 2.0
• changes to Appendix F
– entries in operator dictionary are parametrized
– operator dictionary has become a non-normative part of the specification
– new entries were added to operator dictionary
• changes to Appendix D
– this is a completely new appendix, containing the IDL definitions
• changes to Appendix H
– added entries for XSL, XSLT and XSL FO
652
• changes to Appendix I
– all members of first and second Math Working Group are listed
• changes to Appendix J
– completely new appendix, based on the logs obtained from CVS
• changes to Appendix K
– added and updated many entries
• general changes
– text of specification now in XML form, with HTML and XHTML rendering by means of XSLT, and PDF rendering by means
of XSLT and TEX
– fixed errors in spelling and notation
– normative examples of formulas are images, with a LaTEX equivalent
– non-normative examples of formulas are HTML constructions wherever possible
– improved cross-referencing
Appendix K
References (Non-Normative)
[AAP-math] ANSI/NISO Z39.59-1998; AAP Math DTD, Standard for Electronic Manuscript Preparation and MarkUp. (Association of Amer-
ican Publishers, Inc., Washington, DC) Bethesda, MD, 1988.
[Abramowitz1997] Abramowitz, Milton, Irene A. Stegun (editors); Mathematical Fuctions: With Formulas, Graphs, and Mathematical Ta-
bles. Dover Publications Inc., December 1977, ISBN: 0-4866-1272-4.
[Behaviors] Vidur Apparao, Daniel Glazman, and Chris Wilson (editors) Behavioral Extensions to CSS World Wide Web Consortium
Working Draft, 4 August 1999. (http://www.w3.org/TR/1999/WD-becss-19990804)
[Bidi] Mark Davis; The Bidirectional Algorithm, Unicode Standard Annex #9, August 2000. (http://www.unicode.org/unicode/
reports/tr9/)
[Buswell1996] Buswell, S., Healey, E.R. Pike, and M. Pike; SGML and the Semantic Representation of Mathematics. UIUC Digital Library
Initiative SGML Mathematics Workshop, May 1996 and SGML Europe 96 Conference, Munich 1996.
[Cajori1928] Cajori, Florian; A History of Mathematical Notations, vol. I & II. Open Court Publishing Co., La Salle Illinois, 1928 & 1929
republished Dover Publications Inc., New York, 1993, xxviii+820 pp. ISBN 0-486-67766-4 (paperback).
[Carroll1871] Carroll, Lewis [Rev. C.L. Dodgson]; Through the Looking Glass and What Alice Found There. Macmillian & Co., 1871.
[Chaundy1954] Chaundy, T.W., P.R. Barrett, and C. Batey; The Printing of Mathematics. Aids for authors and editors and rules for com-
positors and readers at the University Press, Oxford. Oxford University Press, London, 1954, ix+105 pp.
[CSS1] Lie, Håkon Wium and Bert Bos; Cascading Style Sheets, level 1, W3C Recommendation, 17 December 1996. (http://www.w3.
org/TR/1999/REC-CSS1-19990111)
[CSS2] Bert Bos, Håkon Wium Lie, Chris Lilley, and Ian Jacobs (editors); Cascading Style Sheets, level 2 CSS2 Specification, W3C
Recommendation, 12 May 1998. (http://www.w3.org/TR/1998/REC-CSS2-19980512)
[DOM] Arnaud Le Hors, Philippe Le Hégaret, Lauren Wood, Gavin Nicol, Jonathan Robie, Mike Champion, and Steve Byrne (editors);
Document Object Model (DOM) Level 2 Core Specification World Wide Web Consortium Recommendation, 13 November, 2000.
(http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113)
[Higham1993] Higham, Nicholas J.; Handbook of writing for the mathematical sciences. Society for Industrial and Applied Mathematics
(SIAM), Philadelphia, PA, 1993. xii+241 pp. ISBN: 0-89871-314-5.
654
[HTML4] Raggett, Dave, Arnaud Le Hors and Ian Jacobs (editors); HTML 4.01 Specification, 24 December 1999. (http://www.w3.org/
TR/1999/REC-html401-19991224); section on data types.
[ISO-12083] ISO 12083:1993; ISO 12083 DTD Information and Documentation - Electronic Manuscript Preparation and Markup. Interna-
tional Standards Organization, Geneva, Switzerland, 1993.
[ISOIEC10646-1] ISO/IEC JTC1/SC2/WG2; ISO/IEC 10646-1: 2000, Information technology – Universal-Octet Coded Character Set
(UCS) – Part 1: Architecture and Basic Multilingual Plane. International Standards Organization, Geneva, Switzerland, 2000. Also
published on CD-ROM. (http://anubis.dkuug.dk/JTC1/SC2/WG2/docs/projects#10646-1)
[Knuth1986] Knuth, Donald E.; The TEXbook. American Mathematical Society, Providence, RI and Addison-Wesley Publ. Co., Reading,
MA, 1986, ix+483 pp. ISBN: 0-201-13448-9.
[MathML1] Patrick Ion, Robert Miner, Mathematical Markup Language (MathML) 1.01 Specification W3C Recommendation, revision of 7
July 1999 (http://www.w3.org/TR/REC-MathML)
[MathML2] David Carlisle, Patrick Ion, Robert Miner, Nico Poppelier, Mathematical Markup Language (MathML) Version 2.0 W3C Rec-
ommendation 21 February 2001 (http://www.w3.org/TR/2001/REC-MathML2-20010221/)
[Modularization] Robert Adams, Murray Altheim, Frank Boumphrey, Sam Dooley, Shane McCarron, Sebastian Schnitzenbaumer, Ted
Wugofski (editors); Modularization of XHTML[tm], World Wide Web Consortium Recommendation, 10 April 2001. (http://www.w3.
org/TR/2001/REC-xhtml-modularization-20010410)
[Namespaces] Tim Bray, Dave Hollander, Andrew Layman (editors); Namespaces in XML, World Wide Web Consortium Recommenda-
tion, 14 January 1999. (http://www.w3.org/TR/1999/REC-xml-names-19990114)
[OpenMath2000] O. Caprotti, D. P. Carlisle, A. M. Cohen (editors); The OpenMath Standard, February 2000.
(http://www.openmath.org/standard)
[Pierce1961] Pierce, John R.; An Introduction to Information Theory. Symbols, Signals and Noise.. Revised edition of Symbols, Signals
and Noise: the Nature and Process of Communication (1961). Dover Publications Inc., New York, 1980, xii+305 pp. ISBN 0-486-
24061-4.
[Poppelier1992] Poppelier, N.A.F.M., E. van Herwijnen, and C.A. Rowley; Standard DTD’s and Scientific Publishing, EPSIG News 5 (1992)
#3, September 1992, 10-19.
[RFC2045] N. Freed and N. Borenstein; Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies,
RFC 2045, November 1996. (http://www.ietf.org/rfc/rfc2045.txt)
[RFC2046] N. Freed and N. Borenstein; Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types, RFC 2045, November
1996. (http://www.ietf.org/rfc/rfc2046.txt)
[RFC3023] M. Murata, S. St.Laurent and D. Kohn; XML Media Types, RFC 3023, January 2001. (http://www.ietf.org/rfc/
rfc3023.txt)
[RodWatt2000] Igor Rodionov, Stephen Watt; Content-Faithful Stylesheets for MathML. Technical Report TR-00-23, Ontario Research
Center for Computer Algebra, December 2000. (http://www.orcca.on.ca/TechReports/2000/TR-00-24.html)
[sgml-xml] J. Clark; Comparison of SGML and XML, W3C Note, December 1997. (http://www.w3.org/TR/NOTE-sgml-xml-971215.
html)
655
[Spivak1986] Spivak, M. D.; The Joy of TEX A gourmet guide to typesetting with the AMS-TEX macro package. American Mathematical
Society, Providence, RI, MA 1986, xviii+290 pp. ISBN: 0-8218-2999-8.
[SVG1.1] Dean Jackson, Jon Ferraiolo, Jun Fujisawa, eds. Scalable Vector Graphics (SVG) 1.1 Specification W3C Recommendation, 14
January 2003 (http://www.w3.org/TR/2003/REC-SVG11-20030114/)
[Swanson1979] Swanson, Ellen; Mathematics into type: Copy editing and proofreading of mathematics for editorial assistants and authors.
Revised edition. American Mathematical Society, Providence, R.I., 1979. x+90 pp. ISBN: 0-8218-0053-1.
[Swanson1999] Swanson, Ellen; Mathematics into type: Updated Edition. American Mathematical Society, Providence, R.I., 1999. 102
pp. ISBN: 0-8218-1961-5.
[Thieme1983] Thieme, Romeo; Satz und bedeutung mathematischer Formeln [Typesetting and meaning of mathematical formulas].
Reprint of the 1934 original. Edited by Karl Billmann, Helmut Bodden and Horst Nacke. Werner-Verlag Gmbh, Dusseldorf, 1983,
viii + 92 pp. ISBN 3-8041-3549-8.
[UAX15] Unicode Standard Annex 15, Version 4.0.0; Unicode Normalization Forms, The Unicode Consortium, 2003-04-17. (http://
www.unicode.org/reports/tr15/tr15-23.html)
[Unicode] The Unicode Consortium; The Unicode Standard, Version 3.0, Addison-Wesley Longman, Inc., Reading MA, 2000, XXX +
1040. ISBN 0-201-61633-5. (http://www.unicode.org/unicode/standard/standard.html)
[Unicode3.2] The Unicode Consortium; The Unicode Standard, Version 3.2, Addison-Wesley Longman, Inc., Reading MA, 2000, XXX +
1040. ISBN 0-201-61633-5. (http://www.unicode.org/unicode/standard/standard.html)
[XHTML] Steve Pemberton, Murray Altheim, et al.; XHTML[tm] 1.0: The Extensible HyperText Markup Language World Wide Web Con-
sortium Recommendation, 26 January 2000. (http://www.w3.org/TR/2000/REC-xhtml1-20000126)
[XHTML-MathML-SVG] Masayasu Ishikawa, ed., An HTML + MathML + SVG Profile W3C Working Draft, 9 August 2002. (http://www.
w3.org/TR/2002/WD-XHTMLplusMathMLplusSVG-20020809/)
[XLink] Steve DeRose, Eve Maler, David Orchard (editors); XML Linking Language (XLink) Version 1.0, World Wide Web Consortium
Recommendation, 27 June 2001. (http://www.w3.org/TR/2001/REC-xlink-20010627/)
[XML] Tim Bray, Jean Paoli, C.M. Sperberg-McQueen and Eve Maler (editors); Extensible Markup Language (XML) 1.0 (Second Edition),
6 October 2000. (http://www.w3.org/TR/2000/REC-xml-20001006)
[XMLSchemas] David C. Fallside, editor; XML Schema Part 0: Primer, World Wide Web Consortium Recommendation, 2 May 2001.
(http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/)
[XPath] James Clark, Steve DeRose(editors); XML Path Language Version 1.0, World Wide Web Consortium Recommendation, 16.
November 1999. (http://www.w3.org/TR/1999/REC-xpath-19991116)
[XPointer] Paul Grosso, Eve Maler, Jonathan Marsh, Norman Walsh (editors); XML Pointer Framework, World Wide Web Consortium
Recommendation, 25 March 2003. (http://www.w3.org/TR/2003/REC-xptr-framework-20030325/)
[XSLT] James Clark (editor); XSL Transformations (XSLT) Version 1.0, World Wide Web Consortium Recommendation, 16 November
1999. (http://www.w3.org/TR/1999/REC-xslt-19991116)
[Zwillinger1988] Daniel Zwillinger (editor); Standard Mathematical Tables and Formulae (30th Edition). CRC Press LLC, January 1996,
ISBN: 0-8493-2479-3.
Appendix L
Index (Non-Normative)
matrix 2.1.3, 2.3.2, 3.5.5.9, 4.2.1.1, 4.2.2, 4.2.2.2, 4.4, 4.4.10.2, D.1.4.2, D.1.4.4
matrixrow 2.3.2, 4.2.2, 4.2.2.2, 4.4, 4.4.10.2, 4.4.10.3, D.1.4.2, D.1.4.4
max 4.2.3, 4.2.3.2, 4.2.5, 4.4, 4.4.3.4, D.1.4.3
mean 4.2.3, 4.2.3.2, 4.4, 4.4.9.1, 5.4.1, D.1.4.3
median 4.2.3, 4.2.3.2, 4.4, 4.4.9.4, D.1.4.3
menclose 3.1.3.1, 3.1.3.2, 3.1.6.2, 3.3.9, 3.3.9.1, 3.3.9.2, 3.3.9.3, 3.5.5.6, D.1.3.3
merror 3.1.3.1, 3.1.3.2, 3.1.6.2, 3.3.5, 3.3.5.1, 7.2.2, D.1.3.3
mfenced 2.1.1, 2.3.1, 3.1.3.2, 3.1.6.2, 3.2.5.4, 3.3.1.1, 3.3.8, 3.3.8.1, 3.3.8.2, 3.3.8.3, 3.5.5.2, 3.5.5.4, 3.5.5.6, D.1.3.3
mfrac 2.1.2, 2.3.1, 3.1.3.2, 3.1.6.2, 3.2.2.2, 3.2.5.7, 3.3.2, 3.3.2.1, 3.3.2.2, 3.3.4.1, 3.3.4.2, 3.3.5.3, A.2.2.2, D.1.3.4
mfraction 3.3.5.3
mglyph 2.1.1, 3.1.2.1, 3.1.6.1, 3.2.1, 3.2.2, 3.2.2.1, 3.2.8.1, 3.2.9, 3.2.9.1, 3.2.9.2, 3.2.9.3, 6.2, 6.2.2, 6.4.1, 6.4.4, 7.1.4.2, 7.2.1.3, D.1.3.1,
J.1
mi 2.1.1, 2.1.2, 2.4.6, 3.1.5.1, 3.1.6.1, 3.2.2, 3.2.2.1, 3.2.3, 3.2.3.1, 3.2.3.2, 3.2.3.3, 3.2.4.2, 3.2.6.1, 3.2.6.4, 3.2.8.1, 3.2.9.1, 3.3.6.5,
3.5.5.4, 4.2.1.1, 4.4.1.2, 5.2.2, 5.2.3, 5.3.2, 6.2.3, D.1.3.2
min 4.2.3, 4.2.3.2, 4.2.5, 4.4, 4.4.3.4, D.1.4.3
minus 4.2.3, 4.2.3.1, 4.2.4, 4.4, 4.4.2.1, 4.4.3.5, B, D.1.4.3
mlabeledtr 3.1.3.2, 3.1.6.4, 3.3.4.1, 3.5, 3.5.1.1, 3.5.1.2, 3.5.3, 3.5.3.1, 3.5.3.2, 3.5.3.3, 3.5.4.1, 3.5.4.2, 3.5.5.7, D.1.3.4, J.1
mmultiscripts 2.1.2, 3.1.3.2, 3.1.6.3, 3.2.5.7, 3.3.4.2, 3.4.7, 3.4.7.1, 3.4.7.2, 3.4.7.3, 3.5.5.6, D.1.3.4
mn 2.1.1, 2.1.2, 2.4.6, 3.1.5.1, 3.1.6.1, 3.2.4, 3.2.4.1, 3.2.4.2, 3.2.4.4, 3.5.5.4, 3.5.5.6, 4.2.1.1, 4.4.1.1, 5.2.3, 5.3.2, D.1.3.2
mo 2.1.1, 2.1.2, 2.3.1, 2.4.6, 3.1.4, 3.1.5.1, 3.1.6.1, 3.2.4.2, 3.2.5, 3.2.5.1, 3.2.5.2, 3.2.5.4, 3.2.5.5, 3.2.5.6, 3.2.5.7, 3.2.5.8, 3.2.5.9,
3.2.6.1, 3.2.6.4, 3.2.7.3, 3.2.8.1, 3.3.1.1, 3.3.1.2, 3.3.1.3, 3.3.4.1, 3.3.4.2, 3.3.7.2, 3.3.7.3, 3.3.8.1, 3.3.8.2, 3.4.4.2, 3.4.5.2,
3.4.6.2, 4.4.1.3, 5.2.2, 5.3.2, D.1.3.2, F.1, F.2
mode 4.2.3, 4.2.3.2, 4.4, 4.4.9.5, D.1.4.3
moment 4.2.3.2, 4.4, 4.4.9.6, 4.4.9.7, D.1.4.2, D.1.4.3
momentabout 4.2.3.2, 4.4, 4.4.9.6, 4.4.9.7, D.1.4.2
mover 3.1.3.2, 3.1.6.3, 3.2.5.7, 3.2.5.8, 3.2.5.9, 3.3.4.2, 3.4.5, 3.4.5.1, 3.4.5.2, 3.4.6.2, 3.4.6.3, 3.5.5.6, A.2.2.2, D.1.3.4
mpadded 2.4.4.2, 3.1.3.1, 3.1.3.2, 3.1.6.2, 3.2.5.7, 3.2.7.3, 3.3.4.1, 3.3.6, 3.3.6.1, 3.3.6.2, 3.3.6.3, 3.3.6.4, 3.3.6.5, 3.3.7.2, 3.5.5.6,
D.1.3.3
mphantom 3.1.3.1, 3.1.3.2, 3.1.6.2, 3.2.5.7, 3.2.7.2, 3.2.7.3, 3.2.7.4, 3.3.6.4, 3.3.7, 3.3.7.1, 3.3.7.2, 3.3.7.3, 3.5.5.2, 3.5.5.5, 3.5.5.6,
D.1.3.3
mprescripts 3.1.2.2, 3.1.3.2, 3.4.7.1, 7.1.4.1, D.1.3.4
mroot 3.1.3.2, 3.1.6.2, 3.3.3, 3.3.3.1, 3.3.3.2, 3.3.4.2, 3.5.5.6, D.1.3.4
mrow 2.1.1, 2.1.2, 2.3.1, 2.4.2, 3.1.1, 3.1.3.1, 3.1.3.2, 3.1.4, 3.1.6.2, 3.2.5.2, 3.2.5.7, 3.2.5.8, 3.2.7.3, 3.2.7.4, 3.3.1, 3.3.1.1, 3.3.1.2,
3.3.1.3, 3.3.1.4, 3.3.3.1, 3.3.4.1, 3.3.5.1, 3.3.6.1, 3.3.6.3, 3.3.7.1, 3.3.7.2, 3.3.8.1, 3.3.8.2, 3.3.8.3, 3.3.9.1, 3.5.4.1, 3.5.5.2,
3.5.5.4, 3.5.5.6, 4.4.1.1, 4.4.1.3, 5.2.3, 7.1.2, 7.3.2, A.2.5, D.1.3.3, F.1
ms 2.4.6, 3.1.5.1, 3.1.6.1, 3.2.8, 3.2.8.1, 3.2.8.2, D.1.3.2
mspace 2.4.6, 3.1.6.1, 3.2.1, 3.2.2, 3.2.5.5, 3.2.6.1, 3.2.7, 3.2.7.1, 3.2.7.2, 3.2.7.3, 3.3.4.1, 3.3.6.4, 3.3.6.5, 3.5.5.5, 6.2.4, 6.4.2, D.1.3.1
msqrt 2.3.1, 3.1.3.1, 3.1.3.2, 3.1.6.2, 3.2.2.2, 3.2.5.7, 3.3.3, 3.3.3.1, 3.3.3.2, 3.3.9.2, 3.5.5.6, D.1.3.4
660
mstyle 2.1.2, 2.4.4.3, 2.4.4.4, 3.1.3.1, 3.1.3.2, 3.1.6.2, 3.2.2, 3.2.2.1, 3.2.2.2, 3.2.5.2, 3.2.5.7, 3.2.5.9, 3.2.7.3, 3.3.2.2, 3.3.3.2, 3.3.4,
3.3.4.1, 3.3.4.2, 3.3.4.3, 3.3.8.2, 3.4, 3.4.1.2, 3.4.2.2, 3.4.3.2, 3.4.4.2, 3.4.5.2, 3.4.6.2, 3.4.7.2, 3.5.1.2, 3.5.5.2, 3.5.5.6, D.1.3.3
msub 2.1.2, 3.1.3.2, 3.1.6.3, 3.2.3.1, 3.2.5.7, 3.3.4.2, 3.4.1, 3.4.1.1, 3.4.1.2, 3.5.5.6, A.2.2.2, D.1.3.4
msubsup 2.3.3, 3.1.3.2, 3.1.6.3, 3.2.5.7, 3.3.4.2, 3.4.3, 3.4.3.1, 3.4.3.2, 3.4.3.3, 3.4.7.2, 3.5.5.6, 7.3.1, D.1.3.4
msup 2.1.1, 3.1.3.2, 3.1.4, 3.1.6.3, 3.2.3.1, 3.2.5.7, 3.2.7.4, 3.3.4.2, 3.4.2, 3.4.2.1, 3.4.2.2, 3.5.5.6, D.1.3.4
mtable 2.3.1, 2.3.2, 2.4.4.2, 3.1.3.2, 3.1.4, 3.1.6.4, 3.2.2.2, 3.2.5.8, 3.3.2.2, 3.3.4.1, 3.3.4.2, 3.3.9.2, 3.5, 3.5.1, 3.5.1.1, 3.5.1.3, 3.5.2.1,
3.5.2.2, 3.5.3.1, 3.5.3.2, 3.5.3.3, 3.5.4.2, 3.5.5.1, 3.5.5.4, 3.5.5.7, 3.5.5.9, 3.5.5.10, 4.2.2.2, A.2.2.2, D.1.3.4, J.1
mtd 2.3.1, 3.1.3.1, 3.1.3.2, 3.1.4, 3.1.6.4, 3.2.5.7, 3.2.5.8, 3.3.4.1, 3.5, 3.5.1.1, 3.5.1.2, 3.5.2.1, 3.5.3.1, 3.5.3.2, 3.5.4, 3.5.4.1, 3.5.4.2,
3.5.5.1, 3.5.5.2, 3.5.5.4, 3.5.5.7, 3.5.5.10, A.2.2.2, D.1.3.4
mtext 2.4.6, 3.1.5.1, 3.1.6.1, 3.2.5.5, 3.2.6, 3.2.6.1, 3.2.6.2, 3.2.6.4, 3.2.7.2, 3.2.7.3, 3.2.8.1, 3.3.6.4, 3.3.6.5, 3.5.5.3, 3.5.5.4, 3.5.5.5,
3.6.1.1, D.1.3.2
mtr 2.3.1, 3.1.3.2, 3.1.4, 3.1.6.4, 3.3.4.1, 3.5, 3.5.1.1, 3.5.2, 3.5.2.1, 3.5.3.1, 3.5.3.2, 3.5.4.1, 3.5.4.2, 3.5.5.1, 3.5.5.4, 3.5.5.7, 3.5.5.10,
4.2.2.2, A.2.2.2, D.1.3.4
munder 2.1.2, 3.1.3.2, 3.1.6.3, 3.2.5.7, 3.2.5.8, 3.2.5.9, 3.3.4.2, 3.4.4, 3.4.4.1, 3.4.4.2, 3.4.6.2, 3.4.6.3, 3.5.5.6, D.1.3.4
munderover 3.1.3.2, 3.1.6.3, 3.2.5.7, 3.2.5.8, 3.2.5.9, 3.3.4.2, 3.4.6, 3.4.6.1, 3.4.6.2, 3.4.6.3, 3.5.5.6, D.1.3.4
naturalnumbers 4.4, 4.4.12.4, D.1.4.3
neq 4.2.4, 4.4, 4.4.4.2, D.1.4.3
none 2.4.2, 3.1.2.2, 3.4.7.1, 7.1.4.1, D.1.3.4
not 4.2.3, 4.4, 4.4.3.15, D.1.4.3
notanumber 4.4, 4.4.12.9, D.1.4.3
notin 4.2.4, 4.4, 4.4.6.6, D.1.4.3
notprsubset 4.2.4, 4.4, 4.4.6.10, D.1.4.3
notsubset 4.2.4, 4.4, 4.4.6.9, D.1.4.3
or 4.2.3, 4.2.3.2, 4.4, 4.4.3.13, D.1.4.3
otherwise 4.2.2, 4.2.2.2, 4.4, 4.4.2.16, D.1.4.4
outerproduct 4.2.3, 4.4, 4.4.10.9, D.1.4.3
partialdiff 2.1.3, 4.2.3, 4.2.3.2, 4.4, 4.4.5.3, 5.2.4, D.1.4.2, D.1.4.3
pi 4.3.2.9, 4.4, 4.4.12.13, D.1.4.3, J.1
piece 4.2.2, 4.2.2.2, 4.4, 4.4.2.16, D.1.4.4, J.1
piecewice J.1
piecewise 4.2.2, 4.2.2.2, 4.4, 4.4.2.16, D.1.4.4
plus 2.1.1, 2.4.2, 4.2.1.1, 4.2.1.2, 4.2.1.4, 4.2.1.6, 4.2.2.3, 4.2.3, 4.2.3.1, 4.2.3.2, 4.4, 4.4.2.1, 4.4.2.3, 4.4.3.6, 5.2.2, 5.2.4, 5.4.1, C.1.2,
D.1.4.2, D.1.4.3
power 2.1.1, 4.2.3, 4.4, 4.4.3.7, 5.4.1, D.1.4.3
primes 4.4, 4.4.12.6, D.1.4.3
product 4.2.3, 4.2.3.2, 4.4, 4.4.7.2, D.1.4.2, D.1.4.3
prsubset 4.2.4, 4.4, 4.4.6.8, D.1.4.3
quotient 4.2.3, 4.4, 4.4.3.1, D.1.4.3
rationals 4.2.8, 4.4, 4.4.12.3, D.1.4.3
661
encoding 2.3.3, 4.2.1.2, 4.2.1.4, 4.2.2.1, 4.2.6, 4.3.2.4, 4.4.1.1, 4.4.2.5, 4.4.2.8, 4.4.2.10, 4.4.2.11, 4.4.2.12, 4.4.2.13, 4.4.2.14, 4.4.2.15,
4.4.3.1, 4.4.3.2, 4.4.3.3, 4.4.3.4, 4.4.3.5, 4.4.3.6, 4.4.3.7, 4.4.3.8, 4.4.3.9, 4.4.3.10, 4.4.3.11, 4.4.3.12, 4.4.3.13, 4.4.3.14,
4.4.3.15, 4.4.3.16, 4.4.3.17, 4.4.3.18, 4.4.3.19, 4.4.3.20, 4.4.3.21, 4.4.3.22, 4.4.3.23, 4.4.3.24, 4.4.3.25, 4.4.3.26, 4.4.4.1,
4.4.4.2, 4.4.4.3, 4.4.4.4, 4.4.4.5, 4.4.4.6, 4.4.4.7, 4.4.4.8, 4.4.4.9, 4.4.5.1, 4.4.5.2, 4.4.5.3, 4.4.5.8, 4.4.5.9, 4.4.5.10, 4.4.5.11,
4.4.6.3, 4.4.6.4, 4.4.6.5, 4.4.6.6, 4.4.6.7, 4.4.6.8, 4.4.6.9, 4.4.6.10, 4.4.6.11, 4.4.6.12, 4.4.6.13, 4.4.7.1, 4.4.7.2, 4.4.7.3, 4.4.8.1,
4.4.8.2, 4.4.8.3, 4.4.8.4, 4.4.9.1, 4.4.9.2, 4.4.9.3, 4.4.9.4, 4.4.9.5, 4.4.9.6, 4.4.9.7, 4.4.10.4, 4.4.10.5, 4.4.10.6, 4.4.10.7, 4.4.10.8,
4.4.10.9, 4.4.11.1, 4.4.11.2, 4.4.11.3, D.1.2, D.1.4.3, J.1
equalcolumns 3.5.1.2
equalrows 3.5.1.2
fence 3.2.5.1, 3.2.5.4, 3.2.5.9, D.1.3.2
font-family 3.2.2.1
fontfamily 2.4.4.2, 3.2.2.1, 3.2.9.2, J.1, J.2
fontsize 2.4.4.2, 2.4.4.3, 3.2.2.1, 3.3.4.2, J.2
fontslant 3.2.2
fontstyle 3.2.3.2, 3.2.3.3, J.2
fontweight 3.2.2.1, 3.3.6.5, J.2
form 3.2.5.7, 3.3.1.2, 3.3.4.1, 3.3.7.2, 3.3.7.3, 3.3.8.2, D.1.3.2, F.1, F.2
frame 3.5.1.2
framespacing 2.4.4.2, 3.5.1.2
groupalign 3.3.4.1, 3.5.1.2, 3.5.2.2, 3.5.4.2, 3.5.5.3, 3.5.5.4, 3.5.5.5, 3.5.5.6, 3.5.5.7, 3.5.5.10
h-unit 2.4.4.1, 2.4.4.2, 3.2.5.2, 3.3.4.2
height 3.3.4.1, 3.3.6.3, D.1.3.1, D.1.3.3
href 5.3.4
html-color-name 3.2.2.2, D.1.3.2
id 1.3.2.3, 2.4.4.3, 2.4.5, 3.2.2, 3.2.7.2, 3.3.1.2, 3.3.2.2, 3.3.3.2, 3.3.4.2, 3.3.5.2, 3.3.6.2, 3.3.7.2, 3.3.8.2, 3.3.9.2, 3.4.1.2, 3.4.2.2, 3.4.3.2,
3.4.4.2, 3.4.5.2, 3.4.6.2, 3.5.1.2, 3.5.2.2, 3.5.5.5, 3.5.5.6, 3.6.1.1, 4.2.1.4, 4.3.3.2, 4.4.2.8, 4.4.5.6, 5.3.3, 5.3.4, 5.4.2, 7.1.2,
D.1.2
index 3.2.9.2
integer 2.4.4.1
largeop 3.2.5.9, 3.3.4.2, D.1.3.2
linebreak 3.2.7.2, J.1
linethickness 3.3.2.2, 3.3.4.1, A.3, D.1.3.4
lquote 3.2.8.2, D.1.3.2
lspace 3.2.5.7, 3.3.4.1, 3.3.6.1, 3.3.6.3, D.1.3.2, D.1.3.3, F.4, J.1
macros 7.1.2, D.1.2
mathbackground 3.2.2.2, D.1.3.2
mathcolor 3.2.2.2, D.1.3.2, J.2
mathfamily
mathsize 3.3.4.2, 7.1.6, D.1.3.2, J.2
664
mathslant
mathvariant 3.2.1.1, 3.2.2, 3.2.2.1, 3.2.3.2, 6.2.3, 6.3.6, 7.1.6, A.2.2.2, D.1.3.2, J.2
mathweight J.2
maxsize 3.2.5.2, 3.2.5.8, D.1.3.2
minlabelspacing 3.5.1.2, 3.5.3.1, 3.5.3.3, J.1
minsize 3.2.5.2, 3.2.5.8, D.1.3.2
mode 7.1.2
monospaced 2.4.4
movablelimits 3.2.5.9, 3.4.4.2, 3.4.5.2, 3.4.6.2, D.1.3.2
movablescripts 3.3.4.2
my:background 3.6.1.1
my:color 3.6.1.1
namedspace 3.2.5.2, 3.3.4.2
nargs 4.3.2.5, 4.4.2.8, D.1.4.4
notation 3.3.9.1, 3.3.9.2, D.1.3.3
numalign 3.3.2.2, D.1.3.4
number 2.4.4.1
occurrence 4.3.2.6, 4.4.2.8
open D.1.3.3
order 4.2.2.2, 4.3.2.7, 4.4.6.2, D.1.4.2
other 2.4.5, 4.3.3.2, 7.2.3
rowalign 3.3.4.1, 3.5.1.2, 3.5.2.2, 3.5.4.2
rowlines 3.5.1.2
rowspacing 3.5.1.2, J.1
rowspan 3.2.5.8, 3.5.1.1, 3.5.4.2, 3.5.5.9, J.1
rquote 3.2.8.2, D.1.3.2
rspace 3.2.5.7, 3.3.6.3, D.1.3.2, F.4
s:schemaLocation A.2.2.1
schemaLocation A.3.1
scope 4.2.1.6, 4.3.2.8, 4.4.2.8
scriptlevel 2.4.4.3, 3.2.2.1, 3.2.5.9, 3.3.2.2, 3.3.3.2, 3.3.4.1, 3.3.4.2, 3.4, 3.4.1.2, 3.4.2.2, 3.4.3.2, 3.4.4.2, 3.4.5.2, 3.4.6.2, 3.4.7.2,
3.5.1.2, D.1.3.3, F.4
scriptminsize 3.3.4.2, D.1.3.3
scriptsizemultiplier 3.3.4.2, D.1.3.3
selection 3.6.1.1
separator 3.2.5.1, 3.2.5.4, 3.2.5.9, D.1.3.2
separators 3.3.8.2, D.1.3.3
side 3.5.1.2, 3.5.3.1, 3.5.3.3
stretchy 3.2.5.8, 3.3.4.1, D.1.3.2
665
style 1.3.2.3, 2.4.4.3, 2.4.5, 3.2.2, 3.2.7.2, 3.3.1.2, 3.3.2.2, 3.3.3.2, 3.3.4.2, 3.3.5.2, 3.3.6.2, 3.3.7.2, 3.3.8.2, 3.3.9.2, 3.4.1.2, 3.4.2.2,
3.4.3.2, 3.4.4.2, 3.4.5.2, 3.4.6.2, 3.5.1.2, 3.5.2.2, 3.5.5.5, 3.5.5.6, 3.6.1.1, 4.3.3.2, D.1.2
subscriptshift 3.4.1.2, 3.4.3.2, D.1.3.4
superscriptshift 3.4.2.2, 3.4.3.2, D.1.3.4
symmetric 3.2.5.8, D.1.3.2
type 4.2.2.1, 4.2.2.2, 4.2.9, 4.3.2.9, 4.3.3.1, 4.4.1.1, 4.4.1.2, 4.4.2.8, 4.4.7.4, C.1.2, D.1.4.2, J.1
v-unit 2.4.4.1, 2.4.4.2, 3.2.2.1, 3.2.5.2, 3.3.4.2
width 3.3.4.1, 3.3.6.1, 3.3.6.3, 3.5.1.2, D.1.3.1, D.1.3.3, D.1.3.4
xlink:href 2.4.5, 5.3.4, 7.1.4.1, D.1.2
xml:space 2.4.6
xmlns 7.1.1
xref 2.4.5, 3.2.2, 3.2.7.2, 3.3.1.2, 3.3.2.2, 3.3.3.2, 3.3.4.2, 3.3.5.2, 3.3.6.2, 3.3.7.2, 3.3.8.2, 3.3.9.2, 3.4.1.2, 3.4.2.2, 3.4.3.2, 3.4.4.2,
3.4.5.2, 3.4.6.2, 3.5.1.2, 3.5.2.2, 3.5.5.5, 3.5.5.6, 3.6.1.1, 5.3.3, D.1.2
xsi:schemaLocation A.3.1