
コンピュータサイエンスにおいて、トランスクルージョンとは、ハイパーテキストを介した参照によって、電子文書の一部または全体を1つ以上の他の文書に組み込むことです。トランスクルージョンは通常、参照元の文書が表示されたときに実行され、通常は自動的に実行され、エンドユーザーには透過的です。[1]トランスクルージョンの結果、別々のコンピュータ上の異なる場所に保存されている可能性のある別々のソースから動的に組み立てられた部分から構成される、統合された単一の文書が作成されます。
トランスクルージョンは、データ、コード、コンテンツを問わず、「唯一の真実の源」モデルを用いたモジュール設計を容易にします。リソース は一度保存され、複数のドキュメントで再利用できるように分散されます。リソースの更新や修正は、参照元のドキュメントに反映されます。
トランスクルージョンが利用できないシステム、あるいは利用できても望ましくない状況では、代替手段となることがよくあります。代替手段とは、「唯一の真実の情報源」の静的コピーを関連文書に統合するものです。両者の例として、Wikipediaのコンテンツ作成におけるそれらの利用方法が挙げられます(詳しくはWikipedia:トランスクルージョンとWikipedia:代替を参照してください)。静的コピーの代替は、バージョン管理においてトランスクルージョンとは異なる考慮事項をもたらしますが、場合によっては必要となることもあります。
テッド・ネルソンは、1980年に出版した非線形の著書『Literary Machines』でこの用語を考案しました。引用文はそれぞれ元の情報源に結び付けられ、テキストは「トランスクルード」(他の情報源を包含すること)できるという発想に基づいています。[2]しかし、マスターコピーとオカレンスの概念は、17年前の『Sketchpad』で既に適用されていました。現在では、単一のトピック/主題を複数の章に分けて議論する必要がある場合、教科書執筆者の間でよく用いられる手法となっています。教科書におけるこのシステムの利点は、データの冗長性を高め、書籍のサイズを扱いやすいものに抑えられることです。
トランスクルージョンは、トランスクルージョンされたテキスト部分が自己完結的で、テキストの意味と妥当性が文脈に依存しない場合に、より効果的に機能します。例えば、「前のセクションで説明したように」のような表現は、トランスクルージョンされた部分が別の文脈で出現し、混乱を招く可能性があるため、問題となります。「文脈中立」なテキストとはどのようなものかは様々ですが、多くの場合、企業情報や定型句などが含まれます。前述のような文脈依存の問題を克服するために、トランスクルージョン機能を持つシステムは、トランスクルージョンされたコンテンツ内の特定の要素を抑制する機能も備えていることがよくあります。例えば、Wikipediaでは「noinclude」、「onlyinclude」、「includeonly」などのタグをこの目的で使用できます。このような例外が必要となることが多い要素の典型的な例としては、文書のタイトル、脚注、相互参照などがあります。このように、これらの要素はトランスクルージョン時に自動的に抑制されるため、インスタンスごとに手動で修正する必要はありません。
状況や技術的な文脈によっては、トランスクルードされたテキスト部分はパラメータ化が可能なため、「文脈中立性」の原則を厳密に遵守する必要がない場合があります。パラメータ化とは、独立して変更可能な外生変数に応じて、トランスクルードされたテキストの特定の部分またはサブセクションを変更できることを意味します。これは通常、トランスクルードされたテキストに1つ以上の置換プレースホルダーを提供することで行われます。これらのプレースホルダーは、最終的なトランスクルードされた出力が文脈に沿ってレンダリングされる前に、対応する変数値に置き換えられます。
ファイル内容を再利用するという概念は、コンピュータプログラミング言語から始まりました。1960年のCOBOL [3] 、続いてBCPL、PL/I、C [4]、そして1978年までにはFORTRANが生まれました。includeディレクティブは、コピーアンドペーストプログラミングや定数のハードコーディングの落とし穴を避けながら、共通のソースコードを再利用できます。多くのイノベーションと同様に、問題が発生しました。複数のincludeディレクティブが別のincludeディレクティブと同じ内容を提供する可能性があり、意図せず同じソースコードが最終結果に繰り返され、エラーが発生します。includeガードは、単一の内容のインクルード後に重複する内容を省略することで、この問題を解決します。[5]
単一の再利用可能な情報源という考え方から、「Don't Repeat Yourself(同じことを繰り返さない)」や抽象化の原則といった概念が生まれました。さらに、プログラムの移植性を高めるためにも活用されています。ポータブルソースコードは、includeディレクティブを使用して標準ライブラリを指定します。このライブラリには、コンピュータ環境ごとに異なるシステム固有のソースコードが含まれています。[6]
ハイパーテキストとハイパーメディアという言葉を考案したテッド・ネルソンは、1980年の著書『文学マシン』の中でトランスクルージョンという用語も考案しました。彼の提案の一部は、様々な場所からどれだけ多くのコンテンツスニペットが引用されていても、テキスト全体に対して読者から自動的にマイクロペイメントを徴収できるというものでした。
しかし、ネルソンによれば、トランスクルージョンの概念は、彼が1965年にハイパーテキストについて述べた際に既にその一部を形成していたという。[7] ネルソンはトランスクルージョンを「…同じコンテンツが複数の場所に存在することが分かっている状態」と定義し、別の場所からのコンテンツの包含(ネルソンはトランスデリバリーと呼ぶ)や明示的な引用がその出所に結びついたままである(ネルソンはトランスクォーテーションと呼ぶ)などのより特殊なケースとは区別している。
テッド・ネルソン自身のザナドゥ・プロジェクトを含むいくつかのハイパーテキストシステムはトランスクルージョンをサポートしています。[8]
ネルソンは、ウェブトランスクルージョンのデモであるリトル・トランスクォータ(2004年から2005年にかけてアンドリュー・パムがネルソンの仕様に基づいてプログラムしたもの)を発表しました。[9]これは、ウェブページから部分アドレスに基づいて新しいフォーマットを作成します。デリファレンスされた後も、結果ページの各部分は元のコンテキストにクリック接続されたままになります。
伝送プロトコルとしてのHTTPは、バイト サービング(HTTP 要求メッセージ内の バイト範囲を指定する)によるトランスクルージョンを基本的にサポートしています。
トランスクルージョンは、送信前(サーバー側)または送信後(クライアント側)に発生する可能性があります。例:
ウェブコンテンツの発行者は、自社ウェブサイトから他のウェブサイトへのコンテンツの転載に反対したり、転載に同意を求めたりする場合があります。この行為を批判する人々は、様々な形態のインラインリンクを帯域幅の窃盗またはリーチングと呼ぶことがあります。
他の出版社は、Web 広告や、ヒット カウンターやWeb バグなどのウィジェットの形で、自社のコンテンツを他の Web サイトに転載することを明確に希望する場合があります。
マッシュアップは、インタラクティブ マップ上にジオタグ付き写真を配置したり、インタラクティブダッシュボードにビジネス メトリックを表示したりするなど、トランスクルージョンを利用してリソースやデータを新しいアプリケーションに組み立てます。
HTML は、画像、スクリプト、スタイルシート、その他のドキュメント、その他の種類のメディアをクライアント側でトランスクルージョンするための要素を定義します。HTML は、Web の初期の頃から、マルチメディア要素の読み込みが完了する前に Web ページをより速く表示できるように、そのようなオブジェクトの生のデータを Web ページのマークアップにインラインで埋め込むのではなく、クライアント側でトランスクルージョンすることに大きく依存してきました。
Ajaxなどの技術を利用することで、HTML文書に関連付けられたスクリプトは、ウェブブラウザに文書をその場で変更するよう指示することができます。これは、ウェブサーバーからページの全く新しいバージョンを取得する従来の手法とは対照的です。このようなスクリプトは、例えばユーザー入力や状況の変化に応じて、ウェブブラウザがページをレンダリングした後に、サーバーから要素や文書をトランスクルードすることがあります。
HTML の将来のバージョンでは、エンティティ、XPointerドキュメント参照、XSLT操作 などのXMLテクノロジを使用して、ドキュメントの一部をさらに深くトランスクルージョンすることがサポートされる可能性があります。
プロキシ サーバーは、一般的に要求されるリソースの冗長な送信を削減するためにトランスクルージョンを使用する場合があります。
Googleが開発および保守するAngularJSとして知られる人気のフロントエンド フレームワークには、トランスクルージョンを使用する最も近い親ディレクティブのトランスクルージョンされた DOM の挿入ポイントをマークする callend ng-transclude ディレクティブがあります。
トランスクルージョンは、サーバー側インクルードや、サーバーソフトウェアによって解決されるマークアップ実体参照などを通じて、サーバー側で実現できます。これは置換テンプレートの機能です。
ソース コードをソフトウェア設計または参照資料にトランスクルージョンすると、ソース コードはドキュメント内に表示されますが、ドキュメントの一部として解釈されず、挿入されたコードとそのソース コードベースとの関係における意味の一貫性が保持されます。
シングルソースパブリッシングのコンテンツ管理において、トップクラスのコンテンツ管理システムは、トランスクルージョンと置換機能を提供するようになっています。特にコンポーネント型コンテンツ管理システムは、モジュール設計の原則を最適なレベルまで引き上げることを目指しています。MediaWikiはトランスクルージョンと置換機能を備えており、他の商用オプションを購入する予算がない多くの小規模組織(小規模な非営利団体や中小企業など)にとって、すぐに利用できる優れた選択肢となります。詳細については、コンポーネント型コンテンツ管理システムを参照してください。
プログラミング言語に共通する機能の一つに、あるソースコードファイルから別のソースコードファイルの全体または一部をトランスクルードする機能があります。トランスクルードされた部分は、トランスクルード元のファイルの一部であるかのように解釈されます。トランスクルードの方法には、以下のようなものがあります。
{{cite AV media}}:|last=一般的な名前があります(ヘルプ)
:機能:ライブラリサブルーチンをソースプログラムに自動的に組み込むことで、プログラマの労力を軽減します。
プリプロセッサ
の導入です
。これはAlan Snyder [Snyder 74] の勧めもあり、BCPL
と
PL
/I
で利用可能なファイルインクルード機構の有用性を認識したことも一因でした。その最初のバージョンは非常に単純で、インクルードファイルと単純な
文字列置換
(
パラメータなしマクロの
#includeと#define)のみを提供していました。その後まもなく、主に
マイク・レスク
、そしてジョン・ライザーによって
拡張され、
引数付きマクロ
と
条件付きコンパイル
が組み込まれました。プリプロセッサは当初、言語自体のオプションの補助機能と考えられていました。
代替URLは2020年2月4日にWayback Machineにアーカイブされています
ラッパー#ifndefの代替:
CPPは
、ヘッダーファイルを一度だけ読み込むことを示す2つの方法をサポートしています。どちらもラッパー '#ifndef' ほど移植性が高くないため、新しいプログラムでは使用しないことをお勧めします。ただし、Objective
-C
では '#import' が標準的な方法であるため注意が必要です。[...] ヘッダーファイルが複数回インクルードされるのを防ぐもう1つの方法は、'
#pragma once
'ディレクティブを使用することです。ヘッダーファイルのスキャン中に '#pragma once' が見つかった場合、そのファイルはどのような状況でも二度と読み込まれません。
Interdata
マシンの登場以前から、多くのプログラムが
UNIXのI/O規則だけでなく、
PDP-11
に特に有利なバッファリング戦略の詳細にも
望ましくない程度に依存していることが認識されていました
。 「
ポータブルI/Oライブラリ
」
と呼ばれるルーチンのパッケージは、
ME Leskによって書かれ、
Honeywell
とIBMのマシンとPDP-11に実装され
、以前のパッケージの欠陥を克服するための一般的に成功した取り組みでした。