En informática , la transclusión es la inclusión de parte o la totalidad de un documento electrónico en uno o más documentos mediante referencia a través de hipertexto . La transclusión se realiza normalmente cuando se muestra el documento de referencia y normalmente es automática y transparente para el usuario final. [1] El resultado de la transclusión es un único documento integrado formado por partes ensambladas dinámicamente a partir de fuentes separadas, posiblemente almacenadas en diferentes computadoras en lugares dispares.
La transclusión facilita el diseño modular (utilizando el modelo de " fuente única de verdad ", ya sea en datos , código o contenido ): un recurso se almacena una sola vez y se distribuye para su reutilización en múltiples documentos. Las actualizaciones o correcciones de un recurso se reflejan luego en cualquier documento de referencia .
En los sistemas en los que no se puede realizar la transclusión, y en algunas situaciones en las que sí se puede pero no es deseable, la sustitución suele ser la opción complementaria, por la que se integra una copia estática de la "única fuente de verdad" en el documento pertinente. Se ofrecen ejemplos de ambas opciones en las formas en que se utilizan para crear el contenido de Wikipedia (consulte Wikipedia:Transclusión y Wikipedia:Sustitución para obtener más información). Las copias estáticas sustituidas introducen un conjunto diferente de consideraciones para el control de versiones que la transclusión, pero a veces son necesarias.
Ted Nelson acuñó el término para su libro no lineal Literary Machines de 1980 , pero la idea de copia maestra y ocurrencias se aplicó 17 años antes, en Sketchpad . Actualmente es una técnica común empleada por los escritores de libros de texto, donde un solo tema/asunto necesita ser discutido en múltiples capítulos. Una ventaja de este sistema en los libros de texto es que ayuda a la redundancia de datos y mantiene el libro en un tamaño manejable.
La transclusión funciona mejor cuando las secciones de texto transcluidas son autónomas, de modo que el significado y la validez del texto son independientes del contexto. Por ejemplo, formulaciones como "como se explicó en la sección anterior" son problemáticas, porque la sección transcluida puede aparecer en un contexto diferente, lo que causa confusión. Lo que constituye un texto "neutral al contexto" varía, pero a menudo incluye cosas como información de la empresa o texto repetitivo . Para ayudar a superar los problemas de sensibilidad al contexto como los mencionados anteriormente, los sistemas capaces de transcluir a menudo también son capaces de suprimir elementos particulares dentro del contenido transcluido. Por ejemplo, Wikipedia puede usar etiquetas como " noinclude ", "onlyinclude" e "includeonly" para este propósito. Ejemplos típicos de elementos que a menudo requieren tales excepciones son los títulos de documentos, las notas al pie y las referencias cruzadas; de esta manera, se pueden suprimir automáticamente tras la transclusión, sin tener que volver a trabajar manualmente para cada caso.
En algunas circunstancias y en algunos contextos técnicos, las secciones de texto transcluidas pueden no requerir una estricta adherencia al principio de "neutralidad de contexto", porque las secciones transcluidas son susceptibles de parametrización . La parametrización implica la capacidad de modificar ciertas porciones o subsecciones de un texto transcluido dependiendo de variables exógenas que pueden cambiarse de forma independiente. Esto se hace habitualmente proporcionando a un texto transcluido uno o más marcadores de posición de sustitución . Estos marcadores de posición se reemplazan luego con los valores de variable correspondientes antes de presentar el resultado transcluido final en contexto.
El concepto de reutilización del contenido de un archivo comenzó con los lenguajes de programación informática: COBOL en 1960, [2] seguido por BCPL , PL/I , C , [3] y en 1978, incluso FORTRAN . Una directiva include permite reutilizar el código fuente común al tiempo que se evitan los problemas de la programación de copiar y pegar y la codificación rígida de constantes. Como ocurre con muchas innovaciones, surgió un problema. Varias directivas include pueden proporcionar el mismo contenido que otra directiva include, provocando inadvertidamente repeticiones del mismo código fuente en el resultado final, lo que da como resultado un error . Las protecciones de inclusión ayudan a resolver esto al, después de una única inclusión de contenido, omitir a partir de entonces el contenido duplicado. [4]
La idea de una única fuente de información reutilizable dio lugar a conceptos como " No repetirse" y el principio de abstracción . Se encontró un uso adicional para hacer que los programas sean más portátiles . El código fuente portátil utiliza una directiva de inclusión para especificar una biblioteca estándar , que contiene código fuente específico del sistema que varía con cada entorno informático. [5]
Ted Nelson, creador de las palabras hipertexto e hipermedia , también acuñó el término transclusión en su libro Literary Machines (Máquinas literarias) de 1980. Parte de su propuesta era la idea de que se pudieran exigir micropagos automáticamente al lector por todo el texto, sin importar cuántos fragmentos de contenido se tomaran de varios lugares.
Sin embargo, según Nelson, el concepto de transclusión ya formaba parte de su descripción del hipertexto de 1965. [6] Nelson define la transclusión como "... el mismo contenido, que se puede conocer en más de un lugar", diferenciándolo de casos más especiales, como la inclusión de contenido de una ubicación diferente (lo que él llama transentrega ) o una cita explícita que permanece conectada a sus orígenes (lo que él llama transcitación ).
Algunos sistemas de hipertexto, incluido el Proyecto Xanadu del propio Ted Nelson , admiten la transclusión. [7]
Nelson ha realizado una demostración de transclusión web, el Little Transquoter (programado según las especificaciones de Nelson por Andrew Pam en 2004-2005). [8] Crea un nuevo formato basado en direcciones de partes de páginas web; cuando se desreferencia, cada parte de la página resultante permanece conectada mediante un clic a su contexto original.
HTTP , como protocolo de transmisión, tiene un soporte rudimentario para la transclusión a través del servicio de bytes : especificando un rango de bytes en un mensaje de solicitud HTTP.
La transclusión puede ocurrir antes (del lado del servidor) o después (del lado del cliente) de la transmisión. Por ejemplo:
Los editores de contenido web pueden oponerse a la transclusión de material de sus propios sitios web a otros sitios web, o pueden exigir un acuerdo para hacerlo. Los críticos de esta práctica pueden referirse a varias formas de enlaces en línea como robo de ancho de banda o usurpación de dominio .
Otros editores pueden buscar específicamente que sus materiales se incluyan en otros sitios web, como en forma de publicidad web o como widgets como un contador de visitas o un web bug .
Los mashups utilizan la transclusión para reunir recursos o datos en una nueva aplicación, por ejemplo, colocando fotos geoetiquetadas en un mapa interactivo o mostrando métricas comerciales en un tablero interactivo .
HTML define elementos para la transclusión del lado del cliente de imágenes , scripts, hojas de estilo , otros documentos y otros tipos de medios . HTML ha dependido en gran medida de la transclusión del lado del cliente desde los primeros días de la Web (para que las páginas web pudieran mostrarse más rápidamente antes de que los elementos multimedia terminaran de cargarse), en lugar de incrustar los datos sin procesar de dichos objetos en línea en el marcado de una página web.
Mediante técnicas como Ajax , los scripts asociados a un documento HTML pueden indicar a un navegador web que modifique el documento en el lugar, a diferencia de la técnica anterior de tener que obtener una versión completamente nueva de la página desde el servidor web. Dichos scripts pueden incluir elementos o documentos desde un servidor después de que el navegador web haya renderizado la página, en respuesta a la entrada del usuario o a condiciones cambiantes, por ejemplo.
Es posible que futuras versiones de HTML admitan una transclusión más profunda de partes de documentos utilizando tecnologías XML como entidades , referencias de documentos XPointer y manipulaciones XSLT .
Los servidores proxy pueden emplear transclusión para reducir las transmisiones redundantes de recursos solicitados comúnmente.
Un popular marco de interfaz de usuario conocido como AngularJS, desarrollado y mantenido por Google, tiene una directiva llamada ng-transclude que marca el punto de inserción para el DOM transcluido de la directiva padre más cercana que usa la transclusión.
La transclusión se puede realizar en el lado del servidor, por ejemplo, a través de inclusiones del lado del servidor y referencias de entidades de marcado resueltas por el software del servidor. Es una característica de las plantillas de sustitución .
La transclusión del código fuente en el diseño de software o en materiales de referencia permite que el código fuente se presente dentro del documento, pero no se interprete como parte del documento, preservando la consistencia semántica del código insertado en relación con su base de código fuente.
En la gestión de contenidos para publicaciones de una sola fuente , los sistemas de gestión de contenidos de primera clase cada vez más permiten la transclusión y la sustitución. Los sistemas de gestión de contenidos por componentes , en particular, apuntan a llevar el principio de diseño modular a su grado óptimo. MediaWiki proporciona transclusión y sustitución y es una buena opción lista para usar para muchas organizaciones más pequeñas (como pequeñas organizaciones sin fines de lucro y pymes ) que pueden no tener el presupuesto para otras opciones comerciales; para obtener más detalles, consulte Sistema de gestión de contenidos por componentes .
Una característica común en los lenguajes de programación es la capacidad de un archivo de código fuente de transcluir, total o parcialmente, otro archivo de código fuente. La parte transcluida se interpreta como si fuera parte del archivo transcluido. Algunos de los métodos son:
INCLUDE: Función: Ahorrar el esfuerzo del programador incorporando automáticamente subrutinas de biblioteca en el programa fuente.
Muchos otros cambios ocurrieron alrededor de 1972-3, pero el más importante fue la introducción del
preprocesador
, en parte a instancias de Alan Snyder [Snyder 74], pero también en reconocimiento de la utilidad de los mecanismos de inclusión de archivos disponibles en
BCPL
y
PL/I
. Su versión original era extremadamente simple y solo proporcionaba archivos incluidos y
reemplazos de cadenas
simples :
#include
y #define de macros sin parámetros . Poco después, se amplió, principalmente por
Mike Lesk
y luego por John Reiser, para incorporar
macros con argumentos
y
compilación condicional
. El preprocesador se consideró originalmente un complemento opcional del lenguaje mismo.URL alternativa archivada el 4 de febrero de 2020 en Wayback Machine
Alternativas al contenedor #ifndef :
CPP
admite dos formas más de indicar que un archivo de encabezado debe leerse solo una vez. Ninguna es tan portátil como un contenedor '#ifndef' y le recomendamos que no los use en programas nuevos, con la salvedad de que '#import' es una práctica estándar en
Objective-C
. [...] Otra forma de evitar que un archivo de encabezado se incluya más de una vez es con la directiva '
#pragma once
'. Si se ve '#pragma once' al escanear un archivo de encabezado, ese archivo nunca se leerá nuevamente, pase lo que pase.
Incluso antes de la llegada de la máquina
Interdata
, se había dado cuenta, como se mencionó anteriormente, de que muchos programas dependían en un grado indeseable no solo de las convenciones de E/S
de UNIX
sino también de detalles de estrategias de almacenamiento en búfer particularmente favorables para el
PDP-11
.
ME Lesk
escribió
un paquete de rutinas, llamado "
biblioteca de E/S portátil
", e implementó este paquete en las máquinas
Honeywell
e IBM, así como en el PDP-11, en un esfuerzo generalmente exitoso por superar las deficiencias de los paquetes anteriores.