Mathematical Markup Language (Език за маркиране на математика)

MathML Версия 2.0

MathML - Mathematical Markup Language е XML приложение за описание на математическа символика и пресъздаване на нейната структура и съдържание. Целта на MathML е да позволи ползването, получаването и обработката на математически текстове в Интернет така, както HTML предоставя тези възможности за обикновен текст. Тази спецификация на маркиращия език MathML е предвидена от самото начало за онези, които ще развиват или прилагат редактори с негова помощ, както и за онези, които ще създават софтуер за комуникации, в който MathML ще се използва за протокол за вход и изход. Тъй като MathML ще се чете основно от хора, е предвидено, че вероятно авторите ще използват редактори за формули, конвертиращи програми и друг специализиран софтуер за генериране на MathML. Някои версии на такива MathML средства вече съществуват, а голяма част както нелицензирани, така и лицензирани, се разработват. Повечето системи за компютърна алгебра поддържат импорт и експорт на MathML и участниците в групата W3C Math Working Group насърчават внедряването й, като използват спецификацията и правят коментари върху нея.

Световната мрежа World Wide Web, която първоначално беше създадена да бъде един ефективен метод за предоставяне на информация на големи отделни групи от индивиди, срещна големи трудности при комуникиране със силно структурирано съдържание. Макар, че световната мрежа бе отначало създадена от учени за учени, възможностите за включване на математически изрази в HTML беше силно ограничено. В момента, по-голямата част от математиката в уеб-пространството се състои от текст и картинки с научно съдържание (в GIF или JPEG формат), които са трудни за четене и писане, или целите документи са в PDF формат. Търсенето на ефективни начини за електронна научна комуникация остава голямо. Методите, основани на изображения, които в момента са преобладаващ начин за предаване на научна символика в мрежата, са примитивни и неадекватни. Качеството на документите е лошо, набирането е трудно и математическата информация, записана в изображения не е достъпна за търсене, индексиране или ново редактиране с други приложни програми.

Най-очевидните проблеми с HTML за математически комуникации са от три типа:

  1. Формулите, съхранявани като картинки в общия случай са по-трудни за гледане, четене и разбиране спрямо останалия околен текст в същия уеб-документ. Нещо повече - тези проблеми стават по-големи при разпечатване на документа. Резолюцията на формулите като картинки е около 70 точки на инч, докато за останалия текст е по принцип 300, 600 на инч и по-голяма. Такава разлика в качеството е неприемлива за повечето хора.
  2. Проблеми по кодирането - опитът да се претърсва документ за намирането на дадена формула, рязане/лепене (Copy/Paste) на избрана формула в друга приложна програма или пък рязане/лепене на подизраз, нито една от тези операции не може да се извърши адекватно. Реално една формула е много по-малка и може да се компресира по-добре от една картинка на формулата.
  3. Размерът на документа, публикуван в интернет и времето за зареждането му - маркираното описание е много по-малко по обем и при използването на маркирано-базирано кодиране на даден процес той се пренася по-бързо на клиентската машина.

За да отговори на разнообразните нужди на научната общност, MathML беше проектиран със следните основно замислени цели:

MathML трябва:

  1. Да кодира математическо съдържание подходящо са преподаване и научни комуникации на всички нива.
  2. Да кодира както математически символи, така и математическия им смисъл.
  3. Да опрости преобразуването към и от други математически формати, представително и семантично. Изходните формати трябва да включват: графичен вид, синтезиране на говор, вход от системите по компютърна алгебра, други езици за математическо кодиране, като TEX, показване на пълен текст, печатна медия, включително писане/печатане за слепи с изпъкнал шрифт.

MathML може да постигне тези цели като маркиращ език и той би бил полезен, ако добре се внедри. В тази връзка работната група W3C Math Working Group определи кратък списък за допълнителни цели, свързани с внедряването. Тези цели описват сбито минималната необходима функционалност на MathML и това, което трябва да прави съответния софтуер.

  1. MathML изразите в HTML (and XHTML) страниците трябва да се появяват лесно в популярните уеб браузъри, съответно с преференциите на читателя и автора и то с възможно най-добро качество, според съответната компютърна платформа.
  2. Документите на HTML (и XHTML), съдържащи MathML изрази трябва да се печатат ясно и с най-висока степен на резолюция.
  3. MathML изразите в уеб-страниците би трябвало да реагират на потребителски жестове, например при работа с мишка, както и при координиране на комуникацията с други приложения чрез браузера.
  4. Трябва да се разработят необходимите рекатори и конвертори за математически текстове, които да облекчат създаването на уеб-страници с MathML формули.

Тези цели бяха поставени за изпълнение в кратки срокове също и за използването на вмъкнати елементи като Java аплети и plug-ins в контроли на ActiveX в MathML. Впрочем, широтата на тези цели бяха в края на краищата поставени и взависимост от взаимодействието с поддръжката от страна на производителите на браузъри. и други разработчици на софтуер. Работната група W3C Math Working Group продължи да работи с други работни групи по създаването на обектен модел на документ (Document Object Model - (DOM)) и езика Extensible Style Language (XSL), така че да се подсигурят нуждите на научната общност в бъдеще и да се види забележителният напредък в тази област, постигнат от MathML 2.0 в сравнение с предишните резултатите на MathML 1.0 и рекомендациите от април, 1998.

MathML е проектиран да предоставя кодиране на математическа информация от най-ниско ниво, по-обширното ниво на двуслойна архитектура. Планирано бе да се кодират комплексно означения и семантика в явен, естествен и лесен за обработка начин за интерпретиращия, претърсващ и индексиращ софтуер, и други математически приложения. Поредовото маркиране на MathML първоначално не бе предвидено да се ползва директно от авторите. Вместо това се предполагаше, че авторите ще ползват редактори за формули, конвертиращи програми и други специализирани софтуерни средства за генериране на MathML. Алтернативно, някои интерпретатори и системи за поддръжка на математика, могат да преобразуват входяща информация директно от уеб-страниците в MathML, например за нуждите на операцията "Отрязване/Вмъкване" (cut/paste).

В някакъв смисъл, MathML е аналогичен на други формати за комуникация от ниско ниво, например на PDF (на езика Adobe's PostScript). Вие можете да създавате файлове от тип PDF по различни начини, спред нуждите си; експертите ги пишат и модифицират ръчно, авторите ги създават в текстови процесори, графиците - с програми за илюстрации и т.н. Веднъж направен, файлът в PostScript може да се разглежда от широка аудитория потребители, тъй като има голям брой устройства като принтери и др., отварящи PostScript.

Друга причина за проектирането на MathML като маркиращ език от ниско ниво в общия комуникационен слой е да се стимулира създаването на уеб-математически софтуер в по-високия слой от архитектурата. MathML предоставя начин за координиране разработването на модулни автоpски средства и правене на софтуер. Като се направи по-лесен за разработка на функционални части от по-големи системи, MathML може да стимулира "критичната маса" разработван софтуер, най-вече в услуга на потенциалните потребители на математика в уеб-пространството.

MathML позволява на авторите да кодират както записа на математически обекти, така и математическата структура на самия обект. Нещо повече, авторите могат да смесват двата начина на кодиране, за да уточнят както представянето, така и съдържанието на математическата идея. Всички MathML елементи попадат в една от следните три категории: презентиращи елементи, съдържателни елементи и интерфейсни елементи.

Презентиращи маркиращи елементи

Презентиращите елементи в MathML само предлагат специфични начини на запис, за да се позволи представяне, зависещо от средата и индивидуалните предпочитания за стил. Тези спецификации описват предлаганите визуални представящи правила в подробности, но отделният MathML маркиращ елемент може да има свои собствени правила, още повече, че е интуитивно разбираем. Презентиращите елементи са замислени да изразяват синтактичната структура на математическите означения подобно на начина, по който заглавията, секциите и параграфите обхващат горните нива на синтактичната структура на текстов документ. Поради това, например проста последователност от идентификатори и оператори, такива като "x + a /2", ще бъдат най-често представени не само с един mrow елемент (който ги показва като хоризонтална редица на аргументите си), а като много вмъкнати mrow елементи, съответстващи на вмъкнати под-изрази, от които е композиран един математически израз - в този случай

< mrow >

< mi > x < / mi >

< mo > + < / mo >

< mrow >

< mi > a < / mi >

< mo > / < / mo >

< mi > 2 < / mi >

< / mrow >

< / mrow >

По подобен начин, долните индекси са прикрепени не само точно към предхождащия ги символ, а към целия израз, който е избран преди това и им служи за база. Такава структура дава възможност за по-доброкачествено представяне на математика, и по-специално, когато детайлите на подредбите в представящата среда, такива като дебелината на символите в голям шрифт, са предварително неизвестни на автора на документа; освен това голямо удобство е автоматичната интерпретация на представяната математическа структура.

Например, в контекста на указателя за съдържание, горният индекс типично ще се означава като оператор за степен xn, който ще изиска два операнда: "основа" и "степен". Това не е случайно, тъй като общото правило е, че разположението на математическите символи строго следват логическата структура на основните математически обекти.

< msup >

<mi>x</mi>

<mi>n</mi>

< / msup >

Презентиращите елементи се разделят на два класа.

Всички индивидуални "символи" в един математически израз трябва да бъдат представени от MathML със символни елементи. Първичните типове символни елементи в MathML са идентификатори (т.е. променливи или имена на функции), числа и оператори (вкл. ограждащи елементи, такива като скоби, и разделители, такива като запетая). Има също така символни елементи за представяне на текст или празни интервали, които имат по-скоро естетичен, отколкото математически смисъл, както и "стингови литерали", за съвместимост със системите за компютърна алгебра. Ще отбележим, че макар символният елемент да има смислово само едно значение за "символ", (име, число, етикет, математически символ и др.), той реално може да е съставен от повече от един символ. Например, arccos и 77 са предствени с единствени символни елементи: <mi>arccos</mi>и <mn>77</mn>.

MathML 2.0 не обръща внимание на "отдясно-наляво" или "двупосочно" разполагане в математическите формули. Поддържа се само разположение "отляво-надясно". Разположението "отдясно-наляво" може да бъде включено в бъдещите версии на MathML.

Кратка таблица на презентиращите елементи
Символни елементи
mi identifier (идентификатор)
mn number (число)
mo operator, fence or separator (оператор, ограждащ елемент или разделител)
mtext text
mspace space (интервал)
ms string literal (стрингов литерал)
mglyph добавящ glyphs към знак (символ) от MathML
Общата схема на разположение (General Layout Schemata)
mrow групира хоризонтално произволен брой от под-изрази
mfrac образува обикновена дроб от два под-израза
msqrt образува корен квадратен (радикал без индекс)
mroot образува радикал със зададен индекс
mstyle променя стила
merror помества съобщение за синтактична грешка от препроцесора
mpadded нагласява разстоянието около съдържанието
mphantom прави съдържанието невидимо, като запазва неговия размер
mfenced огражда съдържанието а двойка ограждащи елементи
menclose помества съдържанието с надлъжен символ, такъв като знак за дробна черта
Индекси и схемни ограничения
msub добавя долен индекс към основа
msup добавя горен индекс към основа
msubsup добавя двойката долен с горен индекс към основа
munder добавя индекс под основа
mover добавя индекс над основа
munderover добавя двойка индекси под и над основа
mmultiscripts добавя префиксен индекс и тензорен индекс към основа
Таблици и матрици
mtable таблица или матрица
mlabeledtr ред в таблица или матрица с етикет или номер на уравнение
mtr ред в таблица или матрица
mtd вписване на един елемент в таблица или матрица
maligngroup, malignmark подравняващи маркери
Анимирани изрази
maction присвоява действия към под-израз

Пример 1. MathML кодът за израза 1x3y4+z2 е следният:

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

<mfrac>

<mrow>

<mn> 1 </ mn><mo> - </ mo>

<mroot>

<mrow><mi> x </ mi></ mrow>

<mrow><mn> 3 </ mn></ mrow>

</ mroot>

</ mrow>

<mrow>

<msup><mrow><mi> y </ mi></ mrow><mrow><mn> 4 </ mn></ mrow></ msup>

<mo> + </ mo>

<msup><mrow><mi> z </ mi></ mrow><mrow><mn> 2 </ mn></ mrow></ msup>

</ mrow>

</ mfrac>

</ math>

Пример 2. MathML кодът за израза abe2x5dx е:

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

<munderover>

<mo> &#x0222B; </ mo>

<mrow><mi> a </ mi></ mrow>

<mrow><mi> b </ mi></ mrow>

</ munderover>

<msup>

<mrow><mo> &#x02147; </ mo></ mrow>

<mrow>

<mn> 2 </ mn>

<msup>

<mrow><mi> x </ mi></ mrow>

<mrow><mn> 5 </ mn></ mrow>

</ msup>

</ mrow>

</ msup>

<mi> dx </ mi>

</ math>

Маркиране на съдържание

Презентиращите елементи описват визуално двумерна ориентирана структура за математически запис. Типични примери са: елементът mrow, който обикновено се използва за хоризонтален ред от части на изрази и елементът msup, който се използва за маркиране на израз-основа и долен индекс към него. По общо правило, всеки презентиращ елемент съответства на отделна част от схемата за означаване, например ред, горен индекс, долен индекс и т.н. Всяка формула е направена от много части така, че да може лесно да бъде разпадната на най-простите елементи като цифри, букви или друг тип знаци. Макар, че в предишния параграф разгледахме как се презентират математическите означения с презентиращото маркиране, ще видим, че същият подход може да се прилага еднакво добре и върху декомпозирането на абстрактни математически обекти, и следователно и към маркиране на съдържанието.

Семантиката (смисълът) на общата математическа символика не е общоприета. Би било неимоверно трудно да се да се разкодира систематично по-голямата част от математиката - задача, която никога не може да се реши. Вместо това, MathML прави явни относително малък брой общоизползвани математически конструкции, избрани внимателно, така че да са достатъчни за голям брой приложения. Освен това, той предлага механизъм за присвояване на семантика към нови конструкции за означения. По такъв начин, математическите идеи, които не са в основното множество от елементи също могат да се кодират.

Основното множество от съдържателните елементи е избрано да бъде адекватно на простото кодиране на повечето формули, използвани от детската градина до края на гимназиалното обучение в Съединените Американски Щати, и вероятно до първите две години на колежите, т.е. до А-нивото на бакалавърското ниво в Европа. Областите, включени в MathML са:

  1. аритметика, алгебра, логика и отношения
  2. диференциално и интегрално смятане и векторни изчисления
  3. теория на множествата
  4. редици и редове
  5. елементарни класически функции
  6. статистика
  7. линейна алгебра

Не е ясно и дори разисквано, дали сегашното предложено множество от елементи е пълно за тези области, но авторът е подсигурен с разширения, които да облекчат в голяма степен допълването на този списък.

Първата цел на кодирането на съдържание е да се установят явните връзки между математическите структури и тяхното математическо значение. Съдържателните елементи съответстват директно на частите от основното дърво на математическия израз. На всяка структура е присвоена съответна семантика по подразбиране и съществува механизъм за присвояване на нови математически дефиниции с нови конструкции.

Най-съществените преимущества от въвеждането на специфични съдържателни тагове включват:

  1. По-малко ограничено използване на презентиращи елементи. Когато математическата семантика е само подсказана от маркиращия презентиращ елемент, процесорните агенти могат да бъдат прекалено усложнени, или да реагират така, че да възникне риск от непълна или некоректна семантика при използвани нерегулярни конструкции за достигане на слухов или визуален ефект.
  2. Веднага става ясно какъв вид информация е кодирана просто от типа на елементите, които са използвани.
  3. Комбинациите от семантични и презентиращи елементи могат да се използват за да се изрази едновременно появата на формулата и съответния й математически смисъл колкото се може по-ефективно, отколкото те само да се подсказват едно друго.

За постигане на тези цели MathML кодирането на съдържание се базира на концепцията на дървото на математическия израз. Съдържанието на дървото на израза се конструира от множество от по-примитивни обекти, наричани контейнери и оператори. MathML притежава богат набор от предефинирани обекти от тип контейнер и оператор, както и конструкции за комбиниране на контейнери и оператори така, че да се отчита математическия им смисъл.

Основното правило е, че крайните възли на дървото представят основни математически обекти, такива като числа, променливи, аритметични операции и др. Вътрешните възли на дървото обикновено представят някакаъв тип от приложение на функция или друга математическа конструкция, която създава съставен обект. Приложението на функция е най-важният пример; един вътрешен възел може да представя приложение на функция с много аргументи, които от своя страна са представени от крайни възли по-надолу от вътрешния възел. Съдържателните елементи на MathML могат да се групират в следните категории според тяхната употреба:

  1. константи и символи
  2. контейнери
  3. оператори и функции
  4. определители
  5. отношения
  6. условия
  7. семантични планировки.

Това са градивните блокове, с които се конструира MathML съдържанието на изразите.

Най-основният начин за изграждане на математически израз в MathML с маркиране на съдържание е използването на конструкцията "приложи" ("apply"). Един елемент на apply типично прилага някакъв оператор върху неговите аргументи. Това съответства на пълен математически израз, което означава част от математика, която може да е оградена със скоби или "логически скоби", без да се променя нейния смисъл. Отварящият и затварящ таг на apply задават точно обхвата на всеки оператор или функция.

Пример 3. Математическият израз (x + y) може да се кодира като

<apply>

<plus />

<ci> x </ ci>

<ci> y </ ci>

</ apply>

Моделът на съдържанието може символично да се опише като

<apply>

op

a

b

</ apply>

където операндите ''a'' and ''b'' са контейнери или други съдържателни елементи сами по себе си, и "op" е оператор или функция. Забележете, че тъй като apply е контейнер, то могат да се прилагат конструкции, които да се влагат едни в други на произволна дълбочина.

Пример 4. Изразът ''a x + b'' би се кодирал така:

<apply>

<plus />

<apply>

<times />

<ci> a </ ci>

<ci> x </ ci>

</ apply>

<ci> b </ ci>

</ apply>

Когато са зададени функции, естествено е да можем да търсим техните обратни функции. Това се прави с т.н. обръщащ елемент. Обръщането на функция е проблем от математическа гледна точка, тъй като се въвежда неявно дефиниция за обратна функция f1на произволна функция f. MathML използва следната концепция за обратна функция:

Ако f е функция, дефинирана в област D със стойности в D ', тогава обратната функция g of f е функция, дефинирана в D ', такава, че g(f (x)) = x за x от D.

Тази дефиниция не гарантира, че че обратната функция съществува за вси1ки или дори за някои x от D, или, че тя е еднозначна функция някъде. Също така, не гарантира, взависимост от въведените функции, че са в сила допълнителни свойства, например f (g(y)) = y за y от D'. Обръщащият елемент се прилага винаги, когато се изисква обратна функция. Например, извличането на обратната функция на синус от x, т.е. sin1x, се кодира така:

<apply>

<apply>

<inverse />

<sin />

</ apply>

<ci> x </ ci>

</ apply>

Пример 5. Следният маркиращ код декларира и конструира функция J, за която:

това J(x, y) е интеграл от x до y от функцията t4 относно t.

<declare type="function''>

<ci> f </ ci>

<lambda>

<bvar><ci> x </ ci></ bvar>

<apply>

<plus />

<apply>

<power />

<ci> x </ ci>

<cn> 2 </ cn>

</ apply>

<ci> x </ ci>

<cn> 3 </ cn>

</ apply>

</ lambda>

</ declare>

Контейнери

Контейнерите са средства за конструиране на математически обекти от даден тип.

Символни елементи ci,cn,csymbol
Конструктори interval, list, matrix, matrixrow, set, vector, apply, reln, fn, lambda, piecewise, piece, otherwise
Специални declare

Функции, Оператори и Определители

Операторите и функциите, дефинирани в MathML могат да се разделят на следните категории, както е показано в долната таблица.

определител за едноаргументна аритметика factorial, minus, abs, conjugate, arg, real, imaginary, floor, ceiling
едноаргументна логика not
едноаргументен функционал inverse, ident, domain, codomain, image
едноаргументни елементарни класически функции sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth, arcsin, arccos, arctan, arccosh, arccot, arccoth, arccsc, arccsch, arcsec, arcsech, arcsinh, arctanh, exp, ln, log
едноаргументна линейна алгебра determinant, transpose
едноаргументно диференциално, интегрално и векторно смятане divergence, grad, curl, laplacian
едноаргументно теоретично множество card
двоична аритметика quotient, divide, minus, power, rem
двоична логика implies, equivalent, approx
оператори за двоични множества setdiff
двоична линейна алгебра vectorproduct, scalarproduct, outerproduct
n-аргументна аритметика plus, times, max, min, gcd, lcm
n-аргументна статистика mean, sdev, variance, median, mode
n-аргументна логика and, or, xor
n-аргументна линейна алгебра selector
n-аргументна оператор за множества union, intersect, cartesianproduct
n-аргументна функционал fn, compose
оператори за интеграл, сума, произведение int, sum, product
диференциален оператор diff, partialdiff
определител forall,exists

Оператори-определители

Долната таблица съдържа определители и предефинирани оператори, дефинирани като оператори-определители в MathML.

определители lowlimit, uplimit, bvar, degree, logbase, interval, condition, domainofapplication, momentabout
оператори int, sum, product, root, diff, partialdiff, limit, log, moment forall, exists
n-аргументна оператори plus, times, max, min, gcd, lcm, mean, sdev, variance, median, mode, and, or, xor, union, intersect, cartesianproduct, compose, eq, leq, lt, geq, gt
дефинирани от потребителя оператори csymbol, ci

Операторите-определители са канонично празни функции, които се отличават от обикновените празни функции само по това, че те поддържат използването на специални определящи елементи, с които се уточнява по-пълно техния смисъл. Определителите винаги следват оператора и предшестват всички аргументи, които представят. Ако е използван повече от един определител, те трябва да са подредени съгласно следния ред: ''bvar, lowlimit, uplimit, interval, condition, domainofapplication, degree, momentabout, logbase''.

Пример 6. Типичен пример е

<apply>

<int />

<bvar><ci> x </ ci></ bvar>

<condition>

<apply><in /><ci> x </ ci><ci type=''set''> C </ ci></ apply>

</ condition>

<apply><sin /><ci> x </ ci></ apply>

</ apply>

Релации

двоична релация neq, equivalent, approx, factorof
двоична логическа релация implies
двоично множествена релация in, notin, notsubset, notprsubset
двоична релация на серии tendsto
n-аргументна релация eq, leq, lt, geq, gt
n-аргументна релация за мноижества subset, prsubset

Съдържателните тагове в MathML включват определен брой канонично празни елементи, които означават аритметични и логически реалции. Релациите се характеризират от факта, че ще бъдат изпълнени от външна приложна програма (MathML не определя как ще се изпълняват изразите), те обикновено ще върнат точната истинска стойност. Обратно, операторите обикновено връщат стойност от същия тип, каквито са типовете на операндите. Например, резултатът от изпълението на a<bе или "истина" или "неистина" ("true" или "false", докато 1 + 2 ще бъде пак число.

Пример 7. Примерът от предишния параграф ще бъде кодиран така:

<apply>

<lt />

<ci> a <ci />

<ci> b <ci />

</ apply>

Условия

условие condition

Пример 8. Следващият маркиращ код дава "Съществува x<3 such that x2=4''.

<apply>

<exists />

<bvar><ci> x </ ci></ bvar>

<condition>

<apply><lt /><ci> x </ ci><cn> 3 </ cn></ apply>

</ condition>

<apply>

<eq />

<apply>

<power /><ci> x </ ci><cn> 2 </ cn>

</ apply>

<cn> 4 </ cn>

</ apply>

</ apply>

Синтаксис и семантики

планировки semantics, annotation, annotation-xml

Използването на съдържателни елементи вместо презентиращи елементи за математика, понякога довежда до използване на семантични тагове. Синтактичното дърво на валидна елементна структура, използваща съдържателни елементи на MathML съответства директно на дървото на израза на основното дърво на математическия израз. Ние следователно отчитаме съдържателните тагове сами за себе си, както кодираме синтаксиса на математическия израз. В общия случай това е достатъчно, за да получим някаква подредба и даже символна манипулация (например, разлагане на полином на множители).

Семантични планировки

Макар, че семантичните планировки лесно се се получават от различни частни или силно специализирани кодирания, то няма достатъчно широкодостъпни стандартни схеми са семантично планиране. Частично отговарящи на тази нужда са усилията на OpenMath да предостави платформено-независим, неутрален относно продавача стандарт за обмен на математически обекти между приложните програми. Тези математически обекти включват и информация за семантичните планировки. Групата OpenMath дефинира един XML синтаксис за кодиране на такава информация [OpenMath2000]. Това множество от елементи може да предостави базата за едно XML-елементно множество за забележки. Много привлекателна страна на този механизъм е, че синтаксисът на OpenMath е определен на XML, така че MathML израз, заедно с неговите семантични забележки може да бъде проверяван от XML програми за синтактичен разбор.

Константи и Символи

MathML предоставя множество от предефинирани константи и символи, които представят най-често срещаните концепции в математиката. Тук влизат символите на добре известните множества, такива като integers (цели числа) and rationals (рационални числа) и също някои от добре известните символни константи като: false, true, exponentiale.

Константният тип се използва, за да се означават именувани константи. Някои важни константи, такива като π са явно включени в MathML 2.0 като празни елементи. Така употребата на cn не е в полза на дефинираните константи, или употребата на csymbol с подходяща стойност за оператора definitionURL. Например, вместо да използваме елемента π, можем да използваме частен случай на елемента <cn type="constant">&pi;</ cn> . Последното ще бъде интерпретирано като семантика на математическата константа π. Стойността на тага на константата cn може да бъде един от следните общи константи:

Символ Стойност
&pi; число на Лудолф, обикновеното π от тригонометирията, приблизително равно на 3.141592653...
&ExponentialE; or &ee; Неперово число, основа на натуралните логаритми, приблизително равно на 2.718281828...
&ImaginaryI; or &ii; Корен квадратен от -1, имагинерна единица
&gamma; Ойлерова константа, приблизително равна на 0.5772156649...
&infin; or &infty; Означение за езкрайност; чистата му интерпретация зависи от контекста
&true; Логическата константа true ("истина")
&false; Логическата константа false ("неистина" или "лъжа")
&NotANumber; or &NaN; Представя резултата от лошо определено деление с плаваща запетая

Комбиниране на презентиращо и съдържателно маркиране

Презентиращото маркиране и съдържателното маркиране могат да се съчетават по два начина. Първият подход е съдържателните и презентиращите елементи да се записват заедно в едно дърво. Това се нарича смесено маркиране. Вторият начин е да се състави двойка дървета, съответно явно презентиращо и явно съдържателно. Това се нарича паралелно маркиране.

Презентиращото маркиране обхваща означителната структура. То кодира означителната структура на един израз по достатъчно абстрактен начин, за да се улесни използването на разнообразна медия. Така, един и същ презентиращ код може да се използва с относителна лекота за екрани с широки или тесни прозорци, за ASCII код или графика, за печат, говор и др. Това се постига като се предостави информация за структурните групирания на части на израза, класификация на символите и др. Презентиращото маркиране не се отнася директно до математическата структура или смисъла на израза. В повечето случаи, означителната структура и математическата структура са силно свързани, така че само много сложно работещо приложение може да ги отличи и да предостави достатъчно ясен контекст. Впрочем, на практика, различаването на математическия смисъл от означението може да се остави на читателя. Използвайки презентиращи тагове самичък, той може да намали възможността за повторно използване на MathML обекта в друг контекст, и по-специално, изпълнението му от външно приложение.

Съдържателното маркиране обхваща математическата структура. то кодира математическата структура по достатъчно естествен начин за да облекчи присвояването на математически смисъл към един израз от приложните програми. Макар, че детайлите на планировката от структурата на математическия израз до математическия смисъл могат да бъдат много сложни, на практика, съществува голяма яснота относно общоприетия смисъл на много математически конструкции. Следователно, много голяма част от смисъла на съдържателния израз е достъпен за работното приложение, независещо от откъде или как се показва на читателя. В повечето случаи, съдържателното маркиране може да бъде отрязано от уеб-браузъра и вмъкнато в математическото софтуерно средство като се счита негласно, че отбелязаните стойности ще бъдат пресметнати. Понеже съдържателното маркиране не е пряко свързано с начина на презентиране на израза, при подредбата може да се подсказва как то да бъде представено на читателя. Дори да се реализира много сложнемн механизъм за подредба и стил на документа за да се предложи на потребителя да използва лично негови преференции за означения, на практика е достатъчно подредбата на съдържателните изрази с озназителни нюанси да допуска малки промени. Използването на тагове за съдържание сами за себе си може да ограничи свободата на автора да контролира по свое желание подредбата на израза.

За постигане на пълен капацитет възможности, маркиращият език за математика трябва да предоставя както презентиращи, така и съсдържателни тагове. Често едни и същи математически означения се използват за представяне на няколко напълно различни концепции. Например означението xi в алгебрата на полиномите може да е i-та степен на променливата x, или да е i-ти компонент на вектор x в тензорното смятане. В други случаи едно и също математическо означние се показва в един от много варианти. Например факториел може да се запише с удивителен знак, като гама функция или със символ на Почхамер. Т.е. един и същ символ представя различни математически идеи и съответно една и съща идея има много означения. Оттук следва необходимостта авторът да може да кодира както представянето, така и смисъла на математическите означения.

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

Вмъкване на презентиращо маркиране в съдържателно маркиране

Употребата на презентиращо маркиране в съдържателното е ограничено дотолкова, че да не пречи за кодиране на недвусмислено математическо съдържание. По-специално, презентиращо маркиране може да участва в съдържателно маркиране само по три начина:

1. В символните презентиращи елементи ci и cn.

2. В елемента csymbol.

3. В елемент за семантика.

Всеки друг случай на поява на презентиращ елемент в съдържателно маркиране в MathML се отчита като грешка.

Вмъкване на съдържателно маркиране в презентиращо маркиране

Водещият принцип за вмъкване на съдържателно маркиране в презентиращи изрази е, че резултантният израз трябва да няма двусмислена подредба. Общо казано, вмъкнатите съдържателни изрази трябва да са семантично смислени, за да бъдат правилно разкодирани. Някои съдържателни елементи извличат своята семантика от заобикалящия ги контекст, както например елементът bvar може да определя интеграл, логически определител или ламбда израз. Друг пример е, че елементът за степен degree се появява в root или partialdiff елемент. Следователно, в презентиращ контекст, такива като тези елементи нямат ясно определен смисъл и няма как да бъдат позволени.

Елементите оператор, релация, контейнер, константа и символ си имат собствен смисъл, докато елементи като определител и условен тип - нямат. Ще отбележим, че interval може да се използва както като общ контейнер, така и като определител. Освен тези категории някои елементи заслужават специален коментар: елементите declare, sep, annotation и annotation-xml могат да се появяват само в много специфичен контекст и следователно, не са позволени директно като под-изрази в никой презентиращ елемент. Накрая, елементът semantics, когато носи достатъчно информация, е позволен. Пълният списък на съдържателните елементи, които не могат да се появяват като дете (под-израз) в презентиращ елемент е: annotation, annotation-xml, sep, declare, bvar, condition, degree, logbase, lowlimit, uplimit.

Взаимодействието между презентиращо и съдържателно маркиране може да бъде многократно увеличено с помощта на различни средства. Тъй като в момента броят на средствата и стандартите за работа с XML приложения рязко нараства, вече има някои разработени техники. В общия случай взаимодействието между презентиращо и съдържателно маркиране се извършва според преобразуващите правила за MathML дървета. Тези правила се наричат макроси. По принцип правилата могат да се изразят със всеки от механизмите, включително DSSSL, Java програми, работещи с DOM и др. , но основен механизъм за тези правила в повечето приложения ще бъде XSLT.

MathML символи

MathML елемент за символи взима значенията си от множеството символи на MathML. Тези символи се дефинират или като Unicode легални символи в XML документи или с елемента mglyph. Последният се използва за представяне на символи, които нямат Unicode код. Тъй като стандартът Unicode UCS предлага приблизително 100 специални азбучни символи за математика с Unicode 3.1 и над 900 други специални символи в Unicode 3.2, то нуждата от mglyph ще бъде малка. Всеки символ, позволен в XML може да се използва в MathML в XML документ. Позволените символи са с шестнадесетичен код: 09 (tab = U+0009), 0A (line feed = U+000A), 0D (carriage return = U+000D), 20-D7FF (U+0020..U+D7FF), E000-FFFD (U+E000..U+FFFD) и 10000-10FFFF (U+010000..U+10FFFF). Означението, точно дефинирано в скобите, започва с U+ означава, че се препоръчва Unicode за Unicode символи. Изключенията са: от D7FF - за блокове, използвани в заместващи двойки и два символа, които не са Unicode символи. U+FFFE е излючен, за да позволи дефинирането на реда на байтовете в някои кодове.

Съществуват основно три различни начина за кодиране на символни данни.

  1. Пряко използване на символите. Например A може да се въведе като 'A' от клавиатура (символен код: U+0041). Тази възможност е налична само когато кодираният символ е зададен в XML документ. По-често използваното кодиране е 'A' в ASCII код. В много кодирания символите изискват повече от един байт. Забележете, че ако например документът е кодиран в кода Latin-1 (ISO-8859-1), то тогава само съответните символи за този код могат да се кодират директно. Кодовете UTF-8 и UTF-16 са единствените два кода, които се приемат от всички XML процесори, в които математическите символи се кодират като символни данни.
  2. Използване на цифров код за XML символни съответствия: В това означение, 'A' може да се представи като &#65; (десетично) или &#x41; (шестнадесетично). Ще отбележим, че числата винаги съответстват на Unicode кодиране (а не на кода, използван в XML файл). С използване на тези съответствия винаги можем да използваме целия набор символи на Unicode. За общия речник на XML, този метод не е преимущество: символните съответствия могат да не се използват от някой XML елемент или да не присвояват имена. Впрочем, това не се отнася за MathML, тъй като всички имена в MathML са само от ASCII символи.
  3. Използване на пълни съответствия: В MathML DTD дефинира вътрешни единици за разширяване на символните данни. Така например единицата съответствие &eacute; може да се използва както за символно съответствие на &#xE9; така и за случая на кода ISO-8859-1 - за символа é. Фрагмент на XML, използващ единица за съответствие, който отсъства в DTD е лошо съставен; Той ще бъде отхвърлен от XML преводач. Поради тази причина всеки фрагмент, ползващ единица за съответствие, трябва да използва декларация DOCTYPE, която определя MathML DTD, или да използва DTD, за да декларира единицата в MathML. Нуждата от използване на DOCTYPE усложнява включването на MathML в някои документи. Впрочем, единиците за съответствие са много удобни за малки илюстративни примери и се използват в повечето примери в този документ.

Някои символи, впрочем важни за качеството на печата или алтернативно преставяне нямат маркиране от тип glyph, които преко да им съответстват. Те се наричат не-маркируеми символи. В MathML 2 контрола за композиране на страница, такава като line-breaking ("прекъсване на реда") се осъществява с атрибутите на елемента mspace. По-долу дадените символи не заемат само празно пространство (невидими символи). Те са особено важни нови добавки към UCS, предоставящи текстови обяснения за повишаване качеството на печата, позволяват добро аудио възпроизводство, както и скриват математическата семантика от текста, който е визуално двусмислен.

Име на символа Unicode Описание
&InvisibleTimes; 02062 Маркира многократно повторение, когато това се подразбира и без маркиране
&InvisibleComma; 02063 Използва се като разделител, например в индекси
&ApplyFunction; 02061 Символ, показващ приложение на функция с презентиращи тагове
Специални константи
Име на единица Unicode Описание
&CapitalDifferentialD; 02145 D - ползва се за диференциал, напр. в интеграли
&DifferentialD; 02146 d - ползва се за диференциал, напр. в интеграли
&ExponentialE; 02147 e - ползва се като основа за експонента, за натурални логаритми
&ImaginaryI; 021468 i - за квадратен корен от -1, имагинерна единица за комплексните числа

MathML интерфейс

За да бъде ефективен, MathML трябва да работи добре с различните интерпретатори на тагове, процесори, транслатори и редактори. Тази глава разглежда темата за итерфейса, включително генерирането и подредбите в MathML. Тъй като MathML съществува за да кодира математика в уеб-документи, най-важните въпроси на интерфейса са включването на MathML в HTML4 и XHTML. Има три основни момента при включването на MathML в други XML документи.

Най-напред, MathML трябва да се интегрира семантично. MathML маркирането трябва да се разпознава като валидно XML вложено съдържание, а не като грешка. Това най-вече е въпрос на управление на именуването в XML.

Второ, в случая на HTML/XHTML, MathML подредбите на тагове трябва да се интегрират в софтуера на браузерите. Някои браузъри вече внедряват MathML по подразбиране и се очаква повече браузъри да го включат за в бъдеще. В същото време има и браузъри, които развиват инфраструктура, в която да улесни разчитането на MathML кода и друго вмъкнато XML съдържание, като ползват софтуер, предоставян от трети разработчици. В тези случаи се налага инсталирането на специални механизми от друг софтуер с допълнителен интерфейс за маркиране.

Трето, необходими са други средства, които да генерират и изпълняват MathML и да служат за интеркомуникация. Бяха разработени голям брой MathML средства, включително редактори, транслатори, системи за компютърна алгебра и друг научен софтуер. Впрочем, тъй като MathML изразите имат тенденция да стават по-дълги и се допускат грешки при ръчно въвеждане, специално внимание следва да се отдели на осигуряването на дружески потребителски интерфейс с лесно генериране на изрази и добри авторски средства, средства, които работят заедно по платформено зависим, но независим от продавачите начин.

Работната група W3C Math Working Group се е ангажирала да поддържа продавачите на софтуер, развиващи какъвто и да вид MathML средство. Работната група следи публичния списък е-мейли www-math@w3.org и ще се опитва да отговаря на всички въпроси относно MathML спецификацията. Тази работна група работи с групи, разработващи и използващи MathML. За текуща информация относно средства за MathML, приложения и потребителски дейности, се консултирайте с уеб-страницата на W3C Math Working Group.

Вмъкване на MathML в XML документи

Макар че MathML може да се използва изолирано като език за обмен на математически изрази между MathML приложения, от самото начало се предвиждаше с MathML да се кодират математически изрази в големи документи. MathML е идеален за вмъкване на математически изрази в други приложения на XML.

Вмъкването на MathML в XML-базирани документи в общия случай и в частност в XHTML е въпрос на разчитане на именувани пространства. Едно име-пространство в XML е набор от имена, идентифицирани от URI. Такова URI за имената на MathML е:

http://www.w3.org/1998/Math/MathML

Като се използват този тип имена вмъкването на MathML израз в по-голям XML документ е просто въпрос на идентифициране на MathML маркирането, присъщо на MathML име-пространство. Това може да се постигне или като се идентифицира явно всяко име на MathML елемент, като му се добави префикс за име-пространство или като се декларира подразбиращо се име-пространство на ограждащ го елемент.

Декларирането на име-пространство става с xmlns атрибут или атрибут с xmlns префиксx. Когато xmlns атрибутът се използва самостоятелно, той задава име-пространство по подразбиране за елемента, за който се появява и за неговите деца елементи.

Пример:

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

<mrow>...</ mrow>

</ math>

WТъй като xmlns атрибутът е използван като префикс, той декларира префикс, който след това може да се използва за явно присвояване на други елементи и атрибути със собствено име-пространство.

Пример:

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

...

<m:math><m:mrow>...</ m:mrow> </ m:math>

...

</ body>

Тези два метода за деклариране на име-пространство могат да се използват заедно. Например, като се използва едновременно един явен префикс за име-пространство за целия документ и подразбиращите се декларации на име-пространство за индивидуалните математически елементи е възможнода се локализира маркирането на име-пространството, съответно на най-горното ниво математически елемент.

Пример:

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

...

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

<mrow>...</ mrow>

</ m:math>

...

</ body>

Предложения за съвместимост

Макар че употребата на име=пространства за вмъкване на MathML в други XML приложения да е напълно описано от съответните W3C Recommendations, све още има някаква степен на прагматизъм за доработка. Поддръжката на XML, име-пространствата и стила на подредбите в популярни потребителски агенти не е винаги изпълнена в съгласие с W3C Recommendations. В някои случаи софтуерът предшества съответните стандарти, а в други случаи, съответните стандарти не са все още завършени.

През междинния период, когато някой софтуер не е все още напълно въвел име-пространствата, някои общоприети практически подходи биха облекчили проблемите по съвместимостта:

1. Когато се използва префикс за име-пространство от MathML маркиране, използвайте m: като общоприет префикс за MathML име-пространство. Използването на явен префикс е по-сигурно за съвместимост с текущия потребителски агент.

2. Когато се използват префикси за име-пространство, изберете един и го ползвайте последователно в целия документ.

3. Явно декларирайте MathML име-пространство за всички математически елементи.

Примери:

<body>

...

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

<m:mrow>...</ m:mrow>

</ m:math>

...

</ body>

или

<body>

...

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

<mrow>...</ mrow>

</ math>

...

</ body>

Ще отбележим, че само тези предложения може да не са достатъчни за създаване на работещи уеб-страници с MathML код. В общия случай ще се изискват и някои други маркирания за целия документ. Допълнително ще се изисква всички случаи на употреба на MathML в документа да са съвместими с общите декларации в документа. Това ще е в частност необходимо, когато се режат и вмъкват (Cut/Paste) MathML изрази, тъй като настоящите средства може да не са пригодени да следят глобалната информация за име-пространства. Консултирайте се с уеб-страницата на W3C Math Working Group за съвместимостта и предложенията на баузърите и другите MathML средства.

ЦИТАТИ:

[1] http://www.w3.org/Math/

[2] MathML на уеб-адреса на W3C, http://www.w3.org/TR/MathML2/