Трансклюзия — Википедия

Трансклюзия в информатике — включение одного электронного документа или его части в другие электронные документы посредством гипертекстовой ссылки. Трансклюзия обычно подразумевает отображение документа, на который делается ссылка. Документ (запись) отображается автоматически и доступен конечному пользователю. Кажется, что в результате трансклюзии образуется единый сложный документ, в то время как на самом деле его части были оперативно собраны из разных источников, которые могут храниться на разных удаленных друг от друга компьютерах.

С помощью трансклюзии реализуется модульность: ресурс можно собрать один раз, а затем повторно использовать во множестве документов. Тогда обновления и исправления, внесенные в ресурс, будут отображаться и во всех ссылающихся на него документах. Термин предложен Тедом Нельсоном в «нелинейной» книге 1980 года «Литературные машины» (книга составлена таким образом, что её части можно читать не по порядку).

Технические аспекты[править | править код]

Независимость от контекста[править | править код]

Создание документов с помощью трансклюзии приводит к лучшему результату, когда составные части текста автономны, так что их ценность и содержательность не зависят от контекста, в который они включены. Например, формулировка «как было описано выше» нежелательна, потому что с помощью трансклюзии любая часть текста может быть помещена в другой контекст и тогда она будет непонятна.

Содержание контекстно нейтральной записи может быть очень разным. Например, в ней может заключаться информация о компании или шаблон документа. Контекстно-нейтральная запись может также быть (аннотированным или озаглавленным) видео-, аудиофайлом, картинкой и т. п.

Параметризация[править | править код]

При определённых обстоятельствах и в некоторых контекстах, включение частей текста в другие документы посредством трансклюзии может не требовать строгого следования принципу «контекстной нейтральности». Под «параметризаций» записей (фрагментов текста) Тед Нельсон понимает возможность уточнять их содержимое при помощи формул с переменными, которые зависят от контекста. Обычно параметризация обеспечивается включением в запись одной или нескольких лакун (substitution placeholders), которые затем заполняются переменными значениями, прежде чем завершенная таким образом запись предстает читателю в контексте.

История[править | править код]

Тед Нельсон, также впервые предложивший понятия «гипертекст» и «гипермедиа», предложил термин «трансклюзия» (англ. transclusion) в книге 1980 года «Литературные машины». Частью предложенной им концепции было представление о том, что микроплатежи могут автоматически взиматься с читателя за весь текст вне зависимости от того, сколько фрагментов содержимого взято из разных источников. Соответственно, правообладатели будут получать доход за счёт включения принадлежащих им фрагментов в другие тексты.

Однако, как пишет Нельсон, концепция трансклюзии уже частично входила и в описание «гипертекста», сделанного им в 1965 году. Нельсон определяет трансклюзию как «одно и то же содержимое, доступное более чем в одном источнике»[1]. Он отличает трансклюзию от более частных случаев, таких, как включение содержимого, хранящего на разных носителеях (которое он называет «транс-передача» («transdelivery»)) или «очевидное цитирование, сохраняющее связь с оригиналом» (которое он называет «транс-цитирование» («transquotation»)).

Некоторые гипертекстные системы, в том числе — проект «Занаду» самого Теда Нельсона, — позволяют пользоваться трансклюзией. Нельсон создал демонстрацию Интернет-трансклюзии, Маленький Транс-цитатник (который Эндрю Пэм запрограммировал в 2004—2005 годах, следуя инструкциям Нельсона)[2]. Он представляет собой новый формат интернет-портала, построенный на обращении к частям других Интернет-страниц; каждый фрагмент на итоговой странице остается связанным с исходным контекстом.

Реализация в интернете[править | править код]

HTTP как протокол передачи частично поддерживает трансклюзию, допуская фрагментарное скачивание.

Трансклюзия может произойти как до (на стороне сервера), так и после передачи (на стороне клиента). Например:

  • сервер может подготовить документ HTML для клиента заранее, используя Включения на стороне сервера или какой-либо схожий механизм со стороны сервера;
  • при разборе сущностей XML или объектов HTML клиент отправляет отдельные от основного документа запросы на получение соответствующих ресурсов;
  • веб-браузер может с помощью внутренних алгоритмов кэшировать некоторые элементы без явных указаний в разметке документа;
  • AngularJS использует трансклюзию для работы вложенных директив.

Производители интернет-контента могут выдвинуть обвинения за трансклюзию материала с их сайтов на другие сайты, или же требовать запроса на их предварительное согласие. Критики трансклюзии обычно ссылаются на различные формы хотлинков[неизвестный термин] или личинга[неизвестный термин].

Другие владельцы сайтов, наоборот, могут специально добиваться включения своего материала в другие сайты посредством трансклюзии, не только в форме интернет-рекламы, но и в виде различных устройств, как, например, счетчик посещений.

Приложения типа мэшап[неизвестный термин] могут использовать трансклюзию для сбора ресурсов или информации в новом приложении, вставляя фотографии с определённой геопозицией в интерактивную карту или показывая бизнес-показатели в панели индикаторов.

HTML на клиенте[править | править код]

HTML определяет элементы для трансклюзии со стороны клиента: изображений, скриптов, стилей, других документов и других типов медиа. С момента своего появления HTML использует трансклюзию на клиенте, вместо внедрения содержимого объектов в разметку интернет-страницы. Это, в свою очередь, позволяет пользователю просматривать интернет-страницу раньше, чем загрузятся все элементы.

Используя Ajax, скрипт, прилагающийся к HTML-документу, может попросить браузер изменить часть документа. Раньше же требовалось загружать с сервера новую версию страницы целиком. Такие скрипты могут вставлять элементы или документы с сервера с помощью трансклюзии уже после того, как браузер отобразил страницу, например, по запросу пользователя или реагируя на внешние изменения.

Будущие версии HTML, может быть, будут поддерживать трансклюзию частей документов, используя технологии XML (SGML entity), адресацию документов XPointer и XSLT-обращения. (XPointer является запатентованной технологией[3]).

Интересный пример использования трансклюзии можно найти в одностраничном приложении TiddlyWiki[4].

Прокси-серверы могут использовать трансклюзию для того, чтобы уменьшить избыточную пересылку часто запрашиваемых ресурсов. AngularJS поддерживает директиву «ng-transclude», для обозначения точки включения DOM-дерева в ближайшую родительскую директиву, которая использует трансклюзию.

Трансклюзия на уровне пользователя[править | править код]

Есть продукты, которые являются показательными примерами использования элементов трансклюзии инструментами пользователя (без программирования). Некоторые вики-системы, такие как MediaWiki (технология, лежащая в основе Википедии) и TWiki, позволяют пользователю напрямую включать отдельные документы в другие документы посредством ссылки. Другие решения, такие как Author-It, позволяют создавать вложимые фрагменты («компоненты»). Изменение копии компонента в одном месте изменяет все её экземпляры в других местах[5].

В то время, как социальные сети, форумы и другие медиа-сервисы позволяют хранить и скачивать копии изображений, некоторые сервисы позволяют использовать изображения только с внешнего хостинга, поддерживая таким образом трансклюзию изображений. Типичным сценарием внедрения роликов Youtube и других видео-хранилищ в веб-страницы является трансклюзия, в противоположность хранению копий на сервере.

Реализация в вики-проектах[править | править код]

Трансклюзия на сервере[править | править код]

Трансклюзия может выполняться на сервере посредством SSI или ссылок на SGML-сущности, разрешаемые ПО сервера. Трансклюзия также может выполняться шаблонизатором.

Трансклюзия исходного кода[править | править код]

Трансклюзия исходного кода в проектную или справочную документацию позволяет представлять исходный код в документе. Исходный код тогда не будет считаться частью документа и сохранит смысловую последовательность внутреннего кода, в отличие от основания кода его источника.

Примечания[править | править код]

  1. Theodor H. Nelson, «A File Structure for the Complex, the Changing and the Indeterminate.» Proceedings of the ACM 20th National Conference (1965), pp. 84-100
  2. The Little Transquoter Архивная копия от 30 августа 2007 на Wayback Machine Xanadu.com.au
  3. XPointer Patent Statements. Дата обращения: 11 июля 2016. Архивировано 9 октября 2016 года.
  4. TiddlyWiki — a non-linear personal web notebook. Дата обращения: 11 июля 2016. Архивировано 12 июля 2016 года.
  5. «A Modern Approach to the World’s Content Problem» http://connect.author-it.com/why-components Архивная копия от 14 сентября 2016 на Wayback Machine

Литература[править | править код]