Aiuto: Transclusione

Categoria: Caratteristiche di MediawikiManuale   Guida del wikisourciano principiante   Caratteristiche di Mediawiki   Transclusione 

La transclusione è un processo attraverso il quale è possibile incorporare il contenuto di una pagina in un'altra. In altre parole, due o più documenti vengono usati per generare un terzo nuovo e diverso: la terza pagina visualizza il contenuto delle prime due, e se in queste il testo viene modificato, viene modificato il risultato anche nella terza pagina in quanto risultano connesse.

Questo meccanismo viene utilizzato per modificare i dati in un solo posto, ed avere poi automaticamente le modifiche disponibili in tutte le altre pagine dove i dati sono visualizzati.

Se già conosci Wikipedia, la transclusione è lo stesso meccanismo con cui i template vengono inclusi nelle pagine dell’enciclopedia: saprai quindi anche che il loro uso è più che altro di servizio (messaggi, box informativi ecc.). In Wikisource l'uso della transclusione è invece strutturalmente parte del processo di composizione dei testi: è infatti usata per aggregare in un Testo continuo (che finisce nel namespace principale) la trascrizione delle singole facciate dei libri (che si trovano nelle varie "Pagine" del namespace Pagina).

Generalità

Il contenuto "foo" della pag B può essere transcluso nella pag A:

 
Esempio di transclusione

"foo" può essere, al contempo, transcluso in più pagine:

 
Esempio di transclusione in più pagine

Il cambiamento fatto su una qualsiasi delle pagine transcluse, si verificherà automaticamente su tutte le altre.

Esempi sui progetti wiki

 
Schematizzazione del processo di produzione dei contenuti su Wikisource

L'esempio più comune su Wikisource è la differenza, nei testi con scansione a fronte, fra namespace Pagina e namespace Principale: lo scritto viene creato/modificato, pagina per pagina (o meglio facciata per facciata), nel namespace Pagina che permette la visualizzazione dell'immagine scansionata di origine. Esso viene poi successivamente transcluso (tramite gli appositi comandi) nel namespace Principale, dove viene visualizzato come un testo continuo, indipendentemente dall’impaginazione tipografica/cartacea originaria delle "Pagine". Questo meccanismo permette però di avere sempre un testo "originale", suscettibile di correzioni, grazie alla possibilità di confrontarlo con le scansioni delle pagine cartacee. Il testo "transcluso" verrà automaticamente aggiornato, senza dispendiosi copia-incolla e correzioni manuali.

Template

Anche i template, utilizzati da MediaWiki, sono pagine progettate per essere transcluse in altre pagine: il codice presente nel namespace "Template" viene infatti chiamato ogniqualvolta ci siano le doppie parentesi graffe:

{{NOMETEMPLATE}}

È possibile includere parzialmente un template, o in generale una pagina qualsiasi, tramite l'utilizzo dei seguenti tag MediaWiki:

<noinclude>...</noinclude>
Tutto ciò che è compreso all'interno di questo tag viene mostrato se si visualizza direttamente la pagina, ma non viene incluso nelle pagine che la richiamano (cioè nella transclusione).
<includeonly>...</includeonly>
Al contrario del precedente, tutto ciò che è compreso all'interno di questo tag non viene mostrato se si visualizza direttamente la pagina, ma viene incluso nelle pagine che la richiamano.
<onlyinclude>...</onlyinclude>
Solo ciò che è compreso all'interno di questo tag viene incluso nelle pagine che richiamano la pagina. Questo tag può essere utilizzato in combinazione con gli altri due e anche più volte all'interno della stessa pagina, ma dato che il suo comportamento può risultare poco intuitivo, l'utilizzo richiede attenzione. Ad esempio il contenuto dei tag includeonly inseriti fuori dagli onlyinclude viene ignorato.

Esempio

Con una pagina o sottopagina del namespace Principale

Se vogliamo transcludere il contenuto di una pagina o sottopagina del namespace principale, occorre anteporre al suo nome due punti.

Volendo transcludere, ad esempio, il contenuto di questa sottopagina: Il cavallarizzo/Test, la sintassi normale {{Il cavallarizzo/Test}} dà un errore:

Template:Il cavallarizzo/Test

Infatti per impostazione predefinita Mediawiki cerca la pagina da transcludere nel namespace Template. Il codice corretto è invece {{:Il cavallarizzo/Test}} che dà il risultato voluto:

testo di prova

Con un template

La transclusione è un processo tipico delle pagine del namespace template, vale a dire che un template è una pagina che si prevede a priori sia incorporata in molte altre pagine di altri namespace. Ma in effetti tale procedimento è applicabile anche con qualunque altra pagina.

Prima viene visualizzato il risultato dell'uso del template, quindi nel riquadro il codice da usare. Se vuoi fare degli esperimenti ricordati che c'è a tua disposizione la pagina delle prove dove potrai incollare ciò che è contenuto in ogni riquadro.

Il template Esempio di transclusione contiene un testo che vogliamo inserire in questa pagina, ovvero:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut nibh. Cras eleifend quam nec massa. Fusce sit amet ipsum in nulla aliquet adipiscing. Donec urna felis, nonummy et, pretium ut, egestas nec, purus. Donec ultrices, odio nec imperdiet suscipit, nibh purus luctus sem, non ullamcorper sem metus eu ipsum. Vestibulum dui. Fusce augue magna, porttitor eu, rhoncus eget, ultrices eget, quam. Nullam eu libero at ante rhoncus rutrum. Etiam mattis ante consequat massa. In fringilla aliquam neque. Maecenas faucibus, leo quis fermentum hendrerit, pede justo convallis urna, ac ullamcorper mi elit hendrerit arcu. Pellentesque placerat tellus eu risus. Proin erat. Aliquam nunc. Integer sodales. In placerat, felis sit amet ullamcorper interdum, pede ligula dapibus augue, sed ullamcorper arcu erat eget nunc. Morbi orci sem, laoreet et, viverra porta, porttitor at, magna. Donec lacinia nunc ac lectus.

Basterà scrivere in questa pagina {{Esempio di transclusione}} e si avrà qui la transclusione di questo testo.

Con un'altra pagina

Se vogliamo inserire in questa pagina il testo della pagina Progetto:Testi scientifici/Obiettivi, come nell'esempio precedente basterà racchiudere il nome della pagina tra doppie graffe come se fosse un template: il risultato qui sotto:

Obiettivi

Obiettivi: Molto ambiziosi! :)

  • Creare un Portale Scienza per presentare le opere scientifiche di Wikisource in modo chiaro. Potremmo avere sezioni per:
    • I testi in evidenza (e gli ultimi arrivi)
    • I classici della scienza: opere che non possono mancare su Wikisource
    • Suggerimenti per la lettura: una lista di testi "divulgativi", o comunque non tecnici
    • Percorsi tematici: su una branca della scienza particolare (es:matematica)
  • Inserire i testi degli scienziati italiani più importanti (tanto per fare qualche nome: dovremmo riuscire ad avere almeno qualcosa di Cardano, Fibonacci, Bombelli, Tartaglia, Peano, Cavalieri, Cassini, Schiaparelli, Secchi, Torricelli, Avogadro, Volta, Galvani, Cannizzaro etc...)

Cosa dobbiamo fare:

  • fare un po' di lavoro sporco:
    • catalogare gli scienziati in base alla branca della scienza
    • fare una cosa analoga per i testi
    • creare un template apposta per i testi scientifici, e sostituirlo nelle opere già presenti
    • creare un elenco degli scienziati italiani più importanti suddivisi per occupazione, in modo da avere una base per cercare i testi
    • addestrare un bot per l'inserimento di opere corpose (es: carteggi di Galileo)
  • eventualmente chiedere la collaborazione degli utenti di Wikipedia per il progetto (soprattutto per quanto riguarda, ad es., la formattazione delle opere di matematica)

si ottiene scrivendo in questa pagina {{Progetto:Testi scientifici/Obiettivi}}.

Transclusione selettiva

Oltre che la transclusione dell'intera pagina, è possibile transcludere una sezione di una pagina, opportunamente identificata.

Nella pagina da transcludere, occorre aggiungere un tag di inizio sezione e un tag di fine sezione, contenenti il nome della sezione:

Tag inizio sezione:

Tag fine sezione:


Nella pagina dove si vuole transcludere la sezione identificata, va usato il seguente codice:

oppure il codice equivalente:


Esempio di transclusione selettiva

Nella pagina Template:Esempio di transclusione sono state identificate due sezioni, chiamate s1 e s2.

Il codice: {{#section:Template:Esempio di transclusione|s1}} produce l’estrapolazione e la transclusione del solo testo di tale sezione, ovvero:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut nibh. Cras eleifend quam nec massa. Fusce sit amet ipsum in nulla aliquet adipiscing. Donec urna felis, nonummy et, pretium ut, egestas nec, purus. Donec ultrices, odio nec imperdiet suscipit, nibh purus luctus sem, non ullamcorper sem metus eu ipsum. Vestibulum dui. Fusce augue magna, porttitor eu, rhoncus eget, ultrices eget, quam.

Nota che rispetto all'esempio riportato prima, mancano la parte in grassetto (che è la s2) e la parte finale in solo corsivo (non identificata come sezione)

Per ulteriori dettagli vedi: Extension:Labeled Section Transclusion.

Transclusione condizionale

Quando si tenta di transcludere una pagina non esistente, ad esempio con il codice: {{Pagina inesistente}} questo è il risultato :
Template:Pagina inesistente

Per ottenere che la transclusione sia effettuata solo se la pagina esiste realmente, si può inserire il codice di transclusione all'interno di una funzione che valuti se la pagina esiste, e solo in tal caso effettui la transclusione. Il codice:
{{#ifexist: Pagina inesistente|{{Pagina inesistente}}|'''La pagina non esiste'''}}

produce infatti questo risultato:
La pagina non esiste

e tralasciando del tutto la seconda opzione la funzione semplicemente non esegue alcuna transclusione nè produce alcun risultato.


Transclusione nel namespace Pagina:

Il Template:Pagina esegue una speciale transclusione selettiva di pagine del namespage Pagina: (usate nelle trascrizioni con immagine del testo a fronte) con due sintassi che consentono la transclusione dell'intera Pagina e la transclusione selettiva, visualizzando inoltre un collegamento alla Pagina sorgente della transclusione. Per verificare la funzionalità si suggerisce di usare la pagina Pagina:Pagina di prova, dove sono identificate quattro sezioni s1,s2,s3 e s4. Opportuno l'uso associato di un tag "div" che lasci un sufficiente margine a sinistra per evitare la sovrapposizione fra link alla pagina sorgente e testo transcluso. Da notare che nel codice il namespace Pagina: è implicito.

Transclusione dell'intera pagina

Il codice: {{Pagina|Pagina di prova}} produce questo risultato (per vedere il link alla pagina, attivate l'opzione "Collegamenti alle pagine" del menu di navigazione):

[p. pagina modifica]== Pagina di prova ==

riga 1 sezione 1
riga 2 sezione 1
riga 3 sezione 1
riga 4 sezione 1
riga 5 sezione 1
riga 6 sezione 1
riga 7 sezione 2
riga 8 sezione 2
riga 9 sezione 2
riga 10 sezione 2 sezione 3
riga 11 sezione 2 sezione 3
riga 12 sezione 2 sezione 3
riga 13 sezione 2 sezione 3
riga 14 sezione 3
riga 15 sezione 3 sezione 4
riga 16 sezione 3 sezione 4
riga 17 sezione 3 sezione 4
riga 18 sezione 3 sezione 4

riga 19 sezione 1 sezione 4
riga 20 sezione 1 sezione 4

Transclusione selettiva

Il codice: {{Pagina|Pagina di prova|sections=s1}} produce questo risultato:

[p. pagina modifica]riga 1 sezione 1
riga 2 sezione 1
riga 3 sezione 1
riga 4 sezione 1
riga 5 sezione 1
riga 6 sezione 1
riga 19 sezione 1 sezione 4
riga 20 sezione 1 sezione 4

Una inattesa proprietà delle section: la proprietà additiva

Se in un testo sono comprese più sezioni con lo stesso nome, la transclusione selettiva richiamata con quel nome non restituisce un errore, né restituisce la prima delle section: le restituisce tutte, qualsiasi sia il loro numero, e comunque siano inframmezzate nel testo... Questa è una caratteristica estremamente importante per un loro uso avanzato.

Nella frase precedente le parole in rosso sono taggate (oltre che con il codice html <span style="color:red;"> per dargli effettivamente un colore) anche con un tag <section begin="rosso" /> e successivo tag <section end="rosso" />.

Quindi il codice: {{#section:Aiuto:Transclusione|rosso}} dà questo risultato:

Se in un testo sono comprese più sezioni con lo stesso nome, la transclusione selettiva le restituisce tutte...

perchè le varie section="rosso" sono state estratte e accodate una dopo l'altra.

Questo significa che con una sola riga di codice si possono, ad esempio, estrarre e riunire varie parti di un testo lungo a piacere; un'applicazione molto interessante è quella di estrarre da un elenco l'insieme dei soli elementi che soddisfano una certa condizione. Ovviamente le section necessarie devono essere state previste e introdotte nel codice.

Nota inoltre che il testo è stato transcluso e aggregato da questa stessa pagina, e non da una diversa.

Domande?

Se hai domande, dubbi, proposte o necessiti di chiarimenti sulla transclusione premi qui e lascia un messaggio nella pagina di discussione.