plu komenco

Enkonduko en la aŭtomatan daten-prilaboradon (2)

5 Hierarkioj kiel tekstoj: XML

5.1 La daten-aranĝoj de OpenOffice

La tabel-kalkula programo Microsoft Excel uzas dosier-aranĝon, kiu nomiĝas XLS, laŭ sia dosier-finaĵo. Kvankam la programo Calc en OpenOffice kapablas prilabori la aranĝon XLS, ĝi normale uzas propran dosier-aranĝon, kun la finaĵo sxc (versio 1) aŭ ods (versio 2).

Tiuj aranĝoj uzas la normon XML por reprezenti hierarkiojn kiel tekstojn. Tabeloj ja havas hierarkian strukturon: Ili konsistas el horizontaloj, horizontaloj konsistas el ĉeloj, ĉeloj konsistas el valoro kaj certaj ecoj (liter-tiparo, koloro, grandeco ktp.). Tian strukturon oni tre bone povas reprezenti per XML.

5.2 Hierarkioj, tekstoj kaj XML

Tekstaj daten-aranĝoj havas gravan avantaĝon: Ili estas legeblaj ne nur de komputiloj, sed ankaŭ de homoj. Tial ili ne estas tre dependaj de certaj programoj: Kiam iu programo, kiu prilaboras ilin, ne plu estas havebla, ne estas tre malfacile verki novan. Almenaŭ eblas kompreni la dosierojn, ĉar tekstoj kutime havas multe da redundo.

Aliflanke tekstoj ne bone taŭgas por reprezenti hierarkiojn, ĉar tekstoj estas unu-dimensiaj: Ili formas unu vicon da signoj. En unu dimensio ne estas facile prezenti hierarkion. Sed ĉar hierarkioj estas tre gravaj en informadiko, informadikistoj inventis lingvon, en kiu oni povas prezenti ilin. Tiu lingvo nomiĝas XML.

XML estas mallongigo de la angla esprimo eXtended Mark-up Language, "vastigita marka lingvo". La vorto "marka" devenas de la plej grava elemento de la lingvoj, la "markoj". Markoj priskribas ecojn de teksto-partoj, ili "markas" tiujn teksto-partojn. En XML la markoj komenciĝas per la signo "<" kaj finiĝas per ">" ("pintaj krampoj"). Ekzistas komencaj kaj finaj markoj. La komencaj havas simplan nomon inter la krampoj, la finaj havas post la signo "<" oblikvan strekon ("stangon"). En jena ekzemplo la vorto "dokumento" estas markita kiel HTML-dokumento:

  <html>dokumento</html>

Kiu konas HTML, la lingvon de la retpaĝoj, certe rimarkas similecon inter HTML kaj XML. Fakte unu HTML-dialekto, nomata XHTML, estas XML-lingvo. Jes, XML ne estas simpla lingvo, sed kvazaŭ familio da lingvoj, aŭ kadro, en kiu oni povas difini multajn lingvojn.

La komencaj kaj finaj markoj estas la rimedo, per kiu oni difinas hierarkiojn. Tio funkcias, ĉar inter la komenca kaj fina markoj povas esti pliaj markoj. Jena ekzemplo diras, ke persono havas nomon kaj naskiĝdaton:

  <persono>
      <nomo>Lucian Blaga</nomo>
      <naskighdato>1895-05-09</naskighdato>
  </persono>
  

Ekzistas kelkaj kondiĉoj, por ke XML-dokumento estu "bonforma". La plej grava estas, ke la markoj formu "parentezan strukturon": Parentezo estas komenca marko, ĝia fina marko kaj la teksto inter ili, kaj se parentezo enhavas la komencan markon de alia parentezo, ĝi devas enhavi ankaŭ la finan markon. Do ekzistas kvar ebloj por du parentezoj A kaj B:

Ne povas esti, ke nur parto de A estas en B kaj nur parto de B en A, kiel en jena malĝusta ekzemplo:

    <antaunomo>
    Johann
    <familiaNomo>
    Wolfgang
    </antaunomo>
    von Goethe
    </familiaNomo>
    

Tiu eco garantias, ke XML-dokumento ĉiam priskribas hierarkian strukturon (arbon). Ekzemple ni povas priskribi la hierarkion el la komenca leciono per markoj, kiujn ni nomu firmao, fako, grupo kaj ano:

<firmao>
   <fako>
      <grupo>
         <ano> a </ano>
         <ano> b </ano>
         <ano> c </ano>
      </grupo>
      <grupo>
         <ano> d </ano>
         <ano> e </ano>
      </grupo>
   </fako>
   <fako>
      <grupo>
         <ano> x </ano>
         <ano> y </ano>
         <ano> z </ano>
      </grupo>
      <grupo>
        …
      </grupo>
      <grupo>
        …
      </grupo>
   </fako>
</firmao>

Tiu XML-dokumento bone priskribas la hierarkion, sed io perdiĝis: La nomoj de la fakoj kaj de la grupoj. Por tiaj informoj XML posedas plian elementon: epitetoj, foje nomataj ankaŭ atributoj. Ilin oni notas inter la pintaj krampoj de la malferma marko; ili konsistas el nomo, egaleco-signo kaj valoro inter citiloj. Epitetoj staras nur en malfermaj markoj, neniam en fermaj. Jena ekzemplo distingas inter du "specoj" de nomoj, "persona nomo" kaj "familia nomo":

  <persono>
      <nomo speco="personaNomo">Lucian</nomo>
      <nomo speco="familiaNomo">Blaga</nomo>
      <naskighdato>1895-05-09</naskighdato>
  </persono>
  

Kiam oni uzas epitetojn, kaj kiam oni uzas plurajn markojn (ekz. "<personaNomo>" kaj "<familiaNomo>")? Ĝenerala regulo ne ekzistas. Se, ekzemple, iu valoro ne ĉiam ekzistas (kelkaj kulturoj ne havas familiajn nomojn, kelkaj havas patronomojn), oni prefere uzu epitetojn.

Per epitetoj ni nun povas redoni al la firmaa hierarkio la nomojn de la fakoj kaj grupoj:

<firmao>
   <fako nomo="A">
      <grupo numero="1">
         <ano> a </ano>
         <ano> b </ano>
         <ano> c </ano>
      </grupo>
      <grupo numero="2">
         <ano> d </ano>
         <ano> e </ano>
      </grupo>
   </fako>
   <fako nomo="B">
      <grupo numero="3">
         <ano> x </ano>
         <ano> y </ano>
         <ano> z </ano>
      </grupo>
      <grupo numero="4">
        …
      </grupo>
      <grupo numero="5">
        …
      </grupo>
   </fako>
</firmao>

Kvankam la principo de XML estas simpla, la lingvo posedas multajn aspektojn. Jen kelkaj:

5.3 Normigo de XML

La lingvo XML estas normigita; la respondecon pri ĝia evoluo havas la organizaĵo "World Wide Web Consortium" (Tut-Ter-Teksaĵa Konsorcio), mallonge W3C. Ĝia retpaĝejo www.w3.org proponas multajn dokumentojn pri diversaj teknikaj temoj. La dokumentoj pri XML troviĝas sub www.w3.org/XML.

Ĝis nun (2005) ekzistas nur du versioj de XML, kiuj estas difinitaj en tiel nomataj rekomendoj:

La diferencoj inter 1.0 kaj 1.1 ne estas grandaj; ili koncernas precipe la kongruecon kun novaj versioj de Unikodo. XML 1.0 estas ankoraŭ valida; programoj, kiuj legas XML, komprenu kaj 1.0 kaj 1.1.

5.4 Redundo en XML

Ekzistas pluraj kialoj uzi XML, eĉ se oni ne havas kompleksajn hierarkiojn. Unu kialo estas, ke XML-dokumento iusence priskribas sin mem (se oni komprenas la lingvon, el kiu venas la nomoj de la markoj kaj de la epitetoj). Se do post 50 jaroj iu trovas malnovan daten-portilon kun XML-dokumento, li eble havas ĉancon kompreni la enhavon. Kun aliaj datenoj oni ofte ne havas tiun ŝancon: Ekzemple la usona kosmo-esplora oficejo NASA posedas magnetbendojn el la 1960-aj jaroj, kiujn ĝi ne povas interpreti.

XML-dokumentoj do posedas sufiĉan redundon, kiu faciligas la komprenon: Por iu, kiu scias, ke firmaoj konsistas el fakoj, fakoj el grupoj kaj grupoj el anoj, la markoj en la ĉi-supra dokumento ne necesas, ili estas redundaj. Almenaŭ sufiĉus unuliteraj markoj. Ĉu do XML estas giganta malŝparo de memoro?

Iusence jes, sed memoro nun kostas nur etan parton de tio, kion ĝi kostis antaŭ 20 aŭ 30 jaroj. Kaj krome ekzistas bona rimedo redukti redundon: densigo (komparu lecionon 2). Certe densigo iom reduktas la avantaĝon, ke XML-dokumentoj estas facile interpreteblaj, sed la metodoj de densigo estas normigitaj, kaj espereble eĉ post 50 jaroj oni sukcesos maldensigi dokumenton, kiun ni nun densigas.

Efektive la programaro OpenOffice uzas kombinon el XML kaj densigo, por memori siajn dokumentojn.

5.6 Ekzemplo el OpenOffice

Ni jam menciis, ke la programaro OpenOffice uzas XML kiel dosieran aranĝon. Ekzemple, dosiero por la tabel-kalkula programo Calc konsistas el kvar XML-dokumentoj (pakitaj en unu dosiero):

Jen parto el la dokumento "content.xml" de la prezotabelo el nia Calc-leciono:

XML klarigo
<table:table table:name="prezoj"> komenco de tabelo, kies nomo estas "prezoj"
<table:table-row> komenco de horizontalo
<table:table-cell>
<text:p>prezo de unu peco:</text:p>
</table:table-cell>
ĉelo kun la teksto "prezo de unu peco:"
<table:table-cell>
<text:p table:value="9.9">9,9</text:p>
</table:table-cell>
ĉelo kun la valoro 9.9, skribata kiel 9,9
<table:table-cell
table:formula="=[.B3]+[.D1]"
table:value-type="float"
table:value="29.9">
<text:p>29,90</text:p>
</table:table-cell>
ĉelo kun formulo "B3+D1" kaj kun la valoro 29.9, skribata kiel 29,9

Specimenaj demandoj