`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

MathML: математика в Web

0 
 

Сразвитием математической символики вырабатывались и совершенствовались способы ее хранения и передачи. Например, математики древнего Вавилона делали свои записи на глиняных табличках, в период позднего средневековья появляются первые печатные книги, и наконец, современная эпоха характеризуется все возрастающим потоком электронных публикаций. Именно поиски адекватных методов оформления математических текстов в 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). Проще говоря, первый способ передает запись формулы вне связи с ее смыслом, второй, наоборот, отражает ее математическое содержание.


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

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

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

<mfrac> ЧИСЛИТЕЛЬ ЗНАМЕНАТЕЛЬ
</mfrac>

Например, следующее выражение создаст формулы, изображенные на рис. 1.

<mfrac linethickness=”5">
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
<mi>Z</mi>
</mfrac>

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

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

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

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

Теперь познакомимся с некоторыми шаблонами MathML, передающими основные математические выражения. С двумя из них мы встретились выше: это теги для задания обыкновенной дроби и выражения, выровненного вдоль базовой линии. Другие наиболее важные шаблоны передаются следующими тегами:
  • <msqrt> выводит знак радикала с вложенным выражением. Аналогичный тег <mroot> служит для отображения корня n-й степени;
  • <mfenced> задает выражение, заключенное в скобки. С помощью атрибутов можно указать разделитель для вложенных выражений и некоторые другие характеристики;
  • теги для передачи верхних/нижних индексов. Например, выражение с верхним индексом (степень) задается как <msup> ВЫРАЖЕНИЕ ВЕРХНИЙ_ИНДЕКС </msup>
Имеются также шаблоны для оформления практически всех наиболее важных математических выражений и матриц (всего около 30 видов).


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

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

<apply>
<divide/>
<apply>
<plus/>
<ci>x</ci>
<ci>y</ci>
</apply>
<ci>Z</ci>
</apply>

Разберем последовательно все теги, приведенные в этом примере, -- это даст возможность читателям понять базовый принцип использования семантики в MathML. Элемент <apply> обозначает, что некоторый оператор применяется к аргументам. Общий вид этого элемента можно записать как

<apply> оператор аргумент1 аргумент2 ... </apply>

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

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

<apply>
<plus/>
<ci>c</ci>
<ci>y</ci>
<cn>85</cn>
<ci>Z</ci>
</apply>

Здесь оператор суммирования применен сразу к четырем аргументам -- трем идентификаторам и числу. Использование принципа представления привело бы к необходимости записывать три знака "+" (т. е. трех операторов суммирования <mo>+</mo> между четырьмя аргументами).

MathML математика в Web
Рис. 3
В двух последних примерах остался без объяснения один момент -- теги для передачи буквенных идентификаторов и чисел. Это <ci> и <cn> соответственно -- полные аналоги элементов <mi> и <mn> при кодировании синтаксиса. Заметим, что тег <mo> своего аналога при использовании семантики не имеет, поскольку вся информация об операторе передается специальным тегом оператора, идущим после <apply>.

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

<reln>
<lt/>
<ci>x</ci>
<apply>
<plus/>
<ci>y</ci>
<ci>z</ci>
</apply>
</reln>

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

Приведенных нами сведений о 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 уступит место более мощной и совершенной технологии. Однако уже сейчас можно с уверенностью сказать, что глубокие идеи, заложенные в этот язык, послужат прочной основой для создания будущих методов представления сложных научно-технических документов.
0 
 

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT