Кіріспе

Бір дерек жиынтығын екіншісіне қосу, Уикипедияда автоматты түрде трансклюзиялау

Компьютерлік ғылымда трансклюзия – электрондық құжаттың бір бөлігін немесе толық құжатты гипермәтін арқылы сілтеме беру арқылы бір немесе бірнеше басқа құжаттарға енгізу. Трансклюзия әдетте сілтеме берілген құжат көрсетілген кезде орындалады және көбінесе автоматты түрде жүзеге асырылады, соңғы пайдаланушы үшін көрінбейді. Трансклюзияның нәтижесі – әртүрлі компьютерлерде сақталатын, бөлек көздерден динамикалық түрде құрастырылған бөліктерден тұратын біртұтас құжат. Трансклюзия модульдік дизайнды жеңілдетеді («ақиқаттың бір көзі» моделін қолдану, деректерде, кодта немесе мазмұнда болсын): ресурс бір рет сақталады және көптеген құжаттарда қайта пайдалану үшін таратылады. Ресурстың жаңартулары немесе түзетулері сілтеме берілген барлық құжаттарда автоматты түрде көрініс табады. Трансклюзия мүмкін емес жүйелерде, немесе ол мүмкін болғанмен, қажет емес жағдайларда, ауыстыру жиі қолданылады, онда «ақиқаттың бір көзінің» статикалық көшірмесі тиісті құжатқа енгізіледі. Екеуінің де мысалдары, мысалы, Уикипедия мазмұнын жасауда қолданылатын тәсілдер арқылы ұсынылады (толық ақпарат алу үшін Уикипедия:Трансклюзия және Уикипедия:Ауыстыру беттерін қараңыз). Статикалық көшірмелерді орналастыру нұсқаны бақылауға қатысты трансклюзиядан өзге мәселелерді тудырады, бірақ кейде олар қажет болады. Тед Нельсон бұл терминді 1980 жылы шығарған «Әдеби машиналар» атты сызықты емес кітабында қолданды, бірақ бас көшірме және оқиғалар туралы идея 17 жыл бұрын, Sketchpad бағдарламасында қолданылған.

Контексттік бейтараптық

Трансклюзия мәтіннің трансклюзияланған бөліктері өздігінен толыққан кезде жақсы жұмыс істейді, осылайша мәтіннің мағынасы мен дұрыстығы контекстке тәуелсіз болады. Мысалы, "алдыңғы бөлімде түсіндірілгендей" сияқты тіркестер қиындық тудырады, себебі трансклюзияланған бөлім басқа контексте пайда болуы мүмкін, бұл жаңсақтыққа алып келеді. "Контексттен тәуелсіз" мәтіннің қандай болуы әртүрлі, бірақ көбінесе компания туралы ақпарат немесе стандартты мәтін сияқты нәрселерді қамтиды. Жоғарыда айтылғандай, контекстке сезімталдық мәселелерін шешуге көмектесу үшін трансклюзияға қабілетті жүйелер көбінесе трансклюзияланған мазмұндағы белгілі бір элементтерді жоюға қабілетті. Мысалы, Уикипедия осы мақсатта "noinclude", "onlyinclude" және "includeonly" сияқты таңбаларды пайдалана алады. Мұндай ерекшеліктерді жиі қажет ететін элементтердің мысалдары – құжат тақырыптары, түсіндірмелер және сілтемелер; осылайша, оларды әрбір жағдайда қолмен өңдеусіз, трансклюзия кезінде автоматты түрде жоюға болады.

Параметрлеу

Кейбір жағдайларда және техникалық тұрғыдан алғанда, көшірілген мәтін бөлімдері "контексттік бейтараптылық" принципін қатаң сақтауды қажет етпеуі мүмкін, себебі көшірілген бөлімдер параметрленуге жарайды. Параметрлену дегеніміз – көшірілген мәтіннің белгілі бір бөліктерінің немесе кіші бөлімдерінің сыртқы факторларға байланысты өзгертілу мүмкіндігі, ал бұл факторлар тәуелсіз түрде өзгертіле алады. Мұндай өзгертулер көбінесе бір немесе бірнеше алмастыру орындарын (placeholder) қамтитын мәтін арқылы жасалады. Бұл орындар соңғы көшірілген нәтиже көрсетілген кезде тиісті айнымалы мәндермен ауыстырылады.

Шығу тегі

Файл мазмұнын қайта пайдалану тұжырымы компьютерлік бағдарламалау тілдерімен басталды: 1960 жылы COBOL, одан кейін BCPL, PL/I, C, ал 1978 жылы тіпті FORTRAN. "Қосу" директивасы ортақ бастапқы кодты қайта пайдалануға мүмкіндік береді, сонымен бірге көшіріп-жабыстыру бағдарламалаудың және тұрақтыларды қатаң кодтаудың кемшіліктерінен сақтайды. Көптеген жаңалықтар сияқты, мұнда да бір мәселе туды. Бірнеше "қосу" директивасы бірдей мазмұнды ұсынуы мүмкін, нәтижесінде соңғы нәтижеде бірдей бастапқы кодтың қайталануына және қатеге әкелуі мүмкін. "Қосу қорғаулары" бұл мәселені шешуге көмектеседі, мазмұн бір рет қосылғаннан кейін, одан әрі қайталама мазмұнды жояды. Бір ғана, қайта қолданылатын ақпарат көзі туралы идея "Өзіңді қайталама" және абстракция принципі сияқты ұғымдарға алып келді. Бағдарламаларды көшіруге оңай ету үшін де пайдалы болды. Көшіруге оңай бастапқы код стандартты кітапхананы көрсету үшін "қосу" директивасын пайдаланады, онда әр компьютерлік ортаға тән жүйелік бастапқы код болады.

Xanadu жобасының тарихы мен жүзеге асырылуы

"Гипертекст" және "гипермедиа" терминдерін енгізген Тед Нельсон 1980 жылы жариялаған "Әдеби машиналар" кітабында "трансклюзия" терминін де пайдаланған. Оның ұсынысының бір бөлігі – әртүрлі дереккөздерден алынған мазмұн фрагменттеріне қарамастан, барлық мәтін үшін оқырманнан автоматты түрде шағын төлемдер жиналуы мүмкін деген идея еді. Алайда, Нельсонның сөзіне сәйкес, трансклюзия тұжырымы оның 1965 жылғы гипертекст сипаттамасының бір бөлігі болған. Нельсон трансклюзияны "бірнеше жерде белгілі бір мазмұнның болуы" деп анықтайды, оны басқа арнайы жағдайлардан – мысалы, басқа жерден мазмұн қосудан (ол трансдилерея деп атайды) немесе бастапқы көзіне байланысын сақтайтын нақты цитатадан (ол трансквотация деп атайды) ажыратады. Кейбір гипертекст жүйелері, Тед Нельсонның Xanadu жобасы да, трансклюзияны қолдайды. Нельсон веб-трансклюзияның демонстрациясын көрсетті – Кішкентай Трансквотер (2004-2005 жылдары Эндрю Пэм Нельсонның талаптары бойынша бағдарламалады). Ол веб-беттерден бөлік адрестеріне негізделген жаңа форматты құрайды; дереккөзден алынған кезде, пайда болған беттің әр бөлігі бастапқы контексіне сілтеме арқылы байланысты болады.

Интернеттегі іске асыру

HTTP, беру протоколы ретінде, байттар арқылы трансклюзияны қарапайым түрде қолдайды: HTTP сұраныс хабарында байт диапазонын көрсету арқылы. Трансклюзия беруден бұрын (серверлік жағында) немесе кейін (клиенттік жағында) жүзеге асуы мүмкін. Мысалы:
HTML құжаты серверде Server Side Includes немесе басқа серверлік қолданбаны пайдаланып, клиентке жіберуден бұрын алдын ала құрастырылуы мүмкін. XML Entities немесе HTML Object-тері клиент тарапынан талданады, содан кейін негізгі құжаттан бөлек тиісті ресурстар сұралады. Веб-браузер өз алгоритмдерін қолдана отырып элементтерді кэштеуі мүмкін, бұл құжаттың белгілеуінде нақты нұсқауларсыз жұмыс істеуге мүмкіндік береді. AngularJS ішкі директивалардың жұмыс істеуі үшін трансклюзияны қолданады. Веб-контентті жариялаушылар өз веб-сайттарынан материалдарды басқа веб-сайттарға трансклюзиялауға қарсы болуы мүмкін немесе мұндай әрекетке келісім талап етуі мүмкін. Бұл практиканы сынға түсіретіндер әртүрлі түрдегі кіріктірілген сілтемелерді жолақтың ұрлануы немесе ақша табу деп атауы мүмкін. Басқа жариялаушылар өздерінің материалдарын басқа веб-сайттарға трансклюзиялауды қадағалауы мүмкін, мысалы, веб-жарнама түрінде немесе хит-санауыш немесе веб-кене сияқты виджеттер ретінде. Маш-аптар ресурстарды немесе деректерді жаңа қолданбаға біріктіру үшін трансклюзияны пайдаланады, мысалы, геотагталған фотосуреттерді интерактивті картаға орналастыру арқылы немесе бизнес-мәліметтерді интерактивті панельде көрсету арқылы.

Клиент жағындағы HTML

HTML кескіндерді, скрипттерді, стильдік кестелерді, басқа құжаттарды және басқа да медиа түрлерін клиенттік жағынан қосу элементтерін анықтайды. HTML вебтің алғашқы күндерінен бастап клиенттік қосуға көп сүйенді (осылайша мультимедиялық элементтер жүктелуді аяқтамай тұрып веб-беттер тезірек көрсетілуі мүмкін), веб-беттің құрамасына мұндай объектілердің бастапқы деректерін тікелей енгізудің орнына. Ajax сияқты техникалар арқылы HTML құжатына байланысты скрипттер веб-браузерге веб-серверден беттің толық жаңа нұсқасын алудың бұрынғы тәсіліне қарағанда, құжатты өзгертуге нұсқау бере алады. Мұндай скрипттер веб-браузер бетті көрсеткеннен кейін, мысалы, пайдаланушының әрекеттеріне немесе жағдайдың өзгеруіне жауап ретінде серверден элементтерді немесе құжаттарды қосуы мүмкін. HTML-дің болашақ нұсқалары XML технологияларын пайдаланып, құжаттардың бөліктерін тереңірек қосу мүмкіндігін ұсына алады, мысалы, анықтамалар, XPointer құжаттарына сілтеме беру және XSLT түрлендірулері. Прокси-серверлер жиі сұралатын ресурстардың қайталама берілуін азайту үшін қосуды пайдалана алады. Google жасаған және қолдаған AngularJS деп аталатын танымал Front End Framework-те transclusion-ды қолданатын жақын аталық директиваның қосылған DOM-і үшін енгізу нүктесін белгілейтін ngTransclude директивасы бар.

Сервер жағындағы трансклюзия

Трансклюзия сервер жағында, мысалы, серверлік кірілімдер (Server Side Includes) және серверлік бағдарламалық қамтамасыз етумен ашылатын белгілі бір нышандар арқылы жүзеге асырылуы мүмкін. Бұл алмастыру үлгілерінің мүмкіндігі.

Көшірме кодты енгізу

Бағдарламалық кодты немесе анықтамалық материалдарды жобалауға бастапқы кодты қосу, бастапқы кодты құжаттың ішінде көрсетуге мүмкіндік береді, бірақ оны құжаттың бір бөлігі ретінде интерпретацияламайды, бастапқы кодтың бастапқы код базасына қатысты семантикалық тұжырымдылығын сақтайды.

Контентті басқарудағы трансклюзия

Бір көзден жариялау үшін мазмұнды басқаруда, жоғары сапалы мазмұнды басқару жүйелері көбінесе трансклюзия және алмастыру мүмкіндіктерін ұсынады. Компоненттік мазмұнды басқару жүйелері, әсіресе, модульдік жобалау принципін ең тиімді деңгейге жеткізуді мақсат етеді. MediaWiki трансклюзия және алмастыруды қамтамасыз етеді және басқа коммерциялық нұсқаларға қаражат жоқ көптеген шағын ұйымдар үшін (мысалы, кішігірім қайырымдылық ұйымдары мен ШОБ) қолжетімді жақсы нұсқа болып табылады; толық мәліметтер үшін Компоненттік мазмұнды басқару жүйесіне қараңыз.

Бағдарламалық жасақтауда іске асыру

Бағдарламалау тілдерінде жиі кездесетін мүмкіндік – бір бастапқы код файлының екінші бастапқы код файлын толығымен немесе ішінара қосу. Қосылған бөлік, оны қосушы файлдың бір бөлігі ретінде қарастырылады. Мұндай әдістердің кейбіреулері:

Қосу (Include): Кейбір бағдарламалар басқа файлды тікелей қосады. Қосылған файлда орындалатын код, жарияланымдар, компилятор нұсқаулары және/немесе компиляция уақытындағы айнымалыларға байланысты құжаттың кейінгі бөлімдеріне өту мүмкіндігі болуы мүмкін.

Макрос: Ассемблер және кейбір жоғары деңгейлі бағдарламалау тілдері макростарды қолдайды. Макростар – бұл арнайы атаулы нұсқаулар, олар анықтамалар жасауға, орындалатын кодты құруға, циклдар мен басқа да шешімдерді іске асыруға және файл көрсетілген кезде макросқа берілген параметрлерге сәйкес құжатты өзгертуге пайдаланылады.

Көшіру (Copy): Cobol бағдарламалау тілінде COPY командасы бар. Осы команда арқылы көшірілген файл, көшіру құжатына енгізіліп, COPY командасын ауыстырады. Көшірілген файлдағы код пен жарияланымдар көшіру командасының бөлігі ретінде REPLACEING аргументі арқылы өзгертілуі мүмкін.