Mathematical Markup Language (MathML) Version 3.0

W3C Working Draft 05 October 2007

This version:
Latest MathML 3 version:
Latest MathML Recommendation:
Previous version:
David Carlisle, NAG
Patrick Ion, Mathematical Reviews, American Mathematical Society
Robert Miner, Design Science, Inc.
Principal Authors:
Ron Ausbrooks, Bert Bos, Olga Caprotti, David Carlisle, Giorgi Chavchanidze, Ananth Coorg, St├ęphane Dalmas, Stan Devitt, Sam Dooley, Margaret Hinchcliffe, Patrick Ion, Michael Kohlhase, Azzeddine Lazrek, Dennis Leas, Paul Libbrecht, Manolis Mavrikis, Bruce Miller, Robert Miner, Murray Sargent, Kyle Siegrist, Neil Soiffer, Stephen Watt, Mohamed Zergaoui


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.

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.

MathML can be used to encode both mathematical notation and mathematical content. About thirty-five of the MathML tags describe abstract notational structures, while another about one hundred and seventy 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 special characters used for mathematics, their handling in MathML, their presence in Unicode, and their relation to fonts.

While MathML is human-readable, in all but the simplest cases, authors use equation editors, conversion programs, and other specialized software tools to generate MathML. Several versions of such MathML tools exist, and more, both freely available software and commercial products, are under development.

Status of this Document

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 document is a W3C Public Working Draft produced by the W3C Math Working Group as part of the W3C Math Activity. The goals of the W3C Math Working Group are discussed in the W3C Math WG Charter (revised July 2006). A list of participants in the W3C Math Working Group is available.

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or made obsolete by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This second Public Working Draft specifies a new version of the the Mathematical Markup Language, MathML 3.0 which is at present under active development. The Math WG hopes this draft will permit informed feedback. There is a description of some considerations underlying this work in the W3C Math WG's public Roadmap [roadmap] which has recently been revised. Feedback should be sent to the Public W3C Math mailing list .

The MathML 2.0 (Second Edition) specification has been a W3C Recommendation since 2001. During the period since its recommendation, a W3C Math Interest Group collected the experience with the deployment of MathML and identified issues with MathML that might be ameliorated. The rechartering of a Math Working Group allows the revision to MathML 3.0 in the light of that experience, of other comments on the markup language, and of recent changes in specifications of the W3C and in the technological context. MathML 3.0 does not signal any change in the overall design of MathML. The major additions in MathML 3 are support for bidirectional layout, better linebreaking and explicit positioning, elementary math notations, and a new strict content MathML vocabulary with well-defined semantics generated from formal content dictionaries. The MathML 3 Specification has also been restructured.

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 www-math-request@w3.org with the word subscribe in the subject line.

Please report errors in this document to www-math@w3.org.

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

The basic chapter structure of this document is based on the earlier MathML 2.0 Recommendation [MathML2]. That MathML 2.0 itself was a revision of the earlier W3C Recommendation MathML 1.01 [MathML1]; MathML 3.0 is a revision of the W3C Recommendation MathML 2.0. It differs from it in that all previous chapters will have been updated, some new elements and attributes are being added and some have been deprecated. This second Public Working Draft differs in structure from the previous First Public Working Draft as new efforts have been made to separate formal specification from explanatory material resulting in a much slimmer specification with seven chapters not eight. Much has been moved to separate documents containing Primer material, material on Characters and Entities and on the MathML DOM. First Working Drafts of these documents will be published soon. A current list of open issues, pointing into the relevant places in the draft, follows the Table of Contents.

Table of Contents

1 Introduction
    1.1 Mathematics and its Notation
    1.2 Origins and Goals
        1.2.1 Design Goals of MathML
2 MathML Fundamentals
    2.1 MathML Syntax and Grammar
        2.1.1 MathML Syntax and Grammar
        2.1.2 Children versus Arguments
        2.1.3 MathML Attribute Values
        2.1.4 Attributes Shared by all MathML Elements
        2.1.5 Collapsing Whitespace in Input
    2.2 Interfacing [from ch 7]
    2.3 Conformance
        2.3.1 MathML Conformance
        2.3.2 Handling of Errors
        2.3.3 Attributes for unspecified data
    2.4 Future Extensions
        2.4.1 Macros and Style Sheets
        2.4.2 XML Extensions to MathML
    2.5 Embedding MathML in other Documents
        2.5.1 MathML and Namespaces
        2.5.2 The Top-Level math Element
3 Presentation Markup
    3.1 Introduction
        3.1.1 What Presentation Elements Represent
        3.1.2 Terminology Used In This Chapter
        3.1.3 Required Arguments
        3.1.4 Elements with Special Behaviors
        3.1.5 Directionality
        3.1.6 Summary of Presentation Elements
    3.2 Token Elements
        3.2.1 MathML characters in token elements
        3.2.2 Mathematics style attributes common to token elements
        3.2.3 Identifier (mi)
        3.2.4 Number (mn)
        3.2.5 Operator, Fence, Separator or Accent (mo)
        3.2.6 Text (mtext)
        3.2.7 Space (mspace)
        3.2.8 String Literal (ms)
        3.2.9 Accessing glyphs for characters from MathML (mglyph)
        3.2.10 Line mline
    3.3 General Layout Schemata
        3.3.1 Horizontally Group Sub-Expressions (mrow)
        3.3.2 Fractions (mfrac)
        3.3.3 Radicals (msqrt, mroot)
        3.3.4 Style Change (mstyle)
        3.3.5 Error Message (merror)
        3.3.6 Adjust Space Around Content (mpadded)
        3.3.7 Making Sub-Expressions Invisible (mphantom)
        3.3.8 Expression Inside Pair of Fences (mfenced)
        3.3.9 Enclose Expression Inside Notation (menclose)
    3.4 Script and Limit Schemata
        3.4.1 Subscript (msub)
        3.4.2 Superscript (msup)
        3.4.3 Subscript-superscript Pair (msubsup)
        3.4.4 Underscript (munder)
        3.4.5 Overscript (mover)
        3.4.6 Underscript-overscript Pair (munderover)
        3.4.7 Prescripts and Tensor Indices (mmultiscripts)
    3.5 Tabular Math
        3.5.1 Table or Matrix (mtable)
        3.5.2 Row in Table or Matrix (mtr)
        3.5.3 Labeled Row in Table or Matrix (mlabeledtr)
        3.5.4 Entry in Table or Matrix (mtd)
        3.5.5 Alignment Markers
        3.5.6 mcolumn
    3.6 Enlivening Expressions
        3.6.1 Bind Action to Sub-Expression (maction)
    3.7 Elementary Math
        3.7.1 Addition, Subtraction, and Multiplication
        3.7.2 Long Division
        3.7.3 Repeating decimal
    3.8 Semantics and Presentation
4 Content Markup
    4.1 Introduction
    4.2 Strict Content MathML
        4.2.1 The structure of MathML3 Content Expressions
        4.2.2 Encoding OpenMath Objects
        4.2.3 Numbers
        4.2.4 Symbols and Identifiers
        4.2.5 Function Application
        4.2.6 Bindings and Bound Variables
        4.2.7 Qualifiers
        4.2.8 Structure Sharing
        4.2.9 Attribution via semantics
        4.2.10 In Situ Error Markup
    4.3 The MathML3 Content Dictionaries and Operators
    4.4 Pragmatic Content MathML
        4.4.1 Numbers with constant type
        4.4.2 Non-empty csymbol Elements
        4.4.3 Symbols and Identifiers With Presentation MathML
        4.4.4 Elementary MathML Types on Tokens
        4.4.5 Token Elements
        4.4.6 Tokens with Attributes
        4.4.7 Container Markup
        4.4.8 Domain of Application in Applications
        4.4.9 Domain of Application in Bindings
        4.4.10 Integrals with Calling patterns
        4.4.11 degree
        4.4.12 Upper and Lower Limits
        4.4.13 Lifted Associative Commutative Operators
        4.4.14 Declare (declare)
    4.5 MathML3 Content Dictionaries
        4.5.1 MathML3 Content Dictionaries
        4.5.2 Symbol Declarations
        4.5.3 Type Declarations
        4.5.4 Symbol Roles
    4.6 Rendering of Content Elements
        4.6.1 Notation Specifications
        4.6.2 Precedence-based Elisions
        4.6.3 General Rules
        4.6.4 Attributes Modifying Content Markup Rendering
        4.6.5 Limitations and Extensions of Notation Documents
5 Combining Presentation and Content Markup
    5.1 Motivation
    5.2 Semantic Annotations
        5.2.1 The annotation-xml element
        5.2.2 Annotation references
    5.3 Attributions in Strict Content MathML
    5.4 Mixed Markup
        5.4.1 Reasons to Mix Markup
        5.4.2 Presentation Markup in Content Markup
        5.4.3 Content Markup in Presentation Markup
    5.5 Parallel Markup
        5.5.1 Top-level Parallel Markup
        5.5.2 Parallel Markup via Cross-References: id and xref
6 Characters, Entities and Fonts
    6.1 Introduction
    6.2 MathML Characters
        6.2.1 Unicode Character Data
        6.2.2 Special Characters Not in Unicode
        6.2.3 Mathematical Alphanumeric Symbols Characters
        6.2.4 Non-Marking Characters
7 MathML interactions with the Wide World
    7.1 Invoking MathML Processors: namespace, extensions, and mime-types
        7.1.1 Recognizing MathML in an XML Model
        7.1.2 Resource Types for MathML Documents
    7.2 Transferring MathML in Desktop Environments
        7.2.1 Basic Flavors' Names and Contents
        7.2.2 Recommended Behaviours when Transferring
        7.2.3 Discussion
        7.2.4 Examples
    7.3 Combining MathML and Other Formats
        7.3.1 Mixing MathML and HTML
        7.3.2 Linking
        7.3.3 Images
        7.3.4 MathML and Graphical Markup
    7.4 Using CSS with MathML


A Parsing MathML
    A.1 Use of MathML as Well-Formed XML
    A.2 Using the MathML DTD
        A.2.1 DOCTYPE declaration for MathML
        A.2.2 DTD Parameters
        A.2.3 MathML as a DTD Module
        A.2.4 SGML
        A.2.5 The MathML DTD
    A.3 Using the MathML XML Schema
        A.3.1 Associating the MathML schema with MathML fragments
        A.3.2 Character entity references
B Content Markup Validation Grammar
C MathML3 Content Dictionaries
D Operator Dictionary (Non-Normative)
    D.1 Format of operator dictionary entries
    D.2 Indexing of operator dictionary
    D.3 Choice of entity names
    D.4 Notes on lspace and rspace attributes
    D.5 Operator dictionary entries
E Sample CSS Style Sheet for MathML (Non-Normative)
F Glossary (Non-Normative)
G Working Group Membership and Acknowledgments (Non-Normative)
    G.1 The Math Working Group Membership
    G.2 Acknowledgments
H Changes (Non-Normative)
    H.1 Changes between MathML 2.0 Second Edition and MathML 3.0
I References (Non-Normative)
J Index (Non-Normative)
    J.1 MathML Elements
    J.2 MathML Attributes

Open Issues

The following is a list of open issues which are highlighted in this draft. The issue name links to the text of the issue in this specification. There is also a W3C member-only link to the Math Working Group wiki. (Note that in many cases the wiki does not have a page discussing the issue, but will offer to create such pages on demand.) In some cases there is also a (member only) link to the Math Working Group's Issue tracking system.

MathML Fundamentals

update_interface   wiki (member only)
Update Interface
linebreak-control   wiki (member only)
linebreak control
indent-control   wiki (member only)
indent control

Presentation Markup

bidi-unicode-properties   wiki (member only)
Check unicode additions and properties for BiDi
linebreak-op   wiki (member only)
linebreak operators
missing-char   wiki (member only)
Missing Character
indent-count   wiki (member only)
Indent Count
indent-align   wiki (member only)
Indent Align
indent-id   wiki (member only)
Indent ID
mline-generalization   wiki (member only)
mline generalization
bidi-mrow-dir-att   wiki (member only)
Direction attribute for mrow
bidi-mfrac-alignment   wiki (member only)
Left/Right values for numalign, denomalign
bidi-arabic-bevelled-mfrac   wiki (member only)
Check bevelled mfrac
bidi-mstyle-dir-att   wiki (member only)
Direction attribute for mstyle
mpadded-clipping   wiki (member only)
Bounding Box as Clipping Rectangle
mpadded-examples   wiki (member only)
mpadded examples
bidi-describe-madruwb   wiki (member only)
Describe "madruwb"
bidi-mtable-alignment   wiki (member only)
Left/Right values for columnalign, etc
centering-overflows-mcolumn   wiki (member only)
mcolumn overflow
mphantom-mcolumn   wiki (member only)
mcolumn mphantom
mcolumn-multidigit-alignment   wiki (member only)
mcolumn multidigit alignment
deprecate_maction   wiki (member only)
Deprecate maction
elem-ldiv-img   wiki (member only)
Images/Examples Needed
elem-ldiv-img2   wiki (member only)
Image Needed

Content Markup

MathML_CDs_URI   wiki (member only)
What is the official URI for MathMLCDs
definitionURL_encoding   wiki (member only)   ISSUE-17 (member only)
URI encoding of cdbase/cd/name triplet
cdbase-default   wiki (member only)   ISSUE-13 (member only)
cdbase default value
share_presentation   wiki (member only)   ISSUE-12 (member only)
share in Presentation MathML as well?
lifted_operators   wiki (member only)   ISSUE-8 (member only)
New Symbols for Lifted Operators
large_ops   wiki (member only)   ISSUE-18 (member only)
Large Operators
mcd_namespace   wiki (member only)
A separate namespace for MathML CDs?
mcd_text_format   wiki (member only)
Text Format for MathML CDs?
mcd_dates   wiki (member only)   ISSUE-4 (member only)
Revision date for MathML3 Spec content dictionaries
official_mcd   wiki (member only)   ISSUE-5 (member only)
Approving bodies for CDs?
mathml_roles   wiki (member only)
More Roles for MathML?
style-selector   wiki (member only)
Style Selector Specified?
bracketing-naming   wiki (member only)
bracketing operands in conflict
other_nowadays   wiki (member only)   ISSUE-3 (member only)
other is deprecated, delete the following

Characters, Entities and Fonts

regenerate_character_and_entity_tables   wiki (member only)
Character and entity tables need to be updated for MathML3 and ISO 9573-13

MathML interactions with the Wide World

specify-encoding-names-in-details   wiki (member only)
Encoding Names jungle
Linking-and-marking-ids   wiki (member only)
Linking and Marking IDs

Parsing MathML

update_schema   wiki (member only)
DTD and W3C XML Schema
relax_schema   wiki (member only)
Relax Schema
regenerate_character_and_entity_tables2   wiki (member only)
Character and tables need to be updated for MathML3 and ISO 9573-13

Content Markup Validation Grammar

update_content_grammar   wiki (member only)
Update Content Grammar
content_grammar_relax   wiki (member only)
Content Grammar relax NG

MathML3 Content Dictionaries

cds_normative   wiki (member only)
Are CDs normative in MathML3
integrals_om_mathml   wiki (member only)   ISSUE-9 (member only)
Sort out integrals between OpenMath and MathML
algebraic_diff   wiki (member only)   ISSUE-10 (member only)
Algebraic differentiation operator
algebraic_ndiff   wiki (member only)   ISSUE-10 (member only)
nfold algebraic differentiation
type_on_set   wiki (member only)
Keep type attribute on set?
type_on_tendsto   wiki (member only)
keep type attribute on tendsto?

Operator Dictionary

update_opdict   wiki (member only)
Update Operator Dictionary


update_changes   wiki (member only)
Changes between MathML 2 and 3 need to be logged