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 (a+b)^2 felbontható az (a+b) 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: “α” - &alpha;, “Σ” - &sum;. 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 ((a+b)^2), 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 a-b 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: x^2+4x+4=0

A MathML kód:

<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>
    <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 másodfokú egyenlet megoldóképlete

A MathML kód:

<mrow>
  <mi>x</mi>
  <mo>=</mo>
  <mfrac>
    <mrow>
      <mrow>
        <mo>-</mo>
        <mi>b</mi>
      </mrow>
      <mo>&PlusMinus;</mo>
      <msqrt>
        <mrow>
          <msup>
            <mi>b</mi>
            <mn>2</mn>
          </msup>
          <mo>-</mo>
          <mrow>
            <mn>4</mn>
            <mo>&InvisibleTimes;</mo>
            <mi>a</mi>
            <mo>&InvisibleTimes;</mo>
            <mi>c</mi>
          </mrow>
        </mrow>
      </msqrt>
    </mrow>
    <mrow>
      <mn>2</mn>
      <mo>&InvisibleTimes;</mo>
      <mi>a</mi>
    </mrow>
  </mfrac>
</mrow>

Megfigyelhető, hogy a “pluszmínusz” jel egy speciális műveleti jel, a &PlusMinus; 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 &InvisibleTimes;:

<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 &InvisibleTimes; 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> &InvisibleTimes; </mo> sort is. Hasonló módon kell használni a &dd; 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=[xyzw]

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: x^2+4x+4=0

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 másodfokú egyenlet megoldóképlete

A MathML kód:

<reln>
  <eq/>
  <ci>x</ci>
  <apply>
    <divide/>
    <apply>
      <fn>
        <mo>&PlusMinus;</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=[xyzw]

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: diff(t,0) dx/x

A MathML kód:

<semantics>
  <mrow>
    <msubsup>
      <mo>&int;</mo>
      <mn>0</mn>
      <mi>t</mi>
    </msubsup>
    <mfrac>
      <mrow>
        <mo>&dd;</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>&int;</mo>
        <mn>0</mn>
        <mi>t</mi>
      </msubsup>
      <mfrac>
        <mrow>
          <mo>&dd;</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 1/x dx helyett a dx/x 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 &nbsp;, 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 (&quot;, &apos; és &amp;).

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 &nbsp; speciális karaktert. Hasonlítsuk össze következő két alakot:

<mtext>
1.
axióma:
</mtext>
<mtext>
&nbsp;1.&NewLine; &nbsp;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:

x(a)

<OMA>
  <OMATTR>
    <OMATP>
      <OMS cd="presentation" name="style"/>
      <OMSTR> subscripted <OMSTR>
    </OMATP>
    <OMV name="x"/>
  </OMATTR>
  <OMV name="a"/>
</OMA>

f(x,y)

<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: A másodfokú egyenlet megoldóképlete

<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 ('i). 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: A másodfokú egyenlet megoldóképlete

$$x={-b\pm\sqrt{b^2-4ac}\over 2a}$$

<<< Előző   |   Következő >>>