stringtranslate.com

Трансклюзия

В этом примере данные файла B переносятся в документ A.

В информатике трансклюзия — это включение части или всего электронного документа в один или несколько других документов посредством ссылки через гипертекст . Трансклюзия обычно выполняется при отображении ссылающегося документа и обычно является автоматической и прозрачной для конечного пользователя. [1] Результатом трансклюзии является единый интегрированный документ , состоящий из частей, динамически собранных из отдельных источников, возможно, хранящихся на разных компьютерах в разных местах.

Transclusion облегчает модульную конструкцию (используя модель « единого источника истины », будь то данные , код или контент ): ресурс сохраняется один раз и распространяется для повторного использования в нескольких документах. Обновления или исправления ресурса затем отражаются во всех ссылающихся документах.

В системах, где трансклюзия недоступна, и в некоторых ситуациях, где она доступна, но нежелательна, подстановка часто является дополнительным вариантом, при котором статическая копия «единого источника истины» интегрируется в соответствующий документ. Примерами обоих вариантов являются способы, которыми они оба используются при создании контента Википедии, например (см. Wikipedia:Transclusion и Wikipedia:Substitution для получения дополнительной информации). Замещенные статические копии вводят другой набор соображений для управления версиями , чем трансклюзия, но они иногда необходимы.

Тед Нельсон ввел термин для своей нелинейной книги 1980 года «Литературные машины» , но идея мастер-копии и вхождений была применена за 17 лет до этого в Sketchpad . В настоящее время это распространенный прием, используемый авторами учебников, когда одна тема/предмет должна быть обсуждена в нескольких главах. Преимущество этой системы в учебниках заключается в том, что она способствует избыточности данных и сохраняет книгу в управляемом размере.

Технические соображения

Контекстная нейтральность

Трансклюзия работает лучше, когда включенные разделы текста являются самодостаточными, так что значение и действительность текста не зависят от контекста. Например, формулировки типа «как объяснено в предыдущем разделе» проблематичны, поскольку включенный раздел может появляться в другом контексте, вызывая путаницу. Что составляет «контекстно-нейтральный» текст, варьируется, но часто включает такие вещи, как информация о компании или шаблон . Чтобы помочь преодолеть проблемы чувствительности к контексту , такие как вышеупомянутые, системы, способные к трансклюзии, часто также способны подавлять определенные элементы в включенном контенте. Например, Википедия может использовать для этой цели такие теги, как « noinclude », «onlyinclude» и «includeonly». Типичными примерами элементов, которые часто требуют таких исключений, являются заголовки документов, сноски и перекрестные ссылки; таким образом, они могут быть автоматически подавлены при трансклюзии без ручной переработки для каждого случая.

Параметризация

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

Происхождение

Концепция повторного использования содержимого файлов началась с языков программирования: COBOL в 1960 году, [2] за которым последовали BCPL , PL/I , C , [3] и к 1978 году даже FORTRAN . Директива include позволяет повторно использовать общий исходный код , избегая ловушек копирования и вставки программирования и жесткого кодирования констант. Как и во многих инновациях, возникла проблема. Несколько директив include могут предоставлять то же содержимое, что и другая директива include, непреднамеренно вызывая повторения того же исходного кода в конечном результате, что приводит к ошибке . Защита включения помогает решить эту проблему, после однократного включения содержимого, затем исключая дублирующее содержимое. [4]

Идея единого, многократно используемого источника информации привела к таким концепциям, как: Не повторяйтесь и принципу абстракции . Было найдено еще одно применение, чтобы сделать программы более переносимыми . Переносимый исходный код использует директиву include для указания стандартной библиотеки , которая содержит системно-специфический исходный код, который меняется в зависимости от каждой компьютерной среды. [5]

История и реализация проекта Xanadu

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

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

Некоторые гипертекстовые системы, включая проект Теда Нельсона «Xanadu» , поддерживают трансклюзию. [7]

Нельсон продемонстрировал веб-трансклюзию, Little Transquoter (запрограммированный по спецификации Нельсона Эндрю Пэмом в 2004–2005 гг.). [8] Он создает новый формат, построенный на адресах частей веб-страниц; при разыменовывании каждая часть на результирующей странице остается связанная щелчком мыши со своим исходным контекстом.

Реализация в Интернете

HTTP , как протокол передачи, имеет элементарную поддержку трансляции посредством байтовой передачи : указания диапазона байтов в сообщении HTTP-запроса.

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

Издатели веб-контента могут возражать против трансляции материалов со своих собственных веб-сайтов на другие веб-сайты или могут потребовать согласия на это. Критики этой практики могут ссылаться на различные формы встроенных ссылок как на кражу пропускной способности или личинг .

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

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

HTML на стороне клиента

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

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

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

Прокси-серверы могут использовать трансклюзию для сокращения избыточных передач часто запрашиваемых ресурсов.

Популярный фреймворк Front End, известный как AngularJS, разработанный и поддерживаемый Google, имеет директиву callend ng-transclude, которая отмечает точку вставки для включенного DOM ближайшей родительской директивы, использующей включение.

Трансклюзия на стороне сервера

Transclusion может быть выполнено на стороне сервера, как через Server Side includes и ссылки на сущности разметки, разрешенные серверным программным обеспечением. Это функция шаблонов подстановки .

Включение исходного кода

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

Трансклюзия в управлении контентом

В управлении контентом для одноисточниковых публикаций первоклассные системы управления контентом все чаще предусматривают включение и замену. Компонентные системы управления контентом , в частности, стремятся довести принцип модульного дизайна до оптимальной степени. MediaWiki обеспечивает включение и замену и является хорошим готовым вариантом для многих небольших организаций (таких как небольшие некоммерческие организации и МСП ), у которых может не быть бюджета на другие коммерческие варианты; подробности см. в разделе Система управления компонентным контентом .

Внедрение в разработку программного обеспечения

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

Смотрите также

Ссылки

  1. ^ Глушко, Роберт Дж. , ред. (2013). Дисциплина организации . Кембридж, Массачусетс: MIT Press. стр. 231. ISBN 9780262518505.
  2. ^ Первоначальные спецификации для ОБЩЕГО БИЗНЕС-ОРИЕНТИРОВАННОГО ЯЗЫКА (COBOL) для программирования электронных цифровых компьютеров (PDF) . Вашингтон: Министерство обороны. Апрель 1960 г. С. V-27. ВКЛЮЧИТЬ: Функция: Экономить усилия программиста за счет автоматического включения библиотечных подпрограмм в исходную программу.
  3. ^ Ритчи, Деннис М. (1993-03-01). «Развитие языка C». ACM SIGPLAN Notices . 28 (3): 201–208. doi :10.1145/155360.155580. Архивировано из оригинала 27 февраля 2020 г. Многие другие изменения произошли около 1972-3, но самым важным было введение препроцессора , отчасти по настоянию Алана Снайдера [Snyder 74], но также в знак признания полезности механизмов включения файлов, доступных в BCPL и PL/I . Его первоначальная версия была чрезвычайно простой и предоставляла только включенные файлы и простые замены строк : #include и #define макросов без параметров. Вскоре после этого он был расширен, в основном Майком Леском , а затем Джоном Райзером, для включения макросов с аргументами и условной компиляции . Препроцессор изначально считался необязательным дополнением к самому языку.Альтернативный URL-адрес Архивировано 2020-02-04 на Wayback Machine
  4. ^ Столлман, Ричард М .; Вайнберг, Закари. "Заголовочные файлы" (PDF) . Препроцессор C: для gcc версии 6.3.0 (GCC) . стр. 10–11. Альтернативы обертке #ifndef: CPP поддерживает еще два способа указания того, что заголовочный файл должен быть прочитан только один раз. Ни один из них не является столь переносимым, как обертка '#ifndef', и мы рекомендуем вам не использовать их в новых программах, с оговоркой, что '#import' является стандартной практикой в ​​Objective-C . [...] Другой способ предотвратить включение заголовочного файла более одного раза — использовать директиву ' #pragma once '. Если при сканировании заголовочного файла будет обнаружена '#pragma once', этот файл больше никогда не будет прочитан, несмотря ни на что.
  5. ^ Джонсон, SC ; Ритчи, DM (июль–август 1978 г.). «Система разделения времени UNIX: переносимость программ на языке C и система UNIX». The Bell System Technical Journal . 57 (6): 2021–2048. doi :10.1002/j.1538-7305.1978.tb02141.x. ISSN  0005-8580. S2CID  17510065 . Получено 27 февраля 2020 г. Еще до появления машины Interdata было осознано, как упоминалось выше, что многие программы в нежелательной степени зависели не только от соглашений о вводе-выводе UNIX , но и от деталей особенно благоприятных стратегий буферизации для PDP-11 . Пакет процедур, называемый « переносимой библиотекой ввода-вывода », был написан М. Э. Леском и реализован на машинах Honeywell и IBM, а также на PDP-11 в целом успешной попытке преодолеть недостатки более ранних пакетов.
  6. ^ Теодор Х. Нельсон, «Структура файла для сложного, изменяющегося и неопределенного». Труды 20-й Национальной конференции ACM (1965), стр. 84-100
  7. ^ Kolbitsch, Josef; Maurer, Hermann (27 января 2017 г.). «Transclusions in an HTML-Based Environment» (PDF) . Архивировано из оригинала (PDF) 1 июля 2017 г. . Получено 27 января 2017 г. .
  8. ^ Маленький трансцитатор Xanadu.com.au
  9. ^ "AngularJS". docs.angularjs.org . Получено 2016-08-11 .

Дальнейшее чтение

Внешние ссылки