
コンピュータサイエンスにおいて、トランスクルージョンとは、ハイパーテキストを介した参照によって、電子文書の一部または全部を1つ以上の他の文書に組み込むことです。トランスクルージョンは通常、参照文書が表示されているときに実行され、通常は自動でエンドユーザーには透過的です。[1]トランスクルージョンの結果は、別々の場所にある異なるコンピュータに保存されている可能性のある別々のソースから動的に組み立てられた部分で構成された単一の統合文書です。
トランスクルージョンは、モジュール設計を容易にします (データ、コード、またはコンテンツのいずれにおいても、「唯一の真実のソース」モデルを使用します)。リソース は一度保存され、複数のドキュメントで再利用できるように配布されます。リソースの更新または修正は、参照ドキュメントに反映されます。
トランスクルージョンが利用できないシステムや、利用できても望ましくない状況では、多くの場合、置換が補完的なオプションとなり、関連するドキュメントに「唯一の真実のソース」の静的コピーが統合されます。両方の例は、たとえば、Wikipedia のコンテンツを作成する際に両方が使用される方法によって提供されます (詳細については、Wikipedia:トランスクルージョンとWikipedia:置換を参照してください)。置換された静的コピーは、バージョン管理に関してトランスクルージョンとは異なる一連の考慮事項を導入しますが、必要な場合もあります。
テッド・ネルソンは、 1980 年に出版した非線形の書籍Literary Machinesでこの用語を作り出しましたが、マスター コピーとオカレンスの概念は、17 年前にSketchpadで適用されていました。現在、これは教科書の執筆者が採用している一般的な手法であり、単一のトピック/主題を複数の章で議論する必要がある場合に使用されます。教科書におけるこのシステムの利点は、データの冗長性を高め、書籍を扱いやすいサイズに抑えられることです。
技術的な考慮事項
文脈中立性
トランスクルージョンは、トランスクルージョンされたテキストのセクションが自己完結的である場合、つまりテキストの意味と妥当性がコンテキストに依存しない場合に、より効果的に機能します。たとえば、「前のセクションで説明したように」などの表現は、トランスクルージョンされたセクションが異なるコンテキストで表示され、混乱を招く可能性があるため、問題があります。「コンテキスト中立」テキストを構成するものはさまざまですが、多くの場合、会社情報や定型句などが含まれます。前述のようなコンテキスト依存の問題を克服するために、トランスクルージョンが可能なシステムは、トランスクルージョンされたコンテンツ内の特定の要素を抑制する機能も備えていることがよくあります。たとえば、Wikipedia では、この目的で「noinclude」、「onlyinclude 」、「includeonly 」などのタグを使用できます。このような例外が必要になることが多い要素の典型的な例は、ドキュメントのタイトル、脚注、相互参照です。このようにして、各インスタンスを手動で再処理することなく、トランスクルージョン時に自動的に抑制できます。
パラメータ化
状況や技術的な状況によっては、トランスクルードされたテキストのセクションは、パラメータ化が可能なため、「コンテキスト中立性」の原則に厳密に従う必要がない場合があります。パラメータ化とは、独立して変更できる外生変数に応じて、トランスクルードされたテキストの特定の部分またはサブセクションを変更できることを意味します。これは通常、トランスクルードされたテキストに 1 つ以上の置換プレースホルダーを提供することで行われます。これらのプレースホルダーは、コンテキスト内で最終的なトランスクルードされた出力をレンダリングする前に、対応する変数値に置き換えられます。
起源
ファイル コンテンツの再利用の概念は、コンピュータ プログラミング言語から始まりました。1960年のCOBOL [2]、続いてBCPL、PL/I、C [3]、そして 1978 年までにはFORTRAN が生まれました。includeディレクティブを使用すると、コピー アンド ペースト プログラミングや定数のハード コーディングの落とし穴を避けながら、共通のソース コードを再利用できます。多くのイノベーションと同様に、問題が発生しました。複数の include ディレクティブが別の include ディレクティブと同じコンテンツを提供する可能性があり、最終結果に同じソース コードの繰り返しが発生し、エラーが発生します。includeガードは、コンテンツを 1 回インクルードした後、重複するコンテンツを省略することで、この問題を解決します。[4]
単一の再利用可能な情報源というアイデアは、「同じことを繰り返さない」や「抽象化の原則」などの概念につながりました。さらに、プログラムの移植性を高めるためにも使用されました。ポータブルソースコードは、includeディレクティブを使用して標準ライブラリを指定します。このライブラリには、各コンピュータ環境によって異なるシステム固有のソースコードが含まれています。[5]
プロジェクト・ザナドゥの歴史と実装
ハイパーテキストとハイパーメディアという言葉の生みの親であるテッド・ネルソンは、 1980年の著書『Literary Machines』の中でトランスクルージョンという用語も作りました。彼の提案の一部は、さまざまな場所から取られたコンテンツの断片がいくつあっても、すべてのテキストに対して読者から自動的にマイクロペイメントを徴収できるというアイデアでした。
しかし、ネルソンによれば、トランスクルージョンの概念は、1965年のハイパーテキストの説明ですでに一部を形成していた。[6] ネルソンはトランスクルージョンを「...同じコンテンツが複数の場所に存在することが分かっている」と定義し、別の場所からのコンテンツの組み込み(ネルソンはこれをトランスデリバリーと呼ぶ)や、出典に関連した明示的な引用(ネルソンはこれをトランスクォーテーションと呼ぶ)などのより特殊なケースとは区別している。
テッド・ネルソン自身のザナドゥプロジェクトを含むいくつかのハイパーテキストシステムはトランスクルージョンをサポートしています。[7]
ネルソンは、ウェブトランスクルージョンのデモであるリトルトランスクォータ(2004~2005年にアンドリュー・パムがネルソンの仕様に合わせてプログラムしたもの)を発表しました。[8]これは、ウェブページからの部分アドレスに基づいて新しいフォーマットを作成します。逆参照すると、結果ページの各部分は元のコンテキストにクリック接続されたままになります。
Web上での実装
伝送プロトコルとしてのHTTP は、バイト サービング(HTTP 要求メッセージで バイト範囲を指定する)によるトランスクルージョンを基本的にサポートしています。
トランスクルージョンは、送信前 (サーバー側) または送信後 (クライアント側) に発生する可能性があります。例:
- HTML ドキュメントは、サーバー側インクルードまたは別のサーバー側アプリケーションを使用してクライアントに配信される前に、サーバーによって事前に作成されることがあります。
- XML エンティティまたは HTML オブジェクトはクライアントによって解析され、メイン ドキュメントとは別に対応するリソースが要求されます。
- Web ブラウザは独自のアルゴリズムを使用して要素をキャッシュする場合があります。これは、ドキュメントのマークアップに明示的な指示がなくても動作します。
- AngularJSはネストされたディレクティブ操作にトランスクルージョンを採用しています。[9]
ウェブコンテンツの発行者は、自分のウェブサイトから他のウェブサイトへの素材の転載に反対したり、転載に同意を求めたりする場合があります。この慣行を批判する人は、さまざまな形式のインライン リンクを帯域幅の盗難またはリーチングと呼ぶことがあります。
他の出版社は、ウェブ広告の形、またはヒット カウンターやウェブ バグのようなウィジェットとして、自社の資料を他の Web サイトに転載することを明確に求める場合があります。
マッシュアップは、トランスクルージョンを利用して、インタラクティブ マップ上にジオタグ付き写真を配置したり、インタラクティブダッシュボードにビジネス メトリックを表示したりすることで、リソースやデータを新しいアプリケーションに組み立てます。
クライアント側 HTML
HTML は、画像、スクリプト、スタイルシート、その他のドキュメント、およびその他の種類のメディアのクライアント側トランスクルージョンの要素を定義します。HTML は、Web の初期の頃から、マルチメディア要素の読み込みが完了する前に Web ページをより速く表示できるように、そのようなオブジェクトの生のデータを Web ページのマークアップにインラインで埋め込むのではなく、クライアント側トランスクルージョンに大きく依存してきました。
Ajaxなどの技術により、HTML ドキュメントに関連付けられたスクリプトは、Web サーバーからページのまったく新しいバージョンを取得する必要があった以前の技術とは対照的に、Web ブラウザーにドキュメントをその場で変更するように指示できます。このようなスクリプトは、たとえばユーザー入力や条件の変更に応じて、Web ブラウザーがページをレンダリングした後に、サーバーから要素またはドキュメントをトランスクルードする場合があります。
HTML の将来のバージョンでは、エンティティ、XPointerドキュメント参照、XSLT操作などのXMLテクノロジを使用して、ドキュメントの一部のより深いトランスクルージョンをサポートする可能性があります。
プロキシ サーバーは、一般的に要求されるリソースの冗長な送信を減らすためにトランスクルージョンを使用する場合があります。
Googleが開発および保守しているAngularJSと呼ばれる人気のフロントエンド フレームワークには、トランスクルージョンを使用する最も近い親ディレクティブのトランスクルージョンされた DOM の挿入ポイントをマークする callend ng-transclude ディレクティブがあります。
サーバー側トランスクルージョン
トランスクルージョンは、サーバー側インクルードや、サーバー ソフトウェアによって解決されるマークアップ エンティティ参照を通じて、サーバー側で実行できます。これは、置換テンプレートの機能です。
ソースコードのトランスクルージョン
ソース コードをソフトウェア設計または参照資料にトランスクルージョンすると、ソース コードはドキュメント内に表示されますが、ドキュメントの一部として解釈されず、挿入されたコードとそのソース コードベースとの関係における意味の一貫性が維持されます。
コンテンツ管理におけるトランスクルージョン
シングルソース パブリッシングのコンテンツ管理では、トップクラスのコンテンツ管理システムがトランスクルージョンと置換を提供するようになっています。特に、コンポーネント コンテンツ管理システムは、モジュール設計の原則を最適なレベルまで引き上げることを目指しています。MediaWikiはトランスクルージョンと置換を提供し、他の商用オプションを購入する予算がない多くの小規模組織 (小規模な非営利団体や中小企業など) にとって、すぐに使用できる優れたオプションです。詳細については、「コンポーネント コンテンツ管理システム」を参照してください。
ソフトウェア開発における実装
プログラミング言語の一般的な機能として、1 つのソース コード ファイルが別のソース コード ファイルの全体または一部をトランスクルードする機能があります。トランスクルードされた部分は、トランスクルード ファイルの一部であるかのように解釈されます。次のような方法があります。
- Include: 一部のプログラムは、明示的に別のファイルを INCLUDE します。インクルードされるファイルは、コンパイル時の変数に応じて、実行可能コード、宣言、コンパイラ命令、および/またはドキュメントの後の部分への分岐で構成できます。
- マクロ:アセンブリ言語や一部の高水準プログラミング言語では、通常、マクロが提供されます。マクロは、定義の作成、実行可能コードの生成、ループやその他の決定の提供、およびファイルのレンダリング時にマクロに指定されたパラメータに従って生成されたドキュメントの変更に使用される特別な名前付き命令です。
- コピー: Cobolプログラミング言語には COPY コマンドがあり、コピーされたファイルがコピー元のドキュメントに挿入され、COPY コマンドが置き換えられます。コピーされたファイル内のコードと宣言は、コピー コマンドの一部として REPLACING 引数によって変更できます。
参照
- 複合文書 – 電子文書形式
- 相互参照 – 書籍内のある箇所で、同じ作品内の別の箇所の情報を参照すること
- Darwin Information Typing Architecture (DITA) – トピックベースのオーサリングと公開、コンテンツの再利用のための XML データ モデル
- マクロ(コンピュータサイエンス) - 設定された入力を設定された出力に置き換える規則
- オブジェクトのリンクと埋め込み (OLE) – Microsoft が開発したテクノロジ
- Publish and Subscribe (Mac OS) – Apple Computer が System 7 で導入したドキュメント リンク モデル
- シングルソースパブリッシング - コンテンツパブリッシング方法
- サブルーチン – 他のソフトウェアから呼び出せるプログラム命令のシーケンス
- XInclude – 他のファイルからコンテンツを取り込むための XML 標準
参考文献
- ^ グルシュコ、ロバート・J.編(2013年)。組織化の規律。マサチューセッツ州ケンブリッジ:MITプレス。p.231。ISBN 9780262518505。
- ^ 電子デジタルコンピュータのプログラミングのための共通ビジネス指向言語 (COBOL) の初期仕様(PDF)。ワシントン: 国防総省。1960 年 4 月。pp. V-27。INCLUDE
: 機能: ライブラリ サブルーチンをソース プログラムに自動的に組み込むことで、プログラマーの労力を軽減します。
- ^ Ritchie, Dennis M. (1993-03-01). 「C言語の開発」. ACM SIGPLAN Notices . 28 (3): 201–208. doi :10.1145/155360.155580. 2020年2月27日時点のオリジナルよりアーカイブ。 1972年から1973年頃には他にも多くの変更がありましたが、最も重要なのは
プリプロセッサ
の導入でした
。これは、Alan Snyder [Snyder 74] の勧めによる部分もありますが、BCPL
と
PL
/I
で利用可能なファイルインクルードメカニズムの有用性を認識したことも一因です。その元のバージョンは非常にシンプルで、インクルードされたファイルと、パラメータなしのマクロの
#includeと#defineという単純な
文字列置換
のみを提供していました
。その後すぐに、主に
Mike Lesk
によって、そしてその後 John Reiser によって、
引数
と
条件付きコンパイルを
持つマクロを組み込むように拡張されました。プリプロセッサは、当初、言語自体のオプションの付属物と考えられていました。
代替URL 2020-02-04にWayback Machineでアーカイブされました
- ^ Stallman, Richard M. ; Weinberg, Zachary. 「ヘッダー ファイル」(PDF) . C プリプロセッサ: gcc バージョン 6.3.0 (GCC) 用. pp. 10–11.
ラッパー #ifndef の代替:
CPP は、
ヘッダー ファイルを 1 回だけ読み取ることを示す 2 つの方法をサポートしています。どちらもラッパー '#ifndef' ほど移植性が高くないため、新しいプログラムでは使用しないことをお勧めします。ただし、Objective
-C
では '#import' が標準的な方法であるという警告があります。[...] ヘッダー ファイルが複数回インクルードされるのを防ぐもう 1 つの方法は、'
#pragma once
' ディレクティブを使用することです。ヘッダー ファイルをスキャンしているときに '#pragma once' が見つかると、そのファイルはどのような場合でも二度と読み取られません。
- ^ Johnson, SC ; Ritchie, DM (1978年7月~8月). 「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 . 2020年2月27日閲覧。前述のように、
Interdata
マシンの登場前から、多くのプログラムが
UNIX I/O規則だけでなく、
PDP-11
に特に有利なバッファリング戦略の詳細にも
望ましくない程度に依存していることが認識されていました
。 「
ポータブルI/Oライブラリ
」
と呼ばれるルーチンのパッケージは、
ME Leskによって書かれ、
Honeywell
とIBMのマシン、およびPDP-11に実装され、
以前のパッケージの欠陥を克服する試みとして一般的に成功しました。
- ^ Theodor H. Nelson、「複雑、変化、不確定性のためのファイル構造」ACM 第 20 回全国会議議事録 (1965 年)、84-100 ページ
- ^ Kolbitsch, Josef; Maurer, Hermann (2017 年 1 月 27 日). 「HTML ベース環境でのトランスクルージョン」(PDF)。2017 年 7 月 1 日時点のオリジナル(PDF)からアーカイブ。2017 年1 月 27 日閲覧。
- ^ リトル・トランスクォーター Xanadu.com.au
- ^ 「AngularJS」. docs.angularjs.org . 2016年8月11日閲覧。
さらに読む
- Di Iorio, A.; Vitali, F. (2003 年 8 月)。「Xanalogical 共同編集環境」(PDF)。第 2 回 Web ドキュメント分析国際ワークショップ 2003 (WDA2003) の議事録。英国、エディンバラ。
- Kolbitsch, J.; Maurer, H. (2006 年 6 月)。「HTML ベース環境でのトランスクルージョン」。Journal of Computing and Information Technology。14 (2): 161–174。doi : 10.2498 /cit.2006.02.07。
- Kolbitsch, J. (2005 年 6 月)。「HTML でのマルチメディア ドキュメントの細粒度トランスクルージョン」。Journal of Universal Computer Science。11 ( 6)。
- Krottmaier, H. (2002)。「トランスクルードされた文書: 文書フラグメントの再利用の利点」(PDF)。第 6 回国際 ICCC/IFIP 電子出版会議 (ELPUB2002) の議事録。チェコ共和国: カルロヴィ ヴァリ。pp. 359–367。2005年 5 月 17 日のオリジナル(PDF)からアーカイブ。
- Krottmaier, H.; D., Helic (2002). 「トランスクルージョンの問題」(PDF)。企業、政府、医療、高等教育における E ラーニングに関する世界会議の議事録 (E-Learn 2002) 。カナダ、モントリオール。pp. 1730–1733。2015年 6 月 20 日のオリジナル(PDF)からアーカイブ。2006年 5 月 25 日に取得。
- Krottmaier, H .; Maurer, H. (2001 年 7 月)。「21 世紀のトランスクルージョン」( PDF 、 HTML 、 PostScript )。Journal of Universal Computer Science。7 ( 12): 1125–1136。CiteSeerX 10.1.1.106.9923。
- Moore, A.; et al. (2001)。「条件付きトランスルージョンを使用した WHURLE での個人に合わせた指導」。第 12 回 ACM ハイパーテキストおよびハイパーメディア会議の議事録。オーフス、デンマーク。pp. 163–164。
- ネルソン、TH(1993)[1980]。文学マシン。マインドフルプレス。
- ネルソン、 TH (1995)。「接続の核心: トランスクルージョンによって統合されたハイパーメディア」。Communications of the ACM。38 ( 8): 31–33。doi : 10.1145/208344.208353。S2CID 16604206 。
- Nelson, TH (1996)。「一般化されたリンク、マイクロペイメント、およびトランスコピーライト」。Almaden Research Center。2006年 12 月 5 日にオリジナルからアーカイブ。2006年 9 月 27 日に取得。
- ネルソン、TH (1998)。「トランスコピーライト: 仮想再出版の事前許可」。
- Nelson, TH (1999)。「Xanalogical 構造は、これまで以上に必要です: 並列ドキュメント、コンテンツへのディープリンク、ディープバージョン管理、ディープ リユース」。ACM Computing Surveys。31 ( 4es) : 33–es。CiteSeerX 10.1.1.418.7740。doi :10.1145/345966.346033。S2CID 12852736。
- Pam, A. (1997). 「ハイパーテキスト マークアップ言語におけるきめ細かなトランスクルージョン」(テキスト) .インターネット ドラフト.
- Wilde, E.; Lowe, D. (2002)。「第 7 章: XML リンク言語」。XPath 、XLink、XPointer、および XML: Web ハイパーリンクとトランスクルージョンの実践ガイド。Addison -Wesley Professional。pp. 169–198。ISBN 9780201703443。
外部リンク
- Ted Nelson:トランスクルージョン: 電子文学の修正— Google Tech Talks、2007 年 1 月 29 日。
