<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.w3.org/1998/Math/MathML">
<define name="sep">
<a:documentation>the content of "cn" may have <sep> elements in it</a:documentation>
<element name="sep">
<empty/>
</element>
</define>
<define name="cn.content" combine="choice">
<zeroOrMore>
<choice>
<ref name="sep"/>
<text/>
<ref name="Glyph-alignmark"/>
</choice>
</zeroOrMore>
</define>
<define name="cn.type.vals" combine="choice">
<choice>
<value>e-notation</value>
<value>rational</value>
<value>complex-cartesian</value>
<value>complex-polar</value>
<value>constant</value>
</choice>
</define>
<define name="degree">
<a:documentation>allow degree in bvar</a:documentation>
<element name="degree">
<ref name="MathML.Common.attrib"/>
<ref name="ContExp"/>
</element>
</define>
<define name="logbase">
<element name="logbase">
<ref name="MathML.Common.attrib"/>
<ref name="ContExp"/>
</element>
</define>
<define name="momentabout">
<element name="momentabout">
<ref name="MathML.Common.attrib"/>
<ref name="ContExp"/>
</element>
</define>
<define name="bvar-head" combine="choice">
<choice>
<group>
<optional>
<ref name="degree"/>
</optional>
<ref name="ci"/>
</group>
<group>
<ref name="ci"/>
<optional>
<ref name="degree"/>
</optional>
</group>
</choice>
</define>
<define name="apply.content" combine="choice">
<a:documentation>allow degree to modify <root/></a:documentation>
<ref name="root_arith1_elt"/>
<ref name="degree"/>
<zeroOrMore>
<ref name="ContExp"/>
</zeroOrMore>
</define>
<define name="apply.content" combine="choice">
<ref name="moment_s_data1_elt"/>
<interleave>
<optional>
<ref name="degree"/>
</optional>
<optional>
<ref name="momentabout"/>
</optional>
</interleave>
<zeroOrMore>
<ref name="ContInPres"/>
</zeroOrMore>
</define>
<define name="apply.content" combine="choice">
<ref name="log_transc1_elt"/>
<ref name="logbase"/>
<zeroOrMore>
<ref name="ContExp"/>
</zeroOrMore>
</define>
<define name="apply.content" combine="choice">
<a:documentation>allow apply to act as a binder</a:documentation>
<ref name="bind.content"/>
</define>
<define name="domainofapplication">
<element name="domainofapplication">
<ref name="Definition.attrib"/>
<ref name="MathML.Common.attrib"/>
<optional>
<ref name="cdbase.attrib"/>
</optional>
<ref name="ContExp"/>
</element>
</define>
<define name="lowlimit">
<element name="lowlimit">
<ref name="Definition.attrib"/>
<ref name="MathML.Common.attrib"/>
<optional>
<ref name="cdbase.attrib"/>
</optional>
<oneOrMore>
<ref name="ContExp"/>
</oneOrMore>
</element>
</define>
<define name="uplimit">
<element name="uplimit">
<ref name="Definition.attrib"/>
<ref name="MathML.Common.attrib"/>
<optional>
<ref name="cdbase.attrib"/>
</optional>
<oneOrMore>
<ref name="ContExp"/>
</oneOrMore>
</element>
</define>
<define name="condition">
<element name="condition">
<ref name="Definition.attrib"/>
<optional>
<ref name="cdbase.attrib"/>
</optional>
<ref name="ContExp"/>
</element>
</define>
<define name="qualifier" combine="choice">
<a:documentation>allow the non-strict qualifiers</a:documentation>
<choice>
<ref name="domainofapplication"/>
<group>
<ref name="uplimit"/>
<optional>
<ref name="lowlimit"/>
</optional>
</group>
<group>
<ref name="lowlimit"/>
<optional>
<ref name="uplimit"/>
</optional>
</group>
<ref name="degree"/>
<ref name="condition"/>
</choice>
</define>
<define name="opel.constant">
<a:documentation>we collect the operator elements by role</a:documentation>
<notAllowed/>
</define>
<define name="opel.binder">
<notAllowed/>
</define>
<define name="opel.application">
<notAllowed/>
</define>
<define name="opel.semantic-attribution">
<notAllowed/>
</define>
<define name="opel.attribution">
<notAllowed/>
</define>
<define name="opel.error">
<notAllowed/>
</define>
<define name="opels">
<choice>
<ref name="opel.constant"/>
<ref name="opel.binder"/>
<ref name="opel.application"/>
<ref name="opel.semantic-attribution"/>
<ref name="opel.attribution"/>
<ref name="opel.error"/>
</choice>
</define>
<define name="container">
<notAllowed/>
</define>
<define name="MathMLType" combine="choice">
<a:documentation>the values of the MathML type attributes; </a:documentation>
<choice>
<value>real</value>
<value>complex</value>
<value>function</value>
<value>algebraic</value>
<value>integer</value>
</choice>
</define>
<define name="apply-binder-head">
<a:documentation>we instantiate the strict content model by structure checking</a:documentation>
<choice>
<ref name="semantics-apply-binder"/>
<ref name="opel.binder"/>
</choice>
</define>
<define name="apply.content" combine="choice">
<ref name="apply-binder-head"/>
<zeroOrMore>
<ref name="bvar"/>
</zeroOrMore>
<optional>
<ref name="qualifier"/>
</optional>
<zeroOrMore>
<ref name="ContExp"/>
</zeroOrMore>
</define>
<define name="semantics-apply-binder">
<element name="semantics">
<ref name="semantics.attribs"/>
<ref name="apply-binder-head"/>
<zeroOrMore>
<ref name="semantics-annotation"/>
</zeroOrMore>
</element>
</define>
<define name="apply-head" combine="choice">
<ref name="opel.application"/>
</define>
<define name="bind-head" combine="choice">
<ref name="opel.binder"/>
</define>
<define name="cerror-head" combine="choice">
<ref name="opel.error"/>
</define>
<define name="ContExp" combine="choice">
<a:documentation>allow all functions, constants, and containers to be content expressions on their own</a:documentation>
<choice>
<ref name="opel.constant"/>
<ref name="opel.application"/>
<ref name="container"/>
</choice>
</define>
<define name="bind.content" combine="choice">
<ref name="bind-head"/>
<zeroOrMore>
<ref name="bvar"/>
</zeroOrMore>
<optional>
<ref name="qualifier"/>
</optional>
</define>
<define name="math.content" combine="choice">
<zeroOrMore>
<ref name="ContExp"/>
</zeroOrMore>
</define>
<define name="opel.content" combine="choice">
<choice>
<ref name="PresExp"/>
<ref name="Glyph-alignmark"/>
</choice>
</define>
</grammar>