В информатике включение — это включение части или всего электронного документа в один или несколько других документов посредством ссылки через гипертекст . Включение обычно выполняется при отображении ссылочного документа и обычно является автоматическим и прозрачным для конечного пользователя. [1] Результатом трансклюзии является единый интегрированный документ, составленный из частей, динамически собранных из отдельных источников, возможно, хранящихся на разных компьютерах в разных местах.
Включение упрощает модульную конструкцию (с использованием модели « единого источника истины », будь то данные , код или контент ): ресурс сохраняется один раз и распространяется для повторного использования в нескольких документах. Обновления или исправления ресурса затем отражаются во всех ссылочных документах.
В системах, где включение недоступно, а также в некоторых ситуациях, когда оно доступно, но нежелательно, замена часто является дополнительным вариантом, при котором статическая копия «единого источника истины» интегрируется в соответствующий документ. Примерами того и другого служат способы их использования, например, при создании контента Википедии ( дополнительную информацию см. Википедия:Переключение и Википедия:Замена ). Замещенные статические копии требуют иного подхода к контролю версий , чем включение, но иногда они необходимы.
Тед Нельсон придумал этот термин для своей нелинейной книги «Литературные машины» 1980 года , но идея мастер-копии и явлений была применена 17 лет назад в Sketchpad .
Включение работает лучше, когда включенные разделы текста являются самостоятельными, так что значение и достоверность текста не зависят от контекста. Например, такие формулировки, как «как объяснено в предыдущем разделе», являются проблематичными, поскольку включенный раздел может появиться в другом контексте, вызывая путаницу. То, что представляет собой «контекстно-нейтральный» текст, может быть разным, но часто включает в себя такие вещи, как информация о компании или шаблон . Чтобы помочь преодолеть проблемы контекстной чувствительности, такие как вышеупомянутые, системы, способные к включению, часто также способны подавлять определенные элементы в включенном контенте. Например, Википедия может использовать для этой цели такие теги, как «noinclude», «onlyinclude» и «includeonly». Типичными примерами элементов, для которых часто требуются такие исключения, являются заголовки документов, сноски и перекрестные ссылки; таким образом, их можно автоматически подавлять при включении без ручной обработки для каждого экземпляра.
При некоторых обстоятельствах и в некоторых технических контекстах включенные разделы текста могут не требовать строгого соблюдения принципа «контекстной нейтральности», поскольку включенные разделы допускают параметризацию . Параметризация подразумевает возможность изменять определенные части или подразделы включенного текста в зависимости от экзогенных переменных, которые можно изменять независимо. Обычно это делается путем снабжения включенного текста одним или несколькими заполнителями замены . Эти заполнители затем заменяются соответствующими значениями переменных перед визуализацией окончательного включенного вывода в контексте.
Концепция повторного использования содержимого файла началась с языков компьютерного программирования: COBOL в 1960 году [2] , за которым последовали BCPL , PL/I , C , [3] и к 1990-м годам даже FORTRAN . [4] Директива include позволяет повторно использовать общий исходный код , избегая при этом ошибок программирования копирования и вставки и жесткого кодирования констант. Как и во многих нововведениях, возникла проблема. Несколько директив include могут предоставлять тот же контент, что и другая директива include, что непреднамеренно приводит к повторению одного и того же исходного кода в конечном результате, что приводит к ошибке . Охранники включения помогают решить эту проблему, после однократного включения контента исключая дублирующийся контент. [5]
Идея единого, многократно используемого источника информации привела к таким концепциям, как: « Не повторяйся» и принципу абстракции . Было найдено дальнейшее применение для того, чтобы сделать программы более переносимыми . Переносимый исходный код использует директиву include для указания стандартной библиотеки , которая содержит исходный код, специфичный для системы, который варьируется в зависимости от компьютерной среды. [6]
Тед Нельсон, автор слов «гипертекст» и « гипермедиа », также ввел термин «трансклюзия» в своей книге «Литературные машины» 1980 года . Частью его предложения была идея, что микроплатежи можно будет автоматически взимать с читателя за весь текст, независимо от того, сколько фрагментов контента взято из разных мест.
Однако, по словам Нельсона, концепция включения уже стала частью его описания гипертекста в 1965 году . [7] Нельсон определяет трансклюзию как «...один и тот же контент, познаваемый более чем в одном месте», отделяя его от более частных случаев, таких как включение контента из другого места (которое он называет трансдоставкой ) или явная трансдоставка. цитата , которая остается связанной со своим источником (что он называет трансцитацией ).
Некоторые гипертекстовые системы, в том числе собственный проект Теда Нельсона Xanadu Project , поддерживают включение. [8]
Нельсон провел демонстрацию веб-включения, Little Transquoter (запрограммированный по спецификации Нельсона Эндрю Пэмом в 2004–2005 годах). [9] Он создает новый формат, основанный на адресах частей веб-страниц; при разыменовании каждая часть результирующей страницы остается связанной с исходным контекстом.
HTTP , как протокол передачи, имеет элементарную поддержку включения через обслуживание байтов : указание диапазона байтов в сообщении HTTP-запроса.
Включение может происходить либо до (на стороне сервера), либо после (на стороне клиента) передачи. Например:
Издатели веб-контента могут возражать против включения материалов со своих собственных веб-сайтов на другие веб-сайты или могут потребовать для этого согласия. Критики этой практики могут называть различные формы встроенных ссылок кражей полосы пропускания или хищением .
Другие издатели могут специально стремиться к включению своих материалов на другие веб-сайты, например, в форме веб-рекламы или в виде виджетов, таких как счетчик посещений или веб-жучок .
В гибридных приложениях включение используется для объединения ресурсов или данных в новое приложение, например, путем размещения фотографий с географическими тегами на интерактивной карте или путем отображения бизнес-показателей на интерактивной информационной панели .
HTML определяет элементы для включения изображений , сценариев, таблиц стилей , других документов и других типов мультимедиа на стороне клиента . HTML в значительной степени полагался на включение на стороне клиента с самых первых дней существования Интернета (чтобы веб-страницы могли отображаться быстрее до завершения загрузки мультимедийных элементов), а не на встраивание необработанных данных для таких объектов в разметку веб-страницы.
С помощью таких методов, как Ajax , сценарии, связанные с HTML-документом, могут указать веб-браузеру изменить документ на месте, в отличие от более раннего метода, когда приходилось получать совершенно новую версию страницы с веб-сервера. Такие сценарии могут транслировать элементы или документы с сервера после того, как веб-браузер отобразил страницу, например, в ответ на ввод пользователя или изменение условий.
Будущие версии HTML могут поддерживать более глубокое включение частей документов с использованием технологий XML , таких как сущности , ссылки на документы XPointer и манипуляции XSLT .
Прокси-серверы могут использовать трансклюзию для уменьшения избыточной передачи часто запрашиваемых ресурсов.
Популярная интерфейсная платформа, известная как AngularJS, разработанная и поддерживаемая Google , имеет директиву callend ng-transclude, которая отмечает точку вставки для включенного DOM ближайшей родительской директивы, использующей включение.
Включение может быть выполнено на стороне сервера, например, посредством включения на стороне сервера и ссылок на объекты разметки, разрешенных серверным программным обеспечением. Это особенность шаблонов подмены .
Включение исходного кода в проект программного обеспечения или справочные материалы позволяет исходному коду быть представленным в документе, но не интерпретироваться как часть документа, сохраняя семантическую согласованность вставленного кода по отношению к его исходной кодовой базе.
В управлении контентом для публикации из одного источника первоклассные системы управления контентом все чаще предусматривают включение и замену. Системы управления контентом компонентов , в частности, стремятся довести принцип модульного дизайна до оптимальной степени. MediaWiki обеспечивает включение и замену и является хорошим готовым вариантом для многих небольших организаций (таких как небольшие некоммерческие организации и МСП ), у которых может не быть бюджета на другие коммерческие варианты; подробнее см. Система управления контентом компонентов .
ВКЛЮЧИТЬ: Функция: экономить усилия программиста за счет автоматического включения библиотечных подпрограмм в исходную программу.
Многие другие изменения произошли примерно в 1972-1973 годах, но наиболее важным было введение препроцессора
,
частично по настоянию Алана Снайдера [Snyder 74], но также и в знак признания полезности препроцессора. [sic] механизмы включения файлов, доступные в
BCPL
и
PL/I
.
Его первоначальная версия была чрезвычайно простой и содержала только включаемые файлы и простые
замены строк
:
#include
и #define для макросов без параметров.
Вскоре после этого он был расширен, в основном
Майком Леском
, а затем Джоном Райзером, для включения
макросов с аргументами
и
условной компиляции
.
Препроцессор изначально считался необязательным дополнением к самому языку.Альтернативный URL-адрес. Архивировано 4 февраля 2020 г. на Wayback Machine.
Строка INCLUDE — это новая функция Фортрана, которая позволяет включать исходный код из указанного файла. Это удобный способ разместить один и тот же текст в нескольких местах программы.[ неработающая ссылка ] Альтернативный URL
Альтернативы Wrapper #ifndef :
CPP
поддерживает еще два способа указать, что файл заголовка должен быть прочитан только один раз.
Ни один из них не является столь переносимым, как оболочка #ifndef, и мы рекомендуем вам не использовать их в новых программах, с оговоркой, что #import является стандартной практикой в
Objective-C
.
[...] Другой способ предотвратить повторное включение заголовочного файла — это использовать директиву «
#pragma Once
».
Если при сканировании файла заголовка отображается «#pragma Once», этот файл больше никогда не будет прочитан, несмотря ни на что.
Еще до появления машины
Interdata
, как упоминалось выше, было понятно, что многие программы в нежелательной степени зависят не только от
соглашений ввода-вывода
UNIX , но и от деталей особенно благоприятных стратегий буферизации для
PDP-11
.
Пакет подпрограмм, названный «
переносной библиотекой ввода-вывода
», был написан
М. Е. Леском
и реализован на машинах
Honeywell
и IBM, а также PDP-11 в целом успешной попытке преодолеть недостатки более ранних пакетов.