Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

B. Stanik T.

Deníček o programování, modelování a analytikování

Matematika v OpenXML

Formát OpenXML se stal velkým zaklínadlem nové verze Microsoft Office. Jeho relativně dobrá čitelnost je velkou výhodou pro vývojáře systémů, které pracují s elektronickými dokumenty a po konečné standardizaci jako ECMA-376 je horkým kandidátem na téměř univerzální formát pro ukládání elektronických dokumentů. Líbí se mi, že umožňuje vyvíjet specializované "writery", které sice budou podporovat pro zápis pouze omezenou množinu vlastností, ale jimi vytvořený dokument bude nejen čitelný, ale i editovatelný v běžných kancelářských textových editorech.

Při běžném prozkoumání se mi tento formát líbí, přestože mi vadí neustále ohraničování bloků textu dvojicí tagů R + T, kde (text range) je povinné pro označení jakékoli samostatné části neformátovaného textu a R (run) je povinné pro každé T. Samozřejmě chápu výhody takového uspořádání: uvnitř T se nikdy nevyskytuje nic jiného než jednoduchý text a uvnitř R je veškerý kontinuelní text s jednotným fomátováním s informací, jakým způsobem je formátovaný. Bohužel to celou strukturu dokumentu poněkud zesložiťuje. Jednoduchý odstavec vypadá přibližně následovně:
   <w:body> 
     
<w:p>
         <w:r>
            <w:t>Hello, world!</w:t>
         </w:r>
      </w:p>
   </w:body>
namísto zápisu používaného v HTML, kde je odstavec uzavřen pouze:
   <body> 
     
<p> 
         Hello, world!
      </p>
   </body>
 

Tato "nadbytečnost" se nevyskytuje pouze u základního textového dokumentu, ale i uvnitř matematických vzorců. Jediným rozdílem je jiný namespace, tedy namísto <w:t> se zapisuje <m:t> (jmenný prostor m je určen právě pro matematické vzorce). Jako příklad uvedu zápis odmocniny: Odmocninase zapíše následovně:

<m:oMathPara>
  <m:oMath>
    <m:rad>
      <m:deg>
       
<m:r><m:t>4</m:t></m:r>
      </m:deg>
      <m:e>
        <m:r><m:t>27</m:t></m:r>
      </m:e>
    </m:rad>
  </m:oMath>
</m:oMathPara>

Výklad tohoto zápisu není složitý. Tag RAD (radical function) říká, že se jedná o zápis odmocniny stupně DEG (degree) ze základu E (base). Samozřejmostí je nadbytečné ohraničení všech hodnot dvojicí tagů R + T. V tuto chvíli jsem si mylsel, že OpenXML zápis matematických vzorců je přehledný a poměrně snadné by bylo nezapisovat matematické vzorce v textovém editoru (v editoru rovnic), ale přímo v XML. Ze sna mne v zápětí probudil zápis limity funkce.

Limitase zapíše následovně:

<m:oMathPara>
  <m:oMath>
   
<m:limLow>
      <m:e>
        <m:r><m:rPr><m:sty m:val="p"/></m:rPr>
          <m:t>lim</m:t>
        </m:r>
      </m:e>
      <m:lim>
       
<m:r><m:rPr><m:sty m:val="p"/></m:rPr>
          <m:t>n&#8594;&#8734;</m:t>
        </m:r>
      </m:lim>
    </m:limLow>
 
</m:oMath>
</m:oMathPara>

Tady už je výklad složitější. Tag LIMLOW (lower-limit function) říká, že se jedná o zápis limity s indexem zapisovaným dole. Poněkud nelogický mi připadá základ limity E (base/argument), který má vždy hodnotu "lim". Aby bylo vůbec možné tuto hodnotu "lim" zobrazit, je nutné této části textu přiřadit nějaký styl (zde tagy rPr a sty, ale mohou být i jiné; pokud není uveden formát, zobrazují se v matematice pouze číslovky). Bez tohoto "zformátovaného základu" vůbec nedojde k zobrazení znaku "lim" pro limitu. Tag LIM (limit / lower) označuje pouze spodní část zápisu limity, která se skládá většinou z indexeru, šipky a nějakého čísla. Celý tato část není od sebe nijak odělena. Neexistuje žádný tag pro indexer, pro šipku ani pro číslo, ke kterému se limita má blížit. I zde musí být zápis "n->0" ohraničen dvojicí tagů R + T a pokud chcete zobrazit jakékoli písmeno, je třeba přiřadit nějaký styl ("&#8594;" je UTF vyjádření šipky a "&#8734;" je UTF vyjádření znaku pro nekonečno).

Jak vidíte, tento zápis není vůbec jednoduchý a navíc obsahuje jistou dávku nelogičnosti. Pro ruční zápis matematického vzorce je zcela nepoužitelný. Podobně nelogické jsou i zápisy sumy nebo integrálu, kde součástí zápisu je i text, který obsahuje patřičný znak, což vyžaduje znalost zápisu speciálních znaků s pomocí číselného kódu.

Na první pohled jsem od OpenXML v matematice očekával podobnou eleganci, jakou má Tex, ale bohužel na pohled druhý nemohu přímý zápis v OpenXML doporučit nikomu, komu se použití editoru rovnic ve Wordu zdá příliš těžkopádné. Tento článek neberte jako krytiku editoru rovnic ve Wordu 2007. Mám za sebou publikaci mnohastránkové práce za pomoci jeho betaverze, se kterou jsem byl plně spokojený. Domnívám se však, že současný standard OpenXML zasluhuje ještě revizi.

Zveřejněno Sunday, January 14, 2007 8:40 PM by bst
Vedeno pod: ,

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS

Komentář

Žádné komentáře

Vytvoření nového komentáře

(povinný) 
(nepovinný)
(povinný) 
Opiš čísla, která vidíš na obrázku:
Odeslat
Powered by Community Server (Personal Edition), by Telligent Systems