SGML,XML,HTML

浅川伸一
2009年11月11日
東京女子大学のトップページ   情報処理センターのページ   東京女子大学の Gmail のページ   東京女子大学の図書館のページ   浅川のホームページ   コンピュータ2Dのページ

SGML

SGMLとはStandard Generalized Markup Languageの略であり,国際規格(ISO 8879)および日本工業規格(JIS X 4151)として採用,制定されている。コンピュー ター間で文書を交換するこを主な目的としている。

実際に文書を記述する際には,文書の構造を表すタグと,それに続く文を用い る。例えば,

<メール>
<件名>SGML</件名>
<著者>浅川伸一</著者>
<メールアドレス>asakawa@ieee.org</メールアドレス>
<今週の課題>SGMLとは何か調べよ</今週の課題>
<段落>SGML概説</段落>
SGMLとはStandard Generalized Markup Language の略であり...</メール>

などとすることで,

といったことを伝達することになる。

もちろん,SGMLのデーターをやり取りする相互間で,メールは<メール>という 開始タグを用いるということを取り決めておかねばならない。

タグの使用方法の合意ができれば,双方ともそのタグを使うことで受け取った文書の構造と内容は伝わることになる。

タグとは,

といった規則がある。この辺はHTMLと同様である。というよりSGMLの一変種がHTMLなのである。

DTD

タグの定義は一般にDTDと呼ばれるファイルに記述される(正確には,DTDというファイルは存在せず,前書き(prolog)と呼ばれるものの中に記述される)。基本的に、SGMLで文書を作成する時は、

  1. 作成する文書のDTDを選択する(無い場合は作成する)
  2. 選択したDTDに定義されているタグを用いて文書作成する

という手順で作成する。

例えば

<!--メールDTD-- > 
<!ELEMENT MAIL - - ((TO,FROM)?,DATE?,BODY) > 
<!ELEMENT TO - O (#PCDATA) --宛先--> 
<!ELEMENT FROM - O (#PCDATA) --発信--> 
<!ELEMENT DATE - O (#PCDATA) --日付--> 
<!ELEMENT BODY - - (P)* --本文--> 
<!ELEMENT P - O (#PCDATA|Q)* --段落--> 
<!ELEMENT Q - O (#PCDATA) --引用-- >

のように記述したとする。ここで DTD内の -と-に挟まれた部分はコメントである。 このとき、このDTDではメールを以下のように定義したことになる。

  1. <!ELEMENT MAIL - - ((TO,FROM)?,DATE?,BODY) >
    メールは要素(ELEMENT)MAILを持ち, その開始は<MAIL>,終了には</MAIL>というタグを用いる
  2. <MAIL></MEMO>は省略できない
  3. <MEMO></MEMO>の間には,要素として
    • TO
    • FROM
    • DATE
    • BODY

    があり, TOとFROMはTOが先でFROMが来るという順で, 1つずつ,ペアで0回または1回のみ現れる(省略できる)

  4. その次にDATEが現れる。DATEも0回または1回のみ現れる(省略できる)
  5. 最後にBODYが現れる。BODYは1回のみ現れる(省略できない)

DTDに記述する宣言は、次の4つである。

  1. 要素型宣言
  2. 属性リスト宣言
  3. エンティティ宣言
  4. 記法宣言

ここでは,要素型宣言と属性リスト宣言について説明する。

要素型宣言

要素型宣言は,文書中で使用できる文書要素を定義する。 要素型宣言では要素に関して,要素名,要素の親子関係,要素の内容モデル(子供の要素の出現の仕方)をそれぞれ指定する。 要素型宣言は次のように書く。

<!ELEMENT 要素名 内容モデル>

例えばテキストを内容として持つ「名称」という要素は次のように宣言す る。<!ELEMENT 名称 (#PCDATA)> ここで、#PCDATAはテキストを 表すキーワードである。1つの要素型宣言は,複数のレベルにわたる階層構造 の1つのレベルを定める局所的なものである。これらを順に積み重ねることによっ て,データ全体の階層構造を作る。階層構造は親子 関係で成り立っている。最上位の要素からはじめて,子供と孫,孫と曾孫といったように 要素型宣言を重ねていく。内容モデルには、 子どもの要素としてどのようなものの出現を許すかという指定を書く。このとき、 子どもとして出現する要素に関する情報は、出現順序と出現回数の2つである。

レイアウト

タグを付けることによって文書の構造は伝わるが, 文書を作成する場合にはレイアウトを指定したい場合もあるだろう。しかし,SGML文書では

などの理由のために,特定アプリケーション固有の情報は文書内には含めないことが基本となる。 このあたりは,HTML 文書では基本的に文章の内容と構造のみを記述し,レイアウトに関する 情報はカスケードスタイルシートcssとして分離しておくことに似ている。

XML

XML(eXtensible Markup Language)はSGMLのサブセットであり, 1998年2月に発表されたインターネット上で扱うデータを記述するための データフォーマットである。

近年,SGMLの応用言語であるHTMLを利用したWebが普及し,文書閲覧のみならず, 電子商取引という形で利用されるにいたった。しかし同時にHTMLの限界が認識される ようになった。すなわち,HTMLではタグ名が固定されており,ユーザが自由に タグを拡張して使用することはできない。このようなことからSGMLをWeb上で使 えるようにしようという議論が始まった。

この授業でHTMLを学習した際に,HTMLを書く場合には,テンプレートフィアルをコピーして 使うように指示した。このテンプレートファイルの先頭部分を見ると

<?xml version="1.0" encoding="iso-2022-jp"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x
html1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

などと書いてある。つまりこのテンプレートファイルの一行目ではこの文書がXMLの規格 に従うことを宣言していたのである。

XMLの長所

SGMLは特定のソフトウェアに依存しないデータ形式である。 SGMLとHTMLから多く点を引き継いでいる。

HTMLからは

一方SGMLからは次のような長所を引き継いでいる

拡張可能と意味情報

先にも述べたとおりXMLはHTMLと同じくSGMLの流れをくむデータ記述言語である。 XMLはHTMLと比較すると、「拡張可能」であり、「意味情報」を含めるこ とができる。例えば以下のようなXMLファイルがあるとする

<?xml version = "1.0" encoding = "iso-2022-jp"?>
<documentinfo type = "XML">
<title>XMLの簡単な解説</title>
<doctype>メール</doctype>
<author>浅川伸一</author>
</documentinfo>

HTMLではタグ名は決められたものしか用いることはできない。HTML文書を作成 するものはその内容をブラウザに表示させることによって確認し,さらにこの 授業ではOperaを用いて文法のチェックを行っていた。つまり,HTMLのタグ名は表 現情報を表しており、タグによってマークアップされている情報の意味は人間 が実際にブラウザで見て初めて確認できるのである。

一方、同じ情報をXMLでマークアップすることにすると,XMLではタグ名を自由 に決めることができるため,目的に応じたタグを定義して使用することができ るようになる。たとえば,<doctype>メール</doctype> のような場合"メール"という文字列の意味をタグ名が与えている。 つまり"メール"という情報についての意味情報をタグ名が与えているのである。 この行を見れば人間は"メール"という情報が文書のタイプを表すものであることを, タグ名から知ることができるのである。

このような場合「タグが意味情報をもつ」と考える。このようにXMLを使用 してマークアップすることで,タグ名をHTMLのように表現情報として利用するので はなく,意味情報として利用することになる。

この違いはプログラムからデータを処理する際に大きな違いとなって現れる。 データをXMLでマークアップしておけば、個々の情報に意味情報のタグがついて いるのでプログラムから正確にデータ処理をすることが可能になるのである。

文書における「内容」「構造」「体裁」の分離

文書を構成する「内容」「構造」「体裁」という3つの要素は,従来の紙媒体 ではひとつとなって決定されている。XML ではこれら3つの要素を分離して扱う。 「内容」はXML文書内でマークアップされるが、そのXML文書の「構造」 は DTD(Document Type Definition)と呼ばれる構造定義体によって定義する。 また,XML文書に与える「体裁」はスタイルシートにより記述する。DTDの概念は SGMLから引き継がれたものであり,スタイルシートの概念はHTMLから引き継がれた。

−XML宣言−

<?xml version = "1.0" encoding = "iso2022-jp"?>

−XMLインスタンス−

<研究者 登録番号 = "3661">
  <名前>浅川伸一</名前>
  <連絡先>
	<郵便番号>167-8585</郵便番号>
	<住所>東京都杉並区善福寺2-6-1東京女子大学現代教養学部</住所>
     <電話番号>03-5382-6746</電話番号>
         <FAX>03-5382-6709</FAX>
    </連絡先>
    <URL>http://www.cis.twcu.ac.jp/~asakawa/</URL>
</研究者>

XMLインスタンスとは実際の内容にタグが付けられている部分,つまりXML文書 の本体のことである。この部分は「要素( element)」と「属性( attribute )」からなっている。すなわち

開始タグ  内容    終了タグ
<郵便番号>167-8585</郵便番号>

となる。このあたりはHTMLとよく似ている。

上の例では「連絡先」という要素の中に「郵便番号」「住所」「電話番号」 「FAX」という要素が含められている。このとき、「連絡先」を「親要素」、 「郵便番号」「住所」「電話番号」「FAX」を「子要素」と呼ぶ。ちょうどHTMLが <body>要素の中に,<p>要素や<ul>要素を子どもの要素 として含んでいたことと同様である。XML文書は(HTML文書と同じように), 親要素から子要素、そのまた子要素、というように要素を階層 的に作り上げることで成り立っている。ある要素の開始タグと終了タグの対の 中に、子要素として別の要素の開始タグと終了タグを「入れ子」にして書くこ とによって階層関係を作る。

タグの対応が取れている場合でも、親要素と子要素が入れ子構造を形成してい ないような次のようなタグ付けは許されないのもHTMLと同じである。

要素には、その内容に子要素も文字列ももたない「空要素」と呼ばれる要素が ある。その場合には,<要素名 />としてタグの終わりにスラッシュ(/) が必要である。これはHTMLのimg要素やbr要素と同じである。

演習

UNIX には findというコマンドラインユーティリティがある。 使い方は,

find 検索するパス名 フォーマット

となる。例えば,自分のホームディレクトリ直下にある Library というディレクトリ から xml という拡張子のついたファイルを探したければ

find ~/Library -name '*xml'

とする。'*xml' とシングルクォートで囲むのはシェルがこの名前を展開してしまうのを 避けるためである。おそらくたくさんのファイルがみつかるであろう。 それぞれを順に眺めたければ,lessコマンドにパイプでつなげればよい。

find ~/Library -name '*xml' | less

いくつ xml ファイルがあるかを調べるには wc コマンドをつかう。

find ~/Library -name '*xml' | wc -l

findコマンドでみつかった .xml ファイルのいくつかを実際に cat, less または lv してみよ。どのような情報が書かれているか。

演習

自分のホームディレクトリ直下に comp2d-2009 というディレクトリを作れ。 ワードを起動し``Hello, world''とだけ書かれたファイル Hello.docx を作り,~/comp2d-2009に保存せよ。

ターミナルエミュレータを起動してcomp2d-2009に移動し, Hello.docxというファイルができていることを確認せよ。

次のコマンドを実行せよ

unzip Hello.docx -d Hello

このコマンドにより Hello というディレクトリにファイルが展開される。 Hello というディレクトリにどんな xml ファイルがあるか確認せよ。

./Hello/word/document.xmlという xml ファイルに文書の内容が 保存されている。例えば以下のようにである。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
...中略...
w:rsidRDefault="00943420"><w:r><w:t>Hello,
world.</w:t></w:r></w:p><w:sectPr w:rsidR="009D3640"
...後略...

このファイルの内容のうち,<w:t>Hello, world.</w:t>という部分が タイプした平文であったわけである。

例えばこの部分を Hi, all. It is rain, today.のように書き換えて, ターミナルエミュレータを~/comp2d-2009/Helloに移動し,以下のコマンドを タイプすると hello2.doc というファイルができあがる。

zip -rp hello2.doc *

このファイルをワードで読み込んでみよ。

Emacs でファイルを編集すると,そのファイルのあるディレクトリに,バック アップファイルができてしまう。バックアップファイル名 は 編集しているファイル名~である。このファイ ルを削除してから zip コマンドを実行しないとワードでは読み込んでくれない ようである。

情報処理技術者試験の過去の問題集より

タグを使って文書の論理構造や属性を記述する方法を定めた国際規格であって, 電子的な文書の管理や交換を容易に行うための文書記述言語はどれか。

答 ウ

解説

ア:DML(Data Manipulation Language)は、SQL の言語体系の一つで、データ操作言語のことである。
イ:HTML( HyperText Markup Language ) は、タグ形式のテキストで、HTML で記述したテキストは Web ブラウザを使用して表示できる。
ウ:SGML(Standard Generalized Markup Language ) は、代表的なマークアップ言語の1つで、 文書の中にタグを埋め込んで文書の構造を記述し、図・表などを含む文章の整形言語である。
エ:UML( Unified Modeling Language ) とは、Java 等のオブジェクト指向の ソフトウェア開発におけるプログラム設計図の統一表記法のことである。 主なモデル図としては、クラス図、ユースケース図、シーケンス図等がある

XML の特徴のうち,最も適切なものはどれか。

答 イ

解説

XML( eXtensible Markup Language )は、SGML や HTML と同様にデータの構造や意味をタグを 用いて表現する言語で、独自のタグを定義して使用することができる。

XML 文書を構成する最小単位である要素の定義方法に関する記述のうち、適切なものはどれか。

答 イ

解説

XML( eXtensible Markup Language )は、メタ言語(言語を作る言語ための言 語)で 構成されており、 XML により作成された言語を用いて構成された文 書やデータを XML 文書と呼ぶ。中には数字の羅列のようなデータ塊のものも ある。記述される内容としては、 要素、属性、処理命令、 CDATA セクショ ン、 DTD などがあり、要素の内部には開始タグ、 終了タグ、空要素タグ、 文字列などがある。開始タグ、終了タグにより要素を区切り、 要素が空要素 のときには空要素タグで示す様にできている。
ア:空要素の定義では、空要素タグを入れることとなっている。
イ:空要素のことを指す。よって、正解。
ウ: XML 文書は木構造となっているので、ルート要素を複数定義することはできない。
エ:注釈情報をタグに付加しても、要素名として識別することはできない。

XML に関する記述のうち,適切なものはどれか。

答 エ

解説

XML( eXtensible Markup Language )は、SGML や HTML と同様にデータの構造や意味をタグを 用いて表現する言語で、独自のタグを定義して使用することができる。
ア:誤り。XML は、SGML を基にしてその機能を拡張したものである。
イ:誤り。XML 文書を入力するためには、一般のテキストエディタで十分である。
ウ:誤り。文書の論理構造と表示スタイルを統合したものは、SGML である。
エ:正しい。

XML に関する記述として,適切なものはどれか。

答 エ

解説

XML( eXtensible Markup Language )は、SGML や HTML と同様にデータの構造や意味を タグを用いて表現する言語である。 XML は、独自のタグを定義して使用することができる。
ア:C++ を基本としたオブジェクト指向言語は、Java である。
イ:テキスト処理用のインタプリタ言語で、Web サーバ上で動く CGI( Common Gateway Interface )プログラムの標準言語は、Perl である。
ウ:デスクトップパブリッシングの標準的なページ記述言語は、PostScript である。