Szerkesztő:Gyimhu/Kémiai infóbox rendszerterv

Ez a terv a {{Chembox_new}}(?), {{Chembox_új}}(?), {{Drugbox}}(?), {{Drugbox_new}}(?), {{Gyógyszeresdoboz}}(?) és {{Vegyület_infobox}}(?) infóbox (sablon) átalakításával foglalkozik.

Jelenlegi helyzet szerkesztés

A kémiai infóboxok hosszú évek óta okoznak fejtörést a magyar Wikipédián. A közösség szerint az infóbox sablonok áttekinthetetlenek, rosszul vannak megírva, nincs dokumentációjuk. Régóta napirenden van a megújításuk.

Miután szinte kizárólag kémiai és gyógyszerészeti tárgyú szócikkeket írok, amióta csak szerkesztő vagyok, használom a sablonokat. Gyakorló felhasználóként egy kicsit másképp látom a helyzetet.

Kétségtelen, hogy a magyar Wikiben a sablonok eddig dokumentálatlanok voltak. Az is kétségtelen, hogy az angol Wiki dokumentációja is csak felhasználói szintű. Annak alapján, kódfejtés nélkül nem lehet a sablonokat módosítani. Felhasználóként a dokumentáció viszont jól használható, bár néhány (feltehetően újabb) lehetőség kimaradt belőle.

A sablonok a Wiki sablonnyelvéhez mérten jól vannak megírva, és látszik rajtuk, hogy szerzőiket jól átgondolt koncepció vezette. A sablon karbantarthatóságán fejlesztői szintű dokumentációval még lehetne segíteni.

A sablonok alapvető problémája azonban nem ez, hanem az, hogy többen vannak, a több sablonban is közös adatokat más-más névvel hivatkozzák, és ami a legnagyobb baj, bizonyos adatok csak az egyikben, mások csak a másikban vannak meg. A kémiai sablonokban pl. nincsenek gyógyszerészeti adatok, a gyógyszerészeti sablonokban pedig rokon vegyületek.

A sablondokumentációk táblázatai jól mutatják a fenti problémákat. A paraméternevek különbségei miatt az angol Wikiből áthozott infóboxoknál időrabló és hibalehetőségekkel van tele azok átmigrálása (a paraméternevek átírogatása) valamelyik új, a magyar Wiki számára fejlesztett sablonba.

A cél szerkesztés

A cél egyszerű és ambíciózus. A jelenlegi sablonokat úgy átalakítani, hogy

  • valamennyi sablon értse a többi sablon által használt paraméterneveket is
  • valamennyi sablon legyen képes használni a többi sablon adatait is.

A megoldás is egyszerű: egy olyan új sablon megírása, vagy az egyik meglevő átalakítása, amely ezeket mind tudja. A jelenlegi sablonok ezen új sablon szinonímái lesznek. (A szinoníma megvalósítása a Wikiben az átirányító lap.)

A sablonok funkcionális bővítése nem cél: a tapasztalatok szerint valamelyikben megvan a szükséges adat, a munka végén pedig ez az adat a többi sablonból is elérhető lesz.

A megvalósítás módja szerkesztés

Hosszas töprengés után úgy döntöttem, hogy a megoldás módja az összes sablon fokozatos átírása lua nyelvre.

Előnyök:

  • a lua eleve olvashatóbb, mint a sablonnyelv
  • a luának – a sablonnyelvvel ellentétben – vannak változói, amiben egy egyszer kiszámolt érték eltárolható. Ezzel elkerülhetó a kódismétlés, ami áttekinthetőbbé és karbantarthatóbbá teszi a kódot.
  • az egyetlen sablon (közös kód) nagy előnye a jóval egyszerűbb átalakíthatóság
  • nincs szükség a korábbi lapok módosítására: azok automatikusan az új sablont fogják használni.

Az új sablonszerkezet szerkesztés

Már az eddigi infóboxokban is találhatók adatcsoportok (a chembox_new sablonban például nyolc). Ezzel önmagát adja az új szerkezet. Az új infóbox és minden adatcsoport egy-egy lua-modul. Az eredmény HTML-formázására pedig szükség lesz egy közös modulra.

Ez lehetővé teszi később új adatcsoport létrehozását. Nem futunk ki a Wiki erőforráskorlátaiból. Lehetséges lesz fokozatosan (modulonként és infóboxonként) áttérni az új szerkezetre.

Az adatcsoport-moduloknak az áttérés alatt szükségük lesz egy olyan paraméterre, melyből tudják, melyik régi infóboxból hívták őket, hogy mielőtt az egységesítés megtörténik, a hívó boxnak megfelelően tudják formázni a kimenetet. E paramétert tovább kell adják a közös modulban található kiíró eljárásoknak.

Ez a paraméter megmarad az áttérés után is. Lesz egy default értéke, amit a fő modul egyik paraméterén keresztül módosítani lehet, hogy az éles infóboxok zavarása nélkül lehessen kísérletezni más formátumokkal.

A paraméternek még egy haszna van. A {{vegyület infobox}}(?) H, F és O paramétere ütközik a többi infóbox-szal. A vegyület infóboxban e paraméterek a tűzgyémánt (az anyag veszélyességét jelző piktogram) előállítására szolgálnak, míg a többi sablonban a hidrogén-, fluor- és oxigénatomok számát adják meg az összegképletben. A paraméter segítségével az új sablon/modul különbséget tud tenni e két jelentés között. (Ez egyúttal azt is jelenti, hogy a vegyület infoboxból nem lehet átirányítás, csak burkolósablon.)

Fokozatos bevezetés szerkesztés

Programfejlesztői és üzemeltetői tapasztalataim szerint futó rendszerben ilyen nagymértékű átalakítást csak fokozatosan, nagyon óvatosan szabad csinálni. Minden új kódnál megvan a hiba kockázata, és több egyidejű, egymásra is ható hiba exponenciálisan növeli a hibakeresési időt.

Az első megírandó modul a chembox_new egyik egyszerű, ritkán használt alsablonja lesz. Azért a chembox_new-é, mert az eredeti modulhoz nem kell hozzányúlni az alsablon cseréjéhez. A ritkán használt alsablonnal csökkenthető az esetleges hiba okozta kár. Az egyszerű alsablon pedig lehetőséget ad a bonyolultabbakhoz szükséges tapasztalat megszerzésére.

A megírt és a két chembox sablonban letesztelt modult azután 1–2 hetes időközökkel átvezetem a többi sablonba, miközben a következőt fejlesztem a saját Wikimben. Később, gyakorlatot szerezve talán lehet növelni a gyakoriságot. Ez így modulonként 1–2 hónap, vagyis az átállási idő fél–egy évre becsülhető.

Sablonok ill. modulok hívása szerkesztés

Jelenlegi helyzet szerkesztés

infobox

  • wikistring ← saját paraméterlista
  • wikistring adatcsoport1(paraméterlista)
    • wikistring adat1(paraméterlista)
    • wikistring adatn(paraméterlista)
  • wikistring adatcsoportn(paraméterlista)
    • wikistring adat1(paraméterlista)
    • wikistring adatn(paraméterlista)

Vagyis első lépésben az infóbox a saját hatáskörben kezelt paramétereket wikistringgé alakítja. Azután egymás után behívja az adatcsoportok sablonjait, melyeknek átadja az adott adatcsoport paramétereit. Az eredményt wikistringben kapja vissza. A wikistringeket (melyek valójában egy táblázat sorai) egymás után kiírja.

Átmenet szerkesztés

infobox

  • wikistring ← saját paraméterlista
  • wikistring adatcsoportk(infóboxnév,paraméterlista)
    • table lua_adatcsoportk(paraméterlista)
      • table lua_adat1(paraméterlista)
      • table lua_adatn(paraméterlista)
    • wikistring formázás(infóboxnév,table)

A table egy lua adattípus neve: asszociatív tömb. A tömb kulcsa az infóboxban megjelenő felirat, értéke pedig az adat kiírandó értéke. Bonyolultabb adatnál (pl. képnél vagy adatcsoport fejlécénél) az érték nem string, hanem ugyancsak table lesz. Ha az értékstring üres, a címke érték nélkül íródik ki, ha értéke nil, akkor nem kerül a table-ba.

adatcsoportk semmi mást nem tesz, mint a paramétereit átadja a feldolgozást végző lua-modulnak. A feldolgozás két részből áll. Az első rész table formában előállítja az adatok értékét oly módon, hogy minden paraméterre meghívja a kiíró sablon lua-megfelelőjét, mely egy egysoros table-t ad vissza. Az adatfüggvények hívása után ezeket a sorokat egy table-ba egyesíti. A második lépésben egy konverziós lua-modul a table-t wikistringgé alakítja.

A table csak adatot tartalmaz, formázást nem. A formázás (table→wikistring konverzió) azonos minden adatcsoporban, viszont függ(het) az eredeti hívó infóboxtól. Ezáltal ugyanazok az adatcsoportok több infóboxba is kerülhetnek anélkül, hogy az infóboxban megjelenő adat formája megváltoznék.

Cél szerkesztés

infobox

  • table lua_infobox(infóboxnév,paraméterlista)
    • table ← saját paraméterlista
    • table lua_adatcsoportk(paraméterlista)
      • table lua_adat1(paraméterlista)
      • table lua_adatn(paraméterlista)
    • wikistring formázás(infóboxnév,table)

Az eredeti sablon semmi mást nem tesz, mint a paramétereit átadja a feldolgozást végző lua-modulnak. A modul először a saját paramétereit alakítja table típusúvá, majd az adatcsoport-modulok meghívásával azokat is hozzáilleszti a táblázathoz. Végül a már megismert konverziós lua-modul wikistringgé alakítja az eredményt.

A jelenlegi sablonokban előfordul, hogy egy adat két adatcsoportban, vagy az infóbox saját adatai és egy alcsoport paraméterei között is szerepel. Ilyenkor egy adat kétszer íródhatik ki. A table-lé alakítás ezt a problémát is megoldja.

Kapcsolódó lapok szerkesztés