Transclusie is een techniek om inhoud uit het ene elektronische document in een ander document weer te geven zonder die inhoud fysiek te kopiëren. Wordt de originele inhoud aangepast, dan verschijnt die wijziging automatisch in elk ander document dat de inhoud getranscludeerd heeft. De twee documenten zijn met elkaar verbonden door middel van hypertekst. Het woord is afgeleid van trans (overzetten) en opnemen, en betekent dus letterlijk: iets vanuit een andere plaats opnemen.

Op Wikipedia en andere MediaWiki-sites wordt transclusie veel gebruikt om inhoud uit speciale pagina's, zoals een sjabloon, in meerdere artikelen te hergebruiken. Dezelfde techniek kan ook toegepast worden op gewone artikelen, pagina-onderdelen of op pagina's die programmeerbare modules (bijv. Lua) bevatten.

Hoe transclusie werkt

In de meeste wikis geeft een speciale notatie aan dat de inhoud van een andere pagina moet worden ingevoegd. Wanneer de software de transclusie tegenkomt, leest zij de bron van de genoemde pagina, converteert die naar HTML en voegt die HTML in op de plaats van de transclusie voordat de rest van de pagina wordt verwerkt en naar de gebruiker gestuurd (in een browser). Dit betekent dat de getoonde pagina altijd de meest recente versie van de getranscludeerde inhoud bevat.

Gebruiksgemak en voorbeeld: door in de bron van een pagina de paginanaam tussen dubbele accolades te zetten (bijv. {{Paginanaam}}), geef je aan dat de inhoud van "Paginanaam" moet worden opgenomen. De software vergelijkt en combineert de renderstappen op het moment van weergave zodat de geïntegreerde inhoud zichtbaar wordt.

Veelgebruikte tags en opties

  • <noinclude> — tekst binnen deze tag wordt niet opgenomen wanneer een pagina getranscludeerd wordt; nuttig voor discussies of categorieën die alleen op de bronpagina moeten verschijnen.
  • <includeonly> — tekst binnen deze tag verschijnt alleen in de getranscludeerde weergave (dus niet op de bronpagina zelf wanneer die direct bekeken wordt).
  • <onlyinclude> — als delen van een pagina zijn omgeven door deze tag, wordt alleen dat deel opgenomen bij transclusie; alle andere inhoud wordt genegeerd.

Transclusie op delen van pagina's en uitsluitingen

Naast het opnemen van hele pagina's bestaan er manieren om slechts bepaalde delen te transcluderen of juist delen uit te sluiten. De hierboven genoemde tags maken dit mogelijk zonder dat de broninhoud aangepast hoeft te worden op alle plaatsen waar die gebruikt wordt. Zo houd je sjablonen en herbruikbare teksten overzichtelijk en beheersbaar.

Nesting, limieten en performance

Een getranscludeerde pagina kan op zijn beurt weer transclusies bevatten; dit noemt men nesting. Nesting kan meerdere niveaus diep gaan, maar wikis stellen doorgaans een limiet aan het aantal toegestane niveaus om te voorkomen dat er oneindige lussen ontstaan die de render-engine doen vastlopen. Daarnaast kan veelvuldige en diepe transclusie invloed hebben op de laadtijd en serverbelasting; daarom bevatten veel implementaties cachingmechanismen zodat pagina's niet bij iedere request volledig opnieuw moeten worden opgebouwd.

Voor- en nadelen

  • Voordelen: beter onderhoud door één enkele bron voor herbruikbare inhoud, consistente presentatie, snelle updates voor alle pagina's die de inhoud gebruiken.
  • Nadelen: grotere afhankelijkheid tussen pagina's (wijzigingen kunnen onverwachte gevolgen hebben), complexere debugging wanneer inhoud niet verschijnt zoals verwacht, en potentieel hogere serverbelasting bij complexe transclusies.

Praktische tips

  • Gebruik sjablonen voor vaste stukjes tekst of herhalende opmaak; dat houdt artikelen kort en uniform.
  • Markeer duidelijk welke delen van een sjabloon bedoeld zijn voor transclusie met <onlyinclude>, <includeonly> of <noinclude>.
  • Houd nesting beperkt en documenteer afhankelijkheden zodat andere editors weten waar wijzigingen impact op hebben.
  • Houd rekening met cachegedrag: soms duurt het even voordat veranderingen van een getranscludeerde pagina zichtbaar zijn op alle transcluderende pagina's.

Door transclusie verstandig in te zetten, kun je inhoud dynamisch hergebruiken, consistentie bewaren en het redactionele werk op grotere wiki-projecten veel efficiënter maken.