Т.Н. Катанова, А.П. Шестаков
Язык разметки математических текстов MathML
С распространением глобальных компьютерных сетей (в частности, Интернет) появилась необходимость размещения в ней в т.ч. и математических текстов.
Язык MathML является подмножеством языка XML (eXtensible Markup Language — расширяемый язык разметки), который часто служит для создания других языков. Такое использование XML сегодня вполне естественно и хорошо зарекомендовало себя и в других случаях, когда применение HTML для передачи данных новых типов наталкивалось на ограничения этого формата. К настоящему времени консорциум W3C опубликовал 2-е издание версии 2.0 спецификации языка MathML, что говорит о жизнеспособности и устойчивости проекта.
Среди целей, которые ставились рабочей группой W3C по математике при создании MathML, были:
обеспечение кодирования материалов математического характера для коммуникаций всех уровней образовательного и научного типа;
обеспечение кодирования как математической символики, так и ее значений;
поддержка создания шаблонов и других приемов математического редактирования;
обеспечение преобразования в другие математические форматы как чисто презентационного, так и семантического характера, а также — из этих форматов в создаваемый язык математической разметки. Форматы вывода должны включать средства для отображения графической информации, синтеза речи, представления текста в форме, пригодной для ввода ее в системы компьютерной алгебры, совместимость с другими языками описания математических текстов, такими, как ТДО, возможность отображения «чистого» текста (т. е. не включающего математических символов и выражений), возможность вывода текстов на печать в различной форме, включая вывод по системе Брайля. При этом преобразования между различными форматами могут приводить к потерям информации;
возможность передачи информации с учетом особенностей конкретных программ визуализации;
поддержка эффективных процессов просмотра длинных математических выражений;
обеспечение расширяемости возможностей (способами, которые заранее не известны).
Общий принцип использования MathML состоит в том, что математические конструкции встраиваются в обычный HTML-документ и (если браузер либо специальная программа поддерживает эту спецификацию) адекватно воспроизводятся при загрузке документа из сети.
Первое, с чем приходится столкнуться в MathML и что отличает данный язык разметки от аналогов, — это использование двух способов кодирования выражений. Один из них основан на непосредственной передаче синтаксиса формулы (presentation), другой, напротив, отражает семантику выражения (content). Презентационная разметка описывает математическую символику с выражениями, которые строятся с использованием некоторых схем вывода, с заданием способов размещения подвыражений, таких, как дроби, верхние и нижние индексы. Семантическая разметка описывает математические объекты и функции, где для каждого узла конструируется дерево выражения согласно некоторой конкретной схеме, а ветви этого дерева отвечают подвыражениям.
Из популярных броузеров с MathML работают (ОС Windows):
IE 5.0 с плагином Techexplorer
IE 5.5 с плагинами MathPlayer или Techexplorer
IE 6.0+ (необязательно) с плагинами MathPlayer или Techexplorer
Netscape 6.1 с плагином Techexplorer
Netscape 7.0+
Amaya, все версии (только Presentation MathML)
Mozilla 0.9.9+
Все элементы MathML делятся на три группы: элементы представления, элементы содержания и интерфейсные элементы.
Элементы представления описывают визуально ориентированную двухмерную структуру математической нотации. Например, элемент mrow обычно применяется для обозначения горизонтального ряда частей выражения, и элемент msup, который отмечает верхний индекс. Как правило, каждый элемент представления соответствует одному типу нотационной схемы, такой как ряд, верхний индекс, нижний индекс и т.д. Любая формула состоит из частей, которые могут состоять из простейших элементов, таких как цифры, буквы или другие символы.
Наиболее важными элементами представления являются mi, mn и mo, используемые для представления идентификаторов, чисел и операторов соответственно. Обычно эти элементы отображаются разными стилями: числа — прямым шрифтом, идентификаторы — наклонным, вокруг операторов оставляется дополнительное свободное пространство.
В терминах разметки, большинство элементов MathML определяются открывающим и закрывающим тегами, которые ограничивают содержание элемента. Некоторые элементы, например, знаки операций (<plus/>) определяются одиночным тегом.
Рассмотрим более подробно некоторые элементы, необходимые для верстки математических формул, на примере презентационной разметки.
Токены (token elements) представляют индивидуальные символы, названия, числа, обозначения и т. д. В основном в качестве содержания токены могут иметь только символы.
MathML игнорирует пробельные символы, встречающиеся вне токенов. Непробельные символы здесь запрещены. Пробельные символы, встречающиеся в содержании токенов, удаляются на концах, то есть удаляются все пробельные символы в начале и конце содержания. Пробельные символы, расположенные внутри содержания элементов MathML свертываются канонически, то есть каждая последовательность из 1 или более таких символов заменяется на 1 (иногда называемый пустым символом).
Тег | Определение | Пример |
mi | идентификатор (identifier) | <mi>a</mi> |
mn | число (number) | <mn> 2008 </mn> |
mo | оператор (operator), ограничитель (fence) или разделитель (separator) | <mo>+</mo> |
mtext | текст (text) | <mtext> Пример текста </mtext> |
ms | текстовая строка (string literal) | <ms> абракадабра</ms> |
Основные элементы
Тег | Определение | Пример | Результат |
mrow | группирует любое количество подвыражений в строку (аналог операторных скобок) | <msqrt> <mrow> <mi>a</mi> <mo>+</mo> <mi>b</mi> </mrow> </msqrt> | |
mfrac | формирует дробь из двух подвыражений | <mfrac> <mi>a</mi> <mi>b</mi> </mfrac> | |
mroot | формирует радикал с определенной степенью | <mroot> <mrow> <mi>b</mi> <mo>+</mo> <mi>c</mi> </mrow> <mn>3</mn> </mroot> | |
mpadded | регулирует отступы вокруг содержимого | <mpadded width="+5em"> <mi>a</mi> <mo>+</mo> <mi>b</mi> </mpadded> <mo>-</mo> <mi>c</mi> | |
mphantom | делает содержимое невидимым, но сохраняет его размер | <mi> x </mi> <mphantom> <mo> + </mo> <mi> y </mi> </mphantom> <mo> + </mo> <mi> z </mi> | |
mfenced | окружает содержимое парой скобок | <mfenced> <mrow> <mi>x</mi> <mo> + </mo> <mi> y </mi> </mrow> </mfenced> | (x+y) |
Индексы
Тег | Определение | Пример | Результат |
msub | добавляет нижний индекс к основанию | <msub> <mi>x</mi> <mn>1</mn> </msub> | x1 |
msup | добавляет верхний индекс к основанию | <msup> <mi>x</mi> <mi>y</mi> </msup> | xy |
msubsup | добавляет верхний и нижний индексы к основанию | <msubsup> <mi>x</mi> <mn>14</mn> <mn>12</mn> </msubsup> | |
munderover | добавляет символы одновременно и над, и под основанием | <m:munderover> <m:mi>X</m:mi> <m:mi>h</m:mi> <m:mi>t</m:mi> </m:munderover> |
Рассмотрим несколько примеров формул в MathML.
<msup>
<mo class="MathClass-op">sin</mo>
<mn>2</mn>
</msup>
<mrow> <mi>α</mi> </mrow>
<mo class="MathClass-bin">+</mo>
<msup>
<mo class="MathClass-op"> cos</mo>
<mn>2</mn>
</msup>
<mrow><mi>α</mi></mrow>
<mo class="MathClass-rel">=</mo>
<mn>1</mn>
Греческую букву α получаем с помощью кода x03B1.
Посмотреть результат (в новом окне) (если пример не отображется, сохраните файл на диске и откройте его)
Напоминаем также, что для работы с MathML в Internet Explorer необходимо установить MathPlayer. В любом файле, содержащем разметку MathML, перед заголовочной частью документа должны присутствовать строки
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="http://www.w3.org/Math/XSL/pmathml.xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml">
Кроме того, любой код MathML открывается тегом <math xmlns="http://www.w3.org/1998/Math/MathML"> и закрывается тегом </math>.
<mfrac>
<mrow>
<msup><mi>a</mi><mn>2</mn></msup>
<mo>+</mo>
<mi>a</mi>
<mi>b</mi>
<mo>+</mo>
<msup><mi>b</mi><mn>2</mn></msup>
</mrow>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfrac>
Посмотреть результат (в новом окне) (если пример не отображется в IE, сохраните файл на диске, с помощью контекстного меню выберите Свойства, разблокируйте файл и откройте его)
<mfrac>
<mrow>
<mn>1</mn>