実は、同じ2004年2月4日には新しく XML 1.1 が勧告となった。これは、XML 1.0 に
などの追加・変更を加えたものだが、日本での一般的利用を含め多くの利用者にはあまり意味のないもので、普及していない。
W3Cは XML 1.1 と同時に XML 1.0(第3版) を勧告し、特に XML 1.1 である必要がない場合は XML 1.0 を使い続けるのが望ましいとしている。
なお、2006年8月16日には XML 1.0(第4版) および XML 1.1(第2版) が勧告となり、2008年11月26日には XML 1.0(第5版) が勧告となっている。これにより、XML 1.0 では Unicode 5.0 以上の文字が使用できるようになっており、XML 1.1 の必要性は薄らいでいる。
本ページでは XML 1.0(第5版) を対象として記述する。
XSL (Extensible Stylesheet Language) は2つの機能を持つ。
※ 2007年1月27日には XSLT 2.0 が勧告となった。
※ 2006年12月5日には XSL 1.1 が勧告となった。
※ 2007年1月27日には XPath 2.0 が勧告となった。
※ XHTML 2.0が策定中だったが、打ち切られた。
HTML5 を XML 記法で記述したものを XHTML5 と呼ぶこととなった。
HTMLファイルはWebブラウザの標準ファイル形式である。 テキストファイルなので、メモ帳などテキストファイルエディタでも中味を閲覧・編集できる。
HTML規格は HTML 2.0 (1995年11月), HTML 3.2 (1997年1月), HTML 4.0 (1997年12月), HTML 4.01 (1999年12月) など多くあり、長い間 4.01 で落ち着いていた。
その後、XML化されたXHTML規格として XHTML 1.0 (2000年1月), XHTML 1.1 (2001年5月) が生まれたが、一般に広く利用されるには至らなかった。
新規格が長い間策定されていたが、2014年10月に HTML 5 が標準勧告となった。さらに、2016年11月に HTML 5.1 が、2017年12月に HTML 5.2 が勧告されている。
ここでは、主に HTML 5 に沿った文書作成について説明するが、HTML 5 で導入された新しいタグはあまり使わず、従来の HTML 4.01 と比較的互換の高いタグを使った書き方を中心に説明する。
"<" で始まり ">" で終わる文字列をタグ (tag)と呼び、特に </ で始まるタグを「終了タグ (end tag)」、それ以外のタグを「開始タグ (start tag)」と言う。 開始タグから終了タグまでを「要素 (element)」、開始タグと終了タグの間に入っているものをその要素の「内容 (content)」と言う。 開始タグは「属性 (attribute)」を持つことができる。
HTML では、XML の 定義済み実体 や 数値文字参照 で特別な文字を表すことができる。詳しい内容については「XML入門」の章を参照のこと。また、HTML独自に空白や特殊文字を表す文字実体参照が定義されており使うことができる。
p要素(後述)を例にタグによる要素の構成を説明する。
<p>ここには一段落を書く。</p>
開始タグ | <p> |
終了タグ | </p> |
内容 | ここには一段落を書く。 |
要素 | <p>ここには一段落を書く。</p> |
「内容」を持たない要素をvoid要素 (void element)と言う。void要素は開始タグのみで記述するが、最後の > の前に / をつけた /> で終わる書き方も許される。
void要素の例
<meta charset=UTF-8 /> <br>
開始タグは「属性」を持つことができる。属性は要素に対して付加的な情報を付け加えるために使用される。
付加される情報は属性名と値のペアを = でつなげて表現される。 属性の値はダブルクォート(またはシングルクォート)で囲んで記述するが、属性値が以下の文字を含まないときにはダブルクォート(またはシングルクォート)で囲む必要はない。
引用符を省略できない属性値の文字
属性の例
<input type=number min=0 max=10>
<div> <img id=sampleImage1 src=gazou.png alt="左寄せのサンプル画像" style="float: left"> <p>ここの文章は画像の右側にくる。</p> <p style="clear: left">左端から新しい段落を始める。</p> </div>
ON/OFFを表す属性 (ブーリアン属性 boolean attribute) の場合は、属性名だけ書いて「=値」を省く書き方を使う。
ブーリアン属性の例 (input要素を無効化する disabled 属性の指定)
<input type="text" name="user" disabled>
属性は開始タグ中に空白で区切って複数記述することができるが、属性名が同じものが複数あってはいけない。
HTMLでは要素名や属性名の大文字と小文字を区別しない。本ページでは小文字で表記している。
たとえば、<HEAD> でも <head> でも同じく head 要素であり、<Body> でも <boDY> でも同じく body 要素となる。
属性値については、大文字と小文字を区別しないものと区別するものがある。
代表的なものでは、id 属性値や class 属性値については大文字と小文字が区別される。
id=firstitem
id=firstItem
文書型宣言はその文書型のタグ名や要素の構造を定義するものである。詳しくは「XML入門」の章を参照。
HTML 5 の場合は文書型宣言は以下のようになる。
<!DOCTYPE html>
DOCTYPEの直後にhtmlと記述されており、これがHTMLのルート要素になる。
※ 参考 ※
HTML 4.01 文書の場合の文書型宣言は以下のうちの一つになる。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd">
※ ※
文書型宣言の後に、その文書型の文書本体を記述する。一般にHTML文書は要素の組み合せの木構造で表現され、文書の一番上の階層の要素をルート要素と呼ぶが、HTML文書ではルート要素は html要素 になる。
文書中の各要素は厳密に入れ子をなしていなければならない。つまり、内側の要素から一番外側のルート要素にいたるまで、すべての開始タグと終了タグの対応が取れていなければならない。
※ HTMLでは省略の可能なタグもあるので、見かけ上開始タグと終了タグの対応が取れていなくても、タグが補われて規格に合った文書になる場合がある。
html要素の内側に子要素としてhead要素とbody要素が一個ずつ順に現れる。
html要素の開始タグには、以下の階層で使う要素に関する基礎的情報として、言語識別などを指定できる。日本語の文書を指定する場合は以下のようになる。
<html lang="ja">
属性の意味
※ 参考 ※
HTML 4.01 文書の場合のhtml要素の開始タグは以下のような形になる。
<HTML> <html lang="ja">
など。
※ ※
html要素の内容には、最初の要素としてhead要素を一個だけ記述する。head要素をhtml要素の子要素と呼ぶ。
head要素にはその文書の基礎的な情報を記述する。
meta要素 | そのファイルの文字エンコーディングの指定(charset= の部分) など |
link要素 | スタイルシートファイルの指定 など |
title要素 | その文書の題名 |
実習のファイルでは文字エンコーディングとして UTF-8 を使うので "UTF-8" を指定する。
※ 機種依存文字について ※
WindowsのシフトJISコードには独自拡張文字 ( ℡ や ㈱ や ⅶ など。順に TEL, (株), ローマ数字の vii) があり、これらはWindows以外の環境のシフトJISでは正しく表示できない場合が多く、機種依存文字と呼ばれている。
これらの機種依存文字を確実に表示させる意図で文字エンコーディングを "Windows-31J" と指定することは一策で、Windows-31J にブラウザおよびシステムが対応していればちゃんと表示されるだろうが、Windows以外の環境で対応しているものは少ないと思われる。
シフトJISのファイルではできるだけこのような文字を直接使わないようにしたい。
現在では、機種依存文字の多くはUnicodeで正式に登録されているので、Unicodeのエンコーディングである UTF-8 や UTF-16 で文書を作成すれば機種依存性を抑えつつ豊富な文字種を使用できる。
※ ※
link要素は、次の「CSSの利用」にあるように、文書にスタイルシートファイルを関連付けるために使用する。
meta要素はいろいろな目的で使用されるが、代表的なものとして、head要素の内部に置き文書の文字エンコーディング (UTF-8) を記述するのに使用される。
(charset=UTF-8 の部分)
<meta charset=UTF-8>
このmeta要素でそのファイルの文字エンコーディングを記述するので、そのファイル内で日本語が現れるよりも前にmeta要素を記述する必要がある。<head>の直後に入れるのが良い。
title要素は文書に題名をつける。head要素の中に必ず一個記述する。title要素の内容には単なるテキストしか記述できず、要素は入れられないことに注意。
title要素の内容はWebブラウザでこの文書を開いているときのウィンドウの名前として表示されることが多い。
細かい見栄えの調整は HTML でなく CSS で行うことが望ましい。 CSSの適用方法は以下の3通りがある。
style属性は特定要素の開始タグ内においてスタイル指定をする方法である。ほとんどすべての要素には、style属性をつけて、その属性値としてCSS形式のスタイル指定をすることができる。
適用範囲はその要素の中だけとなる。
セレクタを使用しないので、使い方は下記のような形となる。
<要素名 style="特性名1:特性値1; 特性名2:特性値2" > ・・・ </要素名>
style要素はhead要素の中に置かれ、
<style type="text/css"> ¦ ¦ </style>
の中にCSSによるスタイル指定を記述する。
適用範囲は当該文書全体となる。
HTML 5 では、スタイルシートのタイプがデフォルトで text/css なので、以下のように省略できる。
<style> ¦ ¦ </style>
style要素の開始タグに後述の media 属性を入れ、内容部分のCSS設定が適用される環境を限定することもできる。
外部スタイルシートはHTML文書を別のCSSファイルと結びつける方法で、文書の中身と見栄えの体裁を分離できるため推奨されている。
HTML文書に外部のCSSスタイルシートファイルを適用するには、
head要素に
<meta http-equiv="Content-Style-Type" content="text/css" /> <link rel="stylesheet" href="スタイルシートURI" type="text/css" media="screen" /> |
を記述する。
HTML 5 では、スタイルシートのタイプがデフォルトで text/css なので、以下のように省略できる。
<link rel=stylesheet href="スタイルシートURI" media=screen>
|
「スタイルシートURI」は該当するものに書き変えること。なお、CSSファイルの拡張子は .css とするのが一般的である。
※ URIについて
上記の中の media 属性 は、スタイルシートが適用対象とする環境を指定するもので、
などがある。
別法として、link要素での指定ではmedia属性無しで全メディア対象としておき、CSSファイル中で例えば以下のようにメディアを切り分ける手法がある。
・・・ 全メディア対象の CSS 設定を記述 ・・・ @media print { ・・・ 印刷用の CSS 設定を記述 ・・・ }
style要素および外部スタイルシートにおけるスタイル指定の基本は
セレクタ { 特性名1 : 特性値1 ; 特性名2 : 特性値2 ; ¦ }
の形である。
「セレクタ」で対象とする要素を指定する。
{ と } で囲まれた部分をブロックと言う。「特性名1」等はプロパティと言われるスタイル項目で「特性値1」等はその項目に設定する値である。複数の特性に値を設定する場合は、間をセミコロンで区切る。
セレクタで指定される対象に対してブロック内の特性の設定がすべて有効になる。
セレクタの指定方法は多種あるが、よく使用されるものを以下に挙げる。
「要素名」だけを指定したセレクタ。指定した要素名のすべての要素に対してブロック内の特性の設定が有効になる。
「*」を指定したセレクタ。すべての要素に対してブロック内の特性の設定が有効になる。
「 . クラス名」の形のセレクタ。指定したクラスに属する (すなわち、指定された class属性値を持つ) すべての要素に対してブロック内の特性の設定が有効になる。
「 # ID名」の形のセレクタ。指定したid属性値を持つ要素のみが対象となる。
以下は、複数のセレクタを組合わせて複雑な指定をするものである。
「セレクタ1 セレクタ2」の形のセレクタ。「セレクタ1」の対象となる要素の子孫要素の中で、「セレクタ2」に該当するものに対して設定が有効になる。
「セレクタ1 > セレクタ2」の形のセレクタ。「セレクタ1」の対象となる要素の直接の子要素の中で、「セレクタ2」に該当するものに対して設定が有効になる。
「セレクタ1 + セレクタ2」の形のセレクタ。「セレクタ1」で対象となる要素1と「セレクタ2」で対象となる要素2が同じ親要素を持つ兄弟要素であり、かつ、要素1の直後に要素2がある場合に、要素2に対して設定が有効になる。
「セレクタ1 ~ セレクタ2」の形のセレクタ。「セレクタ1」で対象となる要素1と「セレクタ2」で対象となる要素2が同じ親要素を持つ兄弟要素であり、かつ、要素1の後に要素2がある場合に、要素2に対して設定が有効になる。
隣接セレクタと違い、直後の兄弟要素だけでなく、後にあるすべての兄弟要素に適用されることに注意。
「セレクタ1, セレクタ2, セレクタ3」のように複数のセレクタをコンマで区切って並べて指定する。指定された「セレクタ1」「セレクタ2」「セレクタ3」などのどれかに該当する要素が対象となる。
CSSで要素の占める高さや幅、枠の幅、フォントのサイズなどを数値で指定する場合には、「数値」に「単位」をつけたものを使用する。
単位は種々あるが、よく使われるものを下表に示す。
なお、0 はどの単位でも 0 なので、単位をつけず単独で使用してもよい。
単位の記号 | 名称 | 説明 |
---|---|---|
in | インチ | 実際の長さ単位と同一。1in = 25.4mm |
cm | センチメートル | 実際の長さ単位と同一 |
mm | ミリメートル | 実際の長さ単位と同一 |
pt | ポイント | 1/72インチを 1pt とする |
px | CSSピクセル 以前は、 デバイスピクセル | 以前は、コンピュータ画面の最小単位の一点 (ピクセル (pixel)、画素) の占める幅・高さである デバイスピクセル (device pixel) を表すとされていた。 新しい規格では、高解像度環境に対応し、CSSピクセル (CSS pixel) 1px を、下に示す 参照ピクセル (reference pixel) を最も良く近似するデバイスピクセル整数倍 とすることが推奨となった。 参照ピクセルは 96dpi のデバイス画面に対して約 0.0213 度の視角に相当する距離として定義され、名目上の腕の長さとされる 28in (≈ 71cm) の距離から見た場合に 1px = 1/96in ≈ 0.265mm となる。 なお、CSSピクセル (論理ピクセル) の デバイスピクセル (物理ピクセル) に対する比率を デバイスピクセル比 (device pixel ratio) という。既にデバイスピクセル比が 2 (2x2 デバイスピクセルが 1 CSSピクセル) や 3 (3x3 デバイスピクセルが 1 CSSピクセル) などの機器が普及している。 |
em | エム | フォントの大きさ (font-sizeプロパティの値) を 1em とする。M (大文字) の幅が由来とされているので em と名づけられている |
en | エン | 1em の半分を 1en とする。N (大文字) の幅が由来とされているので en と名づけられている |
ex | フォントの x (小文字) の高さ (x-height) を 1ex とする | |
% | パーセント | 元の値を 100% として相対値で指定する |
rem | レム | ルート要素 (HTML文書ではhtml要素) のフォントの大きさを 1rem とする |
(例)
font-size: 16px;
font-size: 10pt;
font-size に対して、フォントに関わる相対的長さ単位で指定する場合は、親要素の文字の大きさが基準となる。
font-size: 1.2em;
font-size: 120%;
HTMLの文書本体の要素には大別してブロックレベル要素とインライン要素の2種類がある。
ブロックレベル要素は一行~複数行全体を占めるような要素で、視覚的には幅いっぱいの矩形領域を表すので、前後に改行を伴うことになる。
h1 - h6, p, address, blockquote, dl, ul, ol, table, hr, pre, div |
インライン要素は一行中の局所的一部分を表すもので、視覚的には前後の部分とつながっており、前後に改行は入らない。
a, br, em, strong, q, code, kbd, samp, img, span |
HTML文書の多くの要素は内容としてインライン要素とテキストを持つ。インライン要素とテキストをまとめて「テキストレベルのもの」と言うことにする。
HTML文書では、XMLで定義されている定義済み実体と数値文字参照が利用できる。また、HTML独自の文字実体参照 (character entity reference)が多く登録されており利用できる。その中でもよく使われる空白を表すものを下表に示す。
文字実体参照 | 数値文字参照 | 内容 |
---|---|---|
|     | 改行しない空白 |
  |     | フォントサイズの半分の幅の空白 |
  |     | フォントサイズと同じ幅の空白 |
  |     | 通常フォントサイズの1/5 (場合により 1/6) の幅の空白 |
head要素の次にbody要素を記述する。 body要素もhtml要素の子要素で、head要素とは兄弟の関係になる。
body要素の内容には文書の本文を記述する。子要素としてブロックレベル要素を取る。テキストレベルのものは直接内容に入れてはいけないことに注意。
今までの説明をまとめて、HTML 5 で外部CSSスタイルシートを使ってHTML文書を記述したときの文書の基本骨格を示す。
<!DOCTYPE html> <html lang=ja> <head> <meta charset=文字エンコーディング指定> <link rel=stylesheet href="スタイルシートURI"> <title>文書のタイトル</title> </head> <body> ここにbody要素の内容 (文書の本体) を書く。 ただし直接入れられるのはブロックレベル要素のみ。 したがって、この書き方は駄目。 </body> </html> |
「文字エンコーディング指定」の部分は文書に使用している文字エンコーディングの指定を入れる。
JIS であれば | ISO-2022-JP |
日本語EUC であれば | EUC-JP |
シフトJIS であれば | Shift_JIS |
UTF-8 であれば | UTF-8 |
UTF-16 であれば | UTF-16 |
PC演習室のHドライブもしくはUSBディスク等長期保存される場所に、新しく授業用のディレクトリ (フォルダ) を作りなさい。以下では、ディレクトリを mmw とする。 さらに、mmw ディレクトリの中にディレクトリ(フォルダ) html を作り、その html ディレクトリの中に上で示した骨格のファイルを basic.html という名前で UTF-8 エンコーディングで保存しなさい。
文書のタイトルは「名前(学籍番号) マルチメディアWeb技術のページ」、文字エンコーディング指定は UTF-8 とする。
「名前(学籍番号)」の部分は自分のものにすること
「スタイルシートURI」は mmw.css とすること。mmw.css はこちらで雛形として用意したものをダウンロードし同じディレクトリに保存して使うこと。
作ったファイルをブラウザで開き、表示を確認しなさい。
以下では本文(body要素の内容)に記述できる要素、つまりbody要素の子孫要素となり得る要素を説明していく。
本文につける見出しを記述する。大見出し、小見出しなど階層的な見出し構造を構成できるように、最上位の階層の見出し(h1)から最下位の見出し(h6)まで六種類(h1, h2, h3, h4, h5, h6)用意されている。
見出し要素自身はブロックレベル要素だが、見出し要素の内容にはテキストレベルのものしか入れられない。
見出し要素を使って、たとえば以下のように、文書内で統一のとれた階層分けをするとよい。
h1 | title 文書の題名 |
h2 | chapter 章 |
h3 | section 節 |
h4 | subsection 小節 (項) |
h5 | subsubsection 小々節 (目) |
h6 | paragraph title 段落見出し |
<h1>日常の記録・ニュース</h1> <h2>2005年の記録</h2> <p>8月郵政民営化をめぐって衆議院が解散。9月の選挙では自民党が圧勝した。</p> <h3>1月の記録</h3> <h4>1日の記録</h4> ¦ <h4>31日の記録</h4> <h3>2月の記録</h3> ¦ ¦ <h3>12月の記録</h3> <h4>1日の記録</h4> ¦ <h4>31日の記録</h4> <h2>2004年の記録</h2> <p>日本では韓国ブーム。2004年10月中越地方で連続して大きい地震が発生し大きな被害を出した。 イラク戦争後のゴタゴタは続いたが、アメリカではブッシュ大統領が再選された。</p> <h2>2003年の記録</h2> <p>2003年は宮城県で地震の多い年だった。 世界はイラク戦争でゴタゴタして、日本も自衛隊派遣問題でもめた。</p> <h2>2002年の記録</h2> <p>5月31日から6月30日まで日韓共催のサッカーのワールドカップがあった。</p> <h2>2001年の記録</h2> <p>9月11日の同時多発ハイジャックテロは歴史的大事件となった。 これ以降、飛行機搭乗の際のチェックが厳しくなった。</p> |
表示: (スタイルの指定によって大きく変わってくる。あくまで一例)
8月郵政民営化をめぐって衆議院が解散。9月の選挙では自民党が圧勝した。
¦
¦
¦
¦
日本では韓国ブーム。2004年10月中越地方で連続して大きい地震が発生し大きな被害を出した。 イラク戦争後のゴタゴタは続いたが、アメリカではブッシュ大統領が再選された。
2003年は宮城県で地震の多い年だった。 世界はイラク戦争でゴタゴタして、日本も自衛隊派遣問題でもめた。
5月31日から6月30日まで日韓共催のサッカーのワールドカップがあった。
9月11日の同時多発ハイジャックテロは歴史的大事件となった。 これ以降、飛行機搭乗の際のチェックが厳しくなった。
※「名前(学籍番号)」の部分は自分のものにすること。
basic.html で指定しているCSSファイル mmw.css で使用されているセレクタ、プロパティとその値をすべて表としてまとめなさい。
CSS・セレクタ・「プロパティと値」という3つの欄を持つ表形式とする。
CSSの欄には CSS の指定をそのまま入れる。
セレクタの欄では、対象となる要素 (何に対して) を正確に説明する。「プロパティと値」の欄では、どういう項目をどう設定するかを、一つ一つ説明する。
この演習には労力・時間を要するが、最終的に 課題3 の一部として提出してもらう。 現時点では一部だけの説明でもいいが、今後、時間的余裕のあるときに表を追加していき、課題提出時にCSSファイルのすべてが表としてまとまっていればよい。ただし、演習19 で加える変更も含めて答えること。
CSSファイルをテキストファイルエディタ等で開いて中を見て、Webで検索をかけて信頼できそうな資料をあたるとよい。
HMTL文書は不特定多数に公開される性質があるので、この要素の内容に文書作成者の連絡先を明記しておく。
address要素はブロックレベル要素で、内容にはテキストレベルのもののみを入れられる。
<address> <br> 今日の日付.<br> 名前 </address>「今日の日付」はファイル編集時の日付、「名前」の部分は自分のものにすること。
段落を表すブロックレベル要素である。
開始タグ<p>と終了タグ</p>の間に一段落を記述する。
p要素の中にはテキストレベルのものしか入れられないので、たとえば箇条書きや表などのブロックレベル要素を中に入れることはできない。
ブラウザでは通常段落ごとに行が区切られて表示される。
段落の途中で強制的に改行させる。br要素はvoid要素で、強制的に改行させたい場所に <br> と書く。
インライン要素なので、ブロック(段落など)の内部でしか使用できない。
例
<p>花の色は<br> 移りにけりな<br> いたづらに<br> わが身世にふる<br> ながめせしまに<br> <br> 小野小町</p>
表示:
花の色は
移りにけりな
いたづらに
わが身世にふる
ながめせしまに
小野小町
縦書きにした例。style="writing-mode: vertical-rl"
※ 古いブラウザでは非対応
花の色は
移りにけりな
いたづらに
わが身世にふる
ながめせしまに
小野小町
basic.html の h2要素「授業覚え」- h3要素「マルチメディアWeb技術」に続く各講義日のh4要素の後に、その日の講義で何を学習し自分が何をやったかを記録していくこと。この演習は各講義日ごとに継続的に行うこと。
入力はとりあえずp要素を使うものとするが、今後新しい要素を覚えたら自由に使ってよい。
一般にHTML文書の中では改行は一つの空白文字として扱われ、ブラウザでも空白文字として表示される。複数の空白が連続する場合にも一つの空白にまとめて表示される。
pre要素を用いると、その内容に含まれる改行や空白がそのまま表示される。
pre要素はブロックレベル要素で、内容には一部の文字フォントを変更するするようなインライン要素を除いたテキストレベルのものが入れられる。
例
<pre> #include <stdio.h> int main( int argc, char **argv ) { printf( "Hello world\n" ); return 0; } </pre>
表示: (空行も含めてそのまま表示される。ただし実体参照は解釈・変換される)
#include <stdio.h> int main( int argc, char **argv ) { printf( "Hello world\n" ); return 0; }
文章の一部を修飾するマークアップとして、em要素・strong要素・dfn要素・code要素・samp要素・kbd要素・var要素・cite要素・abbr要素・acronym要素がある。
いずれの要素もインライン要素で、内容にはテキストレベルのもののみ入れられる。
em要素 (emphasis) はブラウザでは斜体で表示されることが多い。
strong要素 (strong emphasis) は強く強調したいときに用いる。ブラウザでは太字で表示されることが多い。
例
<p>Normal <em>Emphasis</em> <strong>Strong</strong><br> 通常 <em>強調</em> <strong>強い強調</strong></p>
表示: (スタイルの指定によって大きく変わってくる。あくまで一例)
Normal EmphasisStrong
通常 強調強い強調
a要素はハイパーリンクを記述する。
WWWが普及した要因として、HTMLのハイパーリンクと言う仕組みで離れたところにある各種のリソースをシームレスにアクセスできるようになったことが挙げられる。
a要素はハイパーリンクの起点アンカー(リンク元)を内容に持ち、終点(リンク先)をhref属性の値で指定する。これにより、他のHTML文書など各種のリソースへのリンク(つながり)を実現する。
href属性の値にはURI (ほとんどがURL) を指定してリンク先リソースを参照できるようにする。
a要素の内容にはテキストレベルのものが入れられるが、a要素を入れ子にすることはできない。
例
<p>asahi.comのトップページへの<a href="http://www.asahi.com/home.html">リンク</a></p>
表示: asahi.comのトップページへのリンク
URI(Uniform Resource Identifier)は、世界に存在するリソース(書籍やコンピュータ、コンピュータ上のファイルなど)を一意に識別するものである。
URIの中で最も使われているのがURL(Uniform Resource Locator)であるが、URIの中にはその他にURN (Uniform Resource Name)があり、名前によってリソースを識別する(書籍のISBNなど)。
URLはコンピュータネットワーク上のリソース(文書・画像・動画・音声など)へのアクセス方法(スキーム)と所在場所を規定する。 URLには絶対URL指定と相対URL指定がある。
上で出てきた http://www.asahi.com/home.html は絶対URLで、
インターネット上のリソースはみなURLを持っており、a要素のhref属性の属性値として指定することによりリンクできる。
スキームにはhttpの他に https (HTTPにSSLあるいはTLS暗号化を付加したプロトコル)、ftp (FTPプロトコル)、mailto (メールアドレス)、file (ローカルファイル) などがある。
例
<p><a href="http://www.google.co.jp/">Google</a>はインターネット上の有名な検索サイトである。</p>
表示: Googleはインターネット上の有名な検索サイトである。
相対URLは同一サイト内(同一マシン内)のリンク等で利用される。
相対URLは基準URLに対する相対位置として指定される。 特別に指定しない限り、現在対象となっている文書のあるディレクトリの絶対URLが基準URLとなるので、相対URL指定では同一マシンに同一スキームでアクセスすることになる。
相対位置の指定にはUNIXなどで用いられる階層ディレクトリの指定方式が使われる。 現在対象となっている文書の存在するディレクトリがカレントディレクトリとみなされる。
ディレクトリの区切り文字 | スラッシュ | / |
カレントディレクトリ | ピリオド一つ | . |
親ディレクトリ | ピリオド二つ | .. |
文書の特定箇所の開始タグにid属性で名前を指定することにより、その地点へのリンクを張ることができるようになる。
その際は <a href="#リンクしたい地点のid属性の値">
のように、id属性の値の前に #
をつけて記述する。
id属性値では、アルファベットの大文字・小文字が区別されることに注意する。
id属性は任意の要素で指定できるが、その値に一文書中で重複があってはならない。
使い方
basic.html のbody内容のaddress要素に続くhr要素の後ろに、目次を作ってリンクでジャンプできるようにしなさい。
目次は、「目次」という見出しを含めて p 要素で作り、「自己紹介」「自分史」「趣味・特技・資格」「自己PR」「自画像」「授業時間割」「授業覚え」を入れ、それぞれ br 要素で改行すること。
リンク先にid属性を指定しておく必要があることに注意。
HTML文書中のid属性は、CSS や JavaScript で、特定の要素に対する見栄えや動作を指定するために利用される。
href属性で指定するURLのスキームとして mailto を使用するとメールアドレスをリンク対象に指定できる。
例
質問メールの<a href="mailto:s17c0999@bene.fit.ac.jp?subject=Question">宛先</a>
表示: 質問メールの宛先
この例のように、メールアドレスの後ろに ? に続けてメールの件名(subject)などを指定することも可能。basic.html のbody内容の最初にあるaddress要素の中の自分の名前に「自分のメールアドレス」へのリンクをつけなさい。
img要素は画像ファイルをHTML文書に埋め込んで表示させるのに使用する。
画像ファイルはGIF形式(*.gif)、JPEG形式(*.jpgまたは*.jpeg)、PNG形式(*.png)などが使用できる。
使い方
<img src="画像ファイルのURI" alt="画像が表示できない(しない)環境での代替テキスト">
img要素はvoid要素であり、インライン要素である。したがってbody要素の内容に直接入れることはできず、見出し要素・p要素・address要素などテキストレベルのものを内容とできるブロックレベル要素の内容中に記述する。
src属性で埋め込む画像ファイルのURIを指定する。src属性は必須。
alt属性で画像が表示できない(しない)環境のための代替テキストを指定する。alt は 代替テキストを表す alternative text から取られている。
alt属性は HTML 4.01 では必須だったが HTML 5 では必須ではなくなったが、アクセシビリティを高めるため入れておくことが推奨される。
※「画像が表示されない場合には代替テキストも表示したくない」という場合の一法として、空のalt属性 alt="" を与える書き方がある。装飾用のボーダー画像などの場合に使うことができる。
例
<h3>ここから先は <img src="tomare.gif" alt="一時停止マーク"> です。</h3>
表示:
最近の高解像度スマートフォンを含めた種々の環境でのWebページ表示に対応するため、img要素では、srcset属性 で表示させる画像を複数ファイルから解像度によって選択させたり、sizes属性 で画像の表示サイズの細かい情報を伝えることができるようになっている。
詳細は省略するが、興味がある人はWebで調べてみるとよい。
img要素はインライン要素なのでa要素の内容に入れられる。つまり、画像をリンクアンカーにしてリンクを目立たせることができる。リンクバナー (link banner) または単にバナーなどと言われる。
次のサンプルは、「チョキ」マークをリンクアンカーにした例。
<p>コンピュータじゃんけん選手権はこちらのページへ <a href="http://www.cs.unimaas.nl/~donkers/games/roshambo04/"> <img src="choki.gif" alt="チョキのマーク"></a></p>
basic.htmlの「自画像」の部分に、自分の肖像画または似顔絵を入れなさい。 (どちらかひとつでよい。絵がなければお絵描きツールなどを使って作ること)
img要素では画像の説明をする適切な alt 属性を記述すること。
画像ファイルは半角英数字のみでできたファイル名とすること。
HTMLの箇条書きには以下の三種類があり、すべてブロックレベル要素である。
番号なし箇条書き | ul要素 |
番号付き箇条書き | ol要素 |
説明付き箇条書き | dl要素 |
ul要素は番号無し箇条書きを構成する。 ul要素は子要素にli要素のみを持つ。(liはlist itemの略)
li要素がリストの項目1個を表す。 li要素は内容に任意のテキストレベルのものとブロックレベル要素を持つ。
<ul> <li>項目を並べる</li> <li>項目の前に丸印などが付く</li> ¦ ¦ </ul> |
表示: (スタイルの指定によって大きく変わってくる。あくまで一例)
項目の前に丸印などが付く
¦
¦
basic.html の「自己PR」の部分を、ul要素を使って少なくとも2個以上の項目が箇条書きになるよう書き換えなさい。
ol要素は番号付き箇条書きを構成する。 ol要素は子要素にli要素のみを持つ。
li要素がリストの項目1個を表す。 li要素は内容に任意のテキストレベルのものとブロックレベル要素を持つ。
<ol> <li>項目1の内容を書く</li> <li>項目の前には番号が付く</li> ¦ ¦ </ol> |
表示: (スタイルの指定によって大きく変わってくる。あくまで一例)
項目の前には番号が付く
¦
¦
ol要素を使って、basic.htmlの「自分史」の部分に、生まれてから今までの自分に関する大きな出来事(5つ以上)を順に記しなさい。それぞれの出来事の年月(日)とその説明を入れること。
dl要素は説明付き箇条書きを構成する。
dl要素は子要素としてdt要素とdd要素を持つ。
項目をdt要素で表し、その項目の説明をdd要素で表す。(dtはdefinition term、ddはdefinition descriptionの略)
dt要素の内容にはテキストレベルのものしか記述できない。
dd要素は内容に任意のテキストレベルのものと任意のブロックレベル要素を入れられる。
<dl> <dt>項目A</dt> <dd>ここに項目Aの説明を書く。</dd> <dt>項目B</dt> <dd>ここに項目Bの説明を書く。</dd> <dt>項目C</dt> <dd>ここに項目Cの説明を書く。</dd> </dl> |
表示: (スタイルの指定によって大きく変わってくる。あくまで一例)
basic.html の「趣味・特技・資格」の部分をdl要素を使って、「趣味」「特技」「資格」のそれぞれの項目を記入しなさい。
ただし、「趣味」「特技」「資格」のそれぞれについてさらにul要素を使って箇条書きしなさい。
table要素は表 (table) を構成するブロックレベル要素である。
table要素にはかなり複雑で凝った使い方もあるが、ここでは基本的なもののみ説明する。
表は行と列によって構成される。 行が縦方向を表し、列で横方向を区別する。ある行のある列1個、つまり表の区画単位をセルという。
table要素は行単位に構成され、table要素の子要素であるtr要素 (table row) が表の1行を表す。
tr要素の子要素であるtd要素 (table data cell) が各セルを表す。
項目名などを見出しとして区別するときは、そのセルをth要素 (table header cell) で表す。th要素もtr要素の子要素である。
td要素とth要素にはさまざまな要素が自由に入れられる。
表に表題をつけるときはtable要素の子要素としてcaption要素を使う。caption 要素の中にはタグの構造を入れられる。特に、details要素を入れて詳しい説明をすることができる。
<table> <caption> <strong>キャプションをつけられる</strong> <details> <summary>説明のまとめ</summary> <p>詳しい説明を文章で入れられる。</p> </details> </caption> <tr> <!-- 見出し行 --> <th></th><th>カラムA見出し</th><th>カラムB見出し</th><th>カラムC見出し</th> </tr> <tr> <!-- データ1行目 --> <th>行1見出し</th><td>0001</td><td>86</td><td>59</td> </tr> <tr> <!-- データ2行目 --> <th>行2見出し</th><td>0002</td><td>61</td><td>72</td> </tr> </table> |
表示: (スタイルの指定によって大きく変わってくる。あくまで一例)
カラムA見出し | カラムB見出し | カラムC見出し | |
---|---|---|---|
行1見出し | 0001 | 86 | 59 |
行2見出し | 0002 | 61 | 72 |
デフォルトでは、表全体やセルの枠線はなく、セルの幅や高さは自動的に決められる。 枠線・行高さ・セル幅・色・フォントなど、表の細かい見栄えはCSSで調整するのが望ましい。
表の中の行の高さは tr要素 で style 属性としてCSSの height プロパティに値を設定して指定できる。
<table> … <tr style="height: 8ex"> td要素やth要素を並べる </tr> … </table>
上は行の高さを 8ex (1ex は 小文字 x の高さに相当) に指定した例。
表の各カラム (セル) の幅は、各 td 要素 または th 要素で style 属性としてCSSの width プロパティに値を設定して指定できる。
<table> … <td style="width: 8em">セルの中味</td> … </table>
上はセルの幅を 8em (1em はフォントサイズに相当) に指定した例。
basic.htmlの「授業時間割」の部分に、自分が今年度前期に履修している講義・演習・実験等を全部入れた時間割表を作りなさい。
時間割表の組み方の詳細は HTML, CSSによる時間割表組み に説明してある通りとすること。
ruby要素 はインライン要素で、文書中で振り仮名(ルビ)を使用する際に指定する。本文部分は「ベーステキスト」、振り仮名部分は「ルビ」と呼ばれる。 ruby要素は XHTML 1.1 で標準となり、HTML 5 では仕様が変更されて採用された。
ちなみにルビはイギリスの印刷業界での5.5ポイント活字の呼び名 ruby に由来し、この活字の大きさが日本で振り仮名として使われていた7号活字の大きさ(5.25ポイント相当)と近かったので振り仮名のことをルビと呼ぶようになった。
ruby要素は子要素として、rt要素 (ruby text)、rp要素 (ruby parentheses) などを持つ。複雑なルビ組みも可能になっているが、ここではごく基本的なルビのつけ方のみを説明する。
<ruby>ベーステキスト<rp>(</rp><rt>ルビ</rt><rp>)</rp></ruby>
ruby要素の内容テキストとして「ベーステキスト」部分に対象となる文字列、rt要素の内容「ルビ」部分に読み方などのルビを指定する。 rp要素で指定されている括弧 ( ) は、ルビに対応していないブラウザで文書を見たときに
ベーステキスト (ルビ)
のように表示されるように配慮したものである。この配慮が不要ならば、下の記述のように rp 要素を使わず少し短く書ける。
<ruby>ベーステキスト<rt>ルビ</rt></ruby>
さらに、この場合 rt の終了タグも省略可能なので、下の記述のようにすっきり書ける。
<ruby>ベーステキスト<rt>ルビ</ruby>
<ruby>薀蓄<rp>(</rp><rt>うんちく</rt><rp>)</rp></ruby> <ruby>石斑魚<rt>ウグイ</ruby>
表示: (ルビ表示対応かどうかによって表示が異なる)
薀蓄 石斑魚
basic.html の h1 要素の内容の自分の名前にruby要素を使って読み仮名をつけなさい。姓と名を分けてルビを振ること。
HTML5 規格では、オーディオ用の要素 audio や ビデオ用の要素 video があり、HTML5 をサポートしたブラウザで広く使われている。
<audio src="音声・楽音ファイルURL" ></audio>
<video src="動画ファイルURL" ></video>
autoplay 属性、preload 属性、loop 属性、muted 属性、controls 属性 は audio 要素の場合と同様。
audio要素・video要素とも、src属性を利用する代わりに、子要素として source 要素 を複数個入れることができる。
source 要素は、オーディオ・ビデオファイルのURL (src属性) の他に、MIMEタイプ (type属性) や メディアの種類 (media属性) までコーデック方法なども含めて詳しく指定できる。
複数のsource要素を指定することで、取り扱える形式をブラウザに記述順にチェックさせ、選択させることができる。
※ 過去のブラウザでのオーディオ・ビデオの利用 ※
参考のため、以下では HTML5以前 (HTML 4.01, XHTML 1.0/1.1) の方法を簡単に紹介する。
HTML5以前の規格では、音声・楽音および動画では標準的なインラインの記述法はないが、多くのブラウザで embed タグあるいは object タグを使用する方法が利用されていた。(互換性を考慮し両方のタグを使う方法が推奨されていた)
ブラウザやプラグインによって記述法が異なるので利用には注意が必要だった。
embed 要素による音声・楽音および動画の埋め込みは Internet Explorer でサポートされており、以下のように使用していた。
<embed src="音声・楽音または動画ファイル名(ディレクトリを含めてもよい)" autostart="true" >
autostart 属性で true を指定すると自動で演奏がスタートする。他にも細かい動作を指定する属性があるが省略する。
Firefox等で採用されていた object 要素によって音声・楽音および動画を埋め込む方法については説明を省略する。
※ ↑ 過去のブラウザでのオーディオ・ビデオの利用 ↑ ※
basic.html の「自画像」に画像を入れた箇所の後に、audio要素で何らかの意味で自分に関わる音(音楽)、video要素で何らかの意味で自分に関わる動画をそれぞれ入れなさい。
それぞれ、どういう意味で自分と関わるかの説明を入れておくこと。
audio要素では、loop 属性および controls 属性を指定すること。
video要素では、autoplay 属性、muted属性 および controls 属性を指定すること。
音声(音楽)ファイル・動画ファイルは、インターネットに公開した場合に著作権などの問題が発生しないものとすること。(下 ※ 参照)
音声(音楽)ファイル・動画ファイルはすべて半角英数字でできたファイル名とすること。
※ 音楽ファイルや動画ファイルにはさまざまな形式がある。ブラウザによっては特定の音楽ファイルや動画ファイルを正常に再生できない場合がある。 大学PC演習室のWindows環境のブラウザ Chrome, Edge 等で自分のページを開き、正しく再生できることを確認すること。
マルチメディアファイルの作成には多くの時間を要するが、授業ではそのための時間を確保できかねる。
動画はスマホやデジカメで自分で撮ったものをパソコンに持ってくることが考えられる。USBディスクを介してもよいが、クラウドストレージを使う方法もある。一般には、例えば、Googleアカウントがあれば Googleドライブ を利用して簡単にファイルをPCに持ってこられる。本学用途では、大学のアカウントで OneDrive を使えば Office 365 環境と連携できるので使用が推奨される。
ただし、自分で動画を撮る場合、許可なく他人や他人の家の中などを撮影するのは許されないので映り込みなどには注意が必要である。
スマホ等から持ってきた動画がPCのブラウザ上で正常に再生できない場合、動画を変換する必要がある。一方法として、Windowsの「フォト」で動画を開き、必要ならトリミングによって時間を短くし、低画質を指定して保存し、試してみるとよい。
どうしてもスマホ等から持ってきた動画がPCのブラウザ上で正常に再生できない場合は、PCで各自が履修した・履修中の授業に関するPowerPointファイルで動画 (自分の画像と自分による説明音声付きのもの) を作成し使用してもよい。
次に、audio要素についてだが、音楽ファイルを自分で用意するのは特別なスキルと労力が必要になってくる。 今回、特にaudio要素のファイルについては、インターネット上で自由に使っていいことが保証されている、いわゆるフリー素材などを検索し、ダウンロードしたものを使っていいものとする。ただしその際、素材のサイトにある利用条件を確認し遵守すること。フリー素材と謳ってあっても、利用条件を守れないものは使用してはいけない。
自分でインターネット上にマルチメディアを公開する場合は、原則、自分で作成したものに限る必要がある。他人の製作したファイル (あるいはそれを少し加工修正したもの) を無断で公開すると著作権等の違反になるので絶対にやってはいけない。
文書の一部分をまとめて管理したい場合がある。 そういう時にdiv要素またはspan要素が使用される。
div要素はブロックレベル要素でまとまった一区画を論理的に分割する。 div要素の内容には任意のブロックレベル要素やテキストレベルのものが入れられる。
span要素はインライン要素で文章中の一部分だけを論理的に分割する。 span要素の内容にはテキストレベルのものしか入れられない。
分割した部分を識別するために、div要素またはspan要素にclass属性をつける。 class属性はdiv要素やspan要素だけでなくほとんどすべての要素に指定でき、要素のクラス分けをすることができる。
class属性の属性値は単独のクラス名または複数のクラス名を空白で区切って並べたリストであり、その要素が属するクラスを指定する。
クラス名では、アルファベットの大文字・小文字が区別されることに注意する。
(例)
<span class=attention>注意点</span>
これで、クラス attention に属するspan要素 (内容として、文字列「注意点」を持つ) を表すことができる。
※ 一つの要素が複数のクラスに属することができることに注意。
例えば、クラス emph と large と bold すべてに属する div 要素は、
<div class="emph large bold">・・・文章・・・</div>
のように指定する。この場合、class属性値はダブルクォーテーションかシングルクォーテーションで囲んで指定する必要がある。
class属性によるクラス分けはCSSスタイルシートファイルの中の対象指定の際に使用できるので、クラスの違いに応じて色やフォントなどの体裁を変えることができる。
クラスでスタイルを分類するには、CSSで
.クラス名 { 特性名1 : 特性値1 ; 特性名2 : 特性値2 ; ¦ }
のように、セレクタを「.クラス名」の形で指定すれば、「クラス名」のクラスに属する任意の要素に対してブロック内の特性の設定が有効になる。(クラスセレクタ)
クラスセレクタとタイプセレクタを組み合わせることもできる。
要素名.クラス名 { 特性名1 : 特性値1 ; 特性名2 : 特性値2 ; ¦ }
のように、セレクタを「要素名.クラス名」の形で指定すればよい。このとき、「要素名」で指定した要素で指定した「クラス名」のクラスに属するものに限って、ブロック内の特性の設定が有効になる。
セレクタには、この他にも多種の指定方法があるので、指定方法のまとめを見直しておくこと。
クラス指定の例として、時間割の表組みで使ったgridクラスがある。CSSファイルの mmw.css の中で
table.grid td, table.grid th { border: thin solid black; }
という指定があり、「クラス grid に属する table 要素の子孫要素であるtd要素およびクラス grid に属する table 要素の子孫要素であるth要素」に対する border (境界) として、「細い・実線・黒色 (の枠線)」が設定されている。
この設定により、table要素に grid クラスを指定することで、「細い・実線・黒色」の枠線の引かれた表とすることができる。
basic.html に以下の変更を加え、見え方の変化を調べなさい。
「趣味・特技・資格」と「自己PR」の文章の中で、キーワードを2つ以上決め、それらをクラス attention を指定した span 要素の内容とする。
まず、mmw.css を編集し、以下の変更を加え保存しなさい。
次に、basic.html に以下の変更を加え保存し、見え方の変化を調べなさい。
<details open> <summary>目次</summary> …… ここに目次の各項目を入れる …… </details>
さらに、mmw.css に追加した position プロパティを absolute および static (指定無しと同じ) にしたときの、それぞれの目次位置状況を fixed のときと比較して説明しなさい。
比較とその記録が終わったら、position プロパティを fixed に戻しておくこと。
HTML文書中のclass属性は、JavaScript において、何らかの理由でまとめて扱うべき複数の要素に対して共通の動作を指定するためなどにも利用される。
今までの演習によって基本的なWebページが作成できているはずである。 なお、WebサイトとはWWWで公開されるまとまったWebページ群のことで、ホームページはWebサイトの表紙ページを意味する。
今まで演習で作ってきたページは大学の演習室内のローカルなものである。 Webページを多くの人に見てもらうためにはWebサーバにそのページに関わるファイルをすべてアップロードする必要がある。
ここでは、インターネット上には公開せず、学内だけで見れるWebサーバである
www.ipc.fit.ac.jp
に演習で作ったページをアップロードし学内に公開する。
多くの場合、Webサーバ上の各ユーザのホームディレクトリの下の public_html ディレクトリ以下がそれぞれ個人のWebページに対応するが、本学のシステムでは
ホームディレクトリの下の WWW ディレクトリ (WWW がすべて半角アルファベット大文字であることに注意)
が個人用のWebページに対応しており、
http://www.ipc.fit.ac.jp/~ユーザ名/
が各人のホームページのURLとなっている。(学外からはアクセスできない)
いままでにWebページを作って学内公開する実習をやっていない場合など、学内サーバの自分のホームディレクトリの下に WWW というサブディレクトリがない場合は、
WWW ディレクトリを作成
し、ホームディレクトリおよびWWWディレクトリに一般からアクセスできるようにする必要がある。
※ すでに WWW ディレクトリが存在する場合はスキップしてよい。
詳しくは、情報処理センターのサイトの
スタートページ > ドキュメント
学内ホームページ作成・公開について
にある
学内サーバ・ホームページ公開手順
に従って設定を行う。
サーバマシンへのアップロード方法はWeb (HTTPS)を使うものやFTPを使うものがあり、サーバによって細かい方法は異なっている。
多くの場合、Webサーバへのファイルのアップロードは FTP, SFTP, SCP などのプロトコル (通信の規約) によって行なう。これらのプロトコルを直接コマンドラインから扱うのは面倒なので、
などのクライアントソフトウェアを使ってファイル転送を行うとよい。
WWW ディレクトリの下に mmw-ex というサブディレクトリをを作る。
※ すでに WWW の下に mmw-ex ディレクトリが存在する場合はスキップしてよい。
WWW の下の mmw-ex ディレクトリに、Webページに関わるファイルをすべてアップロードする。画像ファイルなどをアップロードし忘れないように注意してほしい。
なお、必要な場合は、作成したディレクトリやアップロードしたファイルに対し適切にアクセス権を設定しておく。
※ 参考 (アクセス権の設定法)
クライアントソフトを使わず、学内Webサーバにログインして設定する場合
mkdir ~/WWW/mmw-ex chmod o+rx ~/WWW/mmw-ex
としてディレクトリ ~/WWW/mmw-ex を作成しアクセス権を設定する。
そして ~/WWW/mmw-ex に basic.html ファイルおよび関連する画像ファイル等一式をアップロードする。
アップロードしたファイルについても、必要ならば
chmod o+r ~/WWW/mmw-ex/*
により読込を許可する。
※ Linuxでファイル転送ツールがない環境のとき
まず一つ目の「端末」アプリケーションを立ち上げる。これを端末Aとする。
端末Aで、
ssh -l PC演習室でのID www.ipc.fit.ac.jp
とし、PC演習室のパスワードを入力して学内Webサーバに入る。
Webページの公開が初めての人は、まず、
mkdir ~/WWW chmod o+rx ~/WWW
として、公開用の WWW ディレクトリを作る。
※ すでに WWW ディレクトリが存在する場合はスキップしてよい。
ホームディレクトリの下に WWW ディレクトリができたら、
mkdir ~/WWW/mmw-ex chmod o+rx ~/WWW/mmw-ex
として、WWW の下に mmw-ex ディレクトリを作る。
※ すでに mmw-ex ディレクトリが存在する場合はスキップしてよい。
もう一つ別の「端末」アプリケーションを立ち上げる。これを端末Bとする。端末Bで scp コマンドでファイルをコピーする。
例えば、basic.html では
cd ~/mmw/html scp basic.html PC演習室でのID@www.ipc.fit.ac.jp:WWW/mmw-ex
となる。コピーの際、PC演習室のパスワードを入力すること。CSSファイル mmw.css も同様にコピーする。
scp mmw.css PC演習室でのID@www.ipc.fit.ac.jp:WWW/mmw-ex
さらに、必要な画像ファイル等も同様にコピーする。
端末Bでのコピーが終わったら、念のため、端末Aで
chmod o+r ~/WWW/mmw-ex/*
として、ファイルの読み込みを可能にしておく。
http://www.ipc.fit.ac.jp/~ユーザ名/mmw-ex/basic.htmlにアクセスし問題なく表示されることを確認する。
今までの演習で作った basic.html を始めとするファイルをすべてWebサーバの自分のホームディレクトリの下の WWW/mmw-ex ディレクトリにアップロードして、適切に属性を変更し、演習室PCから
http://www.ipc.fit.ac.jp/~ユーザ名/mmw-ex/basic.html
で正しく見られることを確かめなさい。また、他の人のページも見られるかどうか調べてみなさい。
演習1 から 演習20 まですべて終わらせた後、Microsoft Wordで以下の内容をまとめ、PDFファイル 課題3.pdf として保存し、Webから提出しなさい。
まとめには、最初に、学籍番号・氏名と「課題 番号 課題名」を入れる。
続いて、以下を順に入れる。
XML文書は階層的構造を持つ。階層的な文書構造を構成する個々のパーツを「要素 (element)」と言い、テキストデータをベースに < と > に囲まれた「タグ (tag)」によるマークアップ方式で記述される。テキストデータにタグを使う方式を採ることで、データの意味やデータ構造を保持したままインターネット上でデータ交換ができる。さらに仕様変更や異なるシステム間でのデータ交換にも柔軟に対応できる。
個々の要素は、要素の始まりを示すタグ(「開始タグ (start-tag)」)と終わりを示すタグ(「終了タグ (end-tag)」)の2つのタグで「内容 (content)」データを挟み込んで表現される。内容のない要素である「空要素 (empty element)」のために「空要素タグ (empty-element tag)」が用意されている。
開始タグ(または空要素タグ)は「属性 (attribute)」を持つことができる。属性は要素に対して付加的な情報を付け加えるために使用される。付加される情報は属性名と値のペアを = でつなげて表現される。
属性の値はダブルクォート(またはシングルクォート)で囲んで表記しなければならない。
属性は一つの開始タグ(または空要素タグ)中に空白で区切って0個以上任意個記述することができる。ただし、タグ内で同じ名前の属性を複数個指定してはいけない。
<要素名 属性名1="値1" 属性名2="値2" ... > | 開始タグ |
</要素名> | 終了タグ |
<要素名 属性名1="値1" 属性名2="値2" ... /> | 空要素タグ |
<要素名 属性名1="値1" 属性名2="値2" ... > 内容 </要素名> | 内容のある要素 |
<要素名 属性名1="値1" 属性名2="値2" ... ></要素名> | 空要素 (推奨されない記法) |
<要素名 属性名1="値1" 属性名2="値2" ... /> | 空要素 (空要素タグを使った記法。推奨される) |
<住民基本台帳> <住民 コード="12345678901"> <氏名><姓>山田</姓><姓かな>やまだ</姓かな><名>太郎</名><名かな>たろう</名かな></氏名> <性別 男女="男"/> <生年月日><年>1985</年><月>12</月><日>15</日></生年月日> <住所><都道府県>宮城県</都道府県><市町村>石巻市</市町村><地区番地>日和が丘 1-1-1</地区番地></住所> </住民> <住民 コード="56789012345"> <氏名><姓>山田</姓><姓かな>やまだ</姓かな><名>花子</名><名かな>はなこ</名かな></氏名> <性別 男女="女"/> <生年月日><年>1986</年><月>3</月><日>31</日></生年月日> <住所><都道府県>宮城県</都道府県><市町村>石巻市</市町村><地区番地>日和が丘 1-1-1</地区番地></住所> </住民> ¦ ¦ </住民基本台帳> |
リスト9のデータは以下のような構造を持っている。
XMLでは要素の名前や階層構造などを文書作成者が定義できる。これは特定の用途に特化したタグセットを定義することによってXML文法に従う新しいマークアップ言語を定義できるということを意味する。XMLに「拡張可能な (Extensible)」という名前が付けられた理由はここにある。
「言語を定義する言語」のことをメタ言語という。XMLはメタ言語機能を持っているため、さまざまな分野のデータを記述する応用言語のベースとなっている。前章で触れた XHTML も XML の応用言語のひとつである。
ここでは、XMLをベースにして作成されたデータ記述言語のうちベクトルグラフフィクスの記述と数式の記述のそれぞれに特化した応用言語を簡単に紹介する。
数式を記述するためにW3Cが制定したマークアップ言語である。
たとえば、(a + b)2 をMathMLを使って表示させるには
<math xmlns="http://www.w3.org/1998/Math/MathML"> <msup> <mfenced> <mi>a</mi><mo>+</mo><mi>b</mi> </mfenced> <mn>2</mn> </msup> </math> |
のようにする。ただWebブラウザのサポートがないのが現状のようである。
ベクトル形式のグラフィクスを記述するためにW3Cが制定したマークアップ言語でWeb上での可搬性のあるグラフィクス表現を実現している。
たとえば、以下のSVG文書で四角(角の丸いもの)と楕円を描画できる。
<?xml version="1.0"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg width="100" height="80" xmlns="http://www.w3.org/2000/svg"> <rect x="10" y="10" width="80" height="60" rx="5" ry="5" fill="lightpink" stroke="yellow" stroke-width="3"/> <ellipse cx="50" cy="40" rx="30" ry="20" fill="skyblue" stroke="magenta" stroke-width="3"/> </svg> |
このSVGをobject要素を使って埋め込むと下のような表示となる。
XML文書は個々人や団体の間でデータを交換し広く利用されることを目的としている。 複数の文書を合わせたり、それらから特定要素のみを抜き出して新しい文書を作ることも考えられる。
その際、別々に作られた複数の文書で同じ名前の要素タグが別の意味を持つなどの「名前の衝突」が起こる危険性が高い。 その問題を解決するため、XMLでは「名前空間」というもので文書が使用するタグ名などの名前がどういう由来のものかを区別して利用できる。
要素名や属性名がどの名前空間に属するかを指定するのに「名前空間接頭辞」が使われ、
接頭辞名 : ローカルパート
のように、「接頭辞名」にコロンをつけて「ローカルパート」を記述して名前空間に属する要素名や属性名を指定できる。この形の名前を修飾された名前 (qualified name)と言う。「ローカルパート」には名前空間を除いた名前(ローカル名)を指定する。
XMLの名前空間は URI (Uniform Resource Identifier) によって識別される。要素が使用する名前空間を、namespace宣言で指定する。namespace宣言は要素の「xmlns属性」または「xmlns接頭辞を持つ属性」といういずれかの予約済み属性の値にURI参照を設定することによって行う。 namespace宣言をした要素自身も含め、その要素以下のすべての要素が宣言の有効範囲となる。
例
XHTML文書では、通常、ルート要素であるhtml要素の属性としてnamespace宣言
xmlns="http://www.w3.org/1999/xhtml"
が指定される。
"http://www.w3.org/1999/xhtml" がXHTML文書の名前空間のURI参照であり、これが「デフォルト名前空間」となる。
XSLT文書では、通常、ルート要素であるstylesheet要素の属性としてnamespace宣言
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
が指定される。
"http://www.w3.org/1999/XSL/Transform" がXSLT文書の名前空間のURI参照であり、「xsl:」で始まる名前がXSLTの名前空間に属することを宣言する。
なお接頭辞名は別にxslである必要はないが、慣用的に xsl が用いられているので、そうしておいた方が紛らわしくない。
XMLでは要素の名前や階層構造を自由に決められるのが特徴であるが、各自が自分にしか分からないタグ付けのルールを使っていては他者とのデータ交換が不可能になる。
XML形式のデータを個々人や団体の間で間違いなく交換するためには、XML文書を構成する個々の要素の名前や要素内容のデータ型、さらに要素同士の関係をきちんと設計し、人間やコンピュータシステムが理解できる約束で表現しておく必要がある。
こうして設計されたXML文書のデータ構造の約束のことをスキーマ (schema) と言う。またスキーマを記述するための言語をスキーマ定義言語 (schema definition language) と言う。スキーマ定義言語で記述したファイルのことを単にスキーマと言うこともある。
利用される代表的スキーマ定義言語を以下に示す。特徴
リスト9のXML文書のデータ構造を図示すると図1のようになる。
![]() |
図1 住民基本台帳文書の構造 リスト9の住民基本台帳文書の構造 |
このデータ構造をDTDで記述するとリスト12のようになる。
<!DOCTYPE 住民基本台帳 [ <!ELEMENT 住民基本台帳 (住民+)> <!ELEMENT 住民 (氏名, 性別, 生年月日, 住所)> <!ATTLIST 住民 コード CDATA #REQUIRED> <!ELEMENT 氏名 (姓, 姓かな, 名, 名かな)> <!ELEMENT 姓 (#PCDATA)> <!ELEMENT 姓かな (#PCDATA)> <!ELEMENT 名 (#PCDATA)> <!ELEMENT 名かな (#PCDATA)> <!ELEMENT 性別 EMPTY> <!ATTLIST 性別 男女 (男|女) #REQUIRED> <!ELEMENT 生年月日 (年, 月, 日)> <!ELEMENT 年 (#PCDATA)> <!ELEMENT 月 (#PCDATA)> <!ELEMENT 日 (#PCDATA)> <!ELEMENT 住所 (都道府県, 市町村, 地区番地)> <!ELEMENT 都道府県 (#PCDATA)> <!ELEMENT 市町村 (#PCDATA)> <!ELEMENT 地区番地 (#PCDATA)> ]> |
上で示したDTDは以下のことを表現している。
※ 正規表現 (regular expression)
多くのソフトウェアでは正規表現 (regular expression) というもので決まりを持った文字列パターンを指定できる。
DTD においても下記の正規表現が指定できる。
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="住民基本台帳" type="台帳型"> <xsd:key name="住民コード"> <xsd:selector xpath="住民"/> <xsd:field xpath="@コード"/> </xsd:key> </xsd:element> <xsd:complexType name="台帳型"> <xsd:sequence> <xsd:element ref="住民" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:element name="住民" type="名簿項目型"/> <xsd:complexType name="名簿項目型"> <xsd:sequence> <xsd:element ref="氏名"/> <xsd:element ref="性別"/> <xsd:element ref="生年月日"/> <xsd:element ref="住所"/> </xsd:sequence> <xsd:attribute name="コード" type="コード型" use="required"/> </xsd:complexType> <xsd:simpleType name="コード型"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[0-9]{11}"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="氏名" type="氏名型"/> <xsd:complexType name="氏名型"> <xsd:sequence> <xsd:element ref="姓"/> <xsd:element ref="姓かな"/> <xsd:element ref="名"/> <xsd:element ref="名かな"/> </xsd:sequence> </xsd:complexType> <xsd:element name="姓" type="姓名文字型"/> <xsd:element name="名" type="姓名文字型"/> <xsd:simpleType name="姓名文字型"> <xsd:restriction base="xsd:string"> </xsd:restriction> </xsd:simpleType> <xsd:element name="姓かな" type="かな型"/> <xsd:element name="名かな" type="かな型"/> <xsd:simpleType name="かな型"> <xsd:restriction base="xsd:string"> </xsd:restriction> </xsd:simpleType> <xsd:element name="性別" type="性別型"/> <xsd:complexType name="性別型"> <xsd:attribute name="男女" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="男"/> <xsd:enumeration value="女"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> <xsd:element name="生年月日" type="生年月日型"/> <xsd:complexType name="生年月日型"> <xsd:sequence> <xsd:element ref="年"/> <xsd:element ref="月"/> <xsd:element ref="日"/> </xsd:sequence> </xsd:complexType> <xsd:element name="年" type="年型"/> <xsd:simpleType name="年型"> <xsd:restriction base="xsd:positiveInteger"> <xsd:minInclusive value="1850"/> <xsd:maxInclusive value="2050"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="月" type="月型"/> <xsd:simpleType name="月型"> <xsd:restriction base="xsd:positiveInteger"> <xsd:minInclusive value="1"/> <xsd:maxInclusive value="12"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="日" type="日型"/> <xsd:simpleType name="日型"> <xsd:restriction base="xsd:positiveInteger"> <xsd:minInclusive value="1"/> <xsd:maxInclusive value="31"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="住所" type="住所型"/> <xsd:complexType name="住所型"> <xsd:sequence> <xsd:element ref="都道府県"/> <xsd:element ref="市町村"/> <xsd:element ref="地区番地"/> </xsd:sequence> </xsd:complexType> <xsd:element name="都道府県" type="都道府県型"/> <xsd:simpleType name="都道府県型"> <xsd:restriction base="xsd:string"> </xsd:restriction> </xsd:simpleType> <xsd:element name="市町村" type="市町村型"/> <xsd:simpleType name="市町村型"> <xsd:restriction base="xsd:string"> </xsd:restriction> </xsd:simpleType> <xsd:element name="地区番地" type="地区番地型"/> <xsd:simpleType name="地区番地型"> <xsd:restriction base="xsd:string"> </xsd:restriction> </xsd:simpleType> </xsd:schema> |
XML Schemaの名前空間URI参照は "http://www.w3.org/2001/XMLSchema" だが、接頭辞名としては xsd がよく使われる。なお、最近は xs も使われるようである。文書中で混乱がなければどれを使っても構わない。
XML SchemaではDTDよりも細かい指定を行っている。たとえば、「住民」要素の「コード」属性が11桁の数字列であることを正規表現パターン
[0-9]{11}
で示しており、また、この属性値がルート要素「住民基本台帳」内の全「住民」要素を通じて重複しないものであることをxsd:key要素で指定している。
さらに、「年」「月」「日」がそれぞれ 1850 ~ 2050、1 ~ 12、1 ~ 31 の範囲の整数であることをxsd:minInclusive要素およびxsd:maxInclusive要素で限定している。
しかし一方でコード記述量はかなり多く複雑になっている。
現在存在するスキーマは DTD が多いと思われる。 XML Schema あるいは RELAX NG の普及はこれからである。
以下に基本的なXML文書の例を示す。
(XML文書ファイル basic-residential-registers.xml, DTDファイル basic-residential-registers.dtd)
<?xml version="1.0" encoding="UTF-8"?> ..... XML宣言 <!DOCTYPE 住民基本台帳 SYSTEM "basic-residential-registers.dtd"> ..... 文書型宣言 <住民基本台帳> ..... 以下がXML文書本体 <住民 コード="12345678901"> <氏名><姓>山田</姓><姓かな>やまだ</姓かな><名>太郎</名><名かな>たろう</名かな></氏名> <性別 男女="男"/> <生年月日><年>1985</年><月>12</月><日>15</日></生年月日> <住所><都道府県>宮城県</都道府県><市町村>石巻市</市町村><地区番地>日和が丘 1-1-1</地区番地></住所> </住民> <住民 コード="56789012345"> <氏名><姓>山田</姓><姓かな>やまだ</姓かな><名>花子</名><名かな>はなこ</名かな></氏名> <性別 男女="女"/> <生年月日><年>1986</年><月>3</月><日>31</日></生年月日> <住所><都道府県>宮城県</都道府県><市町村>石巻市</市町村><地区番地>日和が丘 1-1-1</地区番地></住所> </住民> ¦ ¦ </住民基本台帳> ..... XML文書本体の終り |
リスト14から分かる通り、XML文書は次の3つから構成されている。
XML文書の先頭にはXML宣言 (XML declaration) を記述する。XML宣言は
<?xml バージョン情報 エンコーディング宣言 スタンドアロン宣言 ?>
の形である。XML宣言は省略可能である。
リスト14では
<?xml version="1.0" encoding="UTF-8"?>
となっている。
「バージョン情報」では、version="バージョン"
の形で準拠するXML規格のバージョンを指定する。現在の標準であるバージョン1.0を使う場合
version="1.0"
となる。なお、バージョン 1.1 を指定する場合は当然 version="1.1" としなければならない。
「エンコーディング宣言」では、encoding="エンコーディング"
の形で文書が使用する文字エンコーディング方式を指定する。
その文書で使用しているのが
JIS ISO-2022-JP のとき | ISO-2022-JP |
日本語EUC のとき | EUC-JP |
シフトJIS のとき | Shift_JIS |
UTF-8 のとき | UTF-8 |
UTF-16 のとき | UTF-16 |
と書く。
XMLではUnicodeのエンコーディング方式であるUTF-8とUTF-16が標準で、これらの方式を使う場合エンコーディング宣言は省略できる。
「スタンドアロン宣言」では、standalone="yes"
または standalone="no"
の形で、デフォルト値や実体宣言など当該文書の内容に影響を与えるマークアップ宣言が外部に存在するときに "no"
、存在しなければ "yes"
とする。
スタンドアロン宣言は省略でき、省略されたとき文書に外部マークアップ宣言があれば "no" と見なされる。
文書型宣言はXML宣言の次に書かれ、文書のスキーマをDTD文法に従って記述する。DTDはXML文書の中に含めてもよいし、外部ファイルにして文書の中から参照してもよい。文書型宣言は省略可能である。
リスト14では
<!DOCTYPE 住民基本台帳 SYSTEM "basic-residential-registers.dtd">
となっている。これはDTDを別ファイルで持つ場合(外部サブセットと言う)の指定方法である。
XML文書内にDTDを書く場合(内部サブセットと言う)はリスト12の形のものを記述する。
なおスキーマ定義言語としてXML Schemaを使う場合は、この部分ではなくXML文書のルート要素の属性にスキーマ参照を指定する。
例
リスト14の住民基本台帳のXML文書をXML Schemaに対応付けるには、ルート要素の開始タグ
<住民基本台帳>
を
<住民基本台帳 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="basic-residential-registers.xsd">
のように書き換える。"basic-residential-registers.xsd" はリスト13のXML Schemaファイルである。
なお、上の書き方は名前空間を持たないスキーマのためのもので、名前空間 "http://www.w3.org/2001/XMLSchema-instance" に属する noNamespaceSchemaLocation 属性でスキーマURIを指定する。名前空間を持つスキーマの場合には、代わりに schemaLocation 属性によって名前空間URIとスキーマURIを空白文字でつなげたペアを指定する。
タグ付けされた実際のデータは、XML文書本体の部分に記述される。XML本体の部分にはルート要素が存在しなければならない。つまりXML本体は省略できない。
XML文書は木構造でなければならないので、トップレベルの要素はルート要素1個のみでなければならない。
<?xml version="1.0" encoding="UTF-8"?> <戸籍要素><氏名>山田 太郎</氏名><続柄>世帯主</続柄></戸籍要素> <戸籍要素><氏名>山田 花子</氏名><続柄>妻</続柄></戸籍要素> |
たとえばリスト15で示すファイルは、トップレベルに2個の要素があるのでXML文書ではない。
一方、XMLの文法に従うだけでなく、そのXML文書に関連付けられたスキーマが定義するデータ構造にも従うXML文書を妥当なXML文書 (valid XML document) と言う。つまり、妥当なXML文書はスキーマによる検証にパスする整形式XML文書である。
XML文書内で何度も出てくる長い文字列を短い記号で代用できると便利である。また大きな文書を作成する場合、まとまった単位ごとに別々のファイルを作って、メインとなるファイルからそれらを参照できれば管理しやすい。 XML文書は1つのファイルである必要はなく、別のファイルや文字列を参照してまとめて一つの文書を構成できる。 XMLでは、この参照される単位になり得るデータを実体 (entity: エンティティ)と言う。 なお、メインの文書本体を「文書実体 (document entity)」と言う。
実体はDTDの中で宣言された文字列であったり別ファイルであったりする。 実体には3通りの分類ができる。
XML文書において実体を使うには実体参照 (entity reference) を用いる。一般実体の実体参照は実体名を "&" と ";" で囲んで記述し、パラメータ実体の参照は実体名を "%" と ";" で囲んで記述する。
XMLプロセッサは実体参照があるとそれを対応する文字列またはファイルの内容に置き換える。
なお、内部実体は要素の内容中あるいは属性値の中で参照できるが、外部実体は要素の内容中でしか参照できない。
たとえば、"fit" という名前の一般実体の内容が "福岡工業大学" という文字列を表すとすると、XMLプロセッサは以下のように処理する。
<概説>&fit;は福岡県福岡市にある私立大学である。</概説>
<概説>福岡工業大学は福岡県福岡市にある私立大学である。</概説>
ある実体名がどんな内容を参照するかを定義する実体宣言(entity declaration) はDTD内で行われる。
たとえば上の例の実体をDTDで宣言するには
<!ENTITY fit "福岡工業大学">
とする。
外部解析対象実体であるファイルの内容はテキスト宣言 (text declaration) から始めるべきとされている。テキスト宣言は
<?xml バージョン情報 エンコーディング宣言 ?>
のように、XML宣言のスタンドアロン宣言を除いた形になっている。テキスト宣言自体は置き換えの対象とはならない。
次の表に示す実体参照は宣言しなくても使用できる。
実体参照 | 内容 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
例えば要素の内容のテキスト中で記号 "<" を使ってしまうと、XMLプロセッサはそれをタグの始まりと誤認してしまう。このようなことを避けるため実体参照を使う。
例
<定理>a <= b かつ a >= b のとき、a = b</定理>
XMLプロセッサは内容の中の < と > という部分をそれぞれ"<"と">"に相当する文字コードに置き換えて処理する。従って、XMLプロセッサからアプリケーションに渡される「定理」要素の内容は、
a <= b かつ a >= b のとき、a = b
となる。
"&" の後に "#" と文字コード番号を指定し ";" を続ける形式で文字を指定する数値文字参照 (numerical character reference) という方法も用意されている。
ただし、同じ文字でも文字コードによってコード番号が異なる場合がある。そこで数値文字参照に使う文字コードとして ISO/IEC 10646 規格 (ほぼ Unicode と同じものとみなしてよい) の コードポイント を使う決りになっている。
文字コード番号は数字を並べたものは10進数値、数字の前に x または X が付いたものは16進数値として扱われる。
例
& | (16進コード表記) |
& | (10進コード表記) |
鸑 | (16進コード表記) |
鸑 | (10進コード表記) |
先頭の文字 |
---|
Letterクラスの文字 |
_ (アンダースコア) |
: (コロン) |
2番目以降の文字 |
Letterクラスの文字 |
Digitクラスの文字 |
Combining Characterクラスの文字 |
Extenderクラスの文字 |
_ (アンダースコア) |
: (コロン) |
. (ピリオド) |
- (ハイフン) |
Letterクラス | アルファベット、ひらがな、全角カタカナ、漢字 |
Digitクラス | 半角数字 |
Combining Characterクラス | アクセント記号など |
Extenderクラス | 々、ゝ、ー(カタカナの長音記号)など |
XMLで有効な名前の例を以下に示す。
__init__ | アンダースコアや |
名簿.list | 2文字目以降のピリオドや |
ひらがな-カタカナ | ハイフンが使える |
名前に漢字・ひらがな・カタカナを使ってよいが、半角カタカナと全角数字は使えないので注意。
全角アルファベットは使えるが、紛らわしいので半角にした方がよい。
※ ここで「全角」は2バイト文字、「半角」は1バイト文字を表す俗称である。
また、":
" (コロン) が使えることになっているが、名前空間の指定でコロンを使用する決りになっているため、実際にはローカル名にコロンを含めるべきではない。
XML文書で使えない名前の例を以下に示す。
1st_period | 数字で始まるため |
カナモジノナマエ | 半角カナを使っているため |
XY99 | 全角数字を使っているため |
HTMLではタグ名や属性名は大文字・小文字の別を気にせずに使うことができる。
XMLではタグや実体などの名前やキーワードを使用するに当たり、大文字・小文字を厳密に区別する必要がある。XMLプロセッサは、スペルが同じであっても大文字・小文字が違っているタグを異なる要素を表すものと判断する。
たとえば、下の書き方は文法エラーになる。
<Title>XML入門</title>
XML規格が定めているキーワードも厳密に大文字・小文字の区別をつけなければならない。例として文書冒頭のXML宣言を挙げる。
<?xml version="1.0"?> | ○ |
<?Xml version="1.0"?> | × |
<?XML version="1.0"?> | × |
<?xml Version="1.0"?> | × |
XMLdata |
XmlProcedure |
xML-OBJECT |
xml_file |
XML文書中に人間がファイルの中身を見たときにわかりやすいように説明を入れるときコメントを使う。
コメントは <!-- で始まり --> で終了する。ただし、コメント文の中に「--」という文字列を入れてはならない。
XMLプロセッサがコメントの内容をアプリケーションに渡すかどうかは実装依存である。
<!-- コメントの例。通常はファイルを見たときによく分かるような説明をつけておく -->コメントの別の使い方として、文書の一部をコメントでくくり無効にする使い方がある。コメントアウトと言う。削除してしまうとその部分は消えてしまうが、コメントアウトの場合はファイル中に残っているため変更点がよく分かり、また変更を元に戻すことも容易である。
文字列をXMLのタグとして認識させたくないが、内容を確実にアプリケーションに渡したい場合に使う。CDATAセクションの中では < や & などの特別な意味を持つ文字も単なる文字そのものとして扱われる。
CDATAセクションは <![CDATA[
で始まり ]]>
で終了する。(CDATAセクションの中には ]]>
という文字列は含められない)
<![CDATA[ この部分は<や>や&を含めて「そのまま」アプリケーションに渡される ]]>
処理命令 (processing instruction) はXML文書を扱うアプリケーションへの何らかの指示を表す。一般に、
<?処理命令のターゲット 処理命令の内容?>
の形式となっている。
「処理命令の内容」として、通常の要素の属性指定に似せて
擬似属性="擬似属性の値"
という形の指定をすることが多い。
なお、XML宣言は処理命令ではないので注意。
例
<?xml-stylesheet href="mydoc.css" type="text/css"?>
このxml-stylesheet処理命令はXML文書をスタイルシートと関連付けるもので、hrefとtypeという2つの擬似属性を持っている。(他にもtitle, media, charset, alternate擬似属性がある。)