-
Notifications
You must be signed in to change notification settings - Fork 0
Kial XML
Tiuj informoj celas programistojn kaj interesitajn redaktantojn de Revo!
Kial Reta Vortaro uzas XML kiel fonto-lingvo, kvankam ĝi estas ne tro eleganta lingvo por redaktado? Jen rekonsidero el pluraj vidpunktoj.
La unua, ankoraŭ ne publika provo enretigi kompleksstrukturan vortaron kiel PV kaj PIV okazis per SGML (Standard Generalized Markup Language - Norma Ĝeneraligita Markolingvo) kun transformlingvo DSSSL (Document Style Semantics and Specification Language - Dokumentstila Semantiko- kaj Specifolingvo). Tiutempe, 1997, ĝi estis la plej moderna maniero kodigi kompleksajn dokumentojn, ekz. uzata de eldonejoj por siaj verkoj.
Tamen SGML havis la malavantaĝon, ke ĝi estis iom tro fleksebla, ekz. oni povis forlasi la finan markon, agordi la manieron de markado ks. Tiel ekestis ambiguecaj situacioj, malfacile analizeblaj de la algoritmoj kaj sekve malfaciligantaj la forigadon de sintakseraroj en la teksto aŭ eĉ kaŭzantaj misinterpretadon kaj tiel malĝustajn dokumentojn.
Tiel estiĝis en 1999 plisimpliga normo XML, kies destino estis ne nur verki dokumentojn, sed fariĝi la lingvo, kiu funkciigas la Tut-Teran Teksaĵon. Ĝi tuj ricevis larĝan subtenon de produktantoj de XML-analiziloj kaj transformiloj (plej konata XSLT - eXtensible Stylesheet Language Transformation - Etendebla Stildifina Lingvo-Transformo) k.m.p. Ekzemplo de simpligo en XML: alie ol en SGML oni devas havi ĉiam finan markon, sed oni povas kunigi komencan kaj finan markon per <.../>
anstataŭ <...></...>
.
Ambaŭ lingvoj havas komune, ke ili estas meta-lingvoj, do ili ne rekte esprimas la gramatikon, sed nur la sintakson kaj oni aldone difinas la strukturon de la propraj dokumentoj per dokumenttip-difino. Ĝi specifas, kiuj etikedoj kaj kombinoj de ili estas permesitaj. Do unu dokumenttipo povas konsisti el ĉapitroj, kiuj konsistas el alineoj, kiuj povas esti proza teksto aŭ poemoj ktp. Alia dokumenttipo povas esti vortaro el alineoj konsistantaj el kapvorto kaj difina strukturo kun ekzemploj kaj tradukoj, kiel ni uzas ĝin por Reta Vortaro. Oni nomas tiujn dokumenttipdifinojn ankaŭ aplikoj de la metalingvo XML. Kelkaj tiaj aplikoj, kiuj montras la flekseblon de la lingvo estas: HTML - la lingvo de retpaĝoj, SVG - lingvo por krei vektorgrafikojn, MathML - lingvo por esprimi matematikajn formuloj, SOAP+XSL - lingvoj por specifi intersistemajn interfacojn, XSLT - lingvo por transformi XML-dokumentojn, kiu mem estas aplikaĵo de XML.
Flanka noto: origine oni transprenis de SGML la lingvon DTD por difini dokumenttipojn, sed intertempe ekzistas du pliaj tiaj difinlingvoj: XML-Schema kaj RelaxNG, kiuj povas pli limigi, kio estas permesata en la dokumento.
Oni povas kompari la strukturmodelon de XML kun aliaj strukturmodeloj.
Tradicie en programlingvoj oni uzas strukturojn kiel listoj (vektoro de numeritaj elementoj) kaj asociaj listoj (konsistantaj el paroj ŝlosilo-valoro) por strukturi datumojn. Se oni permesas nestadon, t.e. ke la elementoj/valoroj siavice estu tiaj strukturoj oni povas esprimi samkompleksajn strukturojn kiel XML. Fakte la programoj traktantaj XML interne uzas tian datumstrukturon nomatan DOM - dokument-objekt-modelo. Oni povas seriigi tiajn datumstrukturojn al teksta dokumento. En tiu formo oni povus uzi ilin ankaŭ por verkado de dokumentoj.
La du ĉefaj distingoj estas:
- tiaj seriigitaj datumstrukturoj estas faritaj por trakti ilin ĉefe per programoj, ne por verki dokumentojn. Tial ekzemple signovicojn oni devas protekti per citiloj kaj oni ordinare ne povas verki plurliniajn alineojn sen uzi specialan sintakson, kiel ĉenigo de unuopaj linioj aŭ enmeti
\n
por marki linifinon - XML provizas ion, kion oni nomas "miksita enhavo", do oni povas miksi fluantan tekston kun strukturita enhavo. En Revo ni ekz. povas ŝovi la tekston de klarigo en tekston de traduko, kiu siavice aperas meze en la teksto de difino. En tradiciaj datumstrukturoj oni povas tion nur esprimi per "teksto antaŭ la strukturo", "la strukturo", "teksto post la strukturo". Fakte en la DOM ĝuste tiel aperas la miksita enhavo, sed tio estas iom nenatura, se oni volas verki dokumentojn.
Modernaj reprezentantoj de tiaj seriigaj lingvoj estas JSON kaj YAML. Per ambaŭ oni povas ekzemple esprimi la enhavon de formularo, sed ili ne subtenas tiun "miksitan enhavon" kiel XML. Krome en JSON oni devas protekti ĉiun tekston per citiloj, en YAML, ĉiam, kiam la teksto enhavas specialajn signojn.
Intertempe oni kreis nombron da pli modernaj markolingvoj (angle: markdown), kiuj ne funkcias per etikedoj, sed per konvencioj en la sintakso. Ekze. oni komencas titolon per nombro da #
-signoj, alineoj dividiĝas per malplena linio. Emfazojn oni markas per asteriskoj ktp. Plej konata estas tiu variaĵo uzata en Vikipedio por verki ties artikolojn. Alia estas AsciiDoc.
Komune al tiuj lingvoj estas, ke ili ne estas meta-lingvoj, do ili limiĝas al sintakso de certa dokumentstrukturo, sed ne permesas difini specialan dokumenttipon ekz. por vortaro. Dum en Revo oni per
<gra>...</gra>
esprimas gramatikan informon, oni povas tion ne fari aŭ nur per iu aldona privata konvencio en tia simpligita marko-lingvo.
Ekzistas kelkaj tiaj marko-lingvoj, kiu iagrade subtenas semantikajn aldonojn, ekz. reStructuredText. La ĉefa problemo tie, estas, ke tiuj lingvoj estas ne normigitaj, sed konstruitaj ofte sur specifa programlingvo kaj lingvo-analizilo. Kaj se por ili ekzias pluraj realigoj, ili ne sekvas la samajn konvenciojn por tiaj semantikaj etendoj.
Restas la ebleco krei nian propran redakto-lingvon speciale konstruita por Revo. Ekzemple anstataŭ skribi <uzo tip="fak">MAT</uzo>
oni povus difini ŝlosilvortojn por la fakoj kaj skribi nur MAT
aŭ eble [MAT]
. La ĉefa problemo pri tio estas, ke verki novan komputilan lingvon estas arto, kiu povas postuli plurajn jarojn da programista laboro. Ekzistas iloj, kiuj subtenas la verkadon, sed ĝi restas arto.
Por propra lingvo oni bezonas gramatikon, kiu fidinde funkcias, lingvoanalizilon kaj transformilon. La lingvoanalizilo estas la plej malfacila parto, ĉar ĝi devas ne nur analizi ĝustajn dokumentojn, sed ankaŭ sintakse erarajn kaj redoni eraro-mesaĝojn sufiĉe taŭgajn por povi trovi kaj korekti la eraron en la dokumento. Oni povas ŝpari modifeblan transformilon, se oni ĉiam ekz. transformas al XML kaj poste uzas ties transformilojn kiel XSLT kaj la gramatikon oni povas derivi de la dokumentstrukturo de Revo.
Fine oni atingas ne pli bonan situacion ol kiel ĉe reStructuredText kaj parencoj: oni baziĝas sur realigo en specifa programlingvo kaj specifa analizilo, kies flegadon oni devas certigi per propraj fortoj. Oni ne povas profiti de la laboro farita de centoj da programistoj, kiuj estas flegantoj de la ekosistemo ĉirkaŭ XML.
Uzo de alternativo al XML fakte signifus rezginado pri almenaŭ unu afero el la sekvaj tri:
- normeco
- miksita enhavo
- semantika markado
Ĝis nun ni ne konas meta-lingvon, krom SGML kaj XML, kiuj havas ĉiujn tri karakterizaĵojn.