Plone: Avoimen lähdekoodin sisällönhallintaa
Heinäkuu 20th, 2006
Tarkoitukseni on ollut jo pidemmän aikaa tutustua Plone-nimiseen sisällönhallintajärjestelmään. Olen törmännyt siihen mm. Oxfam Internationalin, KEPA:n, Ubuntun ja Jyväskylän yliopiston sivustoilla. Muita käyttäjiä ovat mm. NASA, Lufthansa, Computer Associates ja CBS.
Kaikki käyttämäni Plone-sivustot ovat toimineet standardien mukaan, hallitsivat Dublin coren ja käyttivät hyväkseen ns. “nostolistoja” ja niiden RSS-julkaisuja. Lisäksi sivustot tukivat kattavasti eri sisältömuotoja. Plone vaikutti siis varsin mielenkiintoiselta.
Plonen ainoa itseäni arveluttanut puoli oli sen tekniikassa. Se on nimittäin toteutettu Python-skriptikielellä, mikä ei kuulu viiden suosituimman kielen joukkoon ja josta itselläni ei ollut kovin laajaa kokemusta. Pythonilla on kuitenkin viime aikoina tehty joitain varsin tyylikkäitä sovelluksia, joista ehdottomasti upein on EVE Online-massiivimoninpeli. Python on ilmeisesti juuri 3D-puolella erittäin suosittu kieli.
Joo, mutta takaisin aiheeseen. Asensin siis Plonen ja aloin naksuttelemaan. Itselleni kymmenen tärkeintä asiaa sisällönhallintajärjestelmässä ovat seuraavat:
- Sisällön versiointi
- Räätälöitävät sisältötyypit
- Useamman sivuston tuki
- Sisällön kieliversiointi
- Ajastettu julkaisu ja julkaisun päättymisaika
- Linkkien hallinta
- Kattava hakutoiminnallisuus
- Sisällön ryhmittely eri aiheiden alle
- Sisällön hyväksymismenettely (workflow)
- Roolipohjaiset käyttöoikeudet sisältötasolla
Heti asennuksen jälkeen iski hienoinen pettymys: Sisältötyypit piti koodata itse, eikä kieliversiointia tullut asennuspaketin mukana. Suorituskykykin oli Plonen omien dokkareitten mukaan melko vaatimaton (sivun luonti tietokantahakuineen sekunnin luokkaa). Plone jäi samantien jäähylle päiväksi - odotukseni olivat olleet ylimitoitetut.
No pääsin sitten “krapulastani” yli ja jatkoin testailua. Kieliversiointiin löytyi LinguaPlone-niminen laajennos, joka vaikuttaa kyllä erinomaiselta, mutta ainakin tässä Windows-lootassa[1] heittelee merkistöpoikkeuksia.
Suorituskykyyn taas saa parannusta poistamalla kehityksessä käytetyt http-headerit ja käyttämällä cachea edustalla.
Plonen arkkitehtuuri koostuu siis seuraavista osista:

Koska dokumenttien mukaan Plone mahdollistaa erittäin kattavan sisältötyypityksen, päätin toteuttaa heti alkuun sellaisen rakenteen, johon 99% muista sisällönhallintatyövälineistä tukehtuisi samantien.
Ensin loin sisältötyypin koirarodulle ja koiralle. Plonessa sisältötyypit kulkevat nimellä “Archetype”. Archetype sitoo yhteen tiedon sisällön kentistä (field), tiedon tallentamiseen käytetyistä käyttöliittymäkomponenteista (widget) ja kenttien validoinnista (validator). Lisäksi archetype sisältää tietoa käyttäjäoikeuksista, vaihtoehtoisista tietovarastoista, transformaatioista, yms.
Archetype-luokkien rakentamiseen on kehitetty työväline nimeltä ArchGenXML, jolla saadaan UML-mallista käännettyä suoraan Archtype-luokkia. Varsin kätevää. UML-malliin tosin täytyy “tägätä” metatietoa kentistä ja luokista. Käytännössä homma oli näin aloittelijalta varsin tuskaista, sillä dokumentaatio tagien käytöstä oli varsin puutteellista.
Dokumenttimallini näytti lopulta seuraavalta:

Täytyy sanoa, että olin aika yllättynyt, kun ArchGenXML nielaisi sen mukisematta ja kakaisi ulos Zopen oliotietokantaan kelpaavat mallit käyttöliittymäkomponentteineen. Nyt ylläoleva luokkamalli oli siis muokattavissa web-selaimella ja siinä oli versiointi, käyttäjävaltuutus ja lokalisointituki.
(Venähti vähän pitkäksi tämä esittely; kirjoittelen aiheesta lisää myöhemmin.)
Pistin alle kuvankaappauksen Dog-archetypestä. Kuvauksen pitäisi tietysti kertoa jostain tietystä koirasta ja samoin otsikon pitäisi olla kyseisen koiran nimi, mutta tuosta nyt vähän näkee, millaiselta Archtype näyttää toiminnassa.
1) Linux-koneesta hajosi tällä kertaa emolevy…

Artikkeli on luettu 1567 kertaa. Kuuluu luokkiin: Model-Driven Architecture, Ohjelmointi, Plone, Python, Sisällönhallinta
Jätä kommentti
Sallitut HTML-elementit:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed