Смекни!
smekni.com

MathML (Mathematical Markup Language) (стр. 5 из 9)

Давайте возьмем для примера выражение (a + b) 2 и рассмотрим на практике описанные выше принципы. Одним из вариантов разметки представления для этого выражения будет такой:

<mrow>

<msup>

<mfenced>

<mrow>

<mi>a</mi>

<mo>+</mo>

<mi>b</mi>

</mrow>

</mfenced>

<mn>2</mn>

</msup>

</mrow>

Этот пример демонстрирует использование различных элементов представления. Первый элемент, очень широко используемый, это элемент mrow. Он используется для обозначения ряда данных с выравниванием по горизонтали. Данные, содержащиеся между тегами <mrow> и </mrow> рассматриваются как аргумент элемента mrow. Таким образом, в элементе mrow содержится целое выражение. Как было замечено ранее, большинство математических выражений состоят из подвыражений. Эти подвыражения, в свою очередь, также содержатся в элементе mrow. Например, a + b также содержится в mrow.

Элемент mfenced используется для ограничения формул различными типами скобок. По умолчанию используются круглые скобки.

Обратите внимание на использование элемента mi для отображения переменных a и b и элемента mo для выделения оператора +.

Элемент msup применяется в выражениях с верхними индексами и имеет два аргумента: основание (в нашем случае (a+b)) и показатель (в нашем случае 2).

Разметка содержания для того же примера будет иметь вид:

<mrow>

<apply>

<power/>

<apply>

<plus/>

<ci>a</ci>

<ci>b</ci>

</apply>

<cn>2</cn>

</apply>

</mrow>

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

Обратите внимание на использование элемента ci для выделения переменных a и b, и элемента cn для выделения числа 2.

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

Разметка представления MathML состоит из приблизительно 30 элементов, которые имеют более 50 атрибутов. Большинство элементов представляют из себя схемы форматирования, которые содержат в себе другие элементы представления. Каждая схема соответствует двумерному фрагменту нотации, такому как верхний или нижний индекс, дробь или таблица. Кроме того, в разметке представления есть описанные выше токены mi, mo и mn и несколько других, которые используются не так часто. Несколько оставшихся элементов представления - это пустые элементы, связанные, в основном, с выравниванием.

Все схемы форматирования делятся на несколько классов. Одна группа элементов отвечает за индексы и содержит такие элементы, как msubmunder, и mmultiscripts. Другая отвечает за более общее форматирование и включает элементы mrow, mstyle и mfrac. Третья группа реализует работу с таблицами. Элемент maction образует еще одну категорию и позволяет кодировать различные типы действий над нотацией, встречающиеся в выражениях, которые toggles between two pieces of notation.

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

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

Разметка содержания содержит около 120 элементов, принимающих около дюжины атрибутов. Большинство этих элементов - пустые, соответствующие различным математическим операторам, зависимостям и функциям. В качестве примера можно привести partialdiff, leq и tan. Другие, такие как matrix и set, используются для представления различных типов математических данных. Третья важная категория элементов разметки содержания, такая как apply, используется для применения к выражениям операций и создания новых математических объектов.

Возможно, одним из наиболее важных элементов содержания является apply. Он используется для применения функции или операции к набору аргументов. Здесь также важно положение дочерних элементов: первый дочерний элемент указывает применяемую функцию, остальные - аргументы в соответствующем порядке. Надо отметить, что конструкция apply всегда использует префиксную нотацию, как язык программирования LISP. В частности, даже бинарные операторы, такие как вычитание, описываются применением префиксного оператора вычитания к двум аргументам. Например, a - b будет описано так:

<mrow>

<apply>

<minus/>

<ci>a</ci>

<ci>b</ci>

</apply>

</mrow>

Многие функции и операции, для того чтобы четко определенными, требуют одного или нескольких кванторов. Например, кроме подинтегрального выражения у определенного интеграла должны быть заданы пределы интегрирования и переменная, по которой происходит интегрирование. По этой причине существует несколько схем-спецификаторов вроде bvar и lowlimit. Они используются с операторами diff и int.

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

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

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

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

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

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

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

Все вышесказанное относится к отдельным формулам вне контекста документа. Давайте подробно рассмотрим пример, соответствующий примеру "Hello, World!", разбираемому при изучении языков программирования. Мы представим полный код документа XHTML 1.0, содержащего рассмотренный выше квадрат суммы двух переменных:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml: lang="en">

<head>

<title>MathML's Hello Square</title>

</head>

<body>

<p> This is a perfect square: </p>

<math xmlns="http://www.w3.org/1998/Math/MathML">

<mrow>

<msup>

<mfenced>

<mrow>

<mi>a</mi>

<mo>+</mo>

<mi>b</mi>

</mrow>

</mfenced>

<mn>2</mn>

</msup>

</mrow>

</math>

</body>

</html>

Это стандартная структура документа XHTML. Он начинается открывающим тегом <html>, содержащим декларацию пространства имен XML и объявление языка. Элемент headсодержит, как обычно, заголовок. Открывающий тег <body> beginning also has a namespace declaration of an abbreviative prefix letter m to be used for the standard MathML namespace. Затем идет обычный параграф. И, наконец, идет элемент math, который также имеет декларацию пространства имен. Внутри элемента math находится разметка MathML.

1.6 Примеры MathML

Далее мы будем приводить примеры в форме фрагментов разметки MathML, которые в реальном документе расположены в элементе math.

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

Нотация: x2 + 4x + 4 = 0.

Разметка:

<mrow>

<mrow>

<msup>

<mi>x</mi>

<mn>2</mn>

</msup>

<mo>+</mo>

<mrow>

<mn>4</mn>

<mo>&InvisibleTimes; </mo>

<mi>x</mi>

</mrow>

<mo>+</mo>