1.1 Математика и ее система обозначений

1.2 Истоки и цели

1.2.1 История MathML

1.2.2 Ограниченность HTML

1.2.3 Требования к математической разметке

1.2.4 Цели проекта MathML

1.3 Роль MathML в Сети

1.3.1 Существующие языки математической разметки

1.3.2 Механизм расширения HTML

1.3.3 Механизм расширения браузера

1.4 Обзор MathML

1.4.1 Таксономия элементов MathML

1.4.2 Разметка представления

1.4.3 Разметка содержания

1.4.4 Объединение представления и содержания

1.5 MathML в документах

1.6 Примеры MathML

1.6.1 Примеры разметки представления

1.6.2 Примеры разметки содержания

1.6.3 Примеры смешанной разметки

1.7 Синтаксис и грамматика MathML

1.7.2 Пример синтаксиса XML

2.1 Mozilla & Firefox

2.2 MicrosoftInternetExplorer

MathML (Mathematical Markup Language) представляет собой язык разметки математических приложений, основанный на XML. Он был разработан Консорциумом WWW (W3C) и принят в качестве Рекомендации. Текущей версией является Mathematical Markup Language (MathML) Version 2.0 (Second Edition), утвержденной 21 октября 2003 года.

MathML реализует две "точки зрения" на математическую разметку. Один из ее видов - это разметка представления (Presentation Markup), которая описывает визуальную форму представления математической формулы. Второй - разметка содержания (Content Markup), выражающая семантическое содержание.

MathML рассматривает не только представление, но и смысл элементов формулы. Также разрабатывается система разметки математической семантики, призванная дополнить MathML. Она называется OpenMath.

1.2.1 История MathML

Задача представления математической информации для компьютерной обработки и электронных средств коммуникации возникла задолго до появления Интернета. Раньше общей практикой для ученых была запись статей в неком виде, основанном на ASCII-символах и дальнейшая пересылка их друг другу по электронной почте. Несколько языков математической разметки, в частности T E X, уже широко использовались в 1992 году, еще до того, как Сеть заняла столь значимое положение.

С самого начала Сеть зарекомендовала себя, как весьма эффективный способ сделать информацию доступной большому количеству людей. Однако, даже при том, что World Wide Web была изначально задумана и реализована учеными для ученых, возможности для включения математических выражений в HTML были крайне ограничены. В настоящее время, большая часть математической информации в Сети представлена в виде текста с графическими изображениями научных выражений (в формате GIF или JPEG) или в виде целых документов в формате PDF.

Консорциум World Wide Web (W3C) понимал, что отсутствие основ для научной коммуникации является серьезной проблемой. Уже в 1994 году Dave Raggett внес предложение о включении HTML Math в прототип HTML 3.0. На конференции в Дармштадте в апреле 1995 года был проведен круглый стол по математической разметке. В ноябре того же года представители Wolfram Research выдвинули предложение команде W3C о реализации поддержки математики в рамках HTML. Важную роль в объединении многих заинтересованных сторон сыграла проведенная в мае 1996 года встреча Digital Library Initiative в Champaign-Urbana. Результатом этой встречи стало формирование редакционного наблюдательного совета по HTML Math. Впоследствии эта рабочая группа разрослась, и в марте 1997 года была формально повторно сформирована как первая W3C Math Working Group. Вторая W3C Math Working Group была сформирована в июле 1998 года.

Проект MathML отражает интересы и мнения различных групп специалистов. Многое в развитии MathML заслуживает специального упоминания. Например, это касается вопроса общедоступности, где были особенно ощутимые затруднения. В этом направлении много работы проделал T. V. Raman. Neil Soiffer и Bruce Smith из Wolfram Research поделились своим опытом в решении проблем представления математического материала, накопленным при работе над проектом Mathematica 3.0. Их идеи оказали важное влияние на структуру элементов представления. Paul Topping из Design Science также внес свой вклад в математическое форматирование и редактирование. Много пользы извлек MathML из партнерства с рядом членов рабочих групп, связанных с другими работами по кодированию математической информации в SGML и в сообществах компьютерной алгебры. В их числе StephenBuswell из StiloTechnologies, NicoPoppelier из ElsevierScienceStéphaneDalmas из INRIA (SophiaAntipolis), StanDevitt из WaterlooMaple, AngelDiaz и RobertS. Sutor из IBM, и StephenM. Watt из UniversityofWesternOntario. Также, на MathML повлиял проект OpenMath, работа рабочей группы ISO 12083 и работа Stilo Technologies над фрагментом DTD для "семантической" математики. Американское математическое общество играло ключевую роль в развитии MathML. Помимо прочего, председателями обеих W3C Math Working Group стали представители этой организации. С мая 1996 по март 1997 года группу вел Ron Whitney. Patrick Ion был сопредседателем группы с марта 1997 по июнь 1998 вместе с Robert Miner из The Geometry Center, а с июля 1998 вместе с Angel Diaz из IBM.

Цели разработки MathML требуют гибкой и расширяемой системы записи математического материала, позволяющей взаимодействовать с внешними программами и осуществлять высококачественное отображение в различных информационных средах. Но любой язык разметки, удовлетворяющий всем этим требованиям, достаточно сложен.

В то же время, для многих групп пользователей, например, студентов, важно иметь простой путь для включения математических выражений в web-страницы. Аналогично, для других групп, например, для пользователей системы T E X, лучшим решением была бы система, позволяющая непосредственное включение в web-страницы разметки при помощи языка, подобного T E X. В общем, различным группам пользователей требуются различные формы ввода и вывода информации, наиболее соответствующие их потребностям. Следовательно, в идеале система для размещения математических документов в Сети должна предоставлять как специализированные сервисы для ввода и вывода, так и общие сервисы для обмена информацией и отображения в различных информационных средах.

На практике, обзор того, что должен обеспечивать математический стандарт в сети для специализированных и общих нужд, приводит к идее многоуровневой архитектуры. Первый уровень включает стандартные мощные средства обмена, обработки и отображения математических данных. Второй уровень включает специализированные инструменты, предназначенные для конкретных групп пользователей, с помощью которых можно легко кодировать математическую информацию для ее распространения среди ограниченного круга пользователей.

MathML создан для разметки математической информации на нижнем более общем уровнем двухуровневой архитектуры. Это предполагает разметку сложной нотационной и семантической структуры в строгой, регулярной форме, простой для обработки средствами отображения, поиска и индексации, а также другими математическими приложениями.

Вследствие этого, разметка MathML не предполагает непосредственного использования авторами. MathML понятен для человека, что сильно помогает при отладке, но во всех случаях, за исключением простейших, он слишком сложен для ручного кодирования. Вместо этого авторы должны будут использовать специальные редакторы формул, конвертеры и другие специализированные программные средства для создания документов MathML. В качестве альтернативы, некоторые программы отображения и системы поддержки математических документов могут преобразовывать другие входные форматы в MathML "на лету".

В некотором смысле MathML аналогичен другим низкоуровневым коммуникативным форматам, таким как язык PostScript, разработанный Adobe. Вы можете создавать PostScript-файлы различными способами, в зависимости от ваших потребностей: эксперты создают и правят их вручную, авторы создают их с помощью текстовых процессоров, дизайнеры - программами-иллюстраторами и так далее. Если у вас есть PostScript-файл, вы можете распространить его среди очень большой аудитории, так как устройства отображения PostScript, такие как принтеры и программы для просмотра на экране, широко доступны.

Одной из причин разработки MathML как языка разметки общего коммуникативного уровня является стимулирование разработки математического программного обеспечения Сети верхнего уровня. MathML представляет способ координирования усилий разработчиков модулей программ для создания и отображения математического материала. Упрощая разработку функциональных частей большой системы, MathML может стимулировать разработку программ, которые будут очень полезны потенциальным пользователям.

Авторы могут создавать MathML-документы, используя инструменты, лучше подходящие для их нужд. Студенты могут предпочитать визуальные редакторы формул, с возможностью сохранять блоки разметки MathML в XHTML-файле. Исследователи могут использовать пакеты компьютерной алгебры, автоматически кодирующие математическую информацию так, чтобы коллеги могли ее взять из web-страницы и обработать. Издатели академических журналов могут использовать программу, которая конвертирует разметку T E X в HTML и MathML. Независимо от метода создания web-страницы, содержащей MathML, становятся доступны все преимущества общего коммуникативного слоя. Различные программы, работающие с MathML, могут быть использованы для одного и того же документа, чтобы вывести его в систему воспроизведения речи и на печать, а также для ввода в систему компьютерной алгебры и для управления им как частью большого архива web-документов. Для высококачественной печати математических документов в формате MathML часто проводится обратная конвертация в стандартные системы верстки, включая T E X, который специально создан для этих целей. Наконец, можно ожидать, что в конечном счете MathML будет интегрирован в другие области, где встречаются математические формулы, такие как электронные таблицы, пакеты статистической обработки данных и средства инженерной разработки.

W3C Math Working Group сотрудничает с различными софтверными компаниями для гарантии того, что скоро появятся различные программы для работы с MathML, включая как средства создания документов, так и их отображения. Текущий список программ, работающих с MathML расположен на странице Math World Wide Web Consortium.

Первоначальная концепция HTML Math состояла в том, чтобы просто расширить набор тэгов HTML и таким образом обеспечить непосредственную интерпретацию в браузере. Однако еще до этого лавинообразный рост сети сделал понятным, что требуется глобальный механизм расширений, а математическая информация является только одним из типов структурированных данных, которые могут быть интегрированы в Сеть с помощью такого механизма.

При условии, что MathML должен интегрироваться в Сеть в качестве расширения, очень важно, чтобы MathML и использующие его программы могли хорошо взаимодействовать с существующей web-средой. В частности, MathML должен разрабатываться с учетом трех типов взаимодействия. Во-первых, для создания математического контента важно, чтобы существующие языки математической разметки могли быть преобразованы в MathML, и чтобы в существующие редакторы была добавлена возможность создания документов MathML. Во-вторых, должно обеспечиваться возможность вставлять разметку MathML в разметку HTML, как ее дополнение, в этом случае, в будущем, она будет доступна для браузеров, поисковых систем и всех типов web-приложений, которые сейчас работают с HTML. И, наконец, должна обеспечиваться возможность отображения MathML, встроенного в HTML, современными браузерами, даже если результат будет далек от идеала. С переходом от HTML к XHTML все вышеперечисленные требования станут еще более необходимыми.

World Wide Web полностью интернационален. Математика - язык, использующийся во всем мире. Математическая нотация в науке и технике тесно связана с национальными языками. W3C стремится быть конструктивной силой в распространении коммуникативных возможностей в мире. Поэтому разработчики MathML столкнулись с проблемой интернационализации. Неизвестно о несовместимости этой версии MathML с языками с написанием слева направо. Запись слева направо является стандартной в MathML 2, и понятно, что потребность в записи математических формул в текстах на некоторых национальных языках еще не возникала. Так называемая "двунаправленная технология" только разрабатывается, и лучшая поддержка формул в этом контексте - задача будущих разработок.

1.7.1 Синтаксис и грамматика MathML

MathML основан на (Extensible Markup Language), а значит его синтаксис подчиняется правилам сиснтаксиса XML, и грамматика определяется DTD (Document Type Definition). Другими словами, детали использования тегов, атрибутов, сущностей и всего остального определены в спецификации языка XML, а детали, касающиеся элементов и атрибутов MathML, вложенности элементов и так далее, определены в MathML DTD.

W3C, стараясь увеличить легкость и гибкость использования XML в Сети и поддержать создание модульных XML-приложений, обнаружил, что основная форма DTD не является достаточно гибкой. Поэтому, была создана рабочая группа W3C для разработки XML Schemas, которые являются документами спецификации и должны заменить DTD. MathML 2.0 разработан так, что математики могли использовать все преимущества развивающихся Web-технологий. Таким образом, существует схема для MathML.

Также MathML определяет синтаксические и грамматические правила в дополнение к общим правилам, которые он наследует как приложение XML. Эти правила позволяют MathML представлять значительно больше информации, чем возможно представить с помощью чистого XML, без введения большого числа новых элементов и использовать значительно более сложные DTD или схемы. Конечно, недостатком введения специфических правил MathML является то, что созданные документы не могут обрабатываться процессорами и валидаторами XML.

Существует два основных типа дополнительных грамматических и синтаксических правил MathML. Первый тип включает в себя установку дополнительных критериев на значения атрибутов. Например, в чистом XML невозможно потребовать, чтобы значение атрибута было положительным целым числом. Второй тип правил определяет более детальные ограничения на дочерние элементы (например, на их порядок), чем даны в DTD или даже схемах. Например, в XML нельзя указать, что первый дочерний элемент должен обрабатываться иначе, чем остальные.

1.7.2 Пример синтаксиса XML

Так как MathML основан на XML, спецификация MathML использует терминологию XML. Данные XML состоят из символов Unicodes (которые включают в себя обычные ASCII-символы), ссылки на сущности (неформально называемые сущностями), такие как <, которые обычно представляют расширенные символы, и элементы, такие как x .

Элементы часто содержат в себе другие XML-данные, называемые их "содержанием" или "телом", между "открывающим" и "закрывающим" тегами, также как в HTML. Существуют также "пустые элементы", такие как У которых открывающий тег заканчивается символом />, чтобы показать, что элемент не имеет содержания или закрывающего тега. Открывающий тег должен содержать именованные параметры, называемые атрибутами, например, fontstyle="normal" в приведенном выше примере.

Так как большие и маленькие буквы различаются в XML, то и имена элементов и атрибутов MathML являются чувствительными к регистру. Для удобочитаемости в спецификации MathML большинство из них определены в нижнем регистре.

В формальном обсуждении разметки XML делается различие между элементом, таким как mrow и задающими его тегами и . То, что находится между тегами и , называется содержанием или телом элемента mrow. "Пустой элемент", например none, не имеет тела и определяется одним тегом вида . В этой спецификации не будет делаться упора на это различие между тегами и элементами. Например, мы иногда будем ссылаться на элементы и , подразумевая элемент, которому принадлежат эти теги. Это делается для того, чтобы ссылки на элементы отличались от ссылок на атрибуты. Тем не менее, термины "элемент" and "тег" будут использоваться в строгом соответствии с терминологией XML.

1.7.3 Дочерние элементы против аргументов

Многие элементы MathML требуют определенного числа дочерних элементов или присваивают дополнительный смысл дочерним элементам, стоящим в определенной позиции. Как было отмечено выше, этот тип ограничений является специфическим для MathML и не может быть задан при помощи синтаксиса и грамматики XML. Когда дочерний элемент данного элемента MathML удовлетворяет этим дополнительным условиям, мы будем говорить о нем как об аргументе , а не о дочернем элементе, чтобы подчеркнуть специфичность его использования. Заметьте, что термин "аргумент" применяется именно в этом техническом смысле, если не указано обратное.

Некоторые элементы имеют другие требования на число или тип аргументов. Эти дополнительные требования описываются для каждого конкретного элемента.

1.7.4 Значения атрибутов MathML

В соответствии со спецификацией языка XML, атрибуты элементов должны быть заданы в одной из следующих форм:

attribute-name = "value"

attribute-name = "value"

где пробелы вокруг знака "=" необязательны.

Имена атрибутов выделены в тексте спецификации моноширинным шрифтом, так же как и примеры.

Значения атрибутов, которые в MathML могут быть строкой произвольных символов, должны быть заключены в двойные (") или одинарные (") кавычки. Значение атрибута может содержать тот тип кавычек, который не используется для заключения всего значения.

MathML использует более сложный синтаксис для значений атрибутов, чем общий синтаксис XML, задаваемый MathML DTD. Эти дополнительные правила предназначены для приложений MathML, и их нарушение является ошибкой MathML, однако они не могут быть отслежены процессорами XML. Синтаксис значений элементов MathML определен в таблице атрибутов и сопровожден описанием каждого элемента, используя описанную ниже нотацию. Когда приложение MathML обрабатывает значения атрибутов, все пробелы, за исключением разделяющих отдельные слова или числа, игнорируются. Символьные данные могут быть включены в значения атрибутов напрямую или с использованием ссылочных сущностей.

В частности, символы ", ", & и < могут быть включены в значения атрибутов MathML (когда это разрешено синтаксисом) с использованием сущностей ",",& и <, соответственно.

MathML DTD, объявляет типы большинства значений атрибутов как строку CDATA. Это позволяет увеличить совместимость с существующим программным обеспечением на основе SGML и XML и расширять список предопределенных значений. Подобные же рассуждения применимы к схемам XML.

1.7.4.1 Синтаксические нотации, используемые в спецификации MathML

Для описания MathML-специфического синтаксиса допустимых значений атрибутов, в этом документе используются следующие соглашения и нотации.

Нотация Что означает
number десятичное целое или рациональное число (строка цифр с одной десятичной точкой), возможно, начинающееся со знака "-"
unsigned-number десятичное целое или вещественное число, без знака
integer десятичное целое число, возможно, начинающееся со знака "-"
positive-integer десятичное целое число, без знака, не 0
string произвольная строка (всегда полное значение атрибута)
character одиночный непробельный символ или ссылочая сущность MathML; возможно разделение пробелами
#rrggbb цвет в формате RGB; три пары шестнадцатиричных цифр в примере #5599dd определяют пропорцию красного, зеленого и синего по шкале от x00 до xFF, которая дает яркий голубой цвет.
h-unit единица измерения горизонтальной длины (допустимые единицы измерения перечислены ниже)
v-unit единица измерения вертикальной длины (допустимые единицы измерения перечислены ниже)
css-fontfamily
css-color-name объясняется ниже, в подразделе о CSS
остальные слова, выделенные курсивом объясняются в тексте, отдельно для каждого атрибута
form + один или более экземпляров "form"
form * нуль или более экземпляров "form"
f1 f2... fn один экземпляр каждой формы, последовательно, возможно разделенные пробельными символами
f1 | f2 |... | fn любая из указаных форм
необязательный экземпляр "form"
(form) то же самое, что и просто form
невыделенные слова слова, включеные в значени атрибута дословно (есди это не часть объясняющей фразы)
символы в кавычках символы, дословно включенные в значение атрибута (например, "+" or "+")

Приоритет операция, от наивысшего к наинизшему:

form + или form *

f1 f2... fn (последовательность форм)

f1 | f2 |... | fn (одна из форм)

Тип string может содержать произвольные символы, которые определены в значениях атрибута XML CDATA. В MathML нет синтаксических правил, по которым string может быть частью значения атрибута, а не всем значением.

Соседние ключевые слова и числа в значениях атрибутов должны разделяться пробельными символами, за исключением следующих за числами идентификаторов единиц измерения (что указано в синтаксисе символов h-unit и v-unit). Пробельные символы не требуются, но разрешены между любыми перечисленными выше токенами, за исключением (для совместимости с CSS) непосредственно перед идентификаторами единиц измерения, между знаком "-" и числами, между # и rrggbb или rgb.

Значения числовых атрибутов, которые задают размеры и должны зависеть от текущего шрифта, могут задаваться в связанных со шрифтом единицах измерения или в указанных абсолютных единицах (описанных ниже). Горизонтальные размеры обычно задаются в em, а вертикальные - в ex. Идентификаторы em или ex следуют непосредственно за числом. Например, горизонтальные отступы от оператора "+" обычно задаются в em, хотя могут использоваться и другие единицы измерения. Использование связанных со шрифтом единиц измерения предпочтительнее, чем абсолютных, так как они позволяют увеличивать или уменьшать размер отображаемого элемента в зависимости от текущего размера шрифта.

Для большинства числовых атрибутов возможные значения ограничены некоторым подмножеством, другие значения ошибкой не являются (если не указано противное), а округляются программой отображения вверх или вниз до ближайшего допустимого. Множество допустимых значений может зависеть от программы отображения и не определяется MathML.

Если числовое значение в соответствии с синтаксисом атрибута может содержать знак минус ("-"), например number или integer, то его использование в случае, когда отрицательные значения не существенны, ошибкой не является. Вместо этого, значение должно обрабатываться приложением так, как описано в предыдущем параграфе. Явное указание знака плюс ("+") как части числового значения запрещено за исключением тех случаев, когда это специально указано в синтаксисе (в виде "+" или "+"), и его присутствие может изменить смысл значения атрибута (как описано в каждом из таких атрибутов).

Символы h-unit, v-unit, css-fontfamily, и css-color-name рассматриваются в следующих подразделах.

1.7.4.2 Атрибуты с единицами измерения

Некоторые атрибуты принимают горизонтальные и вертикальные размеры как числа, за которыми следует "идентификатор единицы измерения" (часто называемый "единицей измерения"). Синтаксические символы h-unit и v-unit относятся к горизонтальным и вертикальным размерам соответственно. Возможные единицы измерения и размеры, к которым они относятся, перечислены в таблице, расположенной далее; они совпадают для горизонтальных и вертикальных размеров, но синтаксические символы отличаются (как напоминание используемого в них направления).

Идентификаторы единиц измерения и их смысловое значение взяты из. Тем не менее, синтаксис числа с последующим идентификатором в MathML не идентичен синтаксису в CSS, так как числа в CSS не могут заканчиваться десятичной точкой и могут начинаться со знака "+".

Допустимые горизонтальные и вертикальные единицы измерения в MathML:

Типографские единицы измерения em и ex обсуждаются далее в пункте "Дополнительные замечания".

% является "относительной единицей измерения"; когда значение атрибута задано в виде n% (для любого числового значения n), значение определяется как значение по умолчанию, умноженное на n и поделенное на 100. Значение по умолчанию (или способ, которым его можно получить, если оно не является константой) описано в таблице атрибутов для каждого элемента, а его смысл описан в последующей документации по атрибуту. (Элемент mpadded имеет свой синтаксис для% и не позволяет использовать его как идентификатор единицы измерения)

Для согласованности с CSS, единицы измерения длины в MathML могут быть необязательными. Когда это так, символ единицы измерения в синтаксисе атрибута заключается в квадратные скобки, например, число . Смысл значения атрибута без единиц измерения описан в документации для каждого атрибута; обычно указанное число умножается на значение по умолчанию. (В этом случае число nnn без единицы измерения эквивалентно числу nnn умноженному на 100 и со знаком %. Например, ( эквивалентно ()

Как исключение (тоже для совместимости с CSS), числовые значения равные нулю не требуют указания идентификатора единицы измерения даже если этого требует синтаксис. В этом случае наличие или отсутствие идентификатора единицы измерения не играет роли, так как любое число умноженное на 0 есть 0.

Для большинства атрибутов в данной спецификации в качестве стандартных единиц измерения выбраны единицы, используемые в типографском наборе; когда не указано конкретное значение величины, то стандартные единицы измерения обычно указаны в таблице или в описании атрибута. Чаще всего используются такие единицы измерения как em или ex. Однако, могут использоваться любые единицы, если в описании конкретного атрибута не указано обратное.

Отметим, что некоторые атрибуты, например framespacing в , могут содержать более одного числового значения, после каждого из которых следует своя единица измерения.

Принято использовать единицы измерения ex в основном для задания вертикальных размеров, а em - для горизонтальных, хотя это не является обязательным требованием. Эти единицы измерения зависят от шрифта, используемого для отображения элемента, в атрибутах которого они применяются, и его размера. А значит, они должны интерпретироваться после таких атрибутов, как fontfamily и fontsize, если они встречаются в одном элементе, так как изменение текущего шрифта или его размера может привести к изменению размера единиц измерения.

Определение длины каждой единицы измерения (но не синтаксис MathML для значений длины) такое же как в CSS, за исключением тех случаев, когда шрифт устанавливает специальные значения для em и ex, отличающиеся от значений, определенных в CSS (font size и "x"-height соответственно).

1.7.4.3 CSS-совместимые атрибуты

Некоторые атрибуты MathML, перечисленные ниже, соответствуют свойствам отображения текста, определенным в CSS1. Это сделано для того, чтобы программы отображения могли запросить CSS-окружение о соответствующих свойствах при определении значений атрибутов по умолчанию.

Возможность определения стилевых свойств через атрибуты MathML и CSS имеет и недостатки. Как минимум, это запутывает, а в худшем случае, это приводит к непреднамеренному изменению смысла уравнений при изменении CSS для всего документа. Поэтому, эти атрибуты осуждаются. В свою очередь, MathML 2.0 вводит четыре новых математических стилевых атрибута. Эти атрибуты используют логические значения для того, чтобы лучше передать абстрактные категории используемых в математике символов, и предоставляют четкое разделение между MathML и CSS.

Следующая таблица показывает соответствие осуждаемых стилевых атрибутов MathML 1.01 и их CSS-аналогов:

Порядок обработки атрибутов и стилевых таблиц.

CSS или аналогичные стилевые таблицы могут задавать изменения свойств отображения элементов MathML. Так как свойства отображения могут изменяться как атрибутами элемента, так и программой отображения, необходимо определить порядок, в котором происходят изменения из разных источников. Примером автоматического согласования является ситуация с fontsize. В случае "абсолютных" изменений, например, установки нового значения свойства, независимого от старого значения (в отличие от "относительных" изменений, таких как инкремент или умножение на число), действуют только последние абсолютные изменения, поэтому источник изменений с наивысшим приоритетом должен обрабатываться последним.

В случае CSS, порядок обработки изменений, действующих на свойства отображения элемента MathML, из различных источников должен быть следующим: (изменяется первым; самый низкий приоритет)

Автоматические изменения свойств или атрибутов, основанных на типе родительского элемента и положении элемента в родительском (как упоминается выше об изменениях fontsize в соответствии с scriptlevel; такие изменения обычно применяются самим родительским элементом перед передачей свойств отображения текущему элементу

Из стилевых таблиц читателя: стили, которые не объявлены "важными"

Явно заданные атрибуты текущего элемента MathML

Из стилевых таблиц читателя: стили, которые объявлены "важными" (изменяется последним; самый высокий приоритет).

Отметим, что порядок изменений, производимых стилевыми таблицами CSS, определен в самих CSS (это порядок, определяемый CSS2). Следующее объяснение относится только к случаю, когда в этом порядке происходят изменения, вызванные точным заданием атрибутов MathML.

Объяснение: Атрибуты отображения в MathML аналогичны атрибутам отображения в HTML (таким как align), которые, согласно определенному в CSS порядку, должны обрабатываться с одинаковым приоритетом. Более того, такой выбор очередности позволяет читателям решить, определяя стили CSS "важными", какие из их установок должны переопределять явные установки MathML. Так как выражения MathML, состоящие из элементов содержания или представления, в первую очередь предназначены для передачи смысла, а "графическое представление" (если таковое имеется) должно помогать этому (но не является важным само по себе), вероятно, что читатели захотят, чтобы их стилевые предпочтения имели приоритеты. Основным исключением является ситуация, когда атрибуты отображения предполагают изменение смысла выражения.

1.7.4.4 Значения атрибутов по умолчанию

Значения по умолчанию для атрибутов MathML как правило даются вместе с подробным описанием соответствующего элемента. Значения по умолчанию, указанные в таблицах атрибутов обычным шрифтом, являются точными (если они не являются очевидными объяснениями), выделенные курсивом фрагменты описывают, как значения по умолчанию могут быть вычислены.

Значения по умолчанию, описанные как inherited, берутся из среды отображения, как описано для mstyle, или, в некоторых отдельно описанных случаях, из значений других атрибутов окружающих элементов, или из определенной части этих значений. Всегда используется значение, которое может быть задано точно, если оно известно; оно никогда не зависит от содержания или атрибутов данного элемента, только от его окружения. (Его смысл при использовании может, тем не менее, зависеть от этих атрибутов или содержания)

Значения по умолчанию, описанные как automatic, должны вычисляться программой отображения таким образом, чтобы получить высококачественное изображение. Способ, как этого добиться, обычно не указан в спецификации MathML. Всегда используется значение, которое может быть задано точно, если оно известно; но оно обычно зависит от содержания элемента и, возможно, от среды отображения.

Другие выделенные курсивом описания значений по умолчанию, которые встречаются в таблицах атрибутов, объясняются отдельно для каждого атрибута.

Одинарные или двойные кавычки, в которые должны быть заключены значения атрибута, расположенного в открывающем теге XML, не показаны в синтаксисе значений в таблице атрибутов, но показаны в тексте примеров.

Отметим, что, как правило, не существует значений, которые точно могут быть присвоены атрибутам MathML и имитируют эффект их отсутствия для атрибутов, являющихся inherited или automatic. Указание "inherited" или "automatic" точно не будет работать, и вообще запрещено. Более того, даже для атрибутов представления (для которых здесь приведены конкретные значения по умолчанию), должен использоваться элемент mstyle для изменения содержащихся в нем элементов. Поэтому, MathML DTD определяет большинство значений по умолчанию для атрибутов представления как #IMPLIED, что не позволяет обработчикам XML добавлять к этим атрибутам любые специальные значения по умолчанию. MathML schema работает по тем же правилам.

1.7.4.5 Значения атрибутов в MathML DTD

В XML DTD, разрешенные значения атрибутов могут быть определены как общие строки, или могут быть различными способами ограничены (перечислением возможных значений, или указанием определенного типа данных). Выбор типа атрибута XML влияет на объем, в котором могут быть проведены проверки корректности с использованием DTD.

MathML DTD определяет формальные типы атрибутов XML для всех атрибутов MathML, включая в некоторых случаях перечисления допустимых значений. В общем, тем не менее, MathML DTD является относительно нестрогим, часто определяя значения атрибутов как строки; это сделано для совместимости с парсерами SGML, которые допускают, чтобы несколько атрибутов одного элемента MathML принимали одинаковые значения (такие как true и false), и для того, чтобы позволить расширять список предопределенных значений.

В то же время, даже если значение атрибута может быть определено как строка в DTD, только определенные значения являются допустимыми в MathML, как описано выше и в оставшейся части этой спецификации. Например, многие атрибуты требуют числовых значений. В следующем разделе описаны допустимые значения атрибутов для каждого элемента. Тем не менее, недостаток жесткости требований в DTD не подразумевает, что эти требования не являются частью MathML, или что они не могут быть усилены конкретной программой отображения MathML.

Более того, MathML DTD предоставляется для удобства; хотя и подразумевается полная совместимость с текстом спецификации, текст должен быть определяющим в случае возникновения противоречий.

1.7.5 Атрибуты, общие для всех элементов MathML

Для того чтобы облегчить использование таких стилевых механизмов, как XSLT и CSS2, все элементы MathML имеют атрибуты class, style, и id в дополнение к атрибутам, описанным для каждого элемента. Программы отображения MathML, не поддерживающие CSS, могут игнорировать эти атрибуты. MathML определяет значения этих атрибутов как общие строки, даже если стилевые механизмы имеют для них более строгий синтаксис. Поэтому, любое значение для них является допустимым в MathML.

Для того чтобы обеспечить совместимость с механизмами связывания, все элементы MathML имеют атрибут xlink: href.

Все элементы MathML также имеют атрибут xref для использования в параллельной разметке. id также используется в этом контексте.

Каждый эдемент MathML, как наследство от MathML 1.0, также принимает осужденный атрибут other, который предполагался для передачи нестандартных атрибутов без нарушения MathML DTD. От программ отображения MathML требуется обработка этого атрибута только в том случае, если они реагируютя на все нестандартные атрибуты MathML. Тем не менн, использование атрибута other сильно осуждается, так как в MathML существуют другие способы передать специфическую информацию.

1.7.6 Свертывание пробелов во вводе

MathML игнорирует пробельные символы, встречающиеся вне токенов. Непробельные символы здесь запрещены. Пробельные символы, встречающиеся в содержании токенов, удаляются на концах, то есть удаляются все пробельные символы в начале и конце содержания. Пробельные символы, расположенные внутри содержания элементов MathML свертываются кононически, то есть каждая последовательность из 1 или более таких символов заменяется на 1 (иногда называемый пустым символом).

В MathML, как и в XML, под пробельными символами подразумеваются простой пробел, табуляция, новая строка или перевод строки, то есть символы с кодами Unicode U+0020, U+0009, U+000A, U+000D соответственно.

Например,

( эквивалентно (, и

эквивалентно Теорема 1: .

Авторы, желающие поместить пробельные символы в начале или конце содержания токена, или последовательность более чем из одного пробельного символа так, чтобы они не были проигнорированы, должны использовать или другие неотображаемые пробельные символы. Например, сравните

Теорема 1:

Когда отображается первый пример, перед словом "Теорема" нет пробельных символов, один - между "Теорема" и "1: ", и нет после "1: ". Во втором примере одиночный пробел будет отображен перед словом "Теорема", два - перед "1: ", и ни одного после "1: ".

Отметим, что атрибут xml: space в данной ситуации неприменим, так как процессоры XML передают пробельные символы в токенах процессору MathML; удаление происходит по правилам обработки MathML.

Для пробельных символов, встречающихся вне содержания токенов mi, mn, mo, ms, mtext, ci, cn и annotation, должен использоваться элемент mspace, в противоположность элементу mtext содержащий только пробельные символы

2. Возможности современных браузеров при работе с MathML

В качестве тестового примера для демонстрации возможностей браузеров была создана простая XHTML-страница, содержащая примеры обоих разметок. Опишем основные требования к ней. Во-первых, это должны быть корректным XHTML-документом, то есть:

быть корректным xml-документом;

корневым элементом должен быть элемент html в пространстве имен XHTML, например:

"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f. dtd">

MathML-фрагменты должны принадлежать пространству имен MathML, например:

...

Тестовый пример, который используется ниже: test. xhtml.

2.1 Mozilla & Firefox

Используемая версия: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv: 1.7 5) Gecko/20041107 Firefox/1.0.

Mozilla и построенный на том же ядре Firefox имеют встроенные возможности отображения разметки MathML. Правда, до сих пор они ограничены лишь поддержкой разметки представления. Так в нашем тестовом примере фрагмент разметки представления отобразился правильно, чего нельзя сказать о разметке содержания.

Решением этой проблемы может служить использование специальных XSLT-стилей "XSLT stylesheets for MathML". Такой подход возможен, так как поддержка XSLT-трансформаций встроена в браузер. Для этого надо скачать набор XSLT-стилей и в первой строчке нашей страницы указать ссылку на заглавный файл mathml. xsl:

По соображениям безопасности Mozilla позволяет использовать XSLT-стили расположенные в другом домене просмотра исходного кода MathML с подсветкой выделенного фрагмента. Правда, при использовании разметки содержания и XSLT-стилей мы увидим не исходный код, а результат преобразования.

Из других возможностей следует отметить интеграцию с поисковыми системами. При выделенном фрагменте формулы контекстное меню позволяет отправить запрос к поисковой системе.

Но пока это задел на будущее, так как пока подобный поиск результатов не дает.

2.2 MicrosoftInternetExplorer

Используемая версия: 6.0.2800.1106 (SP1; Q867801; Q823353; Q833989)

Браузер от Microsoft не имеет встроенной поддержки MathML. Для корректного отображения математических формул можно использовать свободно распространяемый плагин MathPlayer.


Помимо собственно отображения математической разметки он позволяет быстро копировать MathML-нотацию. Также можно при желании увеличить формулу для лучшей наглядности:

Из недостатков следует отметить отсутствие возможности выделить или скопировать фрагмент математического выражения. Также нет возможности (как и в Mozilla) корректно скопировать формулу с окружающим текстом.

2.3 Opera

Используемая версия: 7.54u1 (Build 3918; Platform Win32; System Windows 2000; Java not installed).

Этот браузер на данном своего развития этапе не имеет возможностей для корректного отображения разметки MathML.

Список использованной литературы

1. Дорофеев А.В., Федотов А.М. Электронные публикации в среде Internet и множественность кодировок русского языка // Вычислительные технологии, 1997, т.2, N 3, c.31-44.

2. Олейник О.В., Толкачева Е.М., Федотов А.М. Электронные издания и представление математических текстов на WWW // Вычислительные технологии, 1997, т.2, N 3, c.60-67.

3. Шокин Ю.И., Федотов А.М., Знаменский С .В. Электронные публикации и проблемы множественности кодировок русского языка // Информационные технологии и вычислительные системы, 1997, N 2, c.90-101.

4. Знаменский С .В. Стандартизация русского TeX: утопия или неизбежность // Вычислительные технологии, 1997, т.2, N 3, c.51 - 59.

5. Галактионов В.В. Расширяемый язык разметки XML (Extensible Mark-up Language): промышленный стандарт, определяющий архитектуру программных средств Интернет следующего поколения. Сообщение ОИЯИ, Р10-2000-44, Дубна, 2000.

6. Митюнин В.А. Обзор средств публикации и просмотра математических документов в сети Интернет - http://mathmag. spbu.ru/article/4/

7. Math on the Web: A Status Report - http://www.dessci.com/ webmath /status/

8. Including Math Notation in Web Pages - http://mathforum.org/typeseting/

9. MathML 1.01 - http://www.w3.org/TR/REC-MathML/

10. MathML 2.0 - http://www.w3.org/TR/MathML2/

С распространением глобальных компьютерных сетей (в частности, Интернет) появилась необходимость размещения в ней в том числе и математических текстов.

Язык MathML является подмножеством языка XML (eX tensible M arkup L anguage - расширяемый язык разметки), который часто служит для создания других языков. Такое использование XML сегодня вполне естественно и хорошо зарекомендовало себя и в других случаях, когда применение HTML для передачи данных новых типов наталкивалось на ограничения этого формата. К настоящему времени консорциум W3C опубликовал 2-е издание версии 2.0 спецификации языка MathML, что говорит о жизнеспособности и устойчивости проекта.

Языки разметки, основанные на XML:

  • Wireless Markup Language (WML): формат данных для (беспроводных) устройств, работающих с протоколом WAP (мобильные телефоны);
  • Synchronized Multimedia Integration Language (SMIL):
  • Задает временную разметку, внешний вид и т.д. для мультимедийных презентаций;
  • Определяет порядок воспроизведения мультимедийных файлов;
  • Для просмотра требуется SMIL-совместимый плеер (AMBULANT, MS IE6);
  • Руководство и примеры: http://www.multimedia4everyone.com/
  • Scalable Vector Graphics (SVG): для описания двухмерной векторной графики;
  • Mathematical Markup Language (MathML) : для описания математических обозначений (формул);
  • Chemical Markup Language (CML): для представления химических формул;
  • другие.

Среди целей, которые ставились рабочей группой W3C по математике при создании MathML, были:

  • обеспечение кодирования материалов математического характера для коммуникаций всех уровней образовательного и научного типа;
  • обеспечение кодирования как математической символики, так и ее значений;
  • поддержка создания шаблонов и других приемов математического редактирования;
  • обеспечение преобразования в другие математические форматы как чисто презентационного, так и семантического характера, а также - из этих форматов в создаваемый язык математической разметки. Форматы вывода должны включать средства для отображения графической информации, синтеза речи, представления текста в форме, пригодной для ввода ее в системы компьютерной алгебры, совместимость с другими языками описания математических текстов, такими, как ТДО, возможность отображения “чистого” текста (т.е. не включающего математических символов и выражений), возможность вывода текстов на печать в различной форме, включая вывод по системе Брайля. При этом преобразования между различными форматами могут приводить к потерям информации;
  • возможность передачи информации с учетом особенностей конкретных программ визуализации;
  • поддержка эффективных процессов просмотра длинных математических выражений;
  • обеспечение расширяемости возможностей (способами, которые заранее не известны).

Общий принцип использования MathML состоит в том, что математические конструкции встраиваются в обычный HTML-документ и (если браузер либо специальная программа поддерживает эту спецификацию) адекватно воспроизводятся при загрузке документа из сети.

Первое, с чем приходится столкнуться в MathML и что отличает данный язык разметки от аналогов, - это использование двух способов кодирования выражений. Один из них основан на непосредственной передаче синтаксиса формулы (presentation ), другой, напротив, отражает семантику выражения (content ). Презентационная разметка описывает математическую символику с выражениями, которые строятся с использованием некоторых схем вывода, с заданием способов размещения подвыражений, таких, как дроби, верхние и нижние индексы. Семантическая разметка описывает математические объекты и функции, где для каждого узла конструируется дерево выражения согласно некоторой конкретной схеме, а ветви этого дерева отвечают подвыражениям.

На настоящий момент веб-страницы, созданные с использованием MathML, можно просматривать в следующих браузерах (знак “+” означает, что более новые версии тоже работают):

  • Windows:

o IE 5.0 с плагином Techexplorer

  • Macintosh:

o IE 5.0+ с плагином Techexplorer

o Mozilla 0.9.9+

  • Linux/Unix:

o Netscape 6.1 с плагином Techexplorer

o Mozilla 0.9.9+

o Amaya, все версии (только Presentation MathML)

Все элементы MathML делятся на три группы: элементы представления , элементы содержания и интерфейсные элементы.

Элементы представления описывают визуально ориентированную двухмерную структуру математической нотации. Например, элемент mrow обычно применяется для обозначения горизонтального ряда частей выражения, и элемент msup , который отмечает верхний индекс. Как правило, каждый элемент представления соответствует одному типу нотационной схемы, такой, как ряд, верхний индекс, нижний индекс и т.д. Любая формула состоит из частей, которые могут состоять из простейших элементов, таких, как цифры, буквы или другие символы.

Наиболее важными элементами представления являются mi , mn и mo , используемые для представления идентификаторов, чисел и операторов соответственно. Обычно эти элементы отображаются разными стилями: числа - прямым шрифтом, идентификаторы - наклонным, вокруг операторов оставляется дополнительное свободное пространство.

В терминах разметки, большинство элементов MathML определяются открывающим и закрывающим тегами, которые ограничивают содержание элемента. Некоторые элементы, например знаки операций ( ), определяются одиночным тегом.

Рассмотрим более подробно некоторые элементы, необходимые для верстки математических формул, на примере презентационной разметки.

Токены (token elements) представляют индивидуальные символы, названия, числа, обозначения и т.д. В основном в качестве содержания токены могут иметь только символы.

MathML игнорирует пробельные символы, встречающиеся вне токенов. Непробельные символы здесь запрещены. Пробельные символы, встречающиеся в содержании токенов, удаляются на концах, то есть удаляются все пробельные символы в начале и конце содержания. Пробельные символы, расположенные внутри содержания элементов MathML, свертываются канонически, то есть каждая последовательность из 1 или более таких символов заменяется на 1 (иногда называемый пустым символом).

Основные элементы

Индексы

Некоторые математические операции, которые можно использовать с тегом .

+ +
< >
<
<= >=
++ ++
.NOT. not
and and
невидимый знак умножения
+ +

Рассмотрим несколько примеров формул в MathML.

1) sin 2 α + cos 2 α = 1

sin

α

+

cos

α

=

Греческую букву α получаем с помощью кода α (напоминаем, что используется Unicode).

Результат

Напоминаем также, что для работы с MathML в Internet Explorer необходимо установить MathPlayer.

В любом файле, содержащем разметку MathML, перед заголовочной частью документа должны присутствовать строки

Кроме того, любой код MathML открывается тегом

и закрывается тегом .

a2

b2

sin

x+y

2x

x2

y2

Рассмотрим элементы для верстки таблиц и матриц.

1

1

1

1

1

1

0

0

0

1

1

0

0

0

1

1

0

0

0

1

1

1

1

1

1

Пример 2.

ax+by

=c

a1x+

b1y=

c1

Различные математические символы при необходимости нужно отыскивать в кодировочной таблице Unicode.

Пример .

S

-1

Σ

i=0

Довольно значительное количество примеров с интегралами можно найти на , поэтому не будем здесь на них останавливаться, рекомендуем читателю ознакомиться с примерами на указанном ресурсе.

Как отмечалось выше, MathML позволяет использовать презентационное и семантическое представления. Здесь мы сосредоточились на презентационном как наиболее удобоваримом и чаще используемом. Тем не менее, чтобы дать хотя бы некоторое представление о другом варианте, рассмотрим небольшой иллюстративный пример и запишем его в двух вариантах представления.

Пример . x 2 - 6x + 9 = 0

Конечно, набор формул в MathML - занятие довольно длительное и требует определенных усилий. Впрочем, кто работал достаточно долго в LaTeX, особой разницы не заметит. Тем не менее чаще пользователь предпочитает применять различные инструменты. Назовем некоторые .

Во-первых, математические пакеты, скажем, Mathematica или Maple, позволяют сохранять набранные в них формулы в формате MathML.

Этот ресурс использует Java-скрипт ASCIIMathML.js (ver 2.0; сентябрь 2007; http://www1.chapman.edu/~jipsen/mathml/asciimath.html , автор скрипта - Peter Jipsen), работающий на компьютере пользователя, который загружается при загрузке демонстрационной страницы http://www1.chapman.edu/~jipsen/mathml/asciimathdemo.html . Поэтому, в частности, этот ресурс может использоваться локально: достаточно сохранить упомянутую демонстрационную html-страницу и можно производить конвертацию простых формул без подключения к Интернету.

В заключение отметим, что MathML как средство разметки также неплохо подходит при генерации различных математических заданий (см. примеры выше). При этом для программирования можно использовать, например, JavaScript, тогда пользователь получит возможность генерировать произвольное количество вариантов заданий по своему усмотрению. Также можно предусмотреть и генерацию ответов ко всем заданиям, что весьма несложно.

Рассчитываем, что на этом знакомство читателя со средствами верстки математических текстов не завершается и далее он сможет самостоятельно выбрать заинтересовавший его инструмент, а может быть, и применить на практике описанные технологии.

Литература и ресурсы Интернета

До выхода HTML5 использование формул было сущим наказанием. Судите сами: в 2005-м необходимо было иметь под рукой либо специальный браузер, либо разбивать текст на собственно HTML и вставки из изображений или PDF. Поиск и прочие операции редактирования и/или вывода на экран/бумагу был неоднозначной задачей, коей посвящались целые монографии .

В 2012-м было уже попроще. Появилась возможность подключать необходимые плагины (Firemath для FireFox и Daum Equation Editor для Chrome). Но неоднозначность стандартов (и поддержки) фактически заставляла писать одну и ту же статью для каждого из браузеров (и для их версий). Или встречать пользователей волшебным приветствием «Ваш браузер надо обновить/дополнить расширением».

Неудобно? - Да! Отнимало много времени на поиск универсального решения? - Да! Заставляет думать о том, какой тип записи лучше (презентационный или содержательный), каким конвертером пользоваться (а их только общеизвестных с десятка полтора)? - ДА! ДА! ДА!

В результате работа по публикации превращалась в освоение двух-трех лексиконов разметки и изучения работы минимум одной программы-перекодировщика.

Теперь, с приходом HTML5, все стало намного проще. В нем появился новый контейнер .
Каждый допустимый экземпляр MathML должен быть внутри этого контейнера.
Он не допускает вложений, но внутри может быть произвольное число других дочерних элементов.

Атрибуты тэга

В дополнение к следующим атрибутам, тэг воспринимает любые атрибуты из "> .

class, id, style
При условии использования вместе с таблицами стилей .
dir
Указывает направление формулы: ltr - слева направо или rtl - справа налево.
ref
Используется для установки гиперссылки на указанный URI.
mathbackground
Цвет фона. Вы можете использовать #rgb , #rrggbb и названия цветов HTML .
mathcolor
Цвет текста. Вы можете использовать #rgb , #rrggbb и названия цветов HTML .
display
Этот атрибут определяет способ вывода. Возможные значения:

  • block - означает, что этот элемент будет отображаться за пределами текущего диапазона текста, как блока, который может быть расположен в любом месте без изменения смысла текста;
  • inline -означает, что этот элемент будет отображаться внутри текущего диапазона текста, и не могут быть перемещены из нее без изменения значения этого текста.

Значение по умолчанию inline .

Mode

Устаревшие значение display attribute .
Возможные значения: display (который имеет тот же эффект, как display="block") и inline .
overflow
Определяет, как выражение ведет себя, если текст слишком длинный и не помещается в указанном диапазоне ширины.
Возможные значения: linebreak (по умолчанию), scroll , elide , truncate , scale .

Примеры

Представление в HTML5

MathML in HTML5 a 2 + b 2 = c 2

Представление в XHTML

MathML in XHTML a 2 + b 2 = c 2
Примечания: XHTML документы с MathML должны быть поданы как application/xhtml+xml . Вы можете легко добиться этого, добавив.xhtml расширение для локальных файлов. Для серверов Apache вы можете настроить.htaccess файл для этого расширения на правильный тип MIME. Поскольку мы сохранили наш MathML в виде XML-документа, необходимо быть уверенным в правильно оформленном XML-документе.

Поддержка браузерами

Поддержка браузерами

Полноценные версии
Элемент Chrome Firefox (Gecko) Internet Explorer Opera Safari
XHTML описание (только 24-я) 1.0 (1.7 и выше) 9.5 5.1
HTML5 описание (только 24-я) 4.0 (2.0) 5.1
dir 12.0 (12.0)
href WebKit bug 85733 7.0 (7.0) WebKit bug 85733
mathbackground (только 24-я) 4.0 (2.0) 5.1
mathcolor (только 24-я) 4.0 (2.0) 5.1
overflow

Мобильные версии

Элемент Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
XHTML описание 1.0 (1.0)
HTML5 описание 4.0 (2.0)
dir 12.0 (12.0)
href 7.0 (7.0)
mathbackground 4.0 (2.0)
mathcolor 4.0 (2.0)
overflow

Используемое для представления и формул в документах . MathML рекомендован математической группой .

Спецификация MathML версии 1.01 вышла в июле , в феврале появилась версия 2.0. В октябре была опубликована вторая редакция MathML версии 2.0, которая является на настоящий момент последней спецификацией, выпущенной математической группой .

MathML рассматривает не только представление , но и смысл элементов формулы. Также разрабатывается система разметки математической семантики, призванная дополнить MathML. Она называется OpenMath.

Пример

Поддержка программного обеспечения

Основными , непосредственно поддерживающими MathML, являются последние версии и его разновидности. Многие другие браузеры поддерживают этот формат при установке соответствующих . Например, в для поддержики MathML используется плагин MathPlayer.

Кроме того, MathML поддерживается основными офисными программами, такими как и , а также математическими программными продуктами, например,

Сразвитием математической символики вырабатывались и совершенствовались способы
ее хранения и передачи. Например, математики древнего Вавилона делали свои записи
на глиняных табличках, в период позднего средневековья появляются первые печатные
книги, и наконец, современная эпоха характеризуется все возрастающим потоком электронных
публикаций. Именно поиски адекватных методов оформления математических текстов
в Internet и привели к созданию языка MathML.

Необходимость в таком средстве вызвана тем, что формат HTML, несмотря на множество замечательных свойств, имеет довольно-таки ограниченные возможности передачи математических обозначений. Чаще всего формулы на HTML-страницах представляются в виде графики (растровой или векторной), но этот способ имеет очевидные недостатки. Например, формулу-рисунок практически невозможно отредактировать, а качество ее при печати обычно оставляет желать лучшего. Уже исходя из этого понятно, что для Web математическую символику желательно как-то кодировать, причем максимально "прозрачно" для клиентских программ (броузеров). Развитие этих идей и привело к созданию целого семейства языков математической разметки, к которым относится и рассматриваемый сегодня MathML.

Следует отметить, что проблема представления математической символики в электронном виде не исчерпывается необходимостью разработки отдельной спецификации. Это сложная научная и техническая задача, пока далекая от своего окончательного решения, что подтверждается наличием большого числа предлагаемых подходов, зачастую слабо согласованных между собой. Одним из таких подходов являются специализированные языки разметки, к которым относится и MathML. Безусловно, его разработчики осознавали глубину данной проблематики и поставили цель создать спецификацию, удовлетворяющую следующим ограниченным, но все же достаточно важным требованиям:

  • легкость освоения и ручного набора основных математических обозначений;
  • максимальная совместимость с другими математическими форматами, которая должна обеспечиваться соответствующими конвертерами;
  • возможность вывода формул на различные терминальные устройства;
  • поддержка расширяемости, т. е. введения новых символов, схем и т. д.

К данным целям, относящимся к принципам построения спецификации, были добавлены и другие, связанные с особенностями применения MathML в приложениях. Необходимо обеспечить вывод формул на экраны и принтеры с наиболее высоким качеством, организовать средства информационного обмена (например, буферные операции копирования/вставки фрагментов формул). Понятно, что все это будет реализовываться разработчиками прикладного программного обеспечения, однако потенциальные возможности должны быть заложены изначально.

В нескольких словах обрисуем место MathML в родственной ему группе языков математической разметки. В отличие от целого ряда ее представителей, из которых прежде всего надо назвать TeX, MathML обладает семантическими средствами построения математических выражений. Если документ того же TeX, по сути, представляет собой детальное описание некоторого текста с точным указанием положения всех его элементов, то MathML (более привязанный именно к содержанию) в этом отношении значительно гибче, поскольку окончательный вид документа легко может быть изменен в соответствии с требованиями пользователя.

Сведения о MathML

Язык MathML является подмножеством расширенного языка разметки XML, который часто служит для создания других языков. Такое использование XML сегодня вполне естественно и хорошо зарекомендовало себя и в других случаях, когда применение HTML для передачи данных новых типов наталкивалось на ограничения этого формата. К настоящему времени консорциум W3C опубликовал 2-е издание версии 2.0 спецификации языка MathML, что говорит о жизнеспособности и устойчивости проекта.

Общий принцип использования MathML состоит в том, что математические конструкции встраиваются в обычный HTML-документ и (если броузер либо специальная программа поддерживает эту спецификацию) адекватно воспроизводятся при загрузке документа из сети.

Первое, с чем приходится столкнуться в MathML и что отличает данный язык разметки от аналогов, — это использование двух способов кодирования выражений. Один из них основан на непосредственной передаче синтаксиса формулы (presentation), другой, напротив, отражает семантику выражения (content). Проще говоря, первый способ передает запись формулы вне связи с ее смыслом, второй, наоборот, отражает ее математическое содержание.

Кодирование синтаксиса

Рис. 1

Если взглянуть на форму представления различных математических выражений, то можно
заметить, что при довольно большом количестве специальных символов существует
относительно немного способов их упорядочения. Так, выражения могут строиться
с помощью верхних и нижних индексов, одна часть формулы может стоять над/под другой,
выражения могут находиться в элементах матрицы и т. д. Этот принцип и положен
в основу кодирования синтаксиса, при котором математические выражения любой сложности
формируются с помощью небольшого набора шаблонов (так называемых layout schemata),
отвечающих основным отношениям, встречающимся в математических формулах.

Для демонстрации этого принципа рассмотрим, как в MathML записывается обыкновенная дробь. Она имеет всего два элемента — числитель и знаменатель, что и отражено в соответствующем шаблоне:

Здесь тег , как уже говорилось, служит для создания собственно дроби. Атрибут linethickness определяет толщину разделительной линии, если его опустить, будет использовано стандартное значение (на рисунке отображены оба варианта).

Числитель представлен тегом , в свою очередь содержащим дочерние элементы. Этот тег может включать любое число вложенных выражений, которые создают формулу, выровненную по горизонтали вдоль базовой линии. В нашем случае это сумма двух переменных x и y (смысл тегов и будет пояснен ниже). Заметим, что запись без тега привела бы к ошибке, поскольку за числитель было бы принято первое же встретившееся в записи выражение (x). Наконец, знаменатель состоит из одной переменной Z , переданной тегом .

Основными элементами, применяемыми в представлении MathML, являются символы (tokens) и шаблоны (layout schemata, упоминавшиеся выше). Первые — это элементы языка, которые могут содержать только буквы (например, для обозначения переменных) и собственно математические символы, но не другие элементы.

Элемент используется для введения идентификаторов. Он действует по следующему правилу: если значением элемента является один символ, он воспринимается как переменная и воспроизводится курсивом, если же значение представляет собой строку, оно отображается прямым шрифтом (данное свойство применяется для записи функций типа sin , ln и др.). Элемент предназначен для отображения математических операторов, а , с которым мы пока не встречались, — для вывода чисел. Каждый из описанных элементов имеет определенный набор атрибутов, позволяющих изменить отображение символов, заданное по умолчанию.

Теперь познакомимся с некоторыми шаблонами MathML, передающими основные математические выражения. С двумя из них мы встретились выше: это теги для задания обыкновенной дроби и выражения, выровненного вдоль базовой линии. Другие наиболее важные шаблоны передаются следующими тегами:

  • выводит знак радикала с вложенным выражением. Аналогичный тег служит для отображения корня n -й степени;
  • задает выражение, заключенное в скобки. С помощью атрибутов можно указать разделитель для вложенных выражений и некоторые другие характеристики;
  • теги для передачи верхних/нижних индексов. Например, выражение с верхним индексом
    (степень) задается как ВЫРАЖЕНИЕ ВЕРХНИЙ_ИНДЕКС

Имеются также шаблоны для оформления практически всех наиболее важных математических выражений и матриц (всего около 30 видов).

Кодирование семантики

Перейдем теперь к способу кодирования с использованием семантики выражений. Как отмечено выше, он отражает математическое содержание формулы. Ключевым для передачи семантики является элемент . Проиллюстрируем его использование на простом примере. Следующий код создает дробь такого же вида, что и показанные на рис. 1.

Рис. 2

В нашем примере первым после идет элемент , обозначающий
деление (дробь). Скажем сразу, что при семантическом кодировании большинство операторов
передаются тегами типа , у которых перед закрывающей угловой скобкой
стоит косая черта (так называемые "пустые" элементы). Затем следуют
аргументы: еще один элемент , передающий оператор суммирования x
и y , и — Z . Соответственно, сумма (первый аргумент оператора деления)
отображается как числитель дроби, а переменная Z — как знаменатель. MathML
содержит около 90 операторов, разделенных на несколько категорий: арифметические,
алгебраические, логические и т. д.

В данном примере каждый встретившийся оператор применялся к паре аргументов. Но, как следует из представленного выше общего вида элемента , аргументов может быть произвольное число (если это допускает сам оператор). Например, выражение, показанное на рис. 2, записывается в виде

В двух последних примерах остался без объяснения один момент — теги для передачи
буквенных идентификаторов и чисел. Это и соответственно
— полные аналоги элементов и при кодировании синтаксиса.
Заметим, что тег своего аналога при использовании семантики не имеет,
поскольку вся информация об операторе передается специальным тегом оператора,
идущим после .

Для задания структуры формулы может применяться не только . Например, для выражения отношения (равенство, неравенство, включение и пр.) имеется специальный тег . Следующий фрагмент создает формулу, показанную на рис. 3.



x

y
z


Здесь говорит о том, что в математическое выражение входит одно из отношений, а "пустой" тег указывает на его конкретный тип — "меньше". В левой части будет находиться идентификатор x , в правой — сумма двух переменных, определяемая с помощью знакомого нам элемента .

Приведенных нами сведений о MathML, хотя и далеко не полных, вполне достаточно для начала самостоятельного использования этого языка. Тем более что имеются специальные программные инструменты, призванные избавить от рутинной работы.

ПО для работы с MathML

На соответствующей странице консорциума W3C приведены ссылки примерно на
три десятка рекомендуемых продуктов для работы с MathML. Самой важной представляется
ситуация с броузерами, поскольку она в наибольшей мере характеризует степень признания
любой Web-технологии. На сегодняшний день только два продукта готовы корректно
интерпретировать MathML: Amaya (который можно загрузить с узла того же W3C) и
Mozilla. К сожалению, прочие разработчики не спешат включать в свои продукты поддержку
этой перспективной технологии. Наиболее популярные у нас броузеры Microsoft Internet
Explorer и Netscape Navigator в базовой поставке MathML не "понимают",
однако для них имеются специальные
подключаемые модули — от IBM , Design
Science , Theorist
Interactive .

Эти же три компании поставляют и более полные версии своего ПО, предназначенные уже для создания MathML-документов. В частности, именно в IBM techexplorer Hypermedia Browser были подготовлены примеры к данной статье. Подобные же задачи можно решать и с помощью менее специализированных приложений. Например, системы компьютерной математики (Mathematica, Maple, Mathcad) обычно обеспечивают экспорт своих документов в формат HTML с MathML-"вкраплениями".

MathML также поддерживают и некоторые настольные издательские системы для подготовки
научно-технической документации. Из наиболее известных продуктов этого класса
можно назвать WebEQ ,
представляющий собой пакет Java-приложений для обеспечения полного цикла набора
и публикации документов в форматах MathML и WebTeX; Wolfram
Publicon для подготовки математических текстов презентационного качества с
возможностью экспорта в MathML; текстовые процессоры от MacKichan
Software , которые умеют сохранять документы из своего основного формата TeX
в MathML.

Существуют также специальные конвертеры для преобразования в/из MathML. Исходным форматом чаще всего выступает TeX. MathML, в свою очередь, превращается в тот же TeX или популярные графические форматы.

Однако даже не имея в своем распоряжении подобных, не всегда доступных, пакетов, после определенной подготовки можно создавать MathML-документы вручную. Ведь это — обычные текстовые файлы, для работы с которыми (как и с HTML) достаточно простейшего текстового редактора.

В заключение еще раз подчеркнем, что MathML появился относительно недавно (описание версии 1.0 вышло в 1998 г.) и находится в стадии становления. Нельзя исключить того, что через несколько лет MathML уступит место более мощной и совершенной технологии. Однако уже сейчас можно с уверенностью сказать, что глубокие идеи, заложенные в этот язык, послужат прочной основой для создания будущих методов представления сложных научно-технических документов.