'''[http://www.openmath.org/%|%OpenMath]''' is a standard for exchange of mathematical objects, currently (2014) at version 2.
In the future, OpenMath3 is expected to be equivalent to strict Content-[MathML]3; both of these standards are under construction. It is mostly MathML that has been changed to match OpenMath.
Basic OpenMath tags (node types):
'''OMI''': Integer
'''OMF''': Floating-point number (64-bit IEEE, i.e., a [double])
'''OMV''': Variable
'''OMS''': Symbol defined in some external ''Content Dictionary'' (CD).
'''OMA''': Application (like function application)
Composite OpenMath expressions are usually constructed as an OMA whose first child is the symbol denoting the operation or function, e.g.
======none
2
======
which is analogous to `[expr] {2+3.4e5+$y}`. If parsed by [a little XML parser] (or [tdom]), this (modulo whitespace) comes out as
======
OMA {} {{OMS {cd arith1 name plus} {}} {OMI {} {{#text 2}}} {OMF {dec 3.4e5} {}} {OMV {name y} {}}}
======
which is not too onerous to process in Tcl.
There are also some more advanced tags:
'''OMSTR''', '''OMB''': Strings and bytearrays
'''OMBIND''', '''OMBVAR''': Used when binding variables (like ''x'' is bound by the integral in ∫₁³ ''x''² d''x'').
'''OMATTR''', '''OMATP''': Used for putting attributions on subexpressions.
'''OME''': Errors
'''OMFOREIGN''': Foreign format data
'''OMR''': References (for sharing subexpressions, much like [Tcl_Obj]s can be shared)
<> Mathematics | Data Serialization Format