WebCoso - generatore di siti web

Altre lingue

La storia

Leggetevi la preistoria se vi interessa…

Il vecchio sistema funzionava abbastanza bene, ma mi stavo stufando delle sue limitazioni:

  • l'input era XHTML con annotazioni (per la lingua), e scrivere XHTML a mano non è proprio agevole
  • la struttura era molto rigida:
    • per avere più di due livelli di profondità nelle categorie richiedeva di rivedere pesantemente il compilatore
    • la navigazione non sarebbe stata proprio delle più comode, se avessi aggiunto parecchie categorie
  • non c'era alcun modo di assegnare un documento a più di una categoria (quelli che di questi tempi si chiamano "tag")

Ovviamente era l'ora di scrivere (o trovare) qualcosa di meglio.

Le funzioni necessarie erano:

  • input in reStructuredText
  • supporto multilingua:
    • ogni documento può essere presente in varie lingue
    • l'utente deve poter passare da una lingua all'altra tramite link
    • il server deve scegliere la versione giusta tramite "content negotiation"
  • presentazione definita in XSLT
  • ogni documento deve poter definire una presentazione specifica
  • supporto di tag
  • ridurre al minimo la quantità di cose che devono essere scritte per creare un nuovo documento

Dopo qualche anno di lavoro molto sporadico, il risultato è WebCoso

Come funziona

Al centro di tutto sta una serie di dichiarazioni per Slay::Maker; queste definiscono due passate di elaborazione [2]:

[2]

gli asterischi stanno per la sigla della lingua

  1. generazione XML:

    • i file di nome document.*.rest.tt vengono elaborati da Template Toolkit, generando file di nome document.*.rest.txt
    • i file di nome document.*.rest.txt vengono elaborati da Text::Restructured generando file di nome document.*.du.xml
    • i file di nome feed.*.tt vengono elaborati da Template Toolkit generando file di nome feed.*.xml
    • dai documenti in reST vengono estratti i tag a cui ciascun documento è associato, e le date di creazione e ultima modifica
    • i documenti presenti nella directory tags sono elaborati come gli altri, ma dopo che è avvenuta l'estrazione dei tag

    Notare che, visto che stiamo usando un procedimento stile make, se ad esempio un document.it.rest.txt è già presente, il programma non guarda neppure se document.it.rest.tt esista (incidentalmente, la maggior parte di documenti non passa da Template Toolkit)

  2. generazione (X)HTML e feed:
    • i file di nome document.*.du.xml vengono elaborati da XML::LibXSLT usando lo "stylesheet" du2html.xsl presente nella stessa directory, generando file di nome document.*.html che finiscono nella opportuna directory di destinazione
    • i file di nome feed.*.xml vengono elaborati da XML::LibXSLT usando lo "stylesheet" fillFeed.xsl presente nella stessa directory, generando file di nome feed.*.xml che finiscono nella opportuna directory di destinazione

Notare che i moduli che interfacciano Template Toolkit, Text::Restructured e XML::LibXSLT a WebCoso esportano varie funzioni di estensione in modo da permettere di accedere ai dati estratti (tag, date).

A questo punto tutti i file sono stati generati, e un paio di rsync (uno per i documenti, uno per immagini css etc.) aggiornano la copia sul server web.

Sviluppi futuri

La generazione dei feed è sub-ottimale: per avere il testo completo dei documenti all'interno dei feed, ciascun documento viene trasformato più volte del necessario; probabilmente dovrei aggiungere una passata specifica per i feed in modo da poter usare i documenti già trasformati.

Sicuramente ci sono delle funzioni che non sono esposte ai template, ma che prima o poi serviranno: non è difficile aggiungerle.

DateCreato: 2009-08-18 11:26:45 Ultima modifica: 2012-09-01 09:18:21