Navigáció: Főoldal / II. rész
II. rész: Alapok
Ebben a részben bemutatom az általam kiválasztott három leírónyelv alapgondolatait. A következő részben pedig a MathML elemeit alapul véve összehasonlítom azokat a TEX és az OpenMath elemeivel.
1. A MathML alapjai
1.1. Általános áttekintés
A matematikai leírónyelvek definiálásánál a kihívás alapja az volt, hogy készítsünk egy olyan leírónyelvet, amely a matematikai jelöléseket és a matematikai jelentéstartalmat egyszerre képes megjeleníteni.
A matematikai jelölés és a matematikai tartalom közötti kapcsolat hajszálnyi és mély. Formális szinten a matematikai logika eredményei zavaros kérdéseket vetnek fel a szimbolikus logikai rendszer és a jelenségek összefüggését tekintve. Mélyebb gondolati szinten, bárki, aki matematikai jelölőrendszert használ, tudja, hogy egy jó jelölésrendszer kiválasztása sokat jelent; a jelölésrendszer szimbolikus struktúrája felveti a logikai struktúrát is. Például a deriváltak Leibnitz-féle jelölése előrebocsátja a láncszabály alkalmazását a törtek jelképes áthúzásával:
A matematikusok és a tanárok nagyon jól értik ezt, véleményük szerint a jelölésrendszer kiválasztása kiemeli a kulcsát egy probléma szemléletének, és elrejti vagy leszűkíti a tárgyhoz nem tartozó szempontokat. Mindennapos dolog a matematikában és a tudományokban leírni olyan dolgokat, amelyek technikailag bármi mást is jelenthetnek. A hosszú gyakorlat azt mutatja, erre ténylegesen szükség is van felsőbb szinteken.
Más megközelítésben, a matematikai jelölést egy matematikai objektum precíz leírására használják. A matematikai jelölés bámulatos pontosságra képes, és amikor óvatosan használjuk, látszólag félreérthetetlen. Ez a félreérthetetlenség lehetővé teszi a matematikai objektumok leírását úgy, hogy azokat olyan szoftveralkalmazásokban felhasználhassuk, mint egy számítógépes algebrai rendszer vagy egy hanggenerátor. Olyan szituációkban, ahol az alkalmazások közti kommunikáció a legfontosabb, a vizuális megjelenés általában kis szerepet játszik.
A MathML lehetőséget ad arra, hogy a szerzők kódolhassák mind a megjelenítendő jeleket, amelyek bemutatják a matematikai objektumokat, mind magukat az objektumok matematikai struktúráját. Sőt, keverhetik is a kétféle kódot.
1.1.1. A MathML elemek rendszerezése
Minden MathML elem a következő három csoport valamelyikéhez tartozik: megjelenítő elemek, tartalmi elemek, vagy interfész elemek.
A megjelenítő elemek leírják a matematikai jelrendszer struktúráját. Tipikus példája az <mrow> elem, mely a vízszintesen egymás után írt karaktereket jelzi, valamint az <msup> elem, mely a felső index jelölésére szolgál. Általános szabály, hogy minden megjelenítő elem megfelel egy egyszerű jelölési sémának, mint például a sor, a felső és alsó index, stb.
A tartalmi elemek a matematikai objektumokat írják le közvetlenül, szemben a jelöléssel, amivel azokat csak megjelenítjük. Tipikus példája a <plus/> elem, mely általában a valós számok összeadását írja le, valamint a <vector> elem, mely a lineáris algebra vektorait ábrázolja. Minden ilyen elem egy pontosan meghatározott matematikai fogalomhoz kapcsolható.
Minden MathML elem vagy megjelenítő, vagy tartalmi elem, kivéve a <math> elemet, mely a legfelső szinten helyezkedik el és interfész elemnek nevezzük. Egyik funkciója, hogy továbbadja a paramétereket egy MathML processzornak, és így befolyással van a teljes kifejezésre. A másik szerepe kommunikálni a böngészővel, amely megjeleníti a MathML kifejezéseket, így integrálja azokat a HTML környezetbe.
1.1.2. Kifejezés-fák és token-elemek
Mind a megjelenítési, mind a tartalmi kifejezések számos formális tulajdonságra bonthatók. Mindkét esetben a legtöbb kifejezés természetesen darabokra vagy részkifejezésekre bontható. Például az felbontható az alapkifejezésre és egy leíró kifejezésre, amely jelen esetben egyetlen szám (2). Ráadásul, mint ahogy ez a példa is mutatja, a részkifejezés maga is tovább bontható. Természetesen, a felbontás befejeződik az oszthatatlan elemeknél, mint például a számok, a betűk és más szimbólumjelek.
Példánkban a felső index a hatványozás tipikus jelölése, mely jelölés megköveteli az alap és a hatványkitevő meglétét. Ez nem véletlen, a matematikai jelölés, mint egy általános szabály, tükrözi a matematikai objektumok alapját képző logikai struktúrát.
A matematikai objektumok és jelölések önmagához visszatérő természete erősen visszatükröződik a MathML-ben. A legtöbb megjelenítési és tartalmi elem magába foglal néhány más MathML alkotóelemet, melyekből az eredeti objektum rekurzívan felépült. Az eredeti elrendezést általában szülő sémának nevezzük, az alkotóelemeket pedig utód sémának. Általánosabban a MathML kifejezéseket tekinthetjük fáknak, ahol minden csomópont egy MathML elemnek felel meg, a “szülőcsoportok” alatt találhatók az ő “utódaik”, a fa levelei pedig a tovább már nem bontható elemek jelei vagy egységei. (Dolgozatomban az objektum-orientált programozás terminológiáját használom.)
A legtöbb levél egy MathML kifejezés-fában vagy üres elem, vagy token-elem (jelzéselem). Az üres elem közvetlenül a MathML-ben található szimbólumot jeleníti meg, mint például a <plus/> tartalmi elem. A MathML token-elem az egyetlen olyan elem, mely megenged közvetlen karakteres adattárolást. A karakteres adatok ASCII karakterekből és MathML speciális jelekből állnak. Ezeket a jeleket tipikusan nem-ASCII karakterek jelzésére használjuk, leírásuk escape-szekvenciával lehetséges, a következő (HTML-ből származó) módon: &név;. Példák: “α” - α, “Σ” - ∑. Harmadik csoportja a leveleknek a magyarázó elem, melyet az adatok nem MathML alakú állapotának megtartására használhatjuk.
A legfontosabb megjelenítő token-elemek az <mi>, az <mn>, és az <mo>, az azonosítók (“mathematical identifier”), számok (“mathematical number”) és műveleti jelek (“mathematical operator”) megjelenítéséhez. Ezek különböző formában jelenítik meg a vonatkozó objektumokat: a számokat általában egyenesen álló betűtípussal jelöljük (2), az azonosítókat dőlttel (x), a műveleti jeleket pedig szélesebb szóközzel ( + ). A tartalmi jelek között két token-elem van csak, a <ci> és a <cn>, melyek azonosítók (“content identifier”) és számok (“content number”) jelölésére használjuk. A tartalmi jelölésben az általánosan használt függvények és műveleti jelek elemeinek elkülönítéséről gondoskodik. Például az <fn> elem a felhasználó által definiált kifejezések jelöléséről gondoskodik.
A MathML elemeknek általában van kezdő és záró tagjuk, melyek körbeveszik a tartalmukat. Token-elemek esetén a tartalom karakteres adat, a többi esetben valamilyen utód-elem. Harmadik kategória az üres elem, mely nem kíván tartalmat, és egyszerűen a <elemnév/> formával jelöljük. Egy példa erre a <plus/> elem.
Visszatérve az előző példához (), lássuk, hogy épül fel a kifejezés a gyakorlatban (az egyes elemekről bővebben később szólok). A példa megjelenítési elemek felhasználásával:
<msup>
<mfenced>
<mrow>
<mi>a</mi>
<mo>+</mo>
<mi>b</mi>
</mrow>
</mfenced>
<mn>2</mn>
</msup>
Tartalmi elemekkel a megoldás így néz ki:
<apply>
<power/>
<apply>
<plus/>
<ci>a</ci>
<ci>b</ci>
</apply>
<cn>2</cn>
</apply>
1.1.3. Megjelenítő jelölés
A MathML megjelenítő jelölésnek 28 eleme van, melyeknek több mint 50 attribútumuk lehet. A legtöbb elem összhangban van a szerkezeti sémával, amely tartalmaz más megjelenítő elemet is. Minden szerkezeti séma összhangban van egy kétdimenziós jelölőrendszerrel, úgymint a felső- és alsóindexek, törtek és táblázatok. Ráadásul a fent említett három token-elemen kívül (<mi>, <mn>, <mo>) van néhány kevésbé ismert megjelenítő elem is. A fennmaradó néhány megjelenítő elem üres elem, melyeket főkény sorba rendezéssel kapcsolatban használunk.
A szerkezeti séma több osztályba sorolható. Az elemek egyik csoportja az írásformákkal áll kapcsolatban, és olyan elemeket tartalmaz, mint az <msub>, az <munder>, és az <mmultiscripts>. Egy másik csoport általánosan leírja a szerkezetet, mint például az <mrow>, az <mstyle>, és az <mfrac>. A harmadik csoport a táblázatokkal áll kapcsolatban. A <maction> elem önmagában egy külön kategória, a jelöléssel kapcsolatos vezérléseket jelöli.
A legtöbb szerkezeti séma fontos része, hogy lényeges a utód sémák sorrendje. Például, egy <mfrac> elem első utóda a számláló, a második a nevező. Amikor ki akarunk emelni egy MathML elemet, mint például az <mfrac>-ot, szükség van az utódaira a megfelelő sorrendben. Ekkor, mint argumentumokra hivatkozunk, és tudjuk, hogy az <mfrac> elem egy konstruktor.
1.1.4. Tartalmi jelölés
A tartalmi jelölésnek kb. 75 eleme van, közel egy tucat attribútummal. A legfőbb elemek az üres elemek, melyek számos műveleti jelből, relációból és függvényből állnak, például: <partialdiff/>, <leq/>, <tan/>. Egy másik csoport tagjait, mint a <matrix>-ot és <set>-et, számtalan matematikai adattípus kódolására használjuk. A harmadik csoportba olyan elemek tartoznak, mint az <apply>, melyekkel új matematikai objektumokat tudunk készíteni a már meglévőkből.
Az <apply> elem talán a legfontosabb a tartalmi elemek között. Használatával argumentumok csoportjából függvényt alkothatunk. Az utód sémák sorrendje itt szintén fontos, az első utód jelzi a függvényt, a többi pedig a függvény argumentumait, az előre meghatározott sorrendben. Jegyezzük meg, hogy az így létrehozott függvényben mindig előbb jelöljük a függvényt és csak utána az argumentumokat. Nézzük példaképpen az kivonást:
<apply>
<minus/>
<ci>a</ci>
<ci>b</ci>
</apply>
Számos függvényhez és művelethez szükség van egy vagy több mennyiség előre történő meghatározására. Példaként említjük a határozott integrált, melynél előre definiálni kell az integrál határértékeit. Erre a mennyiségi sémákat használjuk, mint például a <bvar>-t és a <lowlimit>-et. Ezeket olyan műveletekkel együtt használjuk, mint a <diff/> és az <int/>.
A <declare> különösen fontos a tartalmi jelölések között. Ezen elem segítségével egy változónak előre deklarálhatjuk a típusát egy bizonyos értékkel. Természetesen a vizuális megjelenítés nem vesz tudomást a deklarációról, akkor használjuk, ha egy kifejezést ki akarunk értékelni valamilyen matematikai alkalmazás segítségével.
1.1.5. A megjelenítés és tartalom ötvözése
Különböző jelölések különböző feladatokra alkalmasak. Az adatok legjobban talán az egyszerű megjelenítő jelöléssel adhatók vissza, de a szerző által kitalált szemantikus információ így nem érzékeltethető. Ezzel szemben néhány matematikai alkalmazás és oktatási segédeszköz valószínűleg a tartalom-alapú formát fogja választani. Az alkalmazások többsége azonban a két véglet között helyezkedik el. Ezek számára a legalkalmasabb a két jelölési forma ötvözése.
A jelölési formák ötvözésének szabályai abból az általános elvből származnak, hogy a kevert jelölés csak ott használandó, ahol van értelme. A tartalmi jelölés beágyazása a megjelenítő jelölésbe alapjában véve azt jelenti, hogy valamilyen tartalmi résznek szemantikai jelentéssel kell bírnia, és nem szükséges más argumentum vagy mennyiség pontosabb meghatározása. A megjelenítési jelölés tartalmi jelölésbe való beágyazása azt jelenti, hogy a megjelenítési jelölésnek tartalmaznia kell egy jelölőelemet úgy, hogy azt tovább nem bontható egységnek tekintjük, mint például egy változót vagy függvényt.
Egy másik lehetőség, a <semantics> elem használata. Ez az elem a MathML kifejezéseket különféle magyarázatokra kötelezi. Mindkét esetben (a megjelenítő jelölés keverése a tartalmival, vagy fordítva) az alapul vett jelölési rendszer érvényességét és jelentését szélesíthetjük ki a hozzáfűzött, másik jelölési rendszerben elkészített megjegyzéssel.
1.2. Néhány példa
1.2.1. Megjelenítő jelölés példái
A kifejezés:
A MathML kód:
<mrow>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>x</mi>
</mrow>
<mo>+</mo>
<mn>4</mn>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
Figyeljük meg az <mrow> elem használatát. Kifejezések készítésekor nagyban megkönnyíti pl. a szóközök kezelését vizuális vagy hangos megjelenítéskor.
A kifejezés:
A MathML kód:
<mrow>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
<mi>b</mi>
</mrow>
<mo>±</mo>
<msqrt>
<mrow>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>a</mi>
<mo>⁢</mo>
<mi>c</mi>
</mrow>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢</mo>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
Megfigyelhető, hogy a “pluszmínusz” jel egy speciális műveleti jel, a ± segítségével adható meg. A MathML széleskörű listával rendelkezik a matematikai szimbólumok leírásához, melyeket az A Függelékben találhatunk meg részletesen. Mivel a MatML-nek alkalmasnak kell lennie hangos megjelenítésre is, ezért célszerű ezeket a speciális jeleket mindig korrekt módon használni. A hangos megjelenítésnél fontos lehet az olyan, a vizuális megjelenítésnél látszólag felesleges jelek használata, mint pl. az ⁢:
<mrow>
<mi>z</mi>
<mfenced>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
</mfenced>
</mrow>
A fenti kódot “z-szer x és y összege” formában olvashatunk, de az ⁢ műveleti jel hiányában a hangos megjelenítés folyamán ez nem lesz egyértelmű. Ezért a z-t tartalmazó sor után be kell iktatni egy <mo> ⁢ </mo> sort is. Hasonló módon kell használni a ⅆ műveleti jelet, mely a “differenciál d” megfelelője, és sajátos határoló üres helyekkel jelenik meg. Tehát, ha a szerzők megfelelő gondossággal használják ezeket a speciális jeleket, az általuk készített dokumentumok sokkal szélesebb körben elérhetők lesznek.
A kifejezés:
A MathML kód:
<mrow>
<mi>A</mi>
<mo>=</mo>
<mfenced open="[" close="]">
<mtable>
<mtr>
<mtd><mi>x</mi></mtd>
<mtd><mi>y</mi></mtd>
</mtr>
<mtr>
<mtd><mi>z</mi></mtd>
<mtd><mi>w</mi></mtd>
</mtr>
</mtable>
</mfenced>
</mrow>
A legtöbb elemnek számos attribútuma van, amely a tartalom módosítására szolgál. Például az <mfenced> elem attribútumai a határoló jelek jellegét szabályozza.
1.2.2. Tartalmi jelölés példái
A kifejezés:
A MathML kód:
<reln>
<eq/>
<apply>
<plus/>
<apply>
<power/>
<ci>x</ci>
<cn>2</cn>
</apply>
<apply>
<times/>
<cn>4</cn>
<ci>x</ci>
</apply>
<cn>4</cn>
</apply>
<cn>0</cn>
</reln>
Jegyezzük meg, hogy a <reln> elem helyett általában használható az <apply> elem is, kivéve akkor, ha a műveleti jel valamilyen tényleges relációt ír le.
A kifejezés:
A MathML kód:
<reln>
<eq/>
<ci>x</ci>
<apply>
<divide/>
<apply>
<fn>
<mo>±</mo>
</fn>
<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>
<cn>2
</cn>
</apply>
</apply>
<apply>
<times/>
<cn>2</cn>
<ci>a</ci>
</apply>
</apply>
</reln>
A MathML tartalmi jelölőrendszerének nincsen eleme a “pluszminusz” műveletre, ezért vezettük be az <fn> elemmel, amelyben deklaráltuk, hogy valójában tartalmilag mire is akarjuk használni. Ez egy egyszerű példa, hogyan ötvözhetjük a tartalmi jelölést a megjelenítő jelöléssel.
A kifejezés:
A MathML kód:
<reln>
<eq/>
<ci>A</ci>
<matrix>
<matrixrow>
<ci>x</ci>
<ci>y</ci>
</matrixrow>
<matrixrow>
<ci>z</ci>
<ci>w</ci>
</matrixrow>
</matrix>
</reln>
Jegyezzük meg, hogy a <matrix> elem tartalmazza a zárójeleket, tehát azokat nem kell külön deklarálnunk. Mint látjuk, ez teljesen eltér a megjelenítési jelölés <mtable> elemétől, ahol kívánalmaink szerint kódolnunk kellett a zárójelezést is.
1.2.3. Példák a jelölések ötvözésére
A kifejezés:
A MathML kód:
<semantics>
<mrow>
<msubsup>
<mo>∫</mo>
<mn>0</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>0</cn>
</lowlimit>
<uplimit>
<ci>t</ci>
</uplimit>
<apply>
<divide/>
<cn>1</cn>
<ci>x</ci>
</apply>
</apply>
</annotation-xml>
</semantics>
Ebben a példában a <semantics> elemet használtuk jelezve, hogy a megjelenítő jelöléshez tartozik egy szemantikai megjegyzés, ami viszont már tartalmi jelölésű. A <semantics> elemnek első utóda az a kifejezés, amihez a megjegyzést fogjuk fűzni, a következő pedig maga a megjegyzés. Arra nincs megkötés, hogy a megjegyzés milyen fajtájú legyen, így lehet TeX kódrészlet vagy valamilyen számítógépes algebra bemenete is. Egyedül annyit kell tennünk, hogy az <annotation> vagy <annotation-xml> elem encoding attribútumában le kell írnunk a megjegyzés típusát.
Egy másik módja a <semantics> elem használatának, mikor a tartalmi kód mellé megjegyzésként megadunk egy megjelenítési formát. Ebben az esetben a fenti példa MathML-kódja a következő:
<semantics>
<apply>
<int/>
<bvar>
<ci>x</ci>
</bvar>
<lowlimit>
<cn>0</cn>
</lowlimit>
<uplimit>
<ci>t</ci>
</uplimit>
<apply>
<divide/>
<cn>1</cn>
<ci>x</ci>
</apply>
</apply>
<annotation-xml encoding="MathML-Presentation">
<mrow>
<msubsup>
<mo>∫</mo>
<mn>0</mn>
<mi>t</mi>
</msubsup>
<mfrac>
<mrow>
<mo>ⅆ</mo>
<mi>x</mi>
</mrow>
<mi>x</mi>
</mfrac>
</mrow>
</annotation-xml>
</semantics>
Ez a megjegyzési forma akkor hasznos, ha más formában szeretnénk megjeleníteni a tartalmi jelölésben leírt kifejezést, mint ahogy az automatikusan létrejönne, példánkban az helyett a formában. Természetesen itt vigyáznunk kell arra, hogy a megjelenítőnek (pl. a különböző böngészők) nem kötelessége a megjegyzést figyelembe venni, így ezt a módszert nem lehet megjelenítő-függetlennek tekinteni.
1.3. A MathML szintaxisa és nyelvtana
A MathML egy XML (Extensive Markup Language) alkalmazás, mint ilyen, szintaxisa az XML szintaxisán alapul, nyelvtanát pedig a MathML DTD-ben (Document Type Definition) specifikálták. Más szavakkal a használt elemek, attribútumok, műveletek nyelvtana az XML nyelv specifikációjában (http://www.w3c.org/TR/1998/REC-xml-19980210.html) lett definiálva, a MathML elemek és attribútumok neveit, melyek egymásba is ágyazhatók, a MathML DTD szabályozza. (Az itt felsorolt specifikációk nem képezik szakdolgozatom részét, ezeket a www.w3.org honlapon lehet megtekinteni.)
Természetesen a MathML is megad néhány szintaktikai és nyelvtani szabályt, melyet az öröklött XML szabályok mellett alkalmaznunk kell. Ezek a szabályok lehetővé teszik, hogy jóval több információt kódolhassunk, mint amennyit a szabvány XML lehetővé tenne (pl.: sokkal több elemet használhatunk egy lényegesen komplexebb DTD-vel).
Alapjában véve kétféle plusz MathML nyelvtani és szintaktikai szabály létezik. Az egyik fajta magába foglalja az attribútum értékek ismérveit. Például: nem lehetséges az egyszerű XML-ben megkövetelni, hogy egy attribútum érték pozitív egész legyen. A másik fajta szabályok az utód elemek részletesebb korlátjait írják le (pl. az elrendezésben), mint ahogy az a DTD-ben szerepel. Például: nem lehetséges az XML-ben meghatározni, hogy az első utódot egyféle módon értelmezzük, míg a másikat másféleképpen.
1.3.1. Bevezető az XML szintaxisába
Mivel a MathML egy XML alkalmazás, a MathML specifikáció az XML terminológiáját használja a leírására. Röviden, az XML adatok Unicode karakterekből (melyek tartalmazzák a normál ASCII karaktereket is), speciális jelekből (mint a , melyek általában “kiterjesztett karaktereket” jelölnek), valamint elemekből (mint a <mi fontstyle="normal"> x </mi>) állnak. Az elemek tartalmát nyitó és záró tagok közé zárjuk, akárcsak a HTML-ben. Vannak üres elemek is, mint a <plus/>, melyek mindig />-re végződnek, ezzel jelezve, hogy az elemnek nincs tartalma és záró tagja. A nyitó tagok tartalmazhatnak névvel jelölt paramétereket, attribútumokat (mint a fontstyle="normal" a fenti példában).
Mivel az XML kis- és nagybetű-érzékeny, a MathML elemek és attribútumok is azok, ezért a MathML mindet kisbetűvel definiálja.
1.3.2. MathML attribútumok értékei
A legtöbb MathML elemnek szüksége van számos utód elem specifikálására és/vagy egyéb többletjelentést hozzákapcsolására az utódhoz a megadott pozícióban. Ezek megadása MathML specifikus, nincs leírva az eredeti XML szintaxisban és nyelvtanban. Amikor egy adott MathML elem utóda a tárgya ezeknek a többletfeltételeknek, akkor általában argumentumnak nevezzük őket, így hangsúlyozva ezek speciális MathML használatát.
Az XML specifikációnak megfelelően az elemek attribútumainak a következő formákban adhatunk értéket:
attribútumnév = "érték"
vagy
attribútumnév = 'érték'
ahol az egyenlőségjel oldalairól a szóközök elhagyhatók. Megjegyzendő, hogy a kétféle idézőjel nem keverhető és nem ágyazható egymásba. Mindezek mellett, ha a ", ' és & jeleket mégis használni kívánjuk az attribútumokban, erre ad lehetőséget ezen speciális jelek escape-szekvenciás használata (", ' és &).
Az attribútumok felsorolásánál megadhatjuk azok egységét, a HTML-nél már megszokott egységjelekkel (de ez általában nem kötelező): em (horizontális hossz), ex (vertikális hossz), px (pixel), in (hüvelyk), cm (centiméter), mm (milliméter), pt (pont = 1/72 hüvelyk), pc (pika = 12 pont), % (százalék).
Az egyes attribútumok alapértékeit az elemek leírásánál minden esetben megadjuk. Ha az attribútum érték öröklött (“inherited”), akkor ebben az esetben az <mstyle> elemnél megadott attribútum értékeket veszi a MathML megjelenítő alapul. Ha az attribútum értéke automatikusnak (“automatic”) lett megadva, akkor a MathML megjelenítő az eddig expliciten meghatározott értékekből számolja ki azt a környezet figyelembevételével.
1.3.3. Üres helyek használata
A MathML engedélyezi a üres helyek (“whitespaces”, “blanks”: szóköz, tabulátor, újsor, kocsi-vissza karakterek) használatát a token-elemeken kívül. Ezeket a határoló üres helyeket a MathML megjelenítő levágja, tehát nem fognak látszani.
Például a <mo> ( </mo> megfelel a <mo>(</mo> alaknak és a
<mtext>
1.
axióma:
</mtext>
megegyezik a
<mtext>1. axióma:</mtext>
alakkal.
Ezért, ha mindenképpen üres helyet kell megjelenítenünk, akkor használjuk a HTML-ből ismert speciális karaktert. Hasonlítsuk össze következő két alakot:
<mtext>
1.
axióma:
</mtext>
<mtext>
1.
 axióma:
</mtext>
Az első változatban nincs üres hely az “1.” előtt, az “1.” és az “axióma:” között egy szóköz van, és szintén nincs az “axióma:” után. A második esetben egy szóközzel kezdődik a szöveg, ezt követi az “1.”, majd új sorban szóközzel kezdve folytatódik, és az “axióma:”-val végződik, ami után nincs üres hely.
2. Az OpenMath áttekintése
Hasonlóan a MathML-hez, az OpenMath kifejlesztői is az XML nyelvet vették alapul saját leírónyelvük megalkotásához. Az OpenMath azonban csak a MathML-ben megismert tartalmi elemek területét fedi le, és inkább programozási nyelv jellegű, ezért elsősorban matematikai alkalmazások során használható.
Az egyik legnagyobb különbség a két nyelv között az, hogy az OpenMath sokkal kevesebb elemet használ, a MathML-ben megtalálható elemek többségét attribútumként adja meg. A nyelv kis- és nagybetű-érzékeny: az elemek nevét nagybetűvel, az argumentumokat kisbetűvel, értékeiket idézőjelek között (és nem aposztrófok között!) kell megadni.
A másik nagy különbség a Content Dictionary (CD), melyben az elemeknél megadott attribútumok – valójában valamilyen matematikai műveletek – vannak meghatározva. Több CD-t is használhatunk, nevüket az egyes elemek attribútumaként (cd=“...”) kell megadni.
Hasonlóan a MathML-hez, az OpenMath is egy fastruktúrán alapul. A leveleket alapobjektumoknak nevezzük, a következők lehetnek:
- egészek,
- lebegőpontos számok,
- szimbólumok (a Content Dictionaryban meghatározott “elem”, név szerint hivatkozhatunk rá, a névben csak betűk, számok és _ jel lehet, betű-érzékeny.),
- változók (a programozási nyelvekhez hasonlóan használhatjuk őket, csak valamilyen OpenMath alkalmazás esetén van értelme használatuknak; nevük speciális jeleket is tartalmazhat, többféle formátumban, pl: α = +A7E- = hex. 3B1),
- sztringek (Unicode karakterekből),
- bájttömbök (mint a sztringek, azzal a különbséggel, hogy a sztringeknek értelmezhetőnek kell lenniük, a bájttömböknek nem).
Az OpenMath-ban van négy összetett objektum is:
- alkalmazás (application: két részből áll, az első rész a fejobjektum, a második az argumentumobjektum, ez az objektum általában megfelel a matematikai függvényeknek),
- kapocs (binding: minimum két részből áll, az első a kötő objektum, a többi az argumentumobjektum, jellemző példa rá a lambda-függvény),
- tulajdonság (attribution: olyan szimbólum és valamilyen más objektum párok, ahol a szimbólum lesz az adott objektum attribútuma),
- hiba (error: nincs közvetlen matematikai jelentése, alkalmazásokkal történő feldolgozások közben történő hibák kiértékelésére szolgál).
Fontos tudni, hogy az OpenMath elemek közül csak az <OMS/>, az <OMV/> és az <OMF/> elemnek van saját attribútuma. Az <OMS/> elemnél meg kell adni a cd attribútumban, hogy melyik CD-ben található az adott szimbólum, valamint a name attribútumban azt, hogy mi a neve a műveletnek. Az <OMV/> elemnek csak name attribútuma van, itt adjuk meg a változó nevét. Ezen kívül az <OMF/> elemnél a lebegőpontos szám számrendszerét kell megadni, amit a dec vagy a hex attribútum jelöl.
Érdekessége a nyelvnek, hogy egyes funkciókat – mint pl. a zárójelezés, vagy az indexek leírása – sajátságosan, egy <OMATTR> elemben kell megadnunk:
<OMA>
<OMATTR>
<OMATP>
<OMS cd="presentation" name="style"/>
<OMSTR> subscripted <OMSTR>
</OMATP>
<OMV name="x"/>
</OMATTR>
<OMV name="a"/>
</OMA>
<OMA>
<OMV name="f"/>
<OMATTR>
<OMATP>
<OMS cd="presentation" name="left"/>
<OMSTR>(</OMSTR>
<OMS cd="presentation" name="right"/>
<OMSTR>)</OMSTR>
</OMATP>
<OMA>
<OMS cd = "linalg" name="vector"/>
<OMV name="x"/>
<OMV name="y"/>
</OMA>
</OMATTR>
</OMA>
Az OpenMath szabvány kétféle kódolást ismer, az egyik az XML típusú (ebben a munkámban ezt ismertetem), a másik bájtfolyam típusú, mely az XML kódolás egyes alkotórészeinek (bájtokkal) való leírása (rövid összefoglaló a B Függelékben található).
Lássunk egy egyszerű példát:
<OMOBJ>
<OMA>
<OMS cd = "relation" name="eq"/>
<OMV name="x"/>
<OMA>
<OMS cd="arith" name="divide"/>
<OMA>
<OMS cd="arith" name="plusminus"/>
<OMA>
<OMS cd = "arith" name="unary_minus"/>
<OMV name="b"/>
</OMA>
<OMA>
<OMS cd="arith" name="root"/>
<OMA>
<OMS cd = "arith" name="minus"/>
<OMA>
<OMS cd="arith" name="power"/>
<OMV name="b"/>
<OMI>2</OMI>
</OMA>
<OMA>
<OMS cd = "arith" name="times"/>
<OMA>
<OMS cd = "arith" name="times"/>
<OMI>4</OMI>
<OMV name="a"/>
</OMA>
<OMV name="c"/>
</OMA>
</OMA>
<OMA>
<OMI> 2 </OMI>
</OMA>
</OMA>
</OMA>
<OMA>
<OMS cd = "arith" name="times"/>
<OMI>2</OMI>
<OMV name="a"/>
</OMA>
</OMA>
</OMA>
</OMOBJ>
3. A TEX áttekintése
Külsőleg a TEX nem hasonlít sem a MathML-re, sem az OpenMath-ra, melyek a HTML-ből az XML-be átöröklött hipertextes struktúrára és elemekre épülnek. A TEX-ben a matematikai kifejezések leírását, formázását speciális parancsokkal oldjuk meg.
Dolgozatomban az AMS-TEX matematikai módban használatos parancsaival foglalkozom csak. A matematikai módnak két formája van, a szövegközi (be és kikapcsolása a “$” paranccsal történik), valamint a kiemelt (be és kikapcsolása a “$$” paranccsal történik). A kiemelt matematikai mód abban különbözik a szövegközitől, hogy ezt külön bekezdésként, középre igazítva jeleníti meg a TEX.
A TEX nyelvében egy adott szöveg formázását parancsokkal végezhetjük, melyeket a kezdő “\” karakter jelzi. Ezek a parancsok két részre oszthatóak:
- ha a “\” jel után betű áll (az angol ábécé kis és nagybetűi), akkor azt az első nem betű karakterig próbálja feldolgozni a program; itt figyelnünk kell arra, hogy ha egy ilyen parancs után szóközt teszünk, akkor az nem fog megjelenni, mert a TEX azt csak határoló jelnek tekinti, nem megjelenítendő karakternek – ennek feloldására használjuk a “\ ” (egy “\” és egy szóköz karakter) parancsot. Pl.: $Ez a \TeX\ logo.$ eredménye: Ez a TEX logo.
- ha a “\” jel után nem betű áll, akkor csak a jel utáni karakter értelmeződik parancsként. Pl.: $Ez egy \"o.$ eredménye: Ez egy ö.
Mint látjuk, vigyázni kell a szóköz használatával, különösen matematikai módban, hiszen az ott beírt szóközöket figyelmen kívül hagyja, mert ilyenkor a matematikában használatos helykihagyásokkal dolgozik a rendszer.
A másik fontos tudnivaló, hogy a TEX a matematikai kifejezésekben szereplő betűket a matematikai szabályoknak megfelelően dőlten jeleníti meg. Matematikai módban az egyes zárójelezett kifejezések nem választódnak el.
Külön említést érdemel az i és a j betű, melyeknek már van ékezetük. Ha tehát az “\'i” parancsot használjuk, az nem egy hosszú í betűt eredményez, hanem egy vesszős i-t (). Ilyenkor használjuk a “\i” és “\j” parancsokat, tehát a hosszú í “\'\i” lesz. Itt érdemes megjegyezni, hogy ilyen esetekben, amikor a parancs egyetlen betűből áll, akkor érdemes használni a “{}” csoportképző karaktereket, különben hibajelzést kapunk: Pl.: “Vigy\'azat, v{\'\i}rus!” eredménye: Vigyázat, vírus! Itt a “v\'\irus” hiba lenne, mert nincs olyan parancs, hogy “\irus”, a “v\'\i rus” (szóközzel) pedig "ví rus" lenne.
A TEX parancsai kis- és nagybetű-érzékenyek, tehát a “\gamma” (γ) és a “\Gamma” (Γ) nem ugyanazt jelenti.
A speciális jelek összefoglalása az A Függelékben található.
Néha szükség van egyes parancsokban azok mértékeinek megadására. Ezekre a következő mértékegységeket használhatjuk (mindegyik kétbetűs rövidítésű): mm (milliméter), cm (centiméter), pt (pont), sp (osztott pont), bp (nagy pont), dd (didot), pc (pika), cc (ciceró), in (hüvelyk), em (az aktuális betűkészlet “M”-ének szélessége), ex (az aktuális betűkészlet “x”-ének magassága). Néhány példa a megadásukra: 6 cm, 20pt, 0.31246in, .23 cc, -5,34pc, 0pt
A jól ismert példánk:
$$x={-b\pm\sqrt{b^2-4ac}\over 2a}$$