Navodila za izdelavo diplomske naloge - CORE · 2017-11-27 · skupnost. MediaWiki je prosto...
Transcript of Navodila za izdelavo diplomske naloge - CORE · 2017-11-27 · skupnost. MediaWiki je prosto...
I
Diplomsko delo univerzitetnega študijskega programa
SISTEM ZA UPRAVLJANJE VSEBIN MEDIAWIKI
Študent: Nejc Kete
Študijski program: Računalništvo in informacijske tehnologije (UN)
Mentor: red. prof. dr. Janez Brest
Somentor: asist. dr. Aleš Zamuda
Maribor, september 2012
III
ZAHVALA
Zahvaljujem se mentorju red. prof. dr. Janezu
Brestu za pomoč in vodenje pri opravljanju
diplomskega dela. Prav tako se zahvaljujem
somentorju asist. dr. Alešu Zamudi.
Posebna zahvala velja staršem, ki so mi omogočili
študij.
IV
SISTEM ZA UPRAVLJANJE VSEBIN MEDIAWIKI
Ključne besede: MediaWiki, Wikipedija, sistem za upravljanje vsebin, CMS, PHP,
MySQL, Apache, LaTeX, BibTeX
UDK: 004.65(043.2)
Povzetek
V diplomskem delu predstavljamo sistem za upravljanje vsebin MediaWiki. V teoretičnem
delu se najprej spoznamo s sistemom MediaWiki, njegovimi lastnostmi in arhitekturo.
Spoznamo jezik wiki in dodatek z razpoznavalnimi funkcijami. V nadaljevanju spozamo
LaTeX in BibTeX, podamo nekaj primerov in prikažemo njuno delovanje. V praktičnem
delu opišemo naš dodatek k sistemu MediaWiki za pretvorbo citatov iz oblike MediaWiki v
obliko BibTeX in vse uporabljene tehnologije ter podamo nekaj primerov kode. Sledi
prikaz rezultatov praktičnega dela diplomskega dela in sklep.
V
MEDIAWIKI CONTENT MANAGEMENT SYSTEM
Key words: MediaWiki, Wikipedia, Content Management System, CMS, PHP, MySQL,
Apache, LaTeX, BibTeX
UDK: 004.65(043.2)
Abstract
In this diploma work we study MediaWiki content management system. Theoretical part of
the diploma covers the basics of MediaWiki CMS, its properties, and architecture. We
describe wiki markup language of the MediaWiki CMS and present the MediaWiki
templates and extension Parser functions. After that we describe LaTeX and BibTeX and
give some examples of their use. In the practical part of the diploma work we describe our
extension, which converts a MediaWiki styled citation into a BibTeX styled citation format.
We talk about the technologies used and give a couple of code examples. Then we describe
the results of our work, and convey conclusions.
VI
VSEBINA
1 UVOD ........................................................................................................................... 1
2 SORODNA DELA ....................................................................................................... 2
2.1 MEDIAWIKI NA HETEROGENEM RAČUNALNIŠKEM SISTEMU ................................... 2
2.1.1 Spletni strežnik Apache ...................................................................................... 3
2.1.2 Porazdelitev obremenitve pri gručenju ............................................................. 3
2.2 ARHITEKTURA MEDIAWIKI .................................................................................... 4
2.2.1 Osnove programske arhitekture MediaWiki ...................................................... 4
2.2.2 Podatkovna baza v MediaWiki .......................................................................... 5
2.2.3 Spletne zahteve in predpomnjenje v MediaWiki ................................................ 6
2.2.4 Nalaganje virov v MediaWiki ............................................................................ 9
2.2.5 Večjezičnost ....................................................................................................... 9
2.3 JEZIK WIKI ............................................................................................................ 10
2.3.1 Povezave .......................................................................................................... 12
2.3.2 Predloge v MediaWiki ..................................................................................... 13
2.3.3 Magične besede in razpoznavalne funkcije ..................................................... 14
2.4 LATEX IN BIBTEX ............................................................................................... 17
3 DODATEK ZA GENERIRANJE CITATOV V ZAPISU BIBTEX ..................... 20
3.1 PREDLOGA ............................................................................................................ 20
3.2 POMOŽNA FUNKCIJA V JAVASCRIPT ..................................................................... 21
3.3 FUNKCIJA PHP ..................................................................................................... 22
3.4 ZAPIS BIBTEX VNOSA MEDIAWIKI IZ NAŠE PREDLOGE ........................................ 23
3.5 IMPLEMENTACIJA DODATKA ZA MEDIAWIKI 1.15.1. ............................................ 23
4 REZULTATI .............................................................................................................. 25
4.1 NAMESTITEV ........................................................................................................ 25
4.2 DELOVANJE DODATKA ZA PRIKAZ BESEDILA V OBLIKI BIBTEX ............................ 27
5 SKLEP ........................................................................................................................ 30
VII
UPORABLJENE KRATICE IN OZNAKE
CMS - Sistem za upravljanje vsebin (angl. Content Management System)
CSS - angl. Cascading Style Sheets
DNS - angl. Domain Name System
IP - Internetni protokol (angl. Internet protocol)
LAMP - Nabor programske opreme (Linux, Apache, MySQL, PHP)
PHP - angl. Hypertext Preprocessor
(X)HTML - angl. (Extensible) HyperText Markup Language
BibTeX - Programska oprema za upravljanje seznama referenc
LaTeX - Označevalni jezik in sistem za pripravljanje dokumentov
MySQL - Odprtokodna implementacija relacijske podatkovne baze
Sistem za upravljanje vsebin MediaWiki Stran 1
1 UVOD
Internet je dandanes eden večjih, če ne največji, vir informacij [5]. Z namenom širjenja
znanja je bila leta 2001 ustvarjena največja internetna enciklopedija – Wikipedija [2].
Wikipedijo mesečno obišče 400 milijonov uporabnikov in vsebuje več kot 21 milijonov
člankov v 280 različnih jezikih [4]. V to zakladnico znanja lahko dodaja čisto vsak
uporabnik Interneta, saj imajo pravice za dodajanje prispevkov (člankov) vsi uporabniki
spletne strani, večina prispevkov je odprtih tudi za anonimno urejanje (beleži se naslov IP).
Uporabe sistema se lahko hitro naučimo in je dokaj preprost za uporabo [18]. Wikipedijo
poganja sistem za upravljanje vsebin imenovan MediaWiki. MediaWiki je bil primarno
razvit za uporabo pri projektu Wikipedija, a je s časom postal vedno bolj prijazen za
uporabo tudi pri zunanjih uporabnikih, s čimer se je razvila tudi močna razvijalska
skupnost. MediaWiki je prosto dostopna programska oprema, ki določa, da lahko vsakdo
postavi svoj portal wiki, brez da bi moral plačati licenco za uporabo programske opreme.
Namen diplomskega dela je seznanitev s sistemom MediaWiki, spoznati, kako lahko
postavimo svoj wiki, kako sistem deluje ter, kako v sistem dodamo novo funkcionalnost.
Spoznali bomo tudi programsko opremo za urejanje referenc BibTeX. Podamo še opis
jezika wiki ter BibTeX.
V nadaljevanju v drugem poglavju opišemo, kaj je sistem za upravljanje vsebin in katere
sorodne sisteme še poznamo, kako namestimo sistem MediaWiki, opišemo gručenje in
arhitekturo sistema MediaWiki ter razloge za takšno arhitekturo. V nadaljevanju se
posvetimo jeziku wiki in razpoznavalnim funkcijam ter na koncu poglavja opišemo še
LaTeX in BibTeX. V naslednjem poglavju predstavimo praktični del diplomskega dela, in
sicer generiranje BibTeX zapisa citata iz predloge. V četrtem poglavju prikažemo, kako
naš dodatek deluje na sistemu MediaWiki, ki smo ga postavili za namene diplomske
naloge. V zaključnem poglavju podamo sklep, nato je navedena še literatura.
Sistem za upravljanje vsebin MediaWiki Stran 2
2 SORODNA DELA
Sistem za upravljanje vsebin (angl. Content Management System – CMS), še natančneje
spletni sistem za upravljanje vsebin (angl. Web Content Management System - WCMS) je
sistem, ki uredniku spletne strani omogoča urejanje vsebin preko spletnega vmesnika.
Sistemi CMS so dandanes zelo priljubljeni med naročniki spletnih strani, saj lahko
naročnik sam ureja in posodablja vsebino spletišča brez pomoči osebe ali podjetja, ki je
spletišče izdelalo. Tako urednik upravlja z vsebino spletne strani, ne da bi napisal kakšno
vrstico kode.
Obstaja veliko sistemov za urejanje vsebin z različnimi funkcionalnostmi [30]. En najbolj
razširjenih sistemov CMS je odprtokodni sistem Joomla!, med sisteme za upravljanje
vsebin pa uvrščamo tudi sisteme za spletne dnevnike (npr. WordPress) [1] in sisteme wiki,
kot na primer MediaWiki, ki ga tudi obravnavamo v tej diplomski nalogi. Sistem
MediaWiki je na voljo pod splošnim licenčnim dovoljenjem GNU (angl. General Public
Licence - GNU) [2], ki dovoljuje zastonjsko razmnoževanje in urejanje kode, zaradi česar
spada pod prosto dostopno programsko opremo.
2.1 MediaWiki na heterogenem računalniškem sistemu
Računalniška gruča je skupina računalnikov, ki so med sabo povezani tako, da na zunaj
delujejo kot en sistem [3, 26]. Eden izmed računalnikov v gruči lahko deluje kot glavni,
ostali računalniki pa so lahko le vozlišča, ki opravljajo delo. Tako se delo porazdeli med
vozlišča in zaključi hitreje, kot če bi vso delo upravljal en računalnik. Računalniške gruče
in heterogeno računanje [3] sta postala še bolj zanimiva v zadnjih letih, ker za razliko od
simetričnih računalniških sistemov ponujata večjo zmogljivost glede na porabljeno
energijo [3].
Sistem za upravljanje vsebin MediaWiki Stran 3
Spletne strani, kot je Wikipedija, potrebujejo takšne gruče strežnikov, da lahko postrežejo
vse zahteve. V nadaljevanju bomo na kratko opisali, kaj, poleg računalnikov povezanih v
omrežje, še potrebujemo za postavitev takšne gruče.
2.1.1 Spletni strežnik Apache
Apache je najpogosteje uporabljen spletni strežnik. Namestimo ga lahko na platformi
Linux, kar je tudi najbolj pogosto [27]. Spletni strežniki Apache so pogosto uporabljeni
skupaj s podatkovno bazo MySQL in jezikom PHP. Ta nabor lahko skupno označimo kot
LAMP (Linux, Apache, MySQL, PHP) [27].
2.1.2 Porazdelitev obremenitve pri gručenju
Porazdelitev obremenitve (angl. Load balancing) pri gručenju rešuje problem deljenja dela
med računalniki v gruči [28]. Opišimo t.i. Round robin DNS oz. »eden za drugim«
porazdelitev obremenitve.
Najenostavnejša implementacija Round robin DNS deluje tako, da sistem na zahtevo DNS
vrne seznam naslovov IP in ne le enega [29]. Kateri izmed naslovov IP na seznamu bo
izbran, se določi s postopkom »eden za drugim«. Kot primer podajmo podjetje, katerega
spletna domena kaže na štiri različne strežnike, na katerih so identične spletne strani. Ko
prvi uporabnik želi dostopati do spletne strani, bo preusmerjen na naslov IP prvega
strežnika. Naslednji uporabnik bo prejel naslov IP drugega strežnika itn. Peti uporabnik bo
zopet prejel IP naslov prvega strežnika.
Tak način porazdelitve ima svoje slabosti. Na primer ob izpadu enega od strežnikov bo IP
naslov tega še vedno posredovan, vedno ko bo ta na vrsti. Prav tako ne upošteva
uporabnikove lokacije, obremenitev strežnikov in ostalih pomembnih dejavnikov [29].
Sistem za upravljanje vsebin MediaWiki Stran 4
2.2 Arhitektura MediaWiki
Čeprav imajo razvijalci arhitekture MediaWiki v mislih sistem, ki je zanimiv tudi za
zunanje uporabnike, je glavni cilj za to arhitekturo vedno programska oprema za
Wikipedijo, kar se pozna tudi v organizaciji in arhitekturi samega sistema [4].
Wikipedija je, s kar 400 milijoni različnih obiskovalcev vsak mesec, med desetimi najbolj
obiskanimi stranmi na svetu. A ker za fundacijo Wikipedije skrbi neprofitna organizacija,
ki se primarno financira preko donacij, je sistem, ki poganja to stran, zelo varčen glede
porabe (internetnih) sredstev [4].
Razvijalci so si s sistemom Wikipedije že na začetku zadali cilj izdelati prosto dostopno
platformo za širjenje znanja, ki bi jo urejala in dopolnjevala spletna skupnost [4]. Zato
MediaWiki v osnovni nastavitvi ne vključi raznih orodij in funkcij za nadzor, ki jih
privzeto omogočijo ostali sistemi CMS, kot na primer seznam dovoljenih dostopov (angl.
Access Control List - ACL), a vseeno vsebuje orodja za boj proti vandalizmu in neželenim
sporočilom (t.i. spamu).
Prosta dostopnost kode je privabila tudi močno skupnost zunanjih razvijalcev in
uporabnikov, ki zaupajo v MediaWiki CMS, saj vedo, da je sistem redno vzdrževan in
nadgrajevan, dokler je v uporabi na tako obiskani speletni strani, kot je Wikipedija.
MediaWiki je korak bližje zunanjim uporabnikom tudi s poenostavitvijo namestitve
sistema, ki se opravi preko brskalnika, za kar ni več potrebe po uporabi ukazne vrstice, kot
je to bilo potrebno prej, ko je bil namestitveni postopek prirejen le za Wikipedijo [4].
2.2.1 Osnove programske arhitekture MediaWiki
Leta 2001 so za programsko platformo sistema MediaWiki izbrali jezik PHP [4]. PHP
(Hypertext Preprocesor) [8] je skriptni jezik, ki se največ uporablja pri razvoju spletnih
strani in aplikacij.
Na začetku razvoja je bilo storjenih nekaj načrtovalskih napak, kot na primer slaba
poimenovanja razredov, a te so razumljive glede na takratno majhno število razvijalcev in
omejen čas razvoja. Nekateri se ne strinjajo z izbiro jezika PHP, saj naj bi se po njihovem
Sistem za upravljanje vsebin MediaWiki Stran 5
mnenju Java obnesla dosti bolje [4]. Po drugi strani je PHP zelo priljubljen, kar je olajšalo
iskanje novega kadra razvijalcev.
Kljub temu, da MediaWiki vsebuje nekaj nepopolne kode, je bil sistem z leti deležen
večjih izboljšav. A večina razvijalcev svoj čas raje posveča novitetam in popravke v
arhitekturi pušča za prihodnost, ko bodo res nujni [4].
Dandanes je varnost eden najpomembnejših dejavnikov pri zasnovi in vzpostavitvi spletnih
strani in aplikacij. Ker platforma MediaWiki služi za tako veliko spletišče, kot je
Wikipedija, je vsekakor dobro, da ima implementirane vse varnostne elemente, ki
preprečujejo zlorabe.
Tako MediaWiki implementira razrede za boj proti zlorabi spletnih obrazcev in spletnih
naslovov, na primer razred WebRequest, ki analizira argumente poslane preko naslova
URL ali metode POST in odstrani neželene znake, kot so t.i. čarobni narekovaji [4].
Napade z vstavljanjem kode (Cross-site scripting - XSS) po navadi prepreči z uporabo
funkcije htmlspecialchars() jezika PHP, uporablja pa tudi očiščevalec XHTML in
funkcije za preprečevanje napadov z vrivanjem stavkov SQL [4].
Z večino nastavitev sistem MediaWiki upravlja preko globalnih spremenljivk, katerih
privzete vrednosti so shranjene v datoteki DefaultSettings.php. Administrator
sistema jih lahko prepiše tako, da jim novo vrednost nastavi v datoteki
LocalSettings.php. Ker uporaba globalnih spremenljivk ni najboljša rešitev, se
definicija globalnih spremenljivk počasi spreminja v objekte v novejših različicah sistema
MediaWiki [4].
2.2.2 Podatkovna baza v MediaWiki
Mediawiki uporablja podatkovno bazo MySQL [6, 16]. MySQL je odprtokodna
podatkovna baza. Razvijalska skupnost je s svojimi implementacijami podprla tudi druge
podatkovne baze, na primer PostgreSQL, Oracle ter SQLite [4].
Trenutna implementacija zgradbe podatkovne baze vsebuje na desetine tabel, večina jih
vsebuje vsebino, na primer tabele page, revision, category in recentchanges,
podatke o uporabniku (user, user_groups) ipd. [4].
Sistem za upravljanje vsebin MediaWiki Stran 6
V svojem času obstoja je bil MediaWiki deležen več sprememb v obliki podatkovne baze.
Ena večjih sprememb je prišla z različico 1.5. Različica 1.4 je za shrambo vsebine
uporabljala dve pomembni tabeli, cur, za trenutno vsebino in metapodatke strani, in old,
za prejšnje različice strani. Ko je bila vsebina strani urejena, se je nova vsebina zapisala v
tabelo cur, stara vsebina pa se je iz tabele cur zapisala v tabelo old. Tako je prihajalo
do dolgih operacij pri, na primer spreminjanju naslova strani, saj se je moral naslov
spremeniti v vseh vnosih tabele old, kjer so bile shranjene stare različice vsebine. Prav
tako je bilo potrebno skopirati vsebino tabel cur in old v tabelo archive, ko smo želeli
določeno stran izbrisati [4].
Z različico 1.5 sta bili tabeli cur in old zamenjani s page (metapodatki strani),
revision (metapodatki za vse popravke, stare in nove) ter text (besedilna vsebina
vseh povpravkov; trenutnih, starih in izbrisanih). Sedaj, ko se stran uredi, metapodatkov
popravka ni potrebno kopirati med tabelami, zadosti je že vstavljanje nove vrstice in
spremenitev vrednosti kazalca page_latest. Prav tako metapodatki popravka ne
vsebujejo več naslova strani, ampak le številčni identifikator (id) strani, zaradi česar ni
več potrebe po spreminjanju naslova v vseh vnosih te strani [4].
2.2.3 Spletne zahteve in predpomnjenje v MediaWiki
2.2.3.1 Potek spletne zahteve
Glavna vstopna točka sistema MediaWiki je index.php, ki obdela večino zahtev,
procesiranih preko aplikacijskih strežnikov. Koda v datoteki index.php najprej opravi
preverjanje varnosti in napadov, nato naloži privzete nastavitve iz
includes/DefaultSettings.php in includes/Setup.php, določi
konfiguracijo ter uveljavi nastavitve, shranjene v LocalSettings.php. Po tem ustvari
objekta MediaWiki ($mediawiki) in Title ($wgTitle) objekta [4].
Stran index.php lahko prejme več različnih parametrov. Na primer, parameter action
ima privzeto vrednost view, kar nam stran odpre v načinu za branje, parameter edit
odpre članek z vmesnikom za urejanje, parameter submit omogoči predogled ali
Sistem za upravljanje vsebin MediaWiki Stran 7
shranjevanje strani, parameter histroy pokaže zgodovino te strani, parameter watch pa
članek doda na uporabnikov seznam spremljanih člankov [4].
Nato se kliče funkcija Mediawiki::performRequst(), ki obdela večino zahtev
URL, s čimer preveri napačne naslove, omejitve branja, preusmeritve ter določi, ali je
zahtevana navadna ali posebna stran (normal ali special page). Zahtevo za navadno stran
obdela funkcija Mediawiki::initilizeArticle(), zahtevo za posebno stran pa
funkcija SpecialPageFactory::executePath() [4].
2.2.3.2 Sestava ne-predpomnjene strani
Ko si želimo ogledati stran, ki je ni v predpomnilniku sistema, se ta naloži v naslednjem
vrstnem redu [4]:
1) Najprej se obdela jezik wiki, torej vso besedilo wiki, vse potrebne predloge in
razpoznavalne funkcije ter vrednosti vseh spremenljivk.
2) Nato se generira koda XHTML z referencami na datoteke CSS in JavaScipt, ki se
posreduje uporabniku. Vsebina te kode je odvisna od vsebine strani, torej besedila
wiki, povezav, uporabniškega imena, namenskega prostora ipd. Vsebino te kode
lahko vidimo, če v našem brskalniku kliknemo »ogled vira strani«.
3) Zadnji korak opravi brskalnik, ki prevede kodo XHTML ter prikaže spletno stran.
Sam izgled strani je odvisen od kode XHTML, CSS in JavaScript ter raznih
elementov, kot so slike in drugo.
2.2.3.3 Predpomnjenje
Uporaba na straneh Wikipedija je sistemu MediaWiki zadala glavni cilj – zmogljivost,
hkrati pa je predpomnilniška infrastruktura Wikipedije uvedla omejitve za sistem
MediaWiki. Rešitev za problem predpomnilniške infrastrukture so razvijalci našli v
fleksibilnosti sistema, ne da bi žrtvovali zmogljivost ali potrebe po predpomnjenju [4].
Primer te fleksibilnosti je prikaz naslova IP neprijavljenega uporabnika v zgornjem desnem
delu strani. Spremenljivka $wgShowIPinHeader omogoča administratorju sistema, da
Sistem za upravljanje vsebin MediaWiki Stran 8
to funkcijo izklopi in tako naredi stran enako za vse neprijavljene uporabnike, zaradi česar
se lahko vsem posreduje čisto enaka različica strani [4].
Na straneh Wikipedije večino zahtev obdelajo povratni posredniški strežniki (angl. reverse
caching proxies) in tako nikoli ne prispejo do aplikacijskega strežnika. Ti vsebujejo
statične različice celotnih upodobljenih strani za neprijavljene uporabnike, ki želijo samo
prebrati neko informacijo. Za prijavljene uporabnike, ki jim posredniki ne morejo postreči
s stranjo, pošljejo zahtevo na spletni strežnik. MediaWiki privzeto podpira te posrednike in
s tem integrira predpomnilniško plast tako, da jih obvesti, naj se iz predpomnilnika izbriše
stran, ko je ta bila spremenjena [4].
Druga stopnja predpomnjenja se odvija, ko MediaWiki sestavi stran iz več predmetov, ki
so vsak po sebi lahko v predpomnilniku, kot na primer uporabniški vmesnik (meni,
besedilo vmesnika, stranski meni) ali vsebina razčlenjenja besedila wiki. Sistem hranjenja
predmetov v predpomnilniku je pomemben za preprečevanje ponovnih nalaganj dolgih in
kompleksnih strani. V MediaWiki je bil implementiran že leta 2003 z različico 1.1 [4].
Od različice 1.16 naprej MediaWiki uporablja namenski predpomnilnik predmetov za
lokalizirano besedilo vmesnika. To funkcionalnost so dodali potem, ko so razvijalci
opazili, da je večina predmetov v predpomnilniku le besedilo vmesnika v jeziku
uporabnika. Sistem je osnovan na hitro pridobljenih sporočilih iz nespremenljive
podatkovne baze (angl. constant database - CDB) [4].
Zadnja plast predpomnjenja je sestavljena iz predpomnjene prevedene kode PHP (angl.
opcode cache), ki se uporablja za pohitritev aplikacij PHP. Ker je prevajanje kode lahko
zamuden proces, lahko za pohitritev uporabimo pospeševalnik PHP, ki hrani prevedeno
kodo in jo izvede takoj brez prevajanja. MediaWiki podpira večino pospeševalnikov, kot
na primer APC, PHP accelerator ter eAccelerator [4].
Zaradi zahtev strani Wikipedija, MediaWiki podpira opisano večplastno porazdelitveno
predpomnilniško arhitekturo, prav tako pa podpira tudi ločene nastavitve za manjše strani,
ki ne potrebujejo zahtevne arhitekture. Kot primer podajmo poenostavljen sistem
predpomnjenja, ki hrani celotne renderirane strani, podobno kot predpomnilniški
posredniki [4].
Sistem za upravljanje vsebin MediaWiki Stran 9
2.2.4 Nalaganje virov v MediaWiki
Dandanes veliko vlogo pri uspehu spletnih strani igra že sam izgled in občutek, ki ga
uporabnik dobi ob njihovem obisku in tega se zavedajo tudi razvijalci pri MediaWiki. Tako
sistem s pomočjo JavaScript postaja vedno bolj odziven in interaktiven.
Za optimizacijo prenosa elementov JavaScript in CSS so razvili modul
ResourceLoader [4] (nalagalec virov), ki elemente JavaScript in CSS nalaga, ko so
potrebni in se tako izogne nalaganju neuporabljenih funkcionalnosti (na primer v starejših
brskalnikih, ki teh funkcionalnosti ne podpirajo) ter tako zmanjša nalagalni čas, kar
izboljša uporabniško izkušnjo.
2.2.5 Večjezičnost
Največja ovira pri transnacionalnem širjenju znanja je jezikovna prepreka. Da lahko znanje
učinkovito širimo med čim večje število ljudi, moramo zagotoviti večjezičnost in podpreti
čim več jezikov.
Wikipedija je na voljo v več kot 280 jezikih, od tega je vsebine v angleškem jeziku manj
kot 20% [4]. Ker vsebina na Wikipediji obstaja v tako velikem številu jezikov, je
pomembno, da ne ponuja le vsebine v maternem jeziku uporabnika, ampak tudi vmesnik in
razna orodja, da lahko vsak uporabnik dodaja in ureja vsebino.
Sistem MediaWiki je trenutno lokaliziran v več kot 350 jezikov, tudi v ne-latinske in
desno-leve jezike (angl. right-to-left - RTL). Vsebina in vmesnik lahko imata različen tako
jezik kot smer pisave [4].
Od leta 2005 naprej MediaWiki podpira samo UTF-8 kodirane znake [4]. Posebne znake,
ki jih ne najdemo na tipkovnici, lahko vnesemo s pomočjo orodja MediaWiki Edittools,
kjer znak izberemo iz seznama.
Prihodnje izboljšave se osredotočajo predvsem na boljšo podporo desno-levi pisavi in
dvosmerni pisavi (levo-desno in desno-levo besedilo na isti strani) ter t.i. spletnim pisavam
(WebFonts) [19].
Dodatek WebFonts omogoča uporabo pisav, ki jih uporabnik nima nameščenih na svojem
računalniku. Če uporabnik med urejanjem članka izbere pisavo, ki je na svojem
Sistem za upravljanje vsebin MediaWiki Stran 10
računalniku nima, se le ta prenese s strežnika MediaWiki. Pisava se prenese le enkrat, ob
naknadni uporabi je pisava naložena že lokalno [19].
2.3 Jezik wiki
Jezik wiki (angl. Wiki markup) je preprost označevalni jezik, ki se uporablja za zapis strani
na spletnih straneh wiki. Jezik je poenostavljena različica jezika HTML in uporabniku
olajša oblikovanje strani in vsebine. Ob zahtevi strani MediaWiki pretvori besedilo wiki v
HTML, ki je posredovan brskalniku. MediaWiki za besedilo wiki uporablja naslednje
oblike:
osnovno oblikovanje besedila (opis vidimo v tabeli 1),
Tabela 1: Jezik wiki za oblikovanje besedila [7].
Opis Besedilo wiki Končni izgled
Poševna pisava – italic ''moje besedilo'' moje besedilo
Poudarjena pisava – bold '''moje besedilo''' moje besedilo
Poševna in poudarjena
pisava '''''moje besedilo''''' moje besedilo
Pisava brez oblikovanja
wiki
<nowiki>moje
''besedilo''</nowiki> moje ''besedilo''
sekcije in seznami (opis vidimo v tabeli 2),
Tabela 2: Jezik wiki - oblikovanje sekcij in seznamov [7].
Opis Besedilo wiki Končni izgled
Naslovi
== Naslov stopnje 2 ==
=== Naslov stopnje 3 ===
==== Naslov stopnje 4 ====
===== Naslov stopnje 5 =====
====== Naslov stopnje 6 ======
Naslov stopnje 2
Naslov stopnje 3
Naslov stopnje 4
Naslov stopnje 5
Naslov stopnje 6
Sistem za upravljanje vsebin MediaWiki Stran 11
Horizontalna črta
besedilo nad
----
besedilo pod
besedilo nad
besedilo pod
Neoštevilčen seznam
*To je prvi nivo.
*Vsaka vrstica se mora
začeti z (*).
**To je drugi nivo.
***In to tretji.
To je prvi nivo.
Vsaka vrstica se mora
začeti z (*).
To je drugi nivo.
In to tretji.
Oštevilčen seznam
#Prvi nivo.
#Vsaka vrstica se začne
z (#).
##Več znakov
###nam da globlje
###nivoje.
1. Prvi nivo.
2. Vsaka vrstica se začne z
(# ).
1. Več znakov
1. nam da globlje
2. nivoje.
alineje
:enojna alineja
::dvojna alineja
:::::večkratna alineja
enojna alineja
dvojna alineja
večkratna alineja
odstavki. Ker MediaWiki ignorira enojne presledke med vrsticami, moramo za nov
odstavek pustiti prazno vrstico, prelom vrstice pa lahko tudi vsilimo s HTML oznako
<br /> [7],
HTML oznake in simboli (opis vidimo v tabeli 3).
Tabela 3: Jezik wiki - oznake in simboli [7].
Opis Besedilo wiki Končni izgled
Podčrtano besedilo <u>moje besedilo</u> moje besedilo
Prečrtano besedilo <s>moje besedilo</s> moje besedilo
Izvorna koda <code>moja koda</code> moja koda
Komentar1 <!-- moj komentar -->
1 Komentarji so vidni samo med urejanjem strani.
Sistem za upravljanje vsebin MediaWiki Stran 12
Poljubno oblikovano
besedilo
<pre style=''color:red''>moje
besedilo</pre> moje besedilo
V besedilo lahko dodamo posebne znake, tako na primer s kodo © dobimo znak ©,
s kodo α pa α. Nabor vseh znakov in pripadajočih kod najdemo v [7].
2.3.1 Povezave
2.3.1.1 Notranje povezave
Notranja povezava je povezava na drugo stran na našem portalu wiki. Notranjo povezavo
označimo z dvojnim oglatim oklepajem. Pri načinu prikaza povezave pa imamo na voljo
več možnosti.
Osnovni način je [[druga_stran]], ki nam kot povezavo prikaže ime strani, na katero
kaže povezava, v tem primeru druga_stran. Če želimo namesto imena strani prikazati
poljubno besedilo, povezavo označimo na naslednji način [[druga_stran | naša
povezava drugače]]. V tem primeru se namesto imena strani druga_stran
pokaže niz naša povezava drugače.
2.3.1.2 Zunanje povezave
Zunanje povezave so povezave, ki kažejo na druge spletne strani. Označimo jih z enojnim
oglatim oklepajem. Tako kot pri notranjih povezavah lahko tudi pri zunanjih uporabimo
dva načina zapisa, prikaz spletnega naslova ali poljubnega niza znakov, ki ga določimo v
povezavi.
Primer:
[http://www.feri.uni-mb.si] nam vrne http://www.feri.uni-mb.si
[http://www.feri.uni-mb.si FERI] nam vrne FERI
Sistem za upravljanje vsebin MediaWiki Stran 13
2.3.2 Predloge v MediaWiki
Predloge so strani wiki, ki so namenjene vključevanju v druge strani. Ime predlog po
dogovoru vsebuje predpono Template:, kar stran doda v namenski prostor predlog [9].
Predlogo vključimo v druge strani z ukazom {{ime_predloge}}. Predlogo lahko
uporabimo na vseh željenih straneh, njihovo urejanje pa spremeni vsebino na vseh straneh,
kjer smo predlogo vključili. Enostaven prikaz delovanja predlog vidimo spodaj:
1) Najprej ustvarimo predlogo »Template:Pozdrav« z vsebino Dobrodošli
na naši strani!
2) Zdaj lahko na katerikoli strani dodamo {{Pozdrav}} in na to mesto se bo
vključila predloga Template:Pozdrav.
3) Tako Pozdravljeni!{{Pozdrav}} na strani prikaže Pozdravljeni!
Dobrodošli na naši strani!
2.3.2.1 Parametri predlog MediaWiki
Za večjo fleksibilnost in uporabnost predlog na različnih straneh lahko predlogi določimo
parametre, ki jih nato podamo pri vključitvi v stran. Tako ista predloga lahko vrača
različne rezultate. Parameter predloge zapišemo kot {{{parameter}}}:
1) Na primer, da želimo izdelati predlogo, ki bo avtorju strani omogočala, da v stran
doda podpis. Želimo torej, da naša predloga na stran doda besedilo To stran je
napisal Nejc.
2) Tako ustvarimo predlogo Template:Podpis, ki izgleda tako: To stran je
napisal {{{1}}}.
3) Nato pri vključitvi strani predlogi dodamo parameter {{Podpis|Nejc}} kar na
stran vključi željen niz To stran je napisal Nejc.
Anonimni parametri predlog MediaWiki
Anonimni parametri so parametri, ki jim ne podamo imena ali vrstnega števila in jih
predloga prebere in zapiše po takšnem vrstnem redu, kot jih prejme. Torej vključitev
Sistem za upravljanje vsebin MediaWiki Stran 14
{{moja_predloga|prvi|drugi|tretji}} na stran vključi predlogo
moja_predloga s prvim parametrom prvi, drugim parametrom drugi in tretjim
parametrom tretji.
Ista predloga s parametri {{moja_predloga|tretji|drugi|prvi}} prejme kot
prvi argument tretji, drugi argument drugi ter tretji argument prvi. Pri uporabi
anonimnih parametrov moramo zato obvezno paziti na vrstni red, po katerem jih podamo.
Oštevilčeni parametri predlog MediaWiki
Da predlogi podamo oštevilčene parametre, moramo tem pri klicu podati vrstno število. Pri
takšnem načinu podajanja parametrov vrstni red ni pomemben.
Na primer: {{moja_predloga|3=tretji|2=drugi|1=prvi}}, kliče predlogo
moja_predloga s prvim parametrom prvi in drugim parametrom drugi ter tretjim
parametrom tretji.
Poimenovani parametri predlog MediaWiki
Tretji način podajanja parametrov je po imenu. Za ta namen moramo predelati predlogo
Podpis iz odseka 2.3.2.1.
Primer: To stran je napisal {{{avtor}}}, dne {{{dan}}} ob
{{{cas}}}.
V tem primeru predlogo vključimo na naslednji način:
{{Podpis|avtor=Nejc|dan=1.1.2012|cas=12:00}}
Predloga tako vrne niz To stran je napisal Nejc, dne 1.1.2012 ob
12:00.
Takšen način podajanja parametrov ni le neodvisen od vrstnega reda parametrov, ampak
naredi predlogo lažje razumljivo in berljivo.
2.3.3 Magične besede in razpoznavalne funkcije
Magične besede (angl. Magic words) so besedilni nizi, ki jih MediaWiki poveže s
funkcijami, ki vračajo različne vrednosti, kot na primer čas, datum, podatke o strani in
Sistem za upravljanje vsebin MediaWiki Stran 15
drugo [10]. Primer magične besede je {{CURRENTYEAR}}, ki vrne trenutno leto, torej
2012.
Razpoznavalne funkcije (angl. Parser functions) omogočijo uporabo logičnih in drugih
funkcij pri dodajanju strani in predlog. Če naš paket MediaWiki razpoznavalnih funkcij
nima privzeto omogočenih, jih lahko dodamo. S strani MediaWiki prenesemo dodatek in
ga shranimo v mapo /extensions, nato pa še v datoteko LocalSettings.php
dodamo stavek require_once("$IP/extensions/ParserFunctions/
ParserFunctions.php");.
Na voljo imamo enajst privzetih razpoznavalnih funkcij. Opisali bomo #expr, #if in
#ifeq. Ostale funkcije so še #iferror, #ifexpr, #ifexist, #rel2abs,
#switch, #time, #timel in #titleparts. Dokumentacija za vse funkcije je
dostopna v [11]. Sledi opis nekaterih izmed teh funkcij.
Funkcija #expr
Funkcija #expr vrne rezultat matematičnega izraza, ki ga prejme kot argument [11].
Uporabimo lahko vse osnovne računske operacije, logične operaterje, kotne funkcije ter
tudi števili pi in e.
Tabela 4: Primer uporabe razpoznavalne funkcije #expr.
Primer Rezultat
{{#expr: 5 + 2}} 7
{{#expr: pi}} 3.1415926535898
Funkcija #if
Funkcija #if preveri, če prvi parameter obstaja oziroma ni prazen in vrne vrednost, ki je
določena kot true ali false.
Oblika: {{#if: testni niz | vrednost true | vrednost false }}
Sistem za upravljanje vsebin MediaWiki Stran 16
Tabela 5: Primer uporabe razpoznavalne funkcije #if.
Primer Rezultat
{{#if: moj niz | obstaja! | niz ni
določen!}}
obstaja!
{{#if: | obstaja! | niz ni določen!}} niz ni določen!
{{#if: 1==2 | true | false}} true
Funkcija #ifeq
Funkcija #ifeq preveri dva besedilna niza in določi, če sta enaka ter vrne vrednost, ki je
določena za true oziroma false.
Oblika: {{#ifeq: niz 1 | niz 2 | niza enaka | niza različna }}
Tabela 6: Primer uporabe razpoznavalne funkcije #ifeq.
Primer Rezultat
{{#ifeq: 01 | 1 | enako | ni enako}}1 enako
{{#ifeq: moj | niz | enako | ni enako}} ni enako
{{#ifeq: Niz | niz | enako | ni enako}}2 ni enako
Pri uporabi razpoznavalnih funkcij v predlogah lahko uporabimo simbol navpične črte (|)
za določitev praznega besedilnega niza kot privzete vrednosti argumenta [20].
Tabela 7: Primer uporabe razpoznavalnih funkcij v predlogah.
Primer uporabe Stanje parametra Primer A:
{{#if:{{{1}}}|
Primer B:
{{#if:
{{{1|}}} |
{{predloga}} Nedefiniran, neuporabljen true false
1 Če sta niza številčna, se primerja številčna vrednost.
2 Če sta niza besedilna, se pri primerjanju razlikujejo male in velike črke.
Sistem za upravljanje vsebin MediaWiki Stran 17
{{predloga|}}
{{predloga|1=}}
Definiran ampak
prazen ali NULL
false false
{{predloga|niz}},
{{predloga|1=niz}}
Definiran in ne
prazen ali NULL
true true
2.4 LaTeX in BibTeX
LaTeX je sistem za stavljenje dokumentov. V začetku osemdesetih let prejšnjega stoletja
ga je razvil Leslie Lamport [21]. Prva širše dostopna različica (2.09) se je pojavila leta
1985 [23]. LaTeX je bil ustvarjen z idejo, da naj se avtorji posvetijo vsebini in ne toliko
izgledu besedila. Še posebej priljubljen je v akademskih in znanstvenih skupnostih [23].
Za ustvarjenje vhodne datoteke LaTeX (.tex) lahko uporabimo večino besedilnih
urejevalnikov, čeprav je bilo nekaj urejevalnikov ustvarjenih posebej za LaTeX [21].
Omenimo tudi XeTeX. XeTeX je pogon za stavljenje, ki uporablja Unicode [33] in podpira
tehnologije pisav, kot na primer OpenType [34]. Vhodna datoteka je privzeto v kodiranju
UTF-8, uporabimo pa lahko vse pisave, ki jih imamo nameščene na našem računalniku.
Razvil ga je Jonathan Kew, aprila 2004 je bila izdana prva različica, prvotno samo za
platformo Mac OS X. S časom so podprli tudi platformi Linux in Windows [32].
Spodaj vidimo primer vhodne datoteke LaTeX (slika 2.1) in izhoda (slika 2.2).
BibTeX je programska oprema za oblikovanje seznama referenc. Da lahko uporabimo
BibTeX z našo vhodno datoteko LaTeX, moramo dodati ukaz \bibliography.
Argumenti ukaza so datoteke .bib, ki vsebujejo zbirko podatkov [23]. Z BibTeXom z
lahkoto dosledno navajamo vire, tako da ločimo bibliografske informacije od oblike
njihove stilske interpretacije, podobno kot ločimo vsebino in obliko v LaTeXu [22].
BibTeX sta ustvarila Oren Patashnik in Leslie Lamport leta 1985. Trenutna različica je
0.99d, ki je bila izdana marca 2010, predhodnica, 0.98f, se je obdržala kar 22 let [22].
BibTeX uporablja oblikovno-neodvisno besedilno obliko za seznam bibliografskih objav,
kot na primer člankov, knjig, tez ipd. Vsak bibliografski vnos pa vsebuje nekatere
podskupine standardnih podatkov, na primer:
Address: naslov izdajatelja (po navadi se zapiše le mesto),
Author: ime avtorja; če je avtorjev več, jih ločimo z besedo and in
Booktitle: naslov knjige.
Sistem za upravljanje vsebin MediaWiki Stran 18
\documentclass[12pt]{article}
\usepackage{amsmath}
\title{\LaTeX}
\date{}
\begin{document}
\maketitle
\LaTeX{} is a document preparation system for the \TeX{}
typesetting program. It offers programmable desktop publishing
features and extensive facilities for automating most aspects of
typesetting and desktop publishing, including numbering and
cross-referencing, tables and figures, page layout,
bibliographies,
and much more. \LaTeX{} was originally written in 1984 by Leslie
Lamport and has become the dominant method for using \TeX; few
people write in plain \TeX{} anymore. The current version is
\LaTeXe.
% This is a comment; it will not be shown in the final output.
% The following shows a little of the typesetting power of
LaTeX:
\begin{align}
E &= mc^2 \\
m &= \frac{m_0}{\sqrt{1-\frac{v^2}{c^2}}}
\end{align}
\end{document}
Slika 2.1: Primer vhodne datoteke [21].
Slika 2.2: Izhod zgornje vhodne datoteke [21].
Sistem za upravljanje vsebin MediaWiki Stran 19
\bibliography{prvi_vir,drugi_vir}
Slika 2.3: Primer ukaza \bibliography, ki kot argumenta prejme datoteki
prvi_vir.bib in drugi_vir.bib.
Vnosi v datoteko BibTeX so razdeljeni po tipih. Opisali bomo samo dva tipa, in sicer
article in inproceedings. Vse tipe najdemo v [24] in [22].
Vnos Article označuje:
članek iz časopisa ali revije,
obvezna polja: author, title, journal, year in
neobvezna polja: volume, number, pages, month, note, key.
Vnos Inproceedings označuje:
konferenčni članek,
obvezna polja: author, title, booktitle, year in
neobvezna polja: editor, volume/number, series, pages, address,
month, organization, publisher, note, key.
@Article{ZamudaASC2011,
author = "{A.~Zamuda and J.~Brest and B.~Bo\v{s}kovi\'{c} and
V.~\v{Z}umer}",
title = "{Differential Evolution for Parameterized Procedural
Woody Plant Models Reconstruction}",
journal = "Applied Soft Computing",
year = "2011",
type = "Paper",
volume = "11",
number = "8",
pages = "4904-4912",
note = "{DOI}: 10.1016/j.asoc.2011.06.009"
}
Slika 2.4: Primer BibTeX vnosa [25].
Sistem za upravljanje vsebin MediaWiki Stran 20
3 DODATEK ZA GENERIRANJE CITATOV V ZAPISU BIBTEX
V sklopu praktičnega dela diplomskega dela želimo sistemu MediaWiki dodati novo
funkcionalnost, generiranje zapisa BibTeX iz parametrov predloge. Za osnovo vzamemo
predlogo, ki je v uporabi na straneh Laboratorija za računalniške arhitekture in jezike [12]
in jo razširimo s povezavo, ki ob kliku generira zapis BibTeX. Sam dodatek je sestavljen iz
PHP dela in JavaScript dela ter razširjene predloge MediaWiki. Dodatek nato preizkusimo
na lokalnem portalu wiki, ki smo ga postavili v sklopu diplomskega dela.
3.1 Predloga
Kot smo že omenili, smo za osnovo vzeli predlogo, ki je v uporabi na straneh Laboratorija
za računalniške arhitekture in jezike [12]. Predloga se uporablja za citiranje del članov
laboratorija. Originalno predlogo si lahko ogledamo na sliki 3.1.
<includeonly><cite style="font-style:normal">
({{#if:{{{url|}}}
| [{{{url}}}'''pdf'''].
| [[{{{media}}}|'''pdf'''].].}}) {{#if:{{{issue|}}}
| {{{authors}}} [{{{url}}} '''{{{title}}}''']. ''{{{journal}}}'',
{{{year}}}{{#ifeq:{{{volume|}}}|??
||, letn. {{{volume}}}}}{{#ifeq:{{{issue|}}}|??
||, št. {{{issue}}}}}{{#ifeq:{{{pages|}}}|??
||, str. {{{pages}}}}}. {{#if:{{{mycitations|}}}
|{{{mycitations}}}}}{{#if:{{{doi|}}}
| DOI [http://dx.doi.org/{{{doi}}} {{{doi}}}].
}}
| {{{authors}}}. {{#if:{{{url|}}}
| [{{{url}}} '''{{{title}}}'''].
| [[{{{media}}}|'''{{{title}}}'''].].
}} ''{{{journal}}}'', {{{year}}}, str. {{{pages}}}.
}}
</cite></includeonly><noinclude>
{{/doc}}
</noinclude>
Slika 3.1: Originalna predloga za citiranje del [12, 31].
Sistem za upravljanje vsebin MediaWiki Stran 21
Predlogo smo razširili z dvema pomembnima parametroma citetype in name ter
dvema elementoma HTML div. Prvi element div hrani povezavo do datoteke PHP,
kamor se pošljejo parametri za obdelavo, v drugi element div pa se zapiše izhod datoteke
PHP, torej naš citat v obliki BibTeX.
{{#if:{{{citetype|}}} | {{#if:{{{name|}}} | … | name not defined }} |
citetype not defined}}
Slika 3.2: Del predloge, kjer preverjamo, če sta parametra citetype in name bila
podana pri uporabi predloge.
<div class="bibtexlink" … > … </div>
<div id="{{#replace:{{{title}}}| |_|}}" class="bibtex"> </div>
Slika 3.3: Elementa div, ki smo ju dodali. Oba imata definiran razred (class), drugi
element div pa ima tudi definiran identifikator id, ki je edinstven za vsak citat, saj se
generira glede na naslov dela.
3.2 Pomožna funkcija v JavaScript
Za del dodatka v JavaScript smo uporabili JavaScript knjižnico jQuery [13], ki je v
MediaWiki privzeto dodana od različice 1.16 naprej [14]. Svojo kodo JavaScript lahko v
sistem MediaWiki dodamo preko posebne strani imenovane Common.js, ki jo najdemo
na našem lokalnem portalu wiki. Na našem lokalnem strežniku smo stran nasneli na
http://localhost:81/wiki/index.php/MediaWiki:Common.js.
Pri pisanju kode jQuery za sistem MediaWiki je potrebno paziti na predpono, saj
MediaWiki za jQuery kodo uporablja predpono $j namesto klasične $.
Naša funkcija JavaScript obdela klik na povezavo BibTeX. Najprej poišče izbran element
in njegove parametre, preko metode GET zahteva datoteko PHP, ki parametre obdela in
vrne niz v obliki BibTeX. Vrnjen niz se s funkcijo jQuery load()naloži v element div
kliknjenega citata. Psevdokod pomožne funkcije JavaScript vidimo na sliki 3.4.
Sistem za upravljanje vsebin MediaWiki Stran 22
nastavi var animate; // (true/false)
onClick(bibtexlink a)
linkID = parent.title;
id = ''#''+linkID;
pagelink = this.href;
if(id.html == empty)
id.load(pagelink);
else
vsebina že obstaja, preskoči nalaganje
if(animate)
id.toggle(slow) //prikaži vsebino z animacijo
else
id.toggle() //prikaži vsebino brez animacije
return false;
Slika 3.4: Psevdokod pomožne funkcije JavaScript.
var pageLink = $j(this).attr('href');
if($j(id).html()=="") {
$j(id).load(pageLink);
}
Slika 3.5: Del pomožne funkcije JavaScript, ki obdela klik na povezavo BibTeX.
3.3 Funkcija PHP
Zadnji del našega dodatka je funkcija PHP, ki vrne niz BibTeX glede na podane parametre.
Funkcija vse parametre prejme preko metode GET, izhod je izpis besedilnega niza, ki se
vključi v stran HTML. Funkcija PHP je shranjena v datoteki makeBibtex.php, ki smo
jo shranili v mapo /extensions/ v sistemu MediaWiki.
$outputHeader = "<pre>@".$citetype."{".$name;
$outputFoot = "<br />}</pre>";
$outputBody = $authors.$title…;
$output=$outputHeader.$outputBody.$outputFoot;
$output=str_replace("+"," ",$output);
echo $output;
Slika 3.6: Izsek kode iz datoteke PHP makeBibtex.php, ki vrne generiran niz
BibTeX.
Sistem za upravljanje vsebin MediaWiki Stran 23
3.4 Zapis BibTeX vnosa MediaWiki iz naše predloge
Pri generiranju zapisa BibTeX smo morali paziti na posebnosti BibTeXa. Ena od teh
posebnosti je zapis šumnikov. Strešico v BibTeXu zamenjata znaka \v, črko pa zapišemo
v zavite oklepaje, tako iz š dobimo \v{s}. Ker se v Sloveniji pojavljajo tudi imena in
priimki s črkami, ki jih praviloma ni v slovenski abecedi (npr. ć), smo podprli tudi te. Na
sliki 3.7 vidimo vse podprte šumnike v našem dodatku.
Slika 3.7 [15]: Prikaz podpore šumnikom v našem dodatku.
3.5 Implementacija dodatka za MediaWiki 1.15.1.
Ker naš dodatek implementira funkcionalnosti, ki so bile dodane z različico MediaWiki
1.16, smo se odločili podpreti tudi različice, ki teh funkcionalnosti še nimajo.
Implementirali smo svojo različico razpoznavalne funkcije {{#replace}}, ki smo jo
poimenovali {{#str_replace}}. Funkcija deluje podobno kot {{#replace}} s to
razliko, da lahko funkciji podamo le dva parametra, pri čemer funkcija zamenja prazne
znake v nizu (prvi argument) s podanim (drugi argument). Prav tako smo implementirali
pomožno funkcijo JavaScript brez uporabe knjižnice jQuery. Na sliki 3.8 vidimo vključitev
dodatka z razpoznavalno funkcijo {{#str_replace}}, slika 3.9 prikazuje izsek
pomožne funkcije JavaScript.
require_once( "$IP/extensions/string_replace.php" );
Slika 3.8: Vključitev razpoznavalne funkcije {{#str_replace}} v
LocalSettings.php.
Sistem za upravljanje vsebin MediaWiki Stran 24
var mainElement = document.getElementsByClassName('bibtexlink');
for(var i=0;i<mainElement.length;i++) {
var tmp = mainElement[i].getElementsByTagName('a');
tmp[0].onclick = function() {
var divID = this.parentNode.getAttribute('title');
var generatedLink = this.getAttribute('href');
if(document.getElementById(divID).innerHTML=="") {
load(divID,generatedLink);
}
if(document.getElementById(divID).style.display == "block") {
document.getElementById(divID).style.display = "none";
}
else {
document.getElementById(divID).style.display = "block";
}
return false;
};
}
Slika 3.9: Izsek pomožne funkcije JavaScript za različico MediaWiki 1.15.1.
Sistem za upravljanje vsebin MediaWiki Stran 25
4 REZULTATI
V sklopu diplomske naloge smo izdelali dodatek sistemu MediaWiki. Dodatek generira
zapis BibTeX glede na podane argumente v predlogi. Za osnovo smo vzeli predlogo, ki je
v uporabi na straneh Laboratorija za računalniške arhitekture in jezike [12] in jo razširili s
povezavo, ki ob kliku generira zapis BibTeX in ga prikaže v okvirju pod citatom.
4.1 Namestitev
Za opis postavitve operacijskega sistema Linux smo izbrali distribucijo Ubuntu server
10.04. Operacijski sistem najdemo na spletni strani www.ubuntu.com, kjer ga lahko tudi
brezplačno prenesemo na naš računalnik. V podrobnosti namestitve se ne bomo
poglabljali, saj je ta podrobno dokumentirana v [27].
Apache namestimo preko terminala z ukazom sudo apt-get install apache2.
Podroben opis konfiguracije Apache spletnega strežnika najdemo v [27].
MediaWiki je napisan v jeziku PHP in uporablja podatkovno bazo MySQL. Za lokalno
namestitev različice sistema Mediawiki smo uporabili programski paket XAMPP [17], ki
vsebuje Apache, PHP, MySQL in phpMyAdmin. Po namestitvi XAMPP paketa smo iz
spletne strani Mediawiki.org prenesli zadnjo različico sistema CMS (1.18.1.), ki ga
najdemo v sekciji »Download – GetMediawiki« (http://www.mediawiki.org/wiki/
Download). Po prenosu datoteke s končnico .tar.gz smo to odprli s programom Win-
Rar in razširili v mapo C:\xampp\htdocs\wiki. Nato smo zagnali XAMPP
control panel ter preko nadzorne plošče pognali Apache in MySql, ki ju potrebujemo
za naš sistem wiki. Za tem smo zagnali brskalnik ter vnesli naslov localhost/wiki.
Sistem nas je opozoril, da manjka datoteka LocalSettings.php in naj sledimo spodnji
Sistem za upravljanje vsebin MediaWiki Stran 26
povezavi za namestitev sistema. Po kliku na povezavo se je prikazala namestitvena stran
sistema MediaWiki, ki jo vidimo na sliki 4.1.
Slika 4.1: Začetna stran namestitve CMS sistema Mediawiki.
Čez celotno namestitev nas vodi t.i. čarovnik. Naša naloga je, da izberemo nastavitve in
vpišemo podatke našega strežnika ter podatkovne baze. Po uspešni namestitvi se pojavi
dialog za prenos datoteke, in sicer gre za datoteko LocalSettings.php, v kateri so
nastavitve našega sistema wiki in se generira po zaključku namestitve. Datoteko shranimo
v mapo, kjer imamo nameščen sistem MediaWiki, torej v našem primeru
C:\xampp\htdocs\wiki. Sedaj smo v brskalnik zopet vpisali naslov
localhost/wiki, kjer nas je pričakal naš sistem wiki, slika 4.2.
Slika 4.2: Glavna (sprejemna) stran našega sistema wiki.
Sistem za upravljanje vsebin MediaWiki Stran 27
4.2 Delovanje dodatka za prikaz besedila v obliki BibTeX
Slika 4.3 prikazuje dodajanje naše predloge imenovane cite na novo stran wiki. Za
primer delovanja smo izbrali tri citate iz strani Laboratorija za računalniške arhitekture in
jezike [12].
Slika 4.3: Dodajanje naše predloge na stran.
Po objavi strani sistem MediaWiki obdela predlogo in generira HTML kodo strani. Koda
HTML se posreduje brskalniku in pred nami se pokaže nova stran wiki (slika 4.4).
Slika 4.4: Izgled naše strani wiki.
Na sliki 4.4 vidimo naše citate. Na začetku je povezava do dokumenta PDF, nato sledijo
avtorji dela, naslov ter ostali podatki o delu, kot na primer naslov revije in leto izdaje. Pod
citatom vidimo povezavo za BibTeX obliko citata. Ob kliku na povezavo se razširi element
<div>, kamor se zapiše niz, ki vsebuje BibTeX zapis, vrnjen iz datoteke PHP. Razširitev
elementa je animirana s pomočjo funkcije JavaScript toggle(). Ob ponovnem kliku na
povezavo BibTeX se okvir z zapisom BibTeX zapre. Na sliki 4.5 vidimo razširjen element
<div>, ki vsebuje zapis BibTeX.
Sistem za upravljanje vsebin MediaWiki Stran 28
Slika 4.5: Prikaz delovanja dodatka ob kliku na povezavo BibTeX.
Vsak citat ima svoj element <div> za zapis BibTeX. Na enkrat pa lahko imamo
razširjenih poljubno število citatov. Slika 4.6 prikazuje zapis BibTeX za drugi citat, slika
4.7 pa prikazuje zapisa BibTeX za drugi in tretji citat.
Slika 4.6: BibTeX zapis za drugi citat.
Sistem za upravljanje vsebin MediaWiki Stran 29
Slika 4.7: Prikaz okvirja z zapisom BibTeX za drugi in tretji citat.
Sistem za pravljanje vsebin Mediawiki Stran 30
5 SKLEP
V diplomskem delu smo spoznali sistem za upravljanje spletnih vsebin MediaWiki.
Spoznali smo, kako sistem deluje, kako ga namestimo in postavimo svoj portal wiki.
Srečali smo se s tehnologijami, kot so LaTeX in BibTeX, (X)HTML, PHP, JavaScript oz.
knjižnice jQuery, MySQL in druge. V praktičnem delu diplomske naloge smo prikazali,
kako v sistem dodamo svoje funkcionalnosti ter katera orodja so pri tem na voljo. Pri
spoznavanju s sistemom ter tudi z razvojem dodatka nam je bila v veliko pomoč uradna
dokumentacija sistema, dosegljiva na spletni strani www.mediawiki.org.
Rezultat dela je dodatek v sistem MediaWiki, ki iz parametrov predloge za citiranje del
zgenerira in prikaže zapis tega citata v obliki BibTeX. Med razvojem dodatka nismo
opazili večjih odstopanj od prej zadanega načrta. Ena izmed težav je bila kodiranje
šumnikov pri prenosu v in iz datoteke PHP. Tako smo namesto UTF-8 kodiranih znakov
prejemali LATIN-1 kodirane znake in posledično nismo mogli zamenjati šumnikov za
primerne znake BibTeX. Problem smo rešili z uporabo funkcije {{#replace}}, ki je
šumnike zamenjala z znaki BibTeX, preden smo jih poslali v skripto PHP. Dodatek ima
trenutno tudi nekaj omejitev in sicer je napisan za dokaj specifično predlogo. Podprli smo
parametre, ki se pri citiranju del uporabljajo na spletni strani Laboratorija za računalniške
arhitekture in jezike [12].
V prihodnje želimo naš dodatek razširiti tako, da bi bil uporaben za čim več uporabnikov.
Podpreti želimo čim širši nabor parametrov in poenostaviti vključitev dodatka na sisteme
MediaWiki. Dodatek bomo objavili na spletišču MediaWiki.org in ga tako ponudili širši
javnosti.
Sistem za pravljanje vsebin Mediawiki Stran 31
LITERATURA
[1] Wikipedia - Sistem za upravljanje vsebin,
http://sl.wikipedia.org/wiki/Sistem_za_upravljanje_vsebin, zadnji dostop:
19.3.2012.
[2] Mediawiki - Manual:What is MediaWiki?,
http://www.mediawiki.org/wiki/Manual:What_is_MediaWiki%3F, zadnji dostop:
19.3.2012.
[3] A. R. Brodtkorb, C. Dyken, T. R. Hagen, J. M. Hjelmervik in O. O. Storaasli,
State-of-the-art in heterogeneous computing, 2010, Scientific Programming 18
(2010).
[4] Mediawiki Manual:Architecture,
http://www.mediawiki.org/wiki/Manual:MediaWiki_architecture, zadnji dostop:
19.3.2012.
[5] H. M. Kibirige, L. DePalo, The Internet as a Source of Academic Reserch
Information, Information Technology and Libraries, zv. 19, št. 1, str. 11-16, 2000.
[6] MySQL, http://www.mysql.com/, zadnji dostop: 19.3.2012.
[7] Mediawiki Help:Formatting, http://www.mediawiki.org/wiki/Help:Formatting,
zadnji dostop: 19.3.2012.
[8] PHP, http://www.php.net/, zadnji dostop: 19.3.2012.
[9] Mediawiki Help:Templates, http://www.mediawiki.org/wiki/Help:Templates,
zadnji dostop: 19.3.2012.
[10] Mediawiki Help:Magic words,
http://www.mediawiki.org/wiki/Help:Magic_words, zadnji dostop: 19.3.2012.
[11] Mediawiki Help:Extension:Parser functions,
http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions, zadnji dostop:
19.3.2012.
[12] Laboratorij za računalniške arhitekture in jezike,
https://labraj.uni-mb.si/Splo%C5%A1ne_informacije, zadnji dostop: 19.3.2012.
[13] J. Resig, jQuery, http://jquery.com/, zadnji dostop: 19.3.2012.
[14] MediaWiki jQuery, http://www.mediawiki.org/wiki/JQuery, zadnji dostop:
19.3.2012.
[15] Specijalni znakovi i simboli, http://kokice.striga.org/2.2.html, zadnji dostop
19.3.2012.
[16] M. Widenius, D. Axmark in MySQLAB, MySQL Reference Manual, O'Reilly &
Associates, 2002.
Sistem za pravljanje vsebin Mediawiki Stran 32
[17] K. Seidler, Apache friends XAMPP,
http://www.apachefriends.org/en/xampp.html, zadnji dostop: 19.3.2012.
[18] H. Muljadi, H. Takeda, J. Araki, S. Kawamoto, S. Kobayashi, Y. Mizuta, S.
Minoru Demiya, S. Suzuki, A. Kitamoto, Y. Shirai, N. Ichiyoshi, T. Ito, T. Abe, T.
Gojobori, H. Sugawara, S. Miyazaki in A. Fujiyama, Semantic Mediawiki: A user-
oriented system for integrated content and metadata management system, IADIS
International Conference on WWW/Internet 2005, str. 261-264, Lizbona.
[19] Mediawiki Extension:WebFonts,
http://www.mediawiki.org/wiki/Extension:WebFonts, zadnji dostop: 19.3.2012.
[20] Mediawiki Help:Parser functions in templates,
http://www.mediawiki.org/wiki/Help:Parser_functions_in_templates,
zadnji dostop: 19.3.2012.
[21] Wikipedia - LaTeX, http://en.wikipedia.org/wiki/LaTeX, zadnji dostop: 19.3.2012.
[22] Wikipedia - BibTeX, http://en.wikipedia.org/wiki/BibTeX, zadnji dostop:
19.3.2012.
[23] L. Lamport, Latex A document preparation system 2nd ed.,
Addison-Wesley publishing company, 1994.
[24] O. Patashnik, BibTeXing, 1988.
[25] A. Zamuda, D. Casar, LABRAJ Bibliography in BibTeX format,
https://labraj.uni-mb.si/en/index.php/Bibliography_in_BibTex_format,
zadnji dostop 19.3.2012.
[26] Wikipedia - Computer cluster, http://en.wikipedia.org/wiki/Computer_cluster,
zadnji dostop: 19.3.2012.
[27] Canonical Ltd. in člani Ubuntu Documentation Project,
Ubuntu server guide, 2012.
[28] T. Brisco, DNS support for load balancing, Rugers University, April 1995.
[29] Wikipedia - Round robin DNS, http://en.wikipedia.org/wiki/Round_robin_DNS,
zadnji dostop: 19.3.2012.
[30] The CMS Matrix, http://www.cmsmatrix.org, zadnji dostop 4.4.2012.
[31] A. Zamuda, Predloga:Cite – Laboratorij za računalniške arhitekture in jezike,
https://labraj.uni-mb.si/index.php?title=Predloga:Cite, 6.8.2010.
[32] Wikipedia – XeTeX, http://en.wikipedia.org/wiki/XeTeX, zadnji dostop 4.4.2012.
[33] Unicode, http://unicode.org/, zadnji dostop 2.5.2012.
[34] OpenType, http://www.adobe.com/type/opentype/, zadnji dostop 2.5.2012.