マークアップ言語
マークアップ言語は、組版指定に使われる言語と言える。視覚表現や文章構造などを記述するための形式言語である。テキストファイルであることが多いが、バイナリデータによる形式もある。
英語の「markup」という語は英語圏の出版業界で著者、編集者、印刷者の間で指示を伝える方法を意味していた(#語源を参照)。
マークアップ言語には様々なものがあるが、ここでは例としてHTMLにおける短い節を示す。
HTMLでは、山括弧で囲ったタグにより、要素をマークアップする。要素の頭部と尾部にあるものがタグである。つまり、タグで囲まれた全体が要素である(タグも含む)。このHTMLの例では、h1 という第1レベルの見出し (headline) の要素があり、それに引き続いて1段落の文章が含まれているp要素(paragraph = 段落)がある。
「マークアップ」markupという用語は、英語圏で伝統的な出版の作業過程である原稿の「マーキング・アップ」marking upという作業から派生した。「marking up」とは、原稿用紙の余白に印刷に関する指示の記号を書き加えることである。「マークアップ・マン」markup menや校正者と呼ばれる専門家が、文章の各部分にどんなスタイル、書体、サイズを適用すべきかなどを記して組版の担当者に原稿を渡すという作業が、何世紀にもわたって行われていた(校正記号についての詳細は「校正」の項目にある)。
英語のmarkupに対応する印刷用語は、組版指定であり、書体・文字サイズ・行数・行間・字数・字送りなど,組体裁を定めるうえで必要となる情報を指定することである。英語では、電子組版、コンピュータ上での組版へと移行してもmarkupが用語としてそのまま使われている。
マークアップ言語のアイデアは、1967年のある会議で、アメリカ出版界の大物であったウィリアム・W・タニクリフによって「汎用符号」generic codingという名で、おそらく最初に発表された。彼はその後にGenCodeと呼ばれる標準仕様の策定において出版業界で中心的な役割を果たしたとされる。1960年代末に、本のデザイナーであったスタンレイ・フィッシュStanley Fishもまた類似したアイデアを発表している。ブライアン・リード (計算機科学者)は、1980年にカーネギーメロン大学の学位論文において、実用となる意味マークアップシステムの理論と実装を開発した。
しかしながら、IBMの研究者であるチャールズ・ゴールドファーブが現在では広く「マークアップ言語の父」として知られている。ゴールドファーブはGMLの開発で大きな役割を果たし、そして、初めて広く使われた意味マークアップシステムであるSGMLを開発したISOの委員会で議長を務めた。ゴールドファーブは、正確な日付は記録にないが、新聞のワークフローの電算化に関する初期のプロジェクトで働いているときに、その基本的なアイデアを思いついた。後にタニクリフとフィッシュの発表を知り、またリードの話をその初期に聞いたことで、彼の興味にさらに火が付くこととなった。
出版業界の外部で利用可能な初期のマークアップ言語の例にはUNIX上の組版ソフトウェアであるroffがある。これらのシステムでは書式指定命令は文書のテキストの中に挿入され、組版処理系はその指定に従ってテキストフォーマットし出力する。その後WYSIWYGを実現したDTPソフトウェアが登場したが、それらはバッチ処理などには不向きといったことから、引き続きroffが使用された分野もある。
出版におけるもう1つの主要な標準はTeXである。TeXはドナルド・クヌースが開発し、1970年代から1980年代にかけて継続的に改良した。TeXは数学書を業務品質で組むためのテキストやフォントに関する綿密なレイアウト機能を目標としている。この目標のため、クヌースはかなりの時間を組版技術の調査に費やした。主に学術分野で使われ、理数系の出版物・論文などの多くではデファクトスタンダードとなっている。TeXのマクロパッケージであるLaTeXはTeX上で意味マークアップシステムを構築しており、広く用いられている。
構造と視覚表現を明確に区別した最初の言語はブライアン・リードが開発し、1980年に彼の博士論文で述べているScribeであった。Scribeは多くの点で画期的であり、マークアップされた文書からスタイルを分離するというアイデアだけではなく、意味要素の使用を統制する文法(一種のスキーマ)をも持っていた。ScribeはGML(後のSGML)の開発に影響を与え、またHTMLやLaTeXの直接の祖先ともなった。
1980年代の初期に、マークアップは文書の構造面に専念し、視覚的な表現に関しては処理系に任せるべきだ、という思想によってSGMLが誕生した。この言語はゴールドファーブが議長を務める委員会によって策定され、複数の研究・プロジェクト(GenCode など)から成果を取り込んでいた。シャロン・アドラーSharon Adlerやアンデルス・ベルクルントAnders Berglund、ジェームズ・D・メイソンJames D. Masonも委員会の主要メンバーであった。
SGMLは文書にマークアップを含める構文や、どんなタグがどこで使えるのかなどを記述する構文(DTD)を規定していた。これによって、文書作成者は望むマークアップを、最も意図に近いものや母語で名前が付いているものなど、何でも作成し、利用することができた。それゆえ、SGMLは正しくはメタ言語であり、多くの具体的なマークアップ言語がそれから派生していった。1980年代から現在に至るまで、ほとんどの新しいマークアップ言語はSGMLに基づいたものであった。TEIやDocBookなどがその例である。SGMLは1986年にISO 8879として国際標準になった。
SGMLは非常に大きな規模の文書を扱う現場で広く受け入れられ、利用された。しかしながら、一般的には覚えるのが煩わしくて難しいとみなされている。これは多彩すぎる機能と高すぎる柔軟性を実現した副作用である。複雑な仕様の例として、SGMLでは終了タグ(または開始タグかその両方)が文脈によって省略可能となっているが、これは過労気味の入力作業員がマークアップを手動で行うような場合にキーストロークの節約が望まれている、との配慮によるものである。
1991年になると、SGMLが商用のデータベース用途にしか使われない傾向が強くなってきた。一方、(文書をプロプライエタリなバイナリフォーマットで保存する)WYSIWYGツールがその他の文書処理用途では受け入れられていた。
この状況が変化したのは、欧州原子核研究機構に在籍していたティム・バーナーズ=リーが同僚のアンデルス・ベルクルントたちからSGMLの存在を知り、SGMLの構文を使ってHTMLを作ったときである。HTMLは他のSGMLベースのタグ言語とよく似ているが、よりシンプルなものとして誕生し、当初は形式的なDTDを持っていなかった。スティーブン・J・デローズSteven J. DeRoseはHTMLによる意味マークアップの使用が、ウェブに柔軟性と拡張性をもたらし、その成功の有力な要因となったと主張している(その他の要因にはハイパーリンクの概念やブラウザの無料配布などがある)。
しかしながら、HTMLがマークアップ言語であるという事実については異論を唱える研究者もいる。その異論とは、HTMLはタグの配置を制限しており、タグに他のタグの内に入れ子になることと文書のルートタグになることの両方を要求している、というものである。このため、そのような研究者たちはHTMLは階層型データモデルに従う「コンテナ言語」ではないかと述べている。
もうひとつの、現在広く利用されているマークアップ言語はXMLである。XMLはW3Cの、ジョン・ボサックが立ち上げ、議長を務めた委員会によって開発された。XMLの主目的は対象をインターネット上の文書に特化することで、SGMLを単純化したサブセットを作ることである。XMLはSGMLと同じようにメタ言語である。また、利用者が必要な要素を追加したり、名前空間を使って複合文書を作ったりして拡張することが容易にできる。
名前空間などを用いないXML文書はSGML文書でもあるため、XMLへの乗り換えはそれほど困難でなく、既存のSGMLの利用者およびソフトウェアは比較的容易にXMLに移行することができた。XMLはSGMLの多くのより複雑な機能を省いており、学習や実装を容易にしている。他の改良点には、多言語環境でのSGMLの問題点を修正したことや、スキーマがない文書でも利用を可能にしたことなどがある。
XMLはそもそも文書や出版物などの半構造データのために設計されたものである。しかしながら、その単純さと柔軟性のバランスの良さから、他の用途でも急速に受け入れられていった。例えば、アプリケーション間でデータをやりとりするために利用されたり、アプリケーションの設定ファイルの構造として利用されたりもしている。
2000年の1月から、HTMLについてのすべてのW3C勧告は、SGMLではなくXMLに基づいたものになり、XML で HTML と等価のマークアップができる XHTML「Extensible Hypertext Markup Language」の略。 が制定された。
HTMLとXHTMLとの違いで顕著なもののひとつは、すべてのタグを閉じなければならないことである。 のような「空の」HTMLタグは「閉じる」必要がある。XHTML 1.0 勧告内の「Appendix」の章にある「HTML Compatibility Guidelines」では、 のように要素名の後に空白文字と斜線を入れて閉じる形を推奨している。ほかには、開始タグ内の属性値はすべて引用符で囲わなければならないという点がある。また、HTMLとは異なり、大文字と小文字は厳密に区別される。
マークアップ言語のアイデアはテキスト文書に関するものとして生まれたが、ベクターグラフィックス、ウェブ・サービス、ウェブシンディケーション、セマンティック・ウェブ、ユーザーインタフェースなどの分野での利用も増えている。これらのほとんどはXMLのアプリケーションである。XMLを使用することで、複数のマークアップ言語を合成することが可能となる。例としては、 やがある。