MathML

MathML (ראשי תיבות של Mathematical Markup Language) היא שפת סימון לתיאור סימונים מתמטיים. מטרת השפה היא לשלב ולהציג סימונים מתמטיים מורכבים בצורה מסודרת בדפי אינטרנט ובמסמכים אחרים ללא צורך בשילוב תמונות, סימון TeX, עיבוד JavaScript, או בתוספות צד־שלישי לדפדפן. השפה היא חלק מ־HTML5, ותקן ISO/IEC DIS 40314 החל משנת 2015.<ref></ref>

== היסטוריה ==
בעיית קידוד הסימונים המתמטיים במחשבים הייתה קיימת עוד לפני האינטרנט. משתמשי דואר אלקטרוני נהגו לקודד סימונים מתמטיים בעזרת תווי ASCII. מספר שיטת ושפות לסימון מתמטי, לדוגמה TeX, היו נמצאות בשימוש נרחב כבר בשנת 1992 מעט לפני שהאינטרנט הפך לכלי פופולרי לשיתוף מידע בין מדענים וגולשים. HTML – שפת הסימון של הרשת – נוצרה בדיוק למטרת שיתוף המידע בין מדענים באקדמיה, ולמרות זאת, הדרכים לשתף סימונים מתמטיים בעזרת HTML היו מוגבלות מאוד. במקום זאת נעשה שימוש בתמונות כדי להציג את הנוסחאות המתמטיות בדפי הרשת. תמונות אלה בדרך כלל לא היו קריאות כי סבלו מטשטוש שנוצר מדחיסת תמונה, ובנוסף גרמו לקושי בעריכה ותחזוקה עבור החוקרים.<ref name=":0"></ref>

ארגון ה־W3C זיהה כי המחסור בדרכים יעילות לשיתוף מסרים מדעיים ברשת היווה בעיה רצינית וקשה שדרשה תקינה. בשנת 1994 התקבלה ההצעה הראשונה שכונתה HTML Math עבור HTML 3.0, שאותה הגיש דֵייב רָאגֶט. בשנת 1995 נעשה דיון נוסף מסביב לבעיה בכנס של ה־W3C בדרמשטאדט, בנובמבר 1995 נציגים מטעם Wolfram Research הגישו הצעה נוספת ל־W3C. במאי 1996 בכנס ה־Digital Library Initiative בשמפיין, אלינוי שוב הועלה הנושא בין גורמים שונים. אחרי הכנס הזה הוקמה הוועדה לעריכה מתמטית ב־HTML (באנגלית HTML Math Editorial Review Board) הראשונה מטעם ה־W3C שהוקצתה לאתגר. במשך הזמן הוועדה התרחבה והשתכללה, במרץ 1997 הוועדה התחדשה כ־קבוצת העבודה למתמטיקה מטעם ה־W3C (באנגלית W3C Math Working Group) הראשונה. קבוצת העבודה השנייה למתמטיקה מטעם ה־W3C הוקמה ביולי 1998, קבוצה זאת המשיכה לעבוד על המשימה עד לסוף שנת 2000.<ref name=":0" />

MathML נוצרה כדי לתת מענה מיטבי לתחומי עניין והתמחות מגוונים במתמטיקה, מדע, והנדסה. בנוסף לכך הוועדה דאגה שההצעה הסופית תתחשב גם בנגישות עבור לקויי ראייה. חוקרים מטעם Wolfram Research שהיו חלק מהוועדה הביאו אתם ניסיון וידע קודם מהפיתוח של Mathematica 3.0 שהתמודדה גם היא עם בעיות דומות בהצגה של מבנים מתמטיים. בוועדה השתתפו עוד מדענים ואנשי מחקר רבים שתרמו לעיצובה של MathML, ובניהם נציגים מטעם מייפל, IBM, אוניברסיטת מערב אונטריו, INRIA (המכון הצרפתי לחקר מדעי המחשב), הוצאת Elsevier, ונוספים. MathML הושפעה מפרויקט ה־OpenMath, של קב' עבודה מס' 12083 מטעם ארגון התקינה הבינלאומי (ISO). האגודה האמריקאית למתמטיקה (AMS) לקחה תפקיד מרכזי בעיצובה של MathML.<ref name=":0" />

== אפיונים והמלצות ==
המלצות מטעם W3C נחשבות בפועל לתקני רשת.<ref></ref> בניגוד מוחלט להמלצות, לטיוטות אין כל חשיבות או מעמד רשמי מטעם הארגון.
{| class="wikitable"
!אפיון
!הופעת טיוטה ראשונה
!תאריך המלצה אחרונה
!הערות
|-
|MathML 1.0
|15 במאי 1997<ref></ref>
|7 באפריל 1998<ref></ref>
|ההמלצה הראשונה של MathML הופיעה כחודשיים אחרי XML. באפיון זה הוגדרו ליבת ומטרת השפה.<ref></ref>
|-
|MathML
1.01
|(המלצה קודמת)
|7 ביולי 1999<ref></ref>
|התגית <code>select</code> ב־MathML שונתה ל־<code>selector</code> כדי למנוע התנגשות עם התגית הקיימת ב־HTML.<ref></ref><ref></ref> עדכון לטבלת תווי Unicode ב־MathML אחרי הצעת STIX.<ref></ref> החלת תיקוני עריכה מהגרסה הקודמת.<ref></ref>
|-
|MathML 2.0
|1 בדצמבר 1999<ref></ref>
|21 באוקטובר 2003<ref></ref>
|עדכון מלא לטבלת תווי Unicode ב־MathML. תמיכה ראשונית בטקסט דו־כיווני והרחבה מקיפה לתחביר ההצגה של השפה. הוצאה משימוש לתגיות <code>reln</code> ו־<code>fn</code> לטובת שימוש עקבי עם התגית <code>apply</code> בתחביר התוכן של השפה. הוספת תגיות חדשות. אפיון DOM מלא עבור MathML.<ref></ref> בגרסה השנייה של MathML 2.0 הופיעו תיקוני עריכה ועדכון נוסף לטבלת התווים.<ref></ref>
|-
|MathML 3.0
|27 באפריל 2007<ref></ref>
|10 באפריל 2014<ref></ref>
|תמיכה מלאה בטקסט דו־כיווני, שליטה במיקום סימנים ושבירת שורות, הפעלת סימונים מתמטיים בסיסיים, תגיות MathML חדשות כדי לבאר את משמעות הסימון וכוונת הכותב.<ref></ref> פרופיל CSS מקיף עבור MathML שהומלץ ב־2011.<ref></ref>
|-
|MathML 4.0
|26 בינואר 2019<ref></ref>
|(טרם הומלצה)
|
|}

== מטרות השפה ==
לאור המגבלות של HTML, חוקרים נאלצו להשתמש בתמונות על מנת להציג נוסחאות מתמטיות מורכבות שהכילו בהן סימונים שהתפרשו אופקית (כמו קו שבר, סימון שורש), או אנכית (כמו ווקטורי עמודה) ולא היו ניתנות להצגה פרופורציונלית ומיטבית בעזרת תווי יוניקוד וטבלאות HTML. שימוש זה הצטבר במשך שנים, והועלתה ההצעה לשכלל את המצב הקיים ולשפר את משקל ואיכות התמונה (לדוגמה, כפי ש־SVG נתנה מענה לתצוגת תרשימים ברשת) במקום לפתח שפת סימון חדשה ייעודית למתמטיקה. לאחר דיונים הוועדה נמנעה מלאמץ את השיטה הקיימת לאור הטיעונים הבאים.<ref name=":0" />

=== שימושיות ===
* לאפשר לקוראים לסמן ולהעתיק חלקים מסוימים מסימונים מתמטיים מורכבים כטקסט רגיל.
* לאפשר לקוראים לשנות את הגדרות הגופן, את גודל הטקסט, וצבעו כרצונם דרך הדפדפן.
* לאפשר חיפוש אוטומטי של קטעים בתוך סימונים מורכבים, בעזרת הדפדפן, או בעזרת שאילתה בבסיס נתונים.
* לאפשר ליישומוני רשת בדפדפן לגשת לתוכן המתמטי שנמצא בתוך הסימונים עצמם, לקרוא חלקים מהם, לשנות אותם בזמן ריצה אצל צד הלקוח (במחשב של הקורא) ובכך לאפשר שאלונים אינטראקטיביים.
* לאפשר לתכנות מחשב שהן לא בהכרח דפדפנים, לדוגמה למעבדי תמלילים, להציג ולערוך סימונים מתמטיים בקלות בלי צורך בעיבוד תמונה.

=== תחזוקה ועריכה ===

* קליטת ושליפת הסימונים כטקסט (מקודד לשפת סימון) תמיד תהיה חסכונית ומהירה יותר מאשר קובצי תמונה, במיוחד בבסיסי נתונים גדולים.
* להשתמש בשפת סימון עם התחביר המוכר של XML הישר בתוך קובץ ה־HTML בלי צורך בעורך ייעודי.
* לעודד משתמשי TeX בקהילה המדעית לעבור ל־MathML ולהמיר את העבודה שלהם בקלות.
* לאפשר למנועי פריסת תצוגה לשכלל את ההצגה של התוכן המתמטי באופן אחיד בכל הרשת, גם כעבור זמן רב מאז שהתכנים פורסמו מבלי שהעורכים יצטרכו לשנות את המאמרים שכבר פרסמו בעבר על מנת להבטיח איכות הצגה מיטבית ועדכנית.

=== נגישות ===
השימוש הנפוץ בתמונות עבור סימונים מתמטיים התלווה בדחיסה תמונה שהקלה על העומס שנוצר על השרתים שמאחסנים את קובצי התמונות. בתמורה לכך הטקסט היה פחות קריא, והגדלתן הייתה יוצרת הצגת סימונים מטושטשים ולא ברורים.
* תצוגת הסימונים בעזרת MathML תתחייב להצגה בחדות מקסימלית בכל גודל גופן או מידת תקריב. (בדומה ל־SVG)
* לאפשר לתכנות מחשב ודפדפנים לדובב סימוני MathML עבור קוראים שסובלים מעיוורון.
* להתאים את התצוגה של הסימונים לצגים שונים, לדוגמה צגים קטנים לגובה כמו של טלפונים ניידים, וצגים גדולים לרוחב כמו של מחשבים, וזאת מבלי לגרוע בנגישות.

== דוגמה ==
נוסחת השורשים הידועה:

<math display="block">x=\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}</math>

תתואר ב־MathML כך:<syntaxhighlight lang="xml">
<mrow>
 <mi>x</mi>
 <mo>=</mo>
 <mfrac>
 <mrow>
 <mrow>
 <mo>-</mo>
 <mi>b</mi>
 </mrow>
 <mo>&#xB1;</mo>
 <msqrt>
 <mrow>
 <msup>
 <mi>b</mi>
 <mn>2</mn>
 </msup>
 <mo>-</mo>
 <mrow>
 <mn>4</mn>
 <mo>&#x2062;</mo>
 <mi>a</mi>
 <mo>&#x2062;</mo>
 <mi>c</mi>
 </mrow>
 </mrow>
 </msqrt>
 </mrow>
 <mrow>
 <mn>2</mn>
 <mo>&#x2062;</mo>
 <mi>a</mi>
 </mrow>
 </mfrac>
</mrow>
</syntaxhighlight>
{| class="wikitable"
|+השוואה לשפות סימון אחרות
!שפת סימון
!תיאור
|-
|TeX
|<syntaxhighlight lang="latex">x=\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}</syntaxhighlight>
|-
|troff/eqn
|<syntaxhighlight>
x={-b +- sqrt{b sup 2 – 4ac}} over 2a
</syntaxhighlight>
|-
|OpenOffice Math
LibreOffice Math
|<syntaxhighlight>
x={-b plusminus sqrt {b^2 – 4 ac}} over {2 a}
x={-b +- sqrt {b^2 – 4ac}} over {2a}
x={-b ± sqrt {b^2 – 4ac}} over {2a}
</syntaxhighlight>
|-
|ASCIIMath
|<syntaxhighlight>
x=(-b +- sqrt(b^2 - 4ac))/(2a)
</syntaxhighlight>
|}

== הפרדה בין ההצגה והמשמעות ==
MathML עושה הפרדה בין ההצגה והמשמעות של הסימון. הסיבה לכך היא כדי לאפשר למשתמשים להחליט על העדפות האישיות שלהם כיצד ירצו לתקשר את הסימון. דוגמה מהיבט הנגישות, ליקויי ראייה מעדיפים לתת לקורא מסך לדובב את משמעות הסימון במקום לקרוא אותו. דוגמה נוספת מהיבט התחזוקה, ראוי לאחסן רק את משמעות הסימונים בבסיס נתונים כדי לחסוך פס רוחב, מקום, וזמן חיפוש, אבל את ההצגה עצמה אפשר לחולל רק אם יש באמת צורך בהצגה של התוכן.

=== תחביר ההצגה ===
תחביר ההצגה (באנגלית: "presentation markup"), הוא התחביר שמתאר את צורת ההצגה של התוכן ב־MathML.

=== תחביר התוכן ===
תחביר התוכן (באנגלית "content markup"), הוא התחביר שמתאר את משמעות התוכן ב־MathML. את התחביר הזה עצבו במקור אנשי OpenMath, ומאוחר יותר בשיתוף פעולה עם מעצבי MathML.<ref></ref> למבנה התחביר קיים דמיון רב לשפות Lisp, משתמשים בתגיות <code><apply>...</apply></code> כדי לתאר כל פעם פעולה מתמטית בעזרת רשימת איברים. האיבר הראשון ברשימה תמיד מייצג את המשמעות המתמטית שחלה על הרשימה, ושאר האיברים ברשימה הם המשתתפים בפעולה המתמטית. כך לדוגמה תראה נוסחת השורשים בתחביר התוכן של MathML.<syntaxhighlight lang="xml">
<apply>
 <eq/>
 <ci>x</ci>
 <apply>
 <divide/>
 <apply>
 <plus/>
 <apply>
 <minus/>
 <ci>b</ci>
 </apply>
 <apply>
 <root/>
 <apply>
 <minus/>
 <apply>
 <power/>
 <ci>b</ci>
 <cn>2</cn>
 </apply>
 <apply>
 <times/>
 <cn>4</cn>
 <ci>a</ci>
 <ci>c</ci>
 </apply>
 </apply>
 </apply>
 </apply>
 <apply>
 <times/>
 <cn>2</cn>
 <ci>a</ci>
 </apply>
 </apply>
</apply>
</syntaxhighlight>

== ראו גם ==

* TeX - שפת סימון נוספת עם תמיכה מקיפה להצגת סימונים מתמטיים מורכבים, זאת נמצאת כיום בשימוש נרחב גם בהדפסה והוצאה לאור בכתבי עת מדעיים.
* LyX - תוכנת עריכה מדעית וחופשית המאפשרת לייצא את המאמרים כדפי אינטרנט (ב־HTML), וממירה את הסימונים המתמטיים במאמר לסימוני MathML על מנת להציג אותם באיכות מיטבית בכל הדפדפנים.

== קישורים חיצוניים ==

* 
* [https://www.w3.org/TR/MathML/ האפיון העדכני ביותר של MathML]

== הערות שוליים ==

קטגוריה:שפות סימון
קטגוריה:סימנים מתמטיים