semantics
elementannotation
elementannotation-xml
elementMathML markup can be combined with other markup languages, and
these mixing constructions are realized by the semantic annotation
elements. The semantic annotation elements provide an important tool
for making associations between alternate representations of an
expression, and for associating semantic properties and other
attributions with a MathML expression. These elements allow
presentation markup and content markup to be combined in several
different ways. One method, known as mixed markup, is to
intersperse content and presentation elements in what is essentially a
single tree. Another method, known as parallel markup,
is to provide both explicit presentation markup and content markup in
a pair of markup expressions, combined by a single semantics
element.
An important concern of MathML is to represent associations between presentation and content markup forms for an expression. Representing associations between MathML expressions and data of other kinds is also important in many contexts. For this reason, MathML provides a general framework for annotation. A MathML expression may be decorated with a sequence of pairs made up of a symbol that indicates the kind of annotation, known as the annotation key, and associated data, known as the annotation value.
The semantics
, annotation
, and
annotation-xml
elements are used together to represent
annotations in MathML. The semantics
element provides the
container for a expression and its annotations. The
annotation
element is the container for text
annotations, and the annotation-xml
element is used for XML
annotations. The semantics
element contains the expression
being annotated as its first child, followed by a sequence of zero or
more annotation
and/or annotation-xml
elements.
<semantics>
<mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--FUNCTION APPLICATION--></mo>
<mfenced><mi>x</mi></mfenced>
</mrow>
<mo>+</mo>
<mn>5</mn>
</mrow>
<annotation encoding="application/x-tex">
\sin x + 5
</annotation>
<annotation-xml encoding="application/openmath+xml">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMS cd="arith1" name="plus"/>
<OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA>
<OMI>5</OMI>
</OMA>
</annotation-xml>
</semantics>
The semantics
element is considered to be both a presentation
element and a content element, and may be used in either context.
All MathML processors should process the semantics
element,
even if they only process one of these two subsets of MathML.
An annotation key specifies the relationship between an expression and an annotation. Many kinds of relationships are possible. Examples include alternate representations, specification or clarification of semantics, type information, rendering hints, and private data intended for specific processors. The annotation key is the primary means by which a processor determines whether or not to process an annotation.
The logical relationship between an expression and an annotation can have a significant impact on the proper processing of the expression. For example, a particular annotation form, called semantic attributions, cannot be ignored without altering the meaning of the annotated expression, at least in some processing contexts. On the other hand, alternate representations do not alter the meaning of an expression, but may alter the presentation of the expression as they are frequently used to provide rendering hints. Still other annotations carry private data or metadata that are useful in a specific context, but do not alter either the semantics or the presentation of the expression.
In MathML 3, annotation keys are defined as symbols in Content Dictionaries, and are specified using
of the cd
and name
attributes on the
annotation
and annotation-xml
elements. For backward
compatibility with MathML 2, an annotation key may also be referenced
using the definitionURL
attribute as an alternative to the
cd
and name
attributes. Further details on
referencing symbols in Content Dictionaries are discussed in Section 4.2.3 Content Symbols <csymbol>
. The symbol definition in a Content Dictionary
for an annotation key may have a role
property. Two
particular roles are relevant for annotations: a role of
"attribution" identifies a generic annotation that can
be ignored without altering the meaning of the annotated term, and a
role of "semantic-attribution" indicates that the annotation
is a semantic annotation, that is, the annotation cannot be ignored
without potentially altering the meaning of the expression.
MathML 3 provides two predefined annotation keys for the most common kinds of annotations: alternate-representation and contentequiv defined in the mathmlkeys content dictionary. The alternate-representation annotation key specifies that the annotation value provides an alternate representation for an expression in some other markup language, and the contentequiv annotation key specifies that the annotation value provides a semantically equivalent alternative for the annotated expression. Further details about the use of these keys is given in the sections below.
The default annotation key is alternate-representation when no annotation key is
explicitly specified on an annotation
or
annotation-xml
element.
Typically, annotation keys specify only the logical nature of the
relationship between an expression and an annotation. The data format
for an annotation is indicated with the encoding
attribute. In MathML 2, the encoding
attribute was the
primary information that a processor could use to determine whether or
not it could understand an annotation. For backward compatibility,
processors are encouraged to examine both the annotation key and
encoding
attribute. In
particular, MathML 2 specified the predefined encoding values
MathML
, MathML-Content
, and
MathML-Presentation
. The MathML
encoding
value is used to indicate an annotation-xml
element contains
a MathML expression. The use of the other values is more specific, as
discussed in following sections.
While the predefined alternate-representation and contentequiv keys cover many common use cases, user communities are encouraged to define and standardize additional content dictionaries as necessary. Annotation keys in user-defined, public Content Dictionaries are preferred over private encoding attribute value conventions, since content dictionaries are more expressive, more open and more maintainable than private encoding values. However, for backward compatibility with MathML 2, the encoding attribute may also be used.
Alternate representation annotations are most often used to provide renderings for an expression, or to provide an equivalent representation in another markup language. In general, alternate representation annotations do not alter the meaning of the annotated expression, but may alter its presentation.
A particularly important case is the use of a presentation MathML
expression to indicate a preferred rendering for a content MathML
expression. This case may be represented by labeling the annotation
with the application/mathml-presentation+xml
value for
the encoding
attribute. For backward compatibility with
MathML 2.0, this case can also be represented with the equivalent
MathML-Presentation
value for the encoding
attribute. Note that when a presentation MathML annotation is
present in a semantics
element, it may be used as the
default rendering of the semantics
element, instead of
the default rendering of the first child.
In the example below, the semantics
element binds together
various alternate representations for a content MathML expression.
The presentation MathML annotation may be used as the
default rendering, while the other annotations give representations
in other markup languages. Since no attribution keys are explicitly
specified, the default annotation key
alternate-representation applies
to each of the annotations.
<semantics>
<apply>
<plus/>
<apply><sin/><ci>x</ci></apply>
<cn>5</cn>
</apply>
<annotation-xml encoding="MathML-Presentation">
<mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--FUNCTION APPLICATION--></mo>
<mfenced open="(" close=")"><mi>x</mi></mfenced>
</mrow>
<mo>+</mo>
<mn>5</mn>
</mrow>
</annotation-xml>
<annotation encoding="application/x-maple">
sin(x) + 5
</annotation>
<annotation encoding="application/vnd.wolfram.mathematica">
Sin[x] + 5
</annotation>
<annotation encoding="application/x-tex">
\sin x + 5
</annotation>
<annotation-xml encoding="application/openmath+xml">
<OMA xmlns="http://www.openmath.org/OpenMath">
<OMA>
<OMS cd="arith1" name="plus"/>
<OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA>
<OMI>5</OMI>
</OMA>
</OMA>
</annotation-xml>
</semantics>
Content equivalent annotations provide additional computational information about an expression. Annotations with the contentequiv key cannot be ignored without potentially changing the behavior of an expression.
An important case arises when a content MathML annotation is used
to disambiguate the meaning of a presentation MathML expression.
This case may be represented by labeling the annotation with the
application/mathml-content+xml
value for the
encoding
attribute. In
MathML 2, this type of annotation was represented with the equivalent
MathML-Content
value for the encoding
attribute,
so processors are urged to support this usage for backward compatibility.
A content MathML annotation, whether in MathML 2 or 3, may be used for
other purposes as well, such as for other kinds of semantic assertions.
Consequently, in MathML 3, the
contentequiv annotation key should
be used to make an explicit assertion that the annotation provides a
definitive content markup equivalent for an expression.
In the example below, an ambiguous presentation MathML expression
is annotated with a MathML-Content
annotation clarifying
its precise meaning.
<semantics> <mrow> <mrow> <mi>a</mi> <mfenced open="(" close=")"> <mrow><mi>x</mi><mo>+</mo><mn>5</mn></mrow> </mfenced> </mrow> </mrow> <annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content"> <apply> <ci>a</ci> <apply><plus/><ci>x</ci><cn>5</cn></apply> </apply> </annotation-xml> </semantics>
In the usual case, each annotation element includes either character data
content (in the case of annotation
) or XML markup data (in the case
of annotation-xml
) that represents the annotation value.
There is no restriction on the type of annotation that may appear within a
semantics
element. For example, an annotation could provide a
TEX encoding, a linear input form for a computer algebra system,
a rendered image, or detailed mathematical type information.
In some cases the alternative children of a semantics
element
are not an essential part of the behavior of the annotated expression, but
may be useful to specialized processors. To enable the availability of
several annotation formats in a more efficient manner, a semantics
element may contain empty annotation
and annotation-xml
elements that provide encoding
and src
attributes
to specify an external location for the annotation value associated with
the annotation. This type of annotation is known as an annotation
reference.
<semantics> <mfrac><mi>a</mi><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac> <annotation encoding="image/png" src="333/formula56.png"/> <annotation encoding="application/x-maple" src="333/formula56.ms"/> </semantics>
Processing agents that anticipate that consumers of exported markup may not be able to retrieve the external entity referenced by such annotations should request the content of the external entity at the indicated location and replace the annotation with its expanded form.
An annotation reference follows the same rules as for other annotations to determine the annotation key that specifies the relationship between the annotated object and the annotation value.
This section explains the semantic mapping elements semantics
,
annotation
, and annotation-xml
. These elements associate
alternate representations for a presentation or content expression, or
associate semantic or other attributions that may modify the meaning of
the annotated expression.
semantics
element
The semantics
element is the container element that
associates annotations with a MathML expression. The
semantics
element has as its first child the expression to be
annotated. Any MathML expression may appear as the first child of the
semantics
element. Subsequent annotation
and
annotation-xml
children enclose the annotations.
An annotation represented in XML is enclosed in an
annotation-xml
element. An annotation represented
in character data is enclosed in an annotation
element.
As noted above, the semantics
element is considered to be
both a presentation element and a content element, since it can act
as either, depending on its content. Consequently, all MathML
processors should process the semantics
element, even if they
process only presentation markup or only content markup.
The default rendering of a semantics
element is the default
rendering of its first child. A renderer may use the information contained
in the annotations to customize its rendering of the annotated element.
<semantics>
<mrow>
<mrow>
<mi>sin</mi>
<mo>⁡<!--FUNCTION APPLICATION--></mo>
<mfenced><mi>x</mi></mfenced>
</mrow>
<mo>+</mo>
<mn>5</mn>
</mrow>
<annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
<apply>
<plus/>
<apply><sin/><ci>x</ci></apply>
<cn>5</cn>
</apply>
</annotation-xml>
<annotation encoding="application/x-tex">
\sin x + 5
</annotation>
</semantics>
Name | values | default |
---|---|---|
definitionURL | URI | none |
The location of an external source for semantic information | ||
encoding | string | none |
The encoding of the external semantic information |
The semantics
element takes the definitionURL
and
encoding
attributes, which reference an external source for some
or all of the semantic information for the annotated element, as modified
by the annotation. The use of these attributes on the semantics
element is deprecated in MathML3.
annotation
element
The annotation
element is the container element for a semantic
annotation whose representation is parsed character data in a non-XML
format. The annotation
element should contain the character
data for the annotation, and should not contain XML markup elements.
If the annotation contains one of the XML reserved characters
&
, <
, >
,
'
, or "
, then these characters must
be encoded using an XML entity reference or an XML CDATA
section.
Name | values | default |
---|---|---|
definitionURL | URI | none |
The location of the annotation key symbol | ||
encoding | string | none |
The encoding of the semantic information in the annotation | ||
cd | string | mathmlkeys |
The content dictionary that contains the annotation key symbol | ||
name | string | alternate-representation |
The name of the annotation key symbol | ||
src | URI | none |
The location of an external source for semantic information |
Taken together, the cd
and name
attributes
specify the annotation key symbol, which identifies the relationship
between the annotated element and the annotation, as described in
Section 5.1.1 Annotation elements. The definitionURL
attribute provides an alternate way to reference the annotation key
symbol as a single attribute. If none of these attributes are present,
the annotation key symbol is the symbol
alternate-representation
from the mathmlkeys content dictionary.
The encoding
attribute describes the content type of the
annotation. The value of the encoding
attribute may contain
a media type that identifies the data format for the encoding data. For
data formats that do not have an associated media type, implementors may
choose a self-describing character string to identify their content type.
The src
attribute provides a mechanism to attach external
entities as annotations on MathML expressions.
<annotation encoding="image/png" src="333/formula56.png"/>
The annotation
element is a semantic mapping element that may
only be used as a child of the semantics
element. While there is
no default rendering for the annotation
element, a renderer may
use the information contained in an annotation to customize its rendering
of the annotated element.
annotation-xml
element
The annotation-xml
element is the container element for a
semantic annotation whose representation is structured markup in an XML
format. The annotation-xml
element should contain the markup
elements, attributes, and character data for the annotation.
Name | values | default |
---|---|---|
definitionURL | URI | none |
The location of the annotation key symbol | ||
encoding | string | none |
The encoding of the semantic information in the annotation | ||
cd | string | mathmlkeys |
The content dictionary that contains the annotation key symbol | ||
name | string | alternate-representation |
The name of the annotation key symbol | ||
src | URI | none |
The location of an external source for semantic information |
Taken together, the cd
and name
attributes
specify the annotation key symbol, which identifies the relationship
between the annotated element and the annotation, as described in
Section 5.1.1 Annotation elements. The definitionURL
attribute provides an alternate way to reference the annotation key
symbol as a single attribute. If none of these attributes are present,
the annotation key symbol is the symbol
alternate-representation
from the mathmlkeys content dictionary.
The encoding
attribute describes the content type of the
annotation. The value of the encoding
attribute may contain
a media type that identifies the data format for the encoding data. For
data formats that do not have an associated media type, implementors may
choose a self-describing character string to identify their content type.
In particular, as described above and in Section 6.2.3 Names of MathML Encodings, MathML specifies
MathML
, MathML-Presentation
, and
MathML-Content
as predefined values for the
encoding
attribute. Finally, The src
attribute provides a mechanism to attach external XML entities as
annotations on MathML expressions.
<annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content"> <apply> <plus/> <apply><sin/><ci>x</ci></apply> <cn>5</cn> </apply> </annotation-xml> <annotation-xml encoding="application/openmath+xml"> <OMA xmlns="http://www.openmath.org/OpenMath"> <OMS cd="arith1" name="plus"/> <OMA><OMS cd="transc1" name="sin"/><OMV name="x"/></OMA> <OMI>5</OMI> </OMA> </annotation-xml>
When the annotation value is represented in an XML dialect other than MathML, the namespace for the XML markup for the annotation should be identified by means of namespace attributes and/or namespace prefixes on the annotation value. For instance:
<annotation-xml encoding="application/xhtml+xml"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>E</title></head> <body> <p>The base of the natural logarithms, approximately 2.71828.</p> </body> </html> </annotation-xml>
The annotation-xml
element is a semantic mapping element that may only be used
as a child of the semantics
element. While there is no default rendering for the
annotation-xml
element, a renderer may use the information contained in an
annotation to customize its rendering of the annotated element.
Presentation markup encodes the notational structure of an expression. Content markup encodes the functional structure of an expression. In certain cases, a particular application of MathML may require a combination of both presentation and content markup. This section describes specific constraints that govern the use of presentation markup within content markup, and vice versa.
Presentation markup may be embedded within content markup so long as the resulting expression retains an unambiguous function application structure. Specifically, presentation markup may only appear in content markup in three ways:
within ci
and cn
token elements
within the csymbol
element
within the semantics
element
Any other presentation markup occurring within content markup is a MathML error. More detailed discussion of these three cases follows:
ci
and cn
are permitted to
contain any sequence of MathML characters (defined in Chapter 7 Characters, Entities and Fonts)
and/or presentation elements. Contiguous blocks of MathML characters in
ci
or cn
elements are treated as if wrapped in
mi
or mn
elements, as appropriate, and the resulting
collection of presentation elements is rendered as if wrapped in an
implicit mrow
element.
csymbol
element.
csymbol
element may contain either MathML characters
interspersed with presentation markup, or content markup. It is a MathML
error for a csymbol
element to contain both presentation and
content elements. When the csymbol
element contains
character data and presentation markup, the same rendering rules that apply
to the token elements ci
and cn
should be used.
semantics
element.
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.
Content markup may be embedded within presentation markup so long as the resulting expression has an unambiguous rendering. That is, it must be possible, in principle, to produce a presentation markup fragment for each content markup fragment that appears in the combined expression. The replacement of each content markup fragment by its corresponding presentation markup should produce a well-formed presentation markup expression. A presentation engine should then be able to process this presentation expression without reference to the content markup bits included in the original expression.
In general, this constraint means that each embedded content expression
must be well-formed, as a content expression, and must be able to stand
alone outside the context of any containing content markup element. As
a result, the following content elements may not appear as an immediate
child of a presentation element:
annotation
, annotation-xml
,
bvar
, condition
, degree
,
logbase
, lowlimit
, uplimit
.
In addition, within presentation markup, content markup may not appear within presentation token elements.
Some applications are able to use both presentation
and content information. Parallel markup is a way to
combine two or more markup trees for the same mathematical expression.
Parallel markup is achieved with the semantics
element.
Parallel markup for an expression may appear on its own, or as part
of a larger content or presentation tree.
In many cases, the goal is to provide presentation markup and content
markup for a mathematical expression as a whole.
A single semantics
element may be used to pair two markup trees,
where one child element provides the presentation markup, and the
other child element provides the content markup.
The following example encodes the Boolean arithmetic expression (a+b)(c+d) in this way.
<semantics>
<mrow>
<mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
<mo>⁢<!--INVISIBLE TIMES--></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>
Note that the above markup annotates the presentation markup as
the first child element, with the content markup as part of the
annotation-xml
element. An equivalent form could be given
that annotates the content markup as the first child element, with
the presentation markup as part of the annotation-xml
element.
To accommodate applications that must process sub-expressions of large
objects, MathML supports cross-references between the branches of a
semantics
element to identify corresponding sub-structures.
These cross-references are established by the use of the id
and xref
attributes within a semantics
element.
This application of the id
and xref
attributes within
a semantics
element should be viewed as best practice to enable
a recipient to select arbitrary sub-expressions in each alternative
branch of a semantics
element. The id
and
xref
attributes may be placed on MathML elements of any type.
The following example demonstrates cross-references 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">⁢<!--INVISIBLE TIMES--></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 associated xref
attributes
that appear within the same semantics
element establish the
cross-references between corresponding sub-expressions.
For parallel markup, all of the id
attributes referenced by any xref
attribute should be in the same branch of an enclosing
semantics
element. This constraint guarantees that the
cross-references do not create unintentional cycles. This restriction
does not exclude the use of id
attributes within
other branches of the enclosing semantics
element. It does,
however, exclude references to these other id
attributes
originating from 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
these attributes as the annotations change.
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.
Parallel markup with cross-references may be used in any XML-encoded branch of the semantic annotations, as shown by the following example where the Boolean expression of the previous section is annotated with OpenMath markup that includes cross-references:
<semantics>
<mrow id="EE">
<mrow id="EE.1">
<mo id="EE.1.1">(</mo>
<mi id="EE.1.2">a</mi>
<mo id="EE.1.3">+</mo>
<mi id="EE.1.4">b</mi>
<mo id="EE.1.5">)</mo>
</mrow>
<mo id="EE.2">⁢<!--INVISIBLE TIMES--></mo>
<mrow id="EE.3">
<mo id="EE.3.1">(</mo>
<mi id="EE.3.2">c</mi>
<mo id="EE.3.3">+</mo>
<mi id="EE.3.4">d</mi>
<mo id="EE.3.5">)</mo>
</mrow>
</mrow>
<annotation-xml encoding="MathML-Content">
<apply xref="EE">
<and xref="EE.2"/>
<apply xref="EE.1">
<xor xref="EE.1.3"/><ci xref="EE.1.2">a</ci><ci xref="EE.1.4">b</ci>
</apply>
<apply xref="EE.3">
<xor xref="EE.3.3"/><ci xref="EE.3.2">c</ci><ci xref="EE.3.4">d</ci>
</apply>
</apply>
</annotation-xml>
<annotation-xml encoding="application/openmath+xml">
<om:OMA xmlns:om="http://www.openmath.org/OpenMath" href="EE">
<om:OMS name="and" cd="logic1" href="EE.2"/>
<om:OMA href="EE.1">
<om:OMS name="xor" cd="logic1" href="EE.1.3"/>
<om:OMV name="a" href="EE.1.2"/>
<om:OMV name="b" href="EE.1.4"/>
</om:OMA>
<om:OMA href="EE.3">
<om:OMS name="xor" cd="logic1" href="EE.3.3"/>
<om:OMV name="c" href="EE.3.2"/>
<om:OMV name="d" href="EE.3.4"/>
</om:OMA>
</om:OMA>
</annotation-xml>
</semantics>
Here OMA
, OMS
and OMV
are elements defined in the OpenMath
standard for representing application, symbol, and variable, respectively.
The references from the OpenMath annotation are given by the
href
attributes.