マークアップ言語

[right|thumb|250px|[Standard Generalized Markup Language|SGMLで定義されたマークアップ言語がオックスフォード英語辞典の電子版を記述するのに利用されている。これによって、HTMLへの変換が容易となるだけでなく、高度なクエリの実行が可能となる。]]

**マークアップ言語**（マークアップげんご、）とは、文書の構造と体裁を明確に記述するためのデータ記述言語のことである。マークアップとは伝統的な出版のプロセスにおいて、著者、編集者、印刷者などの間で指示を伝えるための書き込みを行うという意味の「」に由来する単語である。

マークアップ言語には伝統的な文書作成、組版のための言語であるSGML、のようなもののほか、HTMLのようなハイパーテキストの作成、YAMLやXMLのようなより一般的なデータ構造の記述など、様々な言語が存在している。

## 特徴
マークアップ言語には様々なものがあるが、ここでは例としてHTMLにおける短い節を示す。


```html
<h1>ガンカモ科</h1>
 <p>
 ガンカモ科にはカモ、ガン、ハクチョウが含まれるが、
 それらは<em>非常に近い種であるというわけではない</em>。
 </p>
```


HTMLでは、山括弧で囲った**タグ**により、**要素**をマークアップする。**要素**の頭部と尾部にあるものが**タグ**である。つまり、**タグ**で囲まれた全体が**要素**である（**タグ**も含む）。このHTMLの例では、 という第1レベルの見出し（headline）の要素があり、それに引き続いて1段落の文章が含まれているp要素（paragraph = 段落）がある。

## 分類
HTMLの変遷などの結果意識されるようになった、Web業界などにおけるマークアップ言語に対する理解として、3つに分類するものがある。提示型マークアップ、手続き型マークアップ、記述型マークアップである。

### 提示型マークアップ
**提示型マークアップ**（presentational markup）とは、文書のレイアウトを常に視覚的に提示するマークアップ方式である。一般的に、バイナリコードが文書内に組み込まれた、WYSIWYG（見たままが得られる）のような効果を持つ形式を指す。例としては、Microsoft WordやPagesなどがある。

この方式では、ユーザーの文書の構成や体裁、文字の修飾などの操作（命令）が、そのまま文書上で反映される。例えば、タイトル文の直前に「中央揃えモードに移る」「文字サイズを大きくする」などの操作を、ソフトウェアのタブなどから選択する。厳密には、これらの操作には、マークアップが文章内に組み込まれており、それにより表示内容を決定しているが、通常、これらのマークアップ自体は非表示になっており、ユーザーから確認できない。

### 手続き型マークアップ
**手続き型マークアップ**（procedural markup）とは、文書のテキスト上に、マークアップの手続き方法（表示処理の命令）を直接記号で記述する方式である。例としては、nroff・troff、、Markdownなどがある。

ソフトウェアの処理系は、この命令をファイル中の出現順に解釈することで、文書内の構成、体裁、修飾情報などを表示する。例えば、Markdownの場合、「書体をボールドにする」という命令は、アスタリスク（`＊`）を文書の初めと終わりに記述することで処理される。

この方式は、処理速度が速い、エラーが発生しにくい、メンテナンスも容易、文書を読みやすいなどの利点がある。その一方で、指定できる表現方法が限られているなどの欠点がある。

### 記述型マークアップ
**記述型マークアップ**（descriptive markup）とは、文書のテキストの断片に表示方法やその他の情報を記した印（マークアップ）を記述する方法である。例として、LaTeX、HTML、XMLなどがある。

手続き型マークアップとは異なり、特定の表現を実現する処理上の命令を文書上に付与するのではなく、表現方法を標準化された記号で括り直接指定する。例えば、上記「特徴」におけるHTMLの例では、``と``が印（タグ）であり、この二つのタグに挟まれた文章が「見出し」であることを指定している。記述型マークアップは「ロジカルマークアップ」や「コンセプトマークアップ」などとも呼ばれ、執筆者に文章内の情報を視覚的にではなく概念的に記述することが求められている。

### 補足
以上は概念的な分類であって、実際にはどのシステムでも別種のマークアップが共存している。例えばHTMLでは、純粋な手続き型マークアップ（ボールドのための `B` など）と純粋な記述型マークアップ（`BLOCKQUOTE` や `href` 属性など）が共存している。HTMLにはさらに `PRE` 要素があり、提示型マークアップの領域を囲んで、テキストをタイプしたとおりに表示させることもできる。

マークアップ要素とその使用に関する規則は通例、特定の企業やコミュニティごとの様々な種類の文書に対応するため、標準化団体によって開発される。最初期の例としては  があり、アメリカ軍で技術マニュアルに利用されていた。すぐに大規模文書を管理する必要のある企業がこれに続きだし、航空機、電気通信、自動車、コンピュータハードウェアのマニュアル用のタグ群が開発された。これはこの種のマニュアルの多くが電子的に配布されるきっかけとなり、企業は1つの（記述型マークアップによる）オリジナルから印刷物、オンライン、CD版などを作り出すことができた。特筆すべき例は、サン・マイクロシステムズであり、がSGMLを複数媒体向けの文書配布に採用し、大幅なコスト削減を達成したことである。

現在では多くのマークアップ言語が存在する。よく知られたものでも ・・SVG・・TEI・XBRLなどがある。多くはテキストのためのものだが、その他の用途で使われる専門化された言語もある。

**汎用マークアップ**とは記述型マークアップの別名である。現在のほとんどの記述型マークアップシステムは文書を木構造に構造化する。また同時に、文書の一部分を文書内の他の箇所から参照する（クロス・リファレンス）手段を提供している。構造化によって、ソフトウェアが文書構造を（BLOBではないものとして）把握することができ、文書はデータベースとして扱うことが可能になる。関係データベースが持っているような厳格なスキーマを持たないので、「半構造化データベース」と呼ばれる。

2000年を過ぎたころから、木構造以外の文書構造に関する大きな関心が現れてきた。例えば、古代の宗教文学では文献構造（本・章・節・文）以外にも、修辞構造や散文構造が広く用いられる（ストーリー・引用章句・段落など）。これらの文書単位は文中でたびたび交差するので、簡単には木構造のマークアップシステムでデータ化することはできない。このような構造をサポートする文書モデリングシステムには、 の一部やLMNL・などがある。

記述型マークアップの第一の長所はその自由度だとみなされている。テキストの断片が「どのように表示されるべきか」ではなく「何であるか」と印されていたなら、その言語の設計者が予想もしていなかった便利な用途でその断片を処理する処理系が作られるかもしれない。例を挙げると、HTMLのハイパーリンクは、元々、リンクをたどる人の手で利用されるために設計されたが、検索エンジンによって、インデックスするべき新しいリソースを発見するため、またウェブ上のリソースの人気を測るためにも利用されている。

記述型マークアップはまた、文書の視覚表現の変更を効率化する。例えば、イタリック（斜体）の表現を「強調」あるいは「外国語」の意図を示すために使うとする。両方とも単に表示方法の命令でイタリックとマークアップすると、両者の意図の違いが記録されず、区別が困難になる。後に外国語をイタリックにしない視覚表現に変更しようとすると、全てのイタリック部分をひとつずつ人間が判断して選り分ける作業が必要になる。しかし記述型マークアップでは両者を区別してマークアップするので、視覚表現の変更が容易になる。

## 歴史
### 語源
「マークアップ」という用語は、英語圏で伝統的な出版の作業過程である原稿の「マーキング・アップ」という作業から派生した。「」とは、原稿用紙の余白に印刷に関する指示の記号を書き加えることである。「マークアップ・マン」や校正者と呼ばれる専門家が、文章の各部分にどんなスタイル、書体、サイズを適用すべきかなどを記して組版の担当者に原稿を渡すという作業が、何世紀にもわたって行われていた（校正記号についての詳細は「校正」の項目にある）。
英語の*markup*に対応する印刷用語は、**組版指定**であり、書体・文字サイズ・行数・行間・字数・字送りなど，組体裁を定めるうえで必要となる情報を指定することである。英語では、電子組版、コンピュータ上での組版へと移行してもmarkupが用語としてそのまま使われている。

### 初期
マークアップ言語のアイデアは、1967年のある会議で、アメリカ出版界の大物であったによって「汎用符号」という名で、おそらく最初に発表された。彼はその後にと呼ばれる標準仕様の策定において出版業界で中心的な役割を果たしたとされる。1960年代末に、本のデザイナーであったスタンレイ・フィッシュもまた類似したアイデアを発表している。は、1980年にカーネギーメロン大学の学位論文において、実用となる記述型マークアップシステムの理論と実装を開発した。

しかしながら、IBMの研究者であるが現在では広く「マークアップ言語の父」として知られている。ゴールドファーブはGMLの開発で大きな役割を果たし、そして、初めて広く使われた記述型マークアップシステムであるSGMLを開発したISOの委員会で議長を務めた。ゴールドファーブは、正確な日付は記録にないが、新聞のワークフローの電算化に関する初期のプロジェクトで働いているときに、その基本的なアイデアを思いついた。後にタニクリフとフィッシュの発表を知り、またリードの話をその初期に聞いたことで、彼の興味にさらに火が付くこととなった。

### roff

出版業界の外部で利用可能な初期のマークアップ言語の例には上の組版ソフトウェアであるroffがある。これらのシステムでは書式指定命令は文書のテキストの中に挿入され、組版処理系はその指定に従ってテキストフォーマットし出力する。その後を実現したDTPソフトウェアが登場したが、それらはバッチ処理などには不向きといったことから、引き続きroffが使用された分野もある。

### 

right|150px|TeXのロゴ
出版におけるもう1つの主要な標準はである。はドナルド・クヌースが開発し、1970年代から1980年代にかけて継続的に改良した。は数学書を業務品質で組むためのテキストやフォントに関する綿密なレイアウト機能を目標としている。この目標のため、クヌースはかなりの時間を組版技術の調査に費やした。主に学術分野で使われ、理数系の出版物・論文などの多くではデファクトスタンダードとなっている。のマクロパッケージであるは上で記述型マークアップシステムを構築しており、広く用いられている。

### SGML

構造と視覚表現を明確に区別した最初の言語はブライアン・リードが開発し、1980年に彼の博士論文で述べているであった。は多くの点で画期的であり、マークアップされた文書からスタイルを分離するというアイデアだけではなく、意味要素の使用を統制する文法（一種のスキーマ）をも持っていた。はGML（後のSGML）の開発に影響を与え、またHTMLやの直接の祖先ともなった。

1980年代の初期に、マークアップは文書の構造面に専念し、視覚的な表現に関しては処理系に任せるべきだ、という思想によってが誕生した。この言語はゴールドファーブが議長を務める委員会によって策定され、複数の研究・プロジェクト（ など）から成果を取り込んでいた。シャロン・アドラーやアンデルス・ベルクルント、ジェームズ・D・メイソンも委員会の主要メンバーであった。

SGMLは文書にマークアップを含める構文や、どんなタグがどこで使えるのかなどを記述する構文（DTD）を規定していた。これによって、文書作成者は望むマークアップを、最も意図に近いものや母語で名前が付いているものなど、何でも作成し、利用することができた。それゆえ、SGMLは正しくはメタ言語であり、多くの具体的なマークアップ言語がそれから派生していった。1980年代から現在に至るまで、ほとんどの新しいマークアップ言語はSGMLに基づいたものであった。TEIやなどがその例である。SGMLは1986年にISO 8879として国際標準になった。

SGMLは非常に大きな規模の文書を扱う現場で広く受け入れられ、利用された。しかしながら、一般的には覚えるのが煩わしくて難しいとみなされている。これは多彩すぎる機能と高すぎる柔軟性を実現した副作用である。複雑な仕様の例として、SGMLでは終了タグ（または開始タグかその両方）が文脈によって省略可能となっているが、これは過労気味の入力作業員がマークアップを手動で行うような場合にキーストロークの節約が望まれている、との配慮によるものである。

### HTML

thumb|right|200px|HTMLのソースコード例

1991年になると、SGMLが商用のデータベース用途にしか使われない傾向が強くなってきた。一方、（文書をプロプライエタリなバイナリフォーマットで保存する）ツールがその他の文書処理用途では受け入れられていた。

この状況が変化したのは、欧州原子核研究機構に在籍していたティム・バーナーズ＝リーが同僚のアンデルス・ベルクルントたちからSGMLの存在を知り、SGMLの構文を使って**HTML**を作ったときである。HTMLは他のSGMLベースのタグ言語とよく似ているが、よりシンプルなものとして誕生し、当初は形式的なDTDを持っていなかった。スティーブン・J・デローズはHTMLによる記述型マークアップの使用が、ウェブに柔軟性と拡張性をもたらし、その成功の有力な要因となったと主張している（その他の要因にはハイパーリンクの概念やブラウザの無料配布などがある）。

しかしながら、HTMLがマークアップ言語であるという事実については異論を唱える研究者もいる。その異論とは、HTMLはタグの配置を制限しており、タグに他のタグの内に入れ子になることと文書のルートタグになることの両方を要求している、というものである。このため、そのような研究者たちはHTMLは階層型データモデルに従う「コンテナ言語」ではないかと述べている。

### XML

もうひとつの、現在広く利用されているマークアップ言語は**XML**である。XMLはW3Cの、ジョン・ボサックが立ち上げ、議長を務めた委員会によって開発された。XMLの主目的は対象をインターネット上の文書に特化することで、SGMLを単純化したサブセットを作ることである。XMLはSGMLと同じようにメタ言語である。また、利用者が必要な要素を追加したり、名前空間を使って複合文書を作ったりして拡張することが容易にできる。

名前空間などを用いないXML文書はSGML文書でもあるため、XMLへの乗り換えはそれほど困難でなく、既存のSGMLの利用者およびソフトウェアは比較的容易にXMLに移行することができた。XMLはSGMLの多くのより複雑な機能を省いており、学習や実装を容易にしている。他の改良点には、多言語環境でのSGMLの問題点を修正したことや、スキーマがない文書でも利用を可能にしたことなどがある。

XMLはそもそも文書や出版物などの半構造データのために設計されたものである。しかしながら、その単純さと柔軟性のバランスの良さから、他の用途でも急速に受け入れられていった。例えば、アプリケーション間でデータをやりとりするために利用されたり、アプリケーションの設定ファイルの構造として利用されたりもしている。

#### XHTML

2000年の1月から、HTMLについてのすべてのW3C勧告は、SGMLではなくXMLに基づいたものになり、XML で HTML と等価のマークアップができる **XHTML** が制定された。

HTMLとXHTMLとの違いで顕著なもののひとつは、すべてのタグを閉じなければならないことである。``のような「空の」HTMLタグは「閉じる」必要がある。XHTML 1.0 勧告内の「」の章にある「」では、``のように要素名の後に空白文字と斜線を入れて閉じる形を推奨している。ほかには、開始タグ内の属性値はすべて引用符で囲わなければならないという点がある。また、HTMLとは異なり、大文字と小文字は厳密に区別される。

## 他の用途での利用
マークアップ言語のアイデアはテキスト文書に関するものとして生まれたが、ベクターグラフィックス、ウェブ・サービス、ウェブシンディケーション、セマンティック・ウェブ、ユーザーインタフェースなどの分野での利用も増えている。これらのほとんどはXMLのアプリケーションである。XMLを使用することで、複数のマークアップ言語を合成することが可能となる。例としては、XHTML+SMIL やXHTML+MathML+SVGがある。

## 脚注

### 注釈

### 出典

## 関連項目
* コンピュータ言語
** データ記述言語
*** **マークアップ言語**
**** 軽量マークアップ言語
* スタイルシート
* 関心の分離
* 

## 外部リンク
* 
* W3C
* ISO
* TEI guidelines
* Markup systems and the future of scholarly text processing James H. Coombs, Allen H. Renear, and Steven J. DeRose
* History of Markup Languages (Didier Courtaud)
* The Roots of SGML -- A Personal Recollection (C)1996 Charles F. Goldfarb