マークアップ言語

出典: Wikipedio


画像:OED-LEXX-Bungler.jpg
SGMLで定義されたマークアップ言語がオックスフォード英語辞典の電子版を記述するのに利用されている。これによって、HTMLへの変換が容易となるだけでなく、高度なクエリの実行が可能となる。

マークアップ言語(マークアップげんご、Template:Lang-en-short)はコンピュータ言語の一種で、文章の構造(段落など)や見栄え(フォントサイズなど)に関する指定を文章とともにテキストファイルに記述するための言語である。文章に対するそれらの指定をマークアップ (Template:En) と呼び、マークアップを記述するための文字列タグ (Template:En) と呼ぶ。

現代において最も有名なマークアップ言語は、World Wide Webの基盤技術の1つであるHTMLであろう。元々、"markup"という語は出版業界で著者、編集者、印刷者の間で指示を伝える方法を意味していた(語源を参照)。

目次

特徴

マークアップ言語には様々なものがあるが、その多くに共通する特徴は、テキストとマークアップ命令を1つのファイル中に混ぜることである。ここでは例としてHTMLにおける短い節を示す。

<source lang="html4strict">

ガンカモ科

ガンカモ科にはカモ、ガン、ハクチョウが含まれるが、 それらは非常に近い種であるというわけではない

</source>

HTMLでは <このように> 山括弧で囲ってある部分がタグと呼ばれるマークアップ命令であり、それらの命令で挟まれている部分が実際の文書内容である。この例では、「ガンカモ科」の部分がh1要素の有する意味をもっていることを示す。

分類

マークアップ言語は一般的に3つに分類される。視覚マークアップ、手続きマークアップ、意味マークアップである。

視覚マークアップ

視覚マークアップとはテキスト中の「手掛かり」から文書構造を推論しようという試みである。例えば、テキストファイルでは文書のタイトルの前にいくつか改行を入れたり、スペースを空けたりすることがあり、これらは行送りの調整や中央寄せを暗示している。ワードプロセッサデスクトップパブリッシングソフト、いくつかのテキストエディタにはその種の慣習から構造を推論するものがある。しかし、ウィキにおけるその種の(プレインテキスト上の)慣習が非常に多数に上ることが示すように、これは今もって解決されていない問題である。

手続きマークアップ

手続きマークアップもまたテキストの見栄えを問題にしているが、視覚マークアップがユーザにとって暗黙的であったのに対し、テキストファイルを編集しているユーザにとって明示的なものである。手続きマークアップはファイル中の出現順で処理系に解釈される。タイトルの書式を整えるために、書式指定の命令(ディレクティブ)をタイトル文の直前にずらずらと並べて、処理系に中央揃えモードに移り、そして書体を大きくボールドにさせる、などの指示を出す。タイトル文の後にはそれらの効果を打ち消す命令が並ぶことになる。マクロスタックモデルなどのより高度なシステムならば、この煩わしさは軽減される。たいていの場合、手続きマークアップの能力はチューリング完全プログラミング言語に相当する。手続きマークアップの処理系の例としては、nroff、troffTeXLoutがある。

意味マークアップ

意味マークアップは必ずしも特定の見栄えなどの処理上の意味を与えることなく、テキストの断片に印を付けていくものである。例えば、Atomシンディケーション言語には updated タイムスタンプを印すマークアップがあり、情報項目が最後にいつ更新されたのかを発行者が表明するのに使われる。Atomの規格ではupdatedの意味するものについて論じており、そのマークアップ形式についても規定されているが、それがユーザに対してどのように表示されるのか、またそもそも表示されるべきなのかについては何の規定もない。このマークアップは処理系ごとに様々な用途に使われ、その中にはAtom言語の設計者たちが予想もしなかったものが多く含まれるだろう。SGMLXMLは意味マークアップ言語の設計を支援するために設計された仕様(メタ言語)である。

以上は概念的な分類であって、実際にはどのシステムでも別種のマークアップが共存している。例えばHTMLでは、純粋な手続きマークアップ(ボールドのためのBなど)と純粋な意味マークアップ(BLOCKQUOTEHREF属性など)が共存している。HTMLにはさらにPRE要素があり、視覚マークアップの領域を囲んで、テキストをタイプしたとおりに表示させることもできる。

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

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

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

2000年を過ぎたころから、木構造以外の文書構造に関する大きな関心が現れてきた。例えば、古代の宗教文学では文献構造(本、章、節、文)以外にも、修辞構造散文構造が広く用いられる(ストーリー引用章句段落、など)。これらの文書単位は文中でたびたび交差するので、簡単には木構造のマークアップシステムでデータ化することはできない。このような構造をサポートする文書モデリングシステムにはMECSウィトゲンシュタインの作品を電子化するために開発された)、TEI Guidelinesの一部、LMNLCLIX、などがある。

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

意味マークアップはまた、必要になったときに文書の見栄えを変更する作業も単純化する。これは文書の見栄えと内容が密接に結びついていないからである。例えばイタリックを強調と外国語であることを示すために使うとする。ここで両方が単にイタリックと(視覚的にまたは手続き的に)マークアップされたなら、2つを選り分けることが困難になる。もし、あとから外国語をイタリックにしないと決め直したら、全てのイタリック部分を見直して、1つずつ選り分けるしか方法がない。しかし始めから、2つの場合が別のタグで(意味的に)マークアップされていたのなら、互いに干渉しあうことなく、見栄えの変更ができるようになる。

歴史

語源

"markup"(マークアップ)という用語は、伝統的な出版の作業過程である原稿の "marking up" から派生した。"marking up" とは、原稿用紙の余白に印刷に関する指示の記号を書き加えることである。"markup men" や校正者と呼ばれる専門家が、文章の各部分にどんなスタイル、書体、サイズを適用すべきかなどを記して組版の担当者に原稿を渡すという作業が、何世紀にもわたって行われていた。(校正記号についての詳細は、校正Proofreading(英語版)の外部リンクにある。)

初期

マークアップ言語のアイデアは、1967年のある会議で、アメリカ出版界の大物であった William W. Tunnicliffe (en), [1] によって"generic coding"という名で、おそらく最初に発表された<ref>Charles F. Goldfarb The SGML Handbook p. 567. ISBN 0198537379</ref>。彼はその後に、GenCode と呼ばれる標準仕様の策定において出版業界で中心的な役割を果たしたとされる。1960年代末に、本のデザイナーであった Stanley Fish もまた類似したアイデアを発表している。Brian Reid (en) は、1980年カーネギーメロン大学の学位論文において、実用となる意味マークアップシステムの理論と実装を開発した。

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

意味マークアップの初期の歴史の詳細については激しく議論されているということを述べねばならない。しかし、その概念が1970年代中に(60年代末期も含む可能性がある)何度か独立に発明されているのは確かであり、80年代の末には業務の重要な一部となったTemplate:要出典

出版業界の外部で利用可能な初期のマークアップ言語の例にはUNIX上の組版ソフトウェアである、troffnroffがある。これらのシステムでは書式指定命令は文書のテキストの中に挿入され、組版処理系はテキストを利用者の指定どおりに出力することができた。これは正しく印刷された文書を得るためのトライアンドエラーの反復的な過程であった。WYSIWYGwhat you see is what you get)を実現したDTPソフトウェアの登場によって、カジュアルユーザーのほとんどはこれらの言語から離れていったが、高度な出版の現場ではテキストの不可視構造を指定するために未だマークアップを利用している。

TeX

Template:Main

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

SGML

Template:Main

構造と見栄えを明確に区別した最初の言語は Brian Reid が開発し、1980年に彼の博士論文で述べているScribeであった<ref>Reid, Brian. "Scribe: A Document Specification Language and its Compiler." Ph.D. thesis, Carnegie-Mellon University, Pittsburgh PA. または Technical Report CMU-CS-81-100.</ref>。Scribeは多くの点で画期的であり、マークアップされた文書からスタイルを分離するというアイデアだけではなく、意味要素の使用を統制する文法(一種のスキーマ)をも持っていた。ScribeはIBM GML(後のSGML)の開発に影響を与え、またHTMLやLaTeXの直接の祖先ともなった。

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

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

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

HTML

Template:Main

画像:Html-source-code2.png
HTMLのソースコード例

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

この状況が変化したのは、CERNに在籍していたティム・バーナーズ=リーが同僚の Anders Berglund たちからSGMLの存在を知り、SGMLの構文を使ってHTMLを作ったときである。HTMLは他のSGMLベースのタグ言語とよく似ているが、よりシンプルなものとして誕生し、当初は形式的なDTDを持っていなかった。DeRose はHTMLによる意味マークアップ(SGML)の使用が、ウェブに柔軟性と拡張性をもたらし、その成功の有力な要因となったと主張している<ref>DeRose, Steven J. "The SGML FAQ Book." Boston: Kluwer Academic Publishers, 1997. ISBN 0-7923-9943-9</ref>(その他の要因にはURLの概念やブラウザの無料配布などがある)。現在、HTMLはおそらく世界で最もよく使われているマークアップ言語であろう。

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

XML

Template:Main

もう1つの、現在広く利用されているマークアップ言語はXMLである。XMLはW3Cの、ジョン・ボサックが立ち上げ、議長を務めた委員会によって開発された。XMLの主目的は対象をインターネット上の文書に特化することで、SGMLを単純化したサブセットを作ることである<ref>http://www.w3.org/TR/2004/REC-xml11-20040204/ Extensible Markup Language (XML)</ref>。XMLはSGMLと同じようにメタ言語である。また、("extensible"という名のとおり)利用者が必要な要素を追加したり、名前空間を使って複合文書を作ったりして拡張することが容易にできる。

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

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

XHTML

Template:Main

2000年の1月から、HTMLについてのすべてのW3C勧告は、SGMLではなくXMLに基づいたものになった。Extensible Hypertext Markup Language を略してXHTMLという。(XはExの発音から。)

HTMLとXHTMLとの違いで顕著なものの1つは「すべてのタグは閉じなければならない」である。<br>のような「空の」HTMLタグは「閉じる」必要がある。XHTML 1.0勧告内のAppendixにあるHTML Compatibility Guidelines<ref>http://www.w3.org/TR/2000/REC-xhtml1-20000126/#guidelines</ref>では、<br />のように要素名の後に空白文字と斜線を入れて閉じる形を推奨している。ほかには、開始タグ内の属性値はすべて引用符で囲わなければならないという点がある。また、HTMLとは異なり、大文字と小文字は厳密に区別される。

他の用途での利用

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

脚注

Template:脚注ヘルプ Template:Reflist

関連項目

外部リンク

bg:Маркиращ език ca:Llenguatge de marques cs:Značkovací jazyk da:Markup language de:Auszeichnungssprache en:Markup language es:Lenguaje de marcado eu:Markaketa lengoaia fa:زبان نشانه‌گذاری fi:Merkintäkieli fr:Langage de balisage fy:Markeartaal he:שפת תגיות hu:Jelölőnyelv id:Bahasa markah it:Linguaggio di markup ko:마크업 언어 ku:Zimanê nîşandan mk:Јазик за означување ms:Bahasa penanda nl:Opmaaktaal no:Markeringsspråk pl:Język znaczników pt:Linguagem de marcação ro:Limbaj de marcare ru:Язык разметки simple:Markup language sk:Značkový jazyk sq:Gjuha markup sv:Märkspråk ta:குறியீட்டு மொழி th:ภาษามาร์กอัป tr:İşaretleme dili uk:Мова розмітки даних ur:زبان تدوین vi:Ngôn ngữ đánh dấu zh:置标语言

個人用ツール