Теоретически два вида разметки предназначены для двух совершенно разных типов задач визуального представления математической информации (Presentation MathML) и машинной обработки контента. В реальности часто требуются оба типа разметки (гораздо чаще, чем по отдельности) и объединение их — довольно распространенная практика. Реализовывать такою операцию можно путем непосредственного встраивания одной разметки в другую, но процедура эта требует аккуратности и соблюдения простых правил. Так, любые фрагменты разметки содержания, встроенной в презентационную разметку, должны быть семантически значимыми и не требовать дополнительных аргументов и квантификаторов для достаточного определения. Разметка представления, встроенная в разметку содержания, должна содержаться в токене разметки содержания как единый элемент, используемый в качестве имени переменной или функции.
Есть другой, более гибкий способ объединить оба типа разметки. Это можно сделать с использованием тега <semantics>, связывающего выражения MathML и различные типы примечаний. Идея состоит в том, чтобы присоединить разметку содержания к разметке непредставления в качестве семантического примечания. В общем случае контейнер <semantic> может быть использован для присоединения любых внешних аннотаций. Пример смешанной разметки с его применением показан ниже:
<mrow>
<semantics>
<mrow>
<msubsup>
<mo>∫</mo> <mn>1</mn> <mi>t</mi> </msubsup>
<mfrac>
<mrow>
<mo>ⅆ</mo> <mi>x</mi> </mrow> <mi>x</mi>
</mfrac>
</mrow>
<annotation-xml encoding="MathML-Content"> <apply>
<int/>
<bvar><ci>x</ci></bvar>
<lowlimit><cn>1</cn></lowlimit>
<uplimit><ci>t</ci></uplimit>
<apply>
<divide/>
<cn>1</cn>
<ci>x</ci>
</apply>
</apply>
</annotation-xml>
</semantics>
</mrow>
В данном примере тег msubsup применяется для задания нижних и верхних индексов для представления пределов интегрирования в определенном интеграле. Контейнер <semantics> принимает два аргумента — само комментируемое выражение, в данном случае представленное презентационной разметкой, и комментарий. Формат комментария теоретически может быть любым, он описывается атрибутом encoding тега <annotation-xml>. Нетрудно догадаться, что его значение «MathML-Content» соответствует выражению, сформированному с применением MathML-разметки содержания.
Возможен и обратный случай, когда в роли комментария выступает выражение разметки. Вышеприведенный пример тут будет выглядеть следующим образом:
<semantics>
<apply>
<int/>
<bvar><ci>x</ci></bvar> <lowlimit><cn>1</cn></lowlimit> <u plim it><ci>t</ci></u plim it> <apply>
<divide/>
<cn>1</cn>
<ci>x</ci>
</apply>
</apply>
<annotation-xml encoding="MathML-Presentat ion"> <mrow>
<msubsup>
<mo>∫</mo>
<mn>1</mn>
<mi>t</mi>
</msubsup>
<mfrac>
<mrow>
<mo>ⅆ</mo>
<mi>x</mi>
</mrow>
<mi>x</mi>
</mfrac>
</mrow>
</annotation-xml>
</semantics>
(Оба последних примера взяты из спецификации MathML3 консорциума W3C).
На этом с MathML у нас все. Для более основательного изучения я бы рекомендовал замечательный источник спецификации консорциума W3C, который сделан практически в виде учебника. Тем же, кто уверен, что в своей дальнейшей деятельности в такой степени с математикой не столкнется, могу повторить слова своего вузовского преподавателя по математическому анализу, которыми он заканчивал каждую лекцию: «Я надеюсь, вам было интересно».
Добавить комментарий