情報社会のシステム

NAGASAKA Yasunori

2012/11/29

http://edu.isc.chubu.ac.jp/naga/index.html で公開中


 Table of Contents


1   はじめに

2   高度情報化社会の特徴

3   情報理論: データと情報、情報量
 3.1   データと情報の違い
 3.2   情報量
 3.3   平均情報量、エントロピー
 3.4   条件付エントロピー、結合エントロピー
 3.5   情報源のモデル化
 3.6   独立情報源
 3.7   マルコフ情報源
 3.8   正規マルコフ情報源
 3.9   情報源符号化

4   WWW (World Wide Web) における文書作成
 4.1   HTML, XML, XHTML
  4.1.1   HTML
  4.1.2   XML
  4.1.3   XHTML
 4.2   HTML, XHTML による文書作成
  4.2.1   HTML で表現した単純な文書 (html0.html)
  4.2.2   HTML で指定できる様々な表現 (html1.html)
  4.2.3   XHTML による文書の表現 (xhtml1.html)
  4.2.4   XHTML と HTML の違いと互換性の問題
 4.3   CSS による文書表示、見え方のデザイン
  4.3.1   CSS の仕様
  4.3.2   CSS を用いた文書表示の実際 (xhtml2.html, sample.css)
 4.4   JavaScript
  4.4.1   簡単な JavaScript のプログラムを含む xhtml ファイル (xhtml3.html)
  4.4.2   JavaScript のプログラム例 (sample.js)
  4.4.3   入力エリアやボタンのイベントに JavaScript を連動させる (xhtml4.html)
  4.4.4   イベントに連動させる JavaScript のプログラム例 (sample2.js)
  4.4.5   from で入力した値を JavaScript のプログラムに渡す (xhtml5.html)
  4.4.6   form で入力した値を JavaScript のプログラムで読み込む (sample3.js)



1   はじめに

  情報社会とそこで使用される様々なシステムを理解することを目指す。 以下に示す内容を講義と実習で取り上げる。





2   高度情報化社会の特徴

  コンピュータや情報処理、通信に関する様々な統計資料を活用して、 現在の高度情報化社会の特徴を学ぶ。




3   情報理論: データと情報、情報量


3.1   データと情報の違い

  日常、データと情報という用語は、その違いを意識して使い分ける機会は少ないが、 辞典や文献で調べると次に示すように異なる意味で定義されている。
データ : 既知の事実を表す客観的、中立的な記号列、資料。 人による解釈が含まれていない。
情報 ; 人による解釈や主観的な判断が含まれている記号列、資料。解釈、 判断する人の立場によって内容が変わる可能性がある。

  例として、「世界でインターネットを使っている人は 2006 年の時点で 11億5000万人、 2011 年の時点では 24億2000万人である。」はデータ、 その結果を見て「およそ 2.1 倍増加した。」はデータ、 同じ結果を見て「5年間で急激に増加した。」は情報となる。 急激に増加したと考える人もいるが、 立場が違えばそのように考えない人がいる可能性もある。



3.2   情報量

  通信や計算を行う際に対象となる情報を定量的に扱うための理論として情報理論がある。 なお、ここでいう「情報」は主観的な解釈や判断は含まれないので上記の「データ」に相当するが、 慣例として情報という用語で表す。

  天気予報で伝えられる情報に「量」があると考えた場合に、 次の二つの情報はどちらが情報量が多いだろうか ?
「春日井の明日(8月1日)の最高気温は 30 度になるでしょう。」
「春日井の明日(8月1日)の最高気温は 40 度になるでしょう。」

  次の二つの情報はどちらが情報量が多いだろうか ?
「猫が鼠を捕まえた。」
「鼠が猫を捕まえた。」

  情報理論では、起こる可能性、確率が低いこと(事象)を表す情報の方が情報量が多いと定義する。 別の言い方をすると、可能性が高いこと(当たり前のこと)を聞いても有難味がない、 情報量は少ないということになる。

  確率との関係では、生起する確率が高いことを知っても情報量は少なく、 生起する確率が低いことを知った場合に情報量は多くなる、 すなわち確率と情報量は逆数または反比例の関係となる。 また、二つの独立した情報を得た場合の合計の情報量が二つの情報量の和に等しくなると望ましい。 これらの要求を満たすように情報量は次のように定義される。
事象1が生起する確率を P1 とした時、その情報量 I(P1)を

I(P1) = log2(1 / P1) = - log2P1

と定義する。この場合の単位は 2 進数と同じで、bit (binary unit) となる。 対数の底は何であってもよいが 2 が用いられることが多い。 この後対数の底の記載が省略されている場合は 2 を底とする。 対数を採用することで二つの独立した情報に対する情報量が二つの情報量の和として表現できる。

I(P1,P2) = log2(1 / P1) + log2(1 / P2)

  例として、情報量を実際に計算してみる。 「明日晴れる確率が 25 %%」という情報の情報量は、

log2(1 / 0.25) = log24 = 2 bit

「コインを投げて表が出る確率が 50 %」という情報の情報量は、

log2(1 / 0.5) = log22 = 1 bit

となる。コインの例から確率 1/2 の情報がちょうど 1 bit の情報量になることがわかる。

  事象の集合(事象系)を、個々の事象とその生起確率の組み合わせとして、以下の形式で表すことがある。 事象系を A, 個々の事象を a1, a2, a3, ..., an, 各事象の生起確率を pa1, pa2, pa3, ..., pan とする。

A = { a1,  a2,  a3, ...,  an}
    {pa1, pa2, pa3, ..., pan}
  コインの例を上記の形式で表すと以下のようになる。

コインを投げた時の表裏の出方 A = {表が出る,  裏が出る}
                                 {   1/2,       1/2  }


3.3   平均情報量、エントロピー

  事象が起こる系全体について、1 事象あたりの平均情報量(エントロピー) H を次のように定義する。 各事象に対する情報量に、その事象が起こる確率を乗算して全事象 x 個分の和を求める。 式で表現すると次のようになる。

H = Σ Px・log2(1 / Px)

  例として、情報量を実際に計算してみる。 「明日晴れる確率が 50 %」, 「明日曇りになる確率が 25 %」, 「明日雨になる確率が 25 %」という事象系の平均情報量は、

0.5 * log2(1 / 0.5) + 0.25 * log2(1 / 0.25) + 0.25 * log2(1 / 0.25) =
0.5 * log22 + 0.25 * log24 + 0.25 * log24 =
0.5 * 1 + 0.25 * 2 + 0.25 * 2 = 1.5 bit

  別の例として、 「コインを投げて表が出る確率が 50 %」, 「コインを投げて裏が出る確率が 50 %」という事象系の平均情報量は、

0.5 * log2(1 / 0.5) + 0.5 * log2(1 / 0.5) = 0.5 * 1 + 0.5 * 1 = 1 bit

となる。
いかさまコインになって、 「コインを投げて表が出る確率が 75 %」, 「コインを投げて裏が出る確率が 25 %」という事象系の平均情報量は、

0.75 * log2(1 / 0.75) + 0.25 * log2(1 / 0.25) = 0.75 * 0.415 + 0.25 * 2 = 0.811 bit

となる。更に、 「コインを投げて表が出る確率が 99 %」, 「コインを投げて裏が出る確率が 1 %」という事象系の平均情報量は、

0.99 * log2(1 / 0.99) + 0.01 * log2(1 / 0.01) = 0.99 * 0.014 + 0.01 * 6.643 = 0.081 bit

となる。これからわかることは、確率に偏りがあるほど平均情報量は少なくなり、 各事象の生起確率が等しい場合に平均情報量が最大になる。 この場合の最大値は事象の個数により決まり、log n である。 上記のコインの例では log 2 = 1 となる。

  系全体の平均情報量に対して、個々の事象に対する情報量を区別するために自己情報量と呼ぶことがある。 自己情報量は確率が小さい場合に大きな値となったが、 平均情報量は確率の値で大きな値と小さな値が混在しているよりも、 同程度の値が揃っていた方が大きな値になるという違いがある。 別の言い方をすると、平均情報量は事象系の不確定さを表しており、 その値が小さい場合は確定的な系(確率の大きな値がありその事象が起きやすい)を、 大きな場合は不確定な系(どの事象も同じように起きやすい)を表していると言える。

  以下では 2 事象の事象系のエントロピー関数を示す。2 事象の場合、 一つの事象が生起する確率 P が 1/2 であれば、残りの事象が生起する確率は (1 - P) となる。 P を 0.0 から 1.0 まで変化させた時のエントロピーを P の関数として計算した結果をグラフとして表現すると下図になる。 横軸は P , 縦軸はエントロピーの値である。



エントロピー関数



3.4   条件付エントロピー、結合エントロピー

  前節では単独の事象系に対するエントロピーを定義して、その求め方を示した。 本節では複数の事象系が組み合わさった場合のエントロピーとして、 条件付エントロピーと結合エントロピーを定義して、その求め方を示す。

  例として、 ジャンケンで出す手の事象系を以下の 2 種類の表現 A, B で定義する。

ジャンケンで出す手 A = {a1:グー、a2:チョキ、a3:パー}
                       {  1/3,      1/3,      1/3}

ジャンケンで出す手 B = {b1:グーを出す、b2:グーを出さない}
                       {     1/3,           2/3}
  それぞれのエントロピーを求めると以下のようになる。
なお。対数の計算は次の値を用いる。 log 3 = 1.585, log 5 = 2.322, log 7 = 2.807

H(A) = Σ 1/3・log(1 / (1/3))
     = 1/3・log 3 + 1/3・log 3 + 1/3・log 3
     = log 3 = 1.585 bit

H(B) = 1/3・log(1 / (1/3)) + 2/3・log(1 / (2/3))
     = 1/3・log 3 + 2/3・(log 3 - log 2)
     = 1/3・1.585 + 2/3・(1.585 - 1) = 0.918 bit
  ここで条件付確率 P(A|B) に対応する条件付エントロピーを以下のように求める。 まず B のそれぞれの事象が生起することがわかっている場合の A の事象が生起する確率を求める。 例として、P(a1|b1) は「グーを出すことがわかっている状況で、 グーを出す」確率であり、すなわち 1 である。以降同様に 6 種類の確率が求められる。
P(a1|b1) = 1
P(a2|b1) = 0
P(a3|b1) = 0
P(a1|b2) = 0
P(a2|b2) = 1/2
P(a3|b2) = 1/2
次に、b1, b2 の各事象が生起する条件下でのエントロピーが以下のように求められる。

H(A|b1) = 1・log 1/1 + 0・log 1/0 + 0・log 1/0 = 0
H(A|b2) = 0・log 0 + 1/2・log 1/(1/2) + 1/2・log 1/(1/2)
        = 1/2・log 2 + 1/2・log 2 = log 2 = 1
  最後にこの二つのエントロピーに生起する確率をかけて和を求めることで 条件付エントロピーを求めることができる。

H(A|B) = H(A|b1)・P(b1) + H(A|b2)・P(b2)
       = 0・1/3 + 1・2/3 = 0.667 bit
  今度は逆に H(B|A) を求めてみる。この場合、A の各事象が生起することが事前にわかると、 B の事象はすべて確率 1 か 0 で生起するのでエントロピーは 0 になる。
P(b1|a1) = 1
P(b2|a1) = 0
P(b1|a2) = 0
P(b2|a2) = 1
P(b1|a3) = 0
P(b2|a3) = 1


H(B|a1) = 1・log 1/1 + 0・log 1/0 = 0
H(B|a2) = 0・log 1/0 + 1・log 1/1 = 0
H(B|a3) = 0・log 1/0 + 1・log 1/1 = 0

H(B|A) = H(B|a1)・P(a1) + H(B|a2)・P(a2) + H(B|a3)・P(a3)
       = 0・1/3 + 0・1/3 + 0・1/3 = 0 bit
  条件付エントロピーを一般形で記述すると次の式になる。 条件付確率 P(ai|bj) と結合確率 P(ai,bj) の違いに注意する必要がある。

H(A|B) = Σ H(A|bj)・P(bj)
          j

       = ΣΣ P(ai|bj)P(bj)・log (1 / P(ai|bj))
          i j

       = ΣΣ P(ai,bj)・log (1 / P(ai|bj))
          i j
  結合エントロピーは結合確率 P(A,B) に基づいて計算されるエントロピーで、 次式で求められる。

H(A,B) = ΣΣ P(ai,bj)・log (1 / P(ai,bj))
          i j
  例として、上記のジャンケンの例で結合エントロピーを求めてみる。
P(a1,b1) = 1/3
P(a2,b1) = 0
P(a3,b1) = 0
P(a1,b2) = 0
P(a2,b2) = 1/3
P(a3,b2) = 1/3
よって結合エントロピー H(A,B) は以下のようになる。

H(A) = ΣΣ 1/3・log(1 / (1/3))
     = 1/3・log 3 + 1/3・log 3 + 1/3・log 3
     = log 3 = 1.585 bit
  エントロピー H(A), H(B)、条件付エントロピー H(A|B), H(B|A)、 結合エントロピー H(A,B), H(B,A) の関係は以下のようになる。



エントロピー、条件付エントロピー、結合エントロピーの関係

H(A) = (1) + (2)
H(B) = (2) + (3)
H(A|B) = (1)
H(B|A) = (3)
H(A,B) = H(B,A) = (1) + (2) + (3)
  上記のジャンケンの例では (1) = 0.667, (2) = 0.918, (3) = 0 となり、 図で示したエントロピー、条件付エントロピー、結合エントロピーの関係が 保たれていることがわかる。



3.5   情報源のモデル化

  ここまでは天気、コインの裏表、ジャンケン、サイコロなどの身の周りの出来事やものを題材として、 事象系や事象を定めて情報量やエントロピーを説明してきた。 以降では主として通信の分野を対象として情報量やエントロピーの理論を導入する。 本節では情報源により生成される記号(事象)の生成過程をモデル化して、理論的に扱えるようにする。

  事象を「記号(文字)がある確率に基づいて生成(送信)される」こととする。 情報源を、記号や文字を生成するところとする。 通信の対象となる記号は、通常 1 個だけでは十分な情報を含むことができず、 ほとんどの場合は複数個の記号を並べて組み合わせた記号列とされる。 よってこの後は複数個の記号からなる記号列を主として取り上げる。

  情報源が生成する情報は、連続値を取るか離散値を取るかで次の 2 種類に分類できる。 以下では離散的情報源を対象とする。

  離散的情報源では、離散値で表現される記号列が生成される。 生成される記号の集合を、

S = {s1, s2, ..., sn}

と表すことにする。S を情報源アルファベットと呼ぶ。 s1, s2 などは個々の記号であり、情報源記号または情報源シンボルと呼ぶ。

  例として、S を英語を表すのに使われる文字の集合とすると、

S = {A, B, C, ..., Y, Z, a, b, c, ..., y, z, (以降記号が続く)}

となり、日本語を表す文字の集合としたら、

S = {あ, い, う, ..., を, ん, ア, イ, ..., ヲ, ン, 愛, 相, (以降漢字と記号が続く)}

となる。 どちらの場合も個々の文字が生成される確率は一様ではなく、 よく現れる文字とあまり使われない文字がある。 また、ある文字が現れる確率はその前の文字に影響を受ける。

  情報源アルファベットに各記号が生成される確率を表す性質を加えた確率事象系が情報源のモデルとなる。 前記のアルファベット S に各記号の生成確率 ps1, ps2, ... を合わせて表記した確率事象系を A とすると次のように表すことができる。 これは情報量の定義で既に出てきた事象系の表記と同じである。

A = { s1,  s2,  s3, ...,  sn}
    {ps1, ps2, ps3, ..., psn}
  情報源から生成された記号の並び(記号系列)を通報と呼ぶ。次の記号系列はいずれも通報である。
This is a pen.
これはペンです。
通報は個々の記号が時間経過に沿って順に生成されたものと言える。

  通報内の個々の記号が生成される際に過去に生成された記号に影響を受けるかどうかで、 情報源は次の 2 種類に分けることができる。

  上記の例の英語や日本語は時間経過に沿って 1 文字ずつ文字が生成される通報と考えられるが、 先に現れた文字によって次に現れやすい文字と現れにくい文字にわかれる。 例として、英語では thgrfd のように子音ばかり並ぶと単語として成立しないため、 3 個以上の子音が連続する確率は非常に低い。子音の間に母音が入る確率は非常に高くなる。 日本語の場合でも、ぬめて、やもら、などの並びは確率が低く、反対に、かい、こい、たい、 かん、いん、さん、などの並びは多くの単語に含まれるためこのような並びになる確率は高い。



3.6   独立情報源

  独立情報源のモデルは以下の確率事象系 S で表すことができる。s1, s2, ... は記号を、 ps1, ps2, ... は各記号の生成確率を表す。既出の事象系の表現と同じである。

S = { s1,  s2,  s3, ...,  sn}
    {ps1, ps2, ps3, ..., psn}
  独立情報源の記号 1 個あたりの発生エントロピーは、 これまでのエントロピーの計算式をそのまま当てはめて計算することができる。
H(S) = Σ psk・log2(1 / psk) (k=1,2,...,n)


  例として、4 文字からなる記号と生成確率が以下の確率事象系で表現される場合、 この情報源の発生エントロピーは次のように求められる。

S = {  a,    b,    c,    d }
    {0.25, 0.25, 0.25, 0.25}
  0.25 * log2(1 / 0.25) * 4 =
0.25 * 2 * 4 = 2 bit
となる。

  情報源で記号が生成される速度を r 個/単位時間とすると、 単位時間あたりの発生エントロピーは、r・H(S) となる。

  例として、上記の 4 文字からなる記号と生成確率が同じ確率事象系で表現され、 記号の生成速度を 10 個 / sec とすると、 この情報源の 1 秒あたりの発生エントロピーは次のように求められる。

  0.25 * log2(1 / 0.25) * 4 * 10 =
0.25 * 2 * 4 * 10 = 20 bit / sec

となり、1秒間に 20 bit の情報を生成すると言える。



3.7   マルコフ情報源

  情報源アルファベット S = {s1, s2, ..., sn} を用いる マルコフ情報源のモデルは以下の状態遷移行列 P で表すことができる。 行列の要素 Pij は記号 si の後に sj が生成されることを表しており、 P(sj|si) と等価である。
独立情報源の場合は、各記号の生成確率のみを 1 次元に並べればよかったが、 マルコフ情報源の場合は直前の記号 s1 から sn のそれぞれに対して、 それに続く同数の記号の条件付確率をすべて書き表す必要があるため、 n2個の条件付確率を行列の形式で表現する。 なお、ここで取り上げているのは直前の 1 個の記号のみが影響する単純マルコフ情報源である。 直前の m 個の記号の並びが次の記号の生成確率に影響を及ぼす m 重マルコフ情報源も存在する。

S = {s1, s2, ..., sn}


          s1  s2 ...  sj ...  sn

    s1  (P11 P12 ... P1j ... P1n)
    s2  (P21 P22     P2j     P2n)
    s3  (P31  .       .       . )
P =  .  ( .           .       . )
    si  (Pi1 Pi2 ... Pij ... Pin)
     .  ( .           .       . )
    sn  (Pn1 Pn2 ... Pnj ... Pnn)

※ 上記行列の行と列に添えた s1, ..., sn の表記は理解しやすくするために記載したもので、
   本来の行列の表記にはない。
  マルコフ情報源の記号 1 個あたりの発生エントロピーは、 条件付エントロピーの計算式をそのまま当てはめて計算することができる。 単位時間あたりの発生エントロピーは、独立情報源と同様に r・H(S|S) となる。

H(S|S) = Σ H(S|si)・P(si)
          i

       = ΣΣ P(sj|si)P(si)・log (1 / P(sj|si))
          j i

       = ΣΣ P(sj,si)・log (1 / P(sj|si))
          j i
  例として、状態遷移行列 P が以下である時の、 記号 1 個あたりの発生エントロピーを求めてみる。

    ( 0.5 0.25 0.25)
P = (0.25  0.5 0.25)
    (0.25 0.25  0.5)
  この場合、状態遷移行列から各アルファベットが生成される条件付き確率は求められるが、 各アルファベットの生成確率は明示的に与えられていない。 各アルファベットの生成確率は、事象系が正規マルコフ情報源(後述)であれば、 上記の状態遷移行列に沿って非常に長い時間アルファベットを生成し続けた時の定常分布、 極限分布と一致する。 この例は正規マルコフ情報源であるので、次の連立方程式を解くことで生成確率を求められる。 x, y, z を各アルファベットの生成確率とする。

(x, y, z) = (x, y, z)( 0.5 0.25 0.25)
                     (0.25  0.5 0.25)
                     (0.25 0.25  0.5)
x + y + z = 1

ここから次の 4 個の式が得られる。

x = 0.5x + 0.25y + 0.25z
y = 0.25x + 0.5y + 0.25z
z = 0.25x + 0.25y + 0.5z
x + y + z = 1

変形して書き直すと、

2x = y + z
2y = x + z
2z = x + y
x + y + z = 1
  これを解くと x = y = z = 0.333... が得られる。 これらの値を用いて発生エントロピーは次のように計算できる。

H(S|S) = ΣΣ P(sj|si)P(si)・log (1 / P(sj|si))
          j i

       = 0.5 * 0.333 * log (1 / 0.5) + 
         0.25 * 0.333 * log (1 / 0.25) +
         0.25 * 0.333 * log (1 / 0.25) +
         0.25 * 0.333 * log (1 / 0.25) +
         0.5 * 0.333 * log (1 / 0.5) +
         0.25 * 0.333 * log (1 / 0.25) +
         0.25 * 0.333 * log (1 / 0.25) +
         0.25 * 0.333 * log (1 / 0.25) +
         0.5 * 0.333 * log (1 / 0.5) 

       = 0.5 * log (1 / 0.5) +
         0.25 * log (1 / 0.25) +
         0.25 * log (1 / 0.25) 

       = 0.5 * log 2 + 0.25 * log 4 + 0.25 * log 4
       = 0.5 + 0.5 + 0.5
       = 1.5 bit


3.8   正規マルコフ情報源

  情報源のモデルとして以下を考える。アルファベットを {a, b, c}、 状態遷移行列 P を以下の確率の組み合わせとする。 記号が生成される時間間隔は簡単のため 1 秒とする。 この行列は現在生成されている記号から、1 秒後に生成される記号の確率を表している。 この情報源からは状態遷移行列に沿って、例として abccabcbcbbaababaabbccbcbabab... といった 記号列が生成される。

S = { a, b, c }

    (0.5  0.25 0.25)
P = (0.25 0.5  0.25)
    (0.25 0.25 0.5 )
  行列 P の 2 乗を計算すると、その結果は 2 秒後に生成される記号の確率を表している。 同様に P の t 乗を計算すると、それは t 秒後に生成される記号の確率となる。 例として、P の 3 乗の 1 行 1 列成分 0.34375 は、現在の記号が a で 3 秒後に a が生成される確率である。

       (0.5  0.25 0.25)(0.5  0.25 0.25)   (0.375  0.3125 0.3125)
P×P = (0.25 0.5  0.25)(0.25 0.5  0.25) = (0.3125 0.375  0.3125)
       (0.25 0.25 0.5 )(0.25 0.25 0.5 )   (0.3125 0.3125 0.375 )

          (0.375  0.3125 0.3125)(0.5  0.25 0.25)   (0.34375  0.328125 0.328125)
P×P×P = (0.3125 0.375  0.3125)(0.25 0.5  0.25) = (0.328125 0.34375  0.328125)
          (0.3125 0.3125 0.375 )(0.25 0.25 0.5 )   (0.328125 0.328125 0.34375 )
  マルコフ情報源の中で次の性質を持つものを正規マルコフ情報源という。

  1. すべての記号が0ではないある確率で発生する

  2. 周期性を持たない

  3. 初期状態に依存しない、定常である

  これらの性質は、状態遷移行列では次のように表現できる。 性質 1は t のある値において P の t 乗を計算した時、 状態遷移行列のすべての要素が0ではない値となる。 また性質 1 が満足されると、 直近に生成されたどの記号からでもある確率ですべての記号が次の時刻に生成され得るので、 周期性は持たない。 性質 3 は記号列の任意の位置から計算をはじめても同じ結果が得られることを表す。

  正規マルコフ情報源は、P の ∞ 乗を計算すると極限分布の確率を表す行列に収束する。 それを A とすると次に示す形で表現できる。 w は極限分布確率ベクトルである。

A = θw

θ = (1 1 1 ... 1)T,  T は転置を表す
w = (p1 p2 p3 ... pn) 

0 < pi (i = 1, 2, ..., n)

Σpi = 1
 i
  定常分布を表す確率ベクトルを z とすると、 z = zP を満足する z がただ一つ存在する。 そして z = w が成り立つ。

  ある状態遷移行列 P が与えられた時、これが正規マルコフ情報源であるかを調べるには、 P の t 乗 (t = 1, 2, 3, ...) を求めて、ある t においてすべての要素が 0 でないことを 示せばよい。逆に何乗しても 0 の要素が残る場合は正規マルコフ情報源でないことがわかる。 確認の過程では、要素が 0 か 0 でないかだけが問題となるので具体的な数値計算は必要なく、 0 でない要素は適当な変数(例えば x)として調べればよい。

例1  P1 = (0.5  0.25 0.25) = (x x x)
          (0.25 0.5  0.25)   (x x x)
          (0.25 0.25 0.5 )   (x x x)
は P1 の 1 乗ですべての要素が 0 でなくなるので正規マルコフ情報源である。
例2  P2 = (0.5  0   0.5) = (x 0 x)
          (0.5  0.5 0  )   (x x 0)
          (0    0.5 0.5)   (0 x x)

P2×P2 = (x 0 x)(x 0 x) = ( xx  xx 2xx) = (x x x)
         (x x 0)(x x 0)   (2xx  xx  xx)   (x x x)
         (0 x x)(0 x x)   ( xx 2xx  xx)   (x x x)
P2 の 2 乗ですべての要素が 0 でなくなるので正規マルコフ情報源である。
例3  P3 = (0.5  0   0.5) = (x 0 x)
          (0    0.5 0.5)   (0 x x)
          (0.5  0   0.5)   (x 0 x)

P3×P3 = (x 0 x)(x 0 x) = (2xx  0 2xx) = (x 0 x)
         (0 x x)(0 x x)   ( xx xx 2xx)   (x x x)
         (x 0 x)(x 0 x)   (2xx  0 2xx)   (x 0 x)

P3×P3×P3 = (x 0 x)(x 0 x) = (2xx  0 2xx) = (x 0 x)
             (x x x)(0 x x)   ( xx xx 3xx)   (x x x)
             (x 0 x)(x 0 x)   (2xx  0 2xx)   (x 0 x)
P3 の 2 乗と 3 乗が同じ形になり、以後同じ形の繰り返しとなる。
よって P3 で表される情報源は正規マルコフ情報源ではない。


3.9   情報源符号化

  前節では情報源で生成される記号の生成過程をモデル化した。 本節では、別の観点で情報源で生成される記号列を別の記号の表現に変換する 符号化の過程を考察する。 通信を実現するためには、情報源で生成される記号列をそのままの形式で伝送するのは 簡単ではなく、伝送に適した別の表現に変換する必要があり符号化が行なわれる。

  最初にいくつかの概念と用語を定義しておく。 例として用いる情報源アルファベットと確率事象系を以下とする。 独立情報源かマルコフ情報源かはここでの議論に影響しないので、簡単のため 独立情報源とする。

S = { s1,  s2,  s3, ...,  sn}
    {ps1, ps2, ps3, ..., psn}
  情報源アルファベットの各記号 {s1, s2, s3, ..., sn} に対して、変換後の符号(Code) (の組)を C = {c1, c2, c3, ..., cn} とする。個々の c1, c2, ... を符号語、または単に 符号と呼ぶ。c1, c2 などの符号は、符号を構成する記号の組み合わせとして表現される。 符号を構成する記号の個数を r とすると、それで表現される符号を r 元符号と呼ぶ。 例として 2 進数 0, 1 を符号を構成する記号として使用する場合は 2 元符号となる。 個々の符号を構成する記号の個数を、その符号の符号語長、または符号長と呼ぶ。 以下に情報源アルファベットと符号の例をいくつか示す。

  個々の符号 c1, c2, ... の符号長を l1, l2, ... とした時、 符号 C = {c1, c2, c3, ..., cn} の平均符号長 L を次のように定義する。 psk は k 番目の情報源記号 sk の生成確率である。

L = Σ lk・psk
     k
  例として、以下のように情報源アルファベット S とその確率事象系、 および対応する符号を C とすると、L は以下のように計算できる。

S = { a,    b,     c,     d}
    {0.5, 0.25, 0.125, 0.125}

C = {0, 01, 011, 0111}

L = 1・0.5 + 2・0.25 + 3・0.125 + 4・0.125 
  = 0.5 + 0.5 + 0.375 + 0.5
  = 1.875
  同じ事象系に対して異なる符号化を施した符号を C2 とすると、 その平均符号長 L2 は以下のように計算できる。 このように生成確率の高い情報源に長い符号を割り当てると平均符号長が長くなる。 通信の効率という観点では、 平均符号長が長い符号はより長い通信時間を必要として効率が悪い(例えばFAX)。 よって一般的には平均符号長が短くなるように符号化の手順を構成する。

C2 = {0111, 011, 01, 0}

L2 = 4・0.5 + 3・0.25 + 2・0.125 + 1・0.125 
   = 2 + 0.75 + 0.25 + 0.125
   = 3.125
  すべての符号に対して符号長が等しい場合を固定長符号または等長符号、 符号により長さが異なる場合を可変長符号と呼ぶ。 先に示した 4 種類の符号化の例で、ASCII コードは 2 元符号でも 16 元符号でも固定長符号であり、 ローマ字と 10 進→ 2 進変換の例は可変長符号となる。

  符号は伝送された後、もとの情報源記号に変換される。この変換を復号化または復号と呼ぶ。 復号化の過程は、符号化の処理内容に影響を受け、 もとの情報源記号を正しく再現できる場合とできない場合がある。 以降では復号の結果を考慮して、符号化の処理をいくつかのクラスに分類する。

  まず、もとの情報源記号を正しく再現できる場合とできない場合で以下の二つのクラス C1, C2 に分かれる。

  C1 のクラスは更に次の二つのクラス C11, C12 に分かれる。

  特異符号の例を以下に C11 として示す。この例では情報源記号 a, b に対して同じ符号 0 が割り当てられているので、受信側で例えば '01' を受信した場合に 'ac' と 'bc' の 2 種類の復号が可能で結果を一意に決められない。

S = { a, b, c, d }

C11 = { 0, 0, 1, 11 }
  クラス C12, 特異符号ではないが一意に復号化できない符号の例を以下に C12 として示す。 この例では、 4 個の情報源記号に対して異なる符号が割り当てられているので特異符号ではないが、 受信側で例えば '01' を受信した場合に 'ab' と 'c' の 2 種類の復号が可能でやはり一意に決められない。

S = { a, b, c, d }

C12 = { 0, 1, 01, 10 }
  次に一意に復号化可能なクラス C2 を復号化の過程の違いで瞬時符号と非瞬時符号の 2 種類に分類する。それぞれの符号の例を続けて示す。

S = { a, b, c, d }

C21 = { 0, 10, 110, 1110 }

C22 = { 0, 01, 011, 0111 }
  両者は特異符号ではなく、またいくつか符号の並びを調べてみるとわかるが一意に復号が可能であり、 復号化の結果は一通りしか存在しないのでクラス C2 に属する。 両者は一見すると非常に似ているが、復号の過程を調べてみるとどの時点で復号可能かが異なる。 例として、'0' を受信すると C21 では直ちに 'a' と復号化できる。一方 C22 では次の記号を受信して、 それが'0'であればその時点で復号化が可能となる。C22 では'0', '01', '011' のどれを受信した場合でも 次の記号がわからないと復号ができない。唯一'0111'のみは受信した瞬間に復号ができる。 このように各符号を受信した時点で復号が可能なものを瞬時符号、 そうでないものを非瞬時符号として区別する。

  ある符号化方式が瞬時符号になるか非瞬時符号になるかは次の点で決まる。 各符号が他の符号の語頭に含まれる場合に非瞬時符号になる。 前述した C22 では、'0' はその他の '01' や '011' の語頭に含まれ、 '01' は'011','0111'の語頭に含まれている。一方 C21 を見るとどの 符号も他の符号の語頭には含まれておらず、これにより瞬時符号となる。





4   WWW (World Wide Web) における文書作成


4.1   HTML, XML, XHTML


4.1.1   HTML

  インターネットにおける情報交換の標準的な技術として WWW (World Wide Web) が用いられている。WWW における文書表現の標準的な規格として HTML (Hyper Text Markup Language) が用いられている。 HTML には様々な version があるが、現在は HTML 4 が主に使用されている。 HTML は文書の中に構造を表すためのタグを埋め込んで表現する。 Web ブラウザはタグを解釈して画面上に適切に表示されるように整形する。

  HTML は文書の構造を表現するための規格であり、 表示した時の見た目をデザインするための規格ではないという点に注意する。 当初の HTML では見た目をデザインするための機能が広く利用されていたが、 現在では、文書の構造を表現することと、 見た目をデザインすることは機能として明確に分離されており、HTML は構造の表現を扱う。 よって HTML の文書中で細かいデザインの指定をすることは推奨されていない。



4.1.2   XML

  HTML 以外には XML (eXtensible Markup Language) も広く使用されている。 HTML は WWW で文書を公開する時の標準技術として利用されることがほとんどであるが、 XML は WWW でも利用されるが、それ以外により一般的、汎用的にデータを表現、 交換できるようにするための規格として WWW 以外でも広く利用されている。 例として、現在の Microsoft 社のオフィススイート製品 (Word, Excel, PowerPoint など) ではファイルの表現形式として XML を採用している。 XML に基づいて作成した文書、データは、 変換や加工を便利に実行できる仕組みが用意されているので再利用性が高い。

  HTML ではどのようなタグを使用するか、 その名称と機能は HTML の規格を定める機関ですべて決められている。 使用者が勝手にタグを定義したり増やすことはできない。 一方、XML では名称の一部に拡張可能 (eXtensible) という単語が含まれていることからわかるように、 使用者が自由にタグの名称や機能を定めることができる。 この点では、XML の標準規格というのは個々のタグを定めているのではなく、 タグの名称や機能をどのように定めたらよいかをルールとして規定していると言える。

  XML の特徴として文書の表現形式が厳格に決められている点がある。 初期の HTML では複数の解釈が可能な曖昧な表現でも許されていたが、 そのような文書ではブラウザが表示する時に足らない部分を類推、補って適切に整形していた。 XML ではそのような表現の曖昧な部分が排除されて、 文法に沿って正確に記述された文書しか許容しない。 このような厳格な文法チェックが行なわれるため、 他者と情報のやりとりをする時の信頼性が増す。



4.1.3   XHTML

  現在の HTML 4 は文書表現の規格が整備されており、 HTML 4 の本来の規格に沿って文書を作成すれば XML に近い信頼性が得られる。 しかし HTML は後方互換性を保つために昔に作成されたいい加減な内容の HTML ファイルでも受け付けて表示できるように曖昧な表現も許容している。 したがって、 そのような後方互換性を維持するための機能に甘えていい加減な記述をしても受け付けられてしまう。

  XHTML は HTML 定義される表現可能な規格(タグの集合)を XML の規格の元で定義したものであり、 HTML とほぼ同じタグを用いて文書の構造を指定できる。 タグの書き方などは XML の規格に基づくので文法的に厳密に決まっており、 いい加減な書き方は許されない。 よって XHTML に基づいて文書を作成すると信頼性の高い、 再利用性の高い文書とすることができる。




4.2   HTML, XHTML による文書作成

  以下では HTML, XHTML により作成した文書の実例を示す。 最初に単純な HTML の文書を用いて HTML の基本構造を示す。 以下は html0.html のソースファイルである。


4.2.1   HTML で表現した単純な文書 (html0.html)

<html>

<head>
<title>シンプルなWebページ</title>
</head>

<body>

<h1>1 見出し</h1>
<p>本文の文章はここに書く。</p>
<p>次の段落。段落と段落の間は1行空く。</p>

<h1>2 次の見出し</h1>
<h2>2.1 小見出し</h2>
<p>次の本文</p>

</body>

</html>
  HTML における文書の表現はこのように、全体を html 要素として <html> と </html> で囲む。その中には最初に head 要素があり、 続いて本文である body 要素がある。 本文には見出しを表す h1 や h2 要素と本文文章の段落を表す p 要素が含まれる。 HTML では head, body, h1, p などの要素を表すタグを必要な場所に記述する。 これらのタグはブラウザによる整形後は表示されない。 またタグはすべて < と > で囲むことで、その他の部分と区別するので文字 '<','>' はそのままの形では本文に含めることができない。



4.2.2   HTML で指定できる様々な表現 (html1.html)

  次にもう少し複雑な文書のソースを示す。図、表、他の文書へのリンクなどを含んでいる。 ファイル名は html1.html である。 なおこのファイルは、曖昧な記述でもブラウザに受け付けられて表示されることを示すために、 意図的に大文字子文字を混在させたり、終了タグを省略したりしている。

<html>

<HEAD>
<title>Webページの書き方, HTML/XHTML の基本</title>
</head>

<Body>

<h2>見出しの書き方

<p>
見出しは次のように書きます。全部で6レベルあります。

<h1>見出し1</h1>
<H2>見出し2
<H3>見出し3</h3>
<H4>見出し4</h4>
<h5>見出し5
<h6>見出し6</h6>

<h2>本文の書き方</h2>

<p>
本文の文章はここに書く。
改行したいときには次のように書く。<br>
<hr>
直前の行のように指示するとこのように線を引くこともできます。
文章の一部を強調したいときには<em>このように</em>書く。
<a href="http://edu.isc.chubu.ac.jp/naga/index.html">他のWebページへのリンク</a> はこのように書く。<br>
<A id="abc" name="abc">このように</a>文章の一部に印を付けることができます。

<p>
別の段落はこのように書きます。段落と段落の間は空行が入ります。
</P>

<h2>箇条書きの書き方</H2>

<p>
箇条書きは次のように書きます。

<ul>
<li>箇条書きの項目
<li>箇条書きの項目</LI>
<li>箇条書きの項目
</ul>

<ol>
<li>番号付き箇条書きの項目
<li>番号付き箇条書きの項目
<li>番号付き箇条書きの項目
</ol>

<h2>図の挿入の仕方

<p>
画像を表示することもできます。

<img src="dragon.gif" alt="ドラゴン"></img>

<h2>表の書き方</h2>

<p>
表を作ることもできます。タイトルを付けることもできます。
</p>

<table border="1">
<caption>各地の降水量</caption>
<tr>
<th> </th> <th>愛知</th> <th>岐阜</th> <th>三重</th> <th>静岡</th> <th>東京</th> <th>大阪</th>
</tr>
<tr>
<th>1月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
<tr>
<th>2月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
<tr>
<th>3月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
</table>

<a href="#abc">上で印を付けたところ</a>に戻ることができます。

<hr>

<address>Copyright 2012 NAGASAKA Yasunori, All Rights Reserved.</address>

</body>

</html>


4.2.3   XHTML による文書の表現 (xhtml1.html)

  上記の html1.html と同じ内容を XHTML の規格に合う形で記述したのが以下に示す xhtml1.html である。 head 要素に記述する内容が増えるのと、 開始タグと終了タグが必ず対になっていることがわかる。

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

<head>
<meta http-equiv="Content-type" content="text/html; charset=shift-jis" />
<meta http-equiv="Content-language" content="ja" />
<meta http-equiv="Content-style-type" content="text/css" />
<link rel="stylesheet" href="nofile.css" type="text/css" />
<meta name="description" content="このページの説明文を書く" />
<meta name="keywords" content="キーワード1, キーワード2, キーワード3" />
<meta name="robots" content="all" />
<meta name="author" content="作者の名前" />
<title>Webページの書き方, HTML/XHTML の基本</title>
</head>

<body>

<h2>見出しの書き方</h2>

<p>
見出しは次のように書きます。全部で6レベルあります。
</p>

<h1>見出し1</h1>
<h2>見出し2</h2>
<h3>見出し3</h3>
<h4>見出し4</h4>
<h5>見出し5</h5>
<h6>見出し6</h6>

<h2>本文の書き方</h2>

<p>
本文の文章はここに書く。
改行したいときには次のように書く。<br />
<hr />
直前の行のように指示するとこのように線を引くこともできます。
文章の一部を強調したいときには<em>このように</em>書く。
<a href="http://edu.isc.chubu.ac.jp/naga/index.html">他のWebページへのリンク</a> はこのように書く。<br />
<a id="abc" name="abc">このように</a>文章の一部に印を付けることができます。
</p>

<p>
別の段落はこのように書きます。段落と段落の間は空行が入ります。
</p>

<h2>箇条書きの書き方</h2>

<p>
箇条書きは次のように書きます。
</p>

<ul>
<li>箇条書きの項目</li>
<li>箇条書きの項目</li>
<li>箇条書きの項目</li>
</ul>

<ol>
<li>番号付き箇条書きの項目</li>
<li>番号付き箇条書きの項目</li>
<li>番号付き箇条書きの項目</li>
</ol>

<h2>図の挿入の仕方</h2>

<p>
画像を表示することもできます。
</p>

<img src="dragon.gif" alt="ドラゴン"></img>

<h2>表の書き方</h2>

<p>
表を作ることもできます。
タイトルを付けることもできます。
</p>

<table border="1">
<caption>各地の降水量</caption>
<tr>
<th> </th> <th>愛知</th> <th>岐阜</th> <th>三重</th> <th>静岡</th> <th>東京</th> <th>大阪</th>
</tr>
<tr>
<th>1月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
<tr>
<th>2月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
<tr>
<th>3月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
</table>

<a href="#abc">上で印を付けたところ</a>に戻ることができます。

<hr />

<address>Copyright 2012 NAGASAKA Yasunori, All Rights Reserved.</address>

</body>

</html>


4.2.4   XHTML と HTML の違いと互換性の問題

  XHTML によって表現する文書は次のルールに従う必要がある。

  また古いブラウザが XHTML の記法を正しく解釈できない問題や、 XHTML の version 間の差異による影響を受けないために、 次の事柄に気をつけるとよい。




4.3   CSS による文書表示、見え方のデザイン


4.3.1   CSS の仕様

  CSS (Cascading Style Sheets) とは、HTML や XHTML 文書を画面に表示する際に、 どのように整形してユーザに提示するか、その見せ方、見え方を規定する仕組みである。 4 章の冒頭で、現在 HTML や XHTML 文書を作成する際には文書の構造と表示の仕方、 デザインを明確に分離することの重要性を述べたが、CSS は表示の仕方だけを規定する。 この仕組みを利用することで、次のような利点がある。

  CSS では様々な要素の表示方法を次の文法にしたがって記述する。

セレクタ {
    プロパティ: 値;
    プロパティ: 値;
    ...
}
設定例
h1 {
    font-size: 150%;
    color: #ff0000;
    background-color: #000000;
    text-alaign: center;
    border: 1px solid #0000ff;
}
  上記の設定例では、h1 要素に対して、フォントの大きさを通常の大きさの 1.5 倍、 文字の色を赤色、背景の色を黒色、文章をセンタリングする、 枠線を実線で 1 ピクセルの幅にして色を青色にする、という内容になっている。

  CSS に関するその他の主要な仕様を以下に示す。



4.3.2   CSS を用いた文書表示の実際 (xhtml2.html, sample.css)

  以下では CSS を用いた文書表示の実際の例を示す。ファイルは先に示した xhtml1.html とほぼ同じ内容の xhtml2.html と CSS により表示の仕方を規定している sample.css である。 xhtml2.html では CSS を使用できるように xhtml1.html から一部の内容が変更されている。 CSS を適用した場合としない場合の表示のされ方を比較すると CSS の働きが理解できる。

  次に示すのが sample.css である。要素の周囲を囲む枠線や様々な色の指定など、 本来は指定しなくてもよい部分が多くあるが、 CSS の機能を視覚的にわかりやすく示すために敢えて指定している。

body {
    font-size: 150%;
    font-family: "Times New Roman",selif,"MS P明朝";
    line-height: 150%;
    text-align: center;
    background-color: #cccccc;
    margin-left: 10%;
}

.page {
    color: #000000;
    background-color: #FFFFFF;
    width: 750px;
    border-left: 1px solid #000000;
    border-right: 1px solid #000000;
}

h1 {
    font-size: 150%;
    font-family: Helvetica,sans-selif,"MS Pゴシック",Osaka;
    color: #ffffff;
    background-color: #333366;
}

h2 {
    color: #ff0000;
    font-size: 120%;
    font-family: Helvetica,sans-selif,"MS Pゴシック",Osaka;
    text-align: left;
    margin-left: 5%;
}

h3 {
    color: #ff00ff;
    font-family: Helvetica,sans-selif,"MS Pゴシック",Osaka;
    text-align: left;
    margin-right: 5%;
    border-style: solid;
    border-width: 0px 0px 1px 13px;
    border-color: #aaaa88;
}

h4, h5, h6 {
    color: #ff00ff;
    font-family: Helvetica,sans-selif,"MS Pゴシック",Osaka;
    text-align: right;
    margin-right: 5%;
}

p {
    color: #000099;
    background-color: #dddddd;
    text-align: left;
    padding: 1em;
    padding-right: 3em;
    border: solid 1px #ff00ff;
    border-top-width: 10px;
    border-top-color: #0000ff;
    margin: 1em;
    margin-bottom: 2em;
}

p.small {
    font-size: 50%;
    color: #ffffff;
    background-color: #666666;
}

em {
    color: #ffffff;
    background-color: #ff00ff;
}

a:link {
    color: #88aaaa;
    text-decoration: underline;
}

a:visited {
    color: #aa88aa;
    text-decoration: underline;
}

a:hover {
    color: #ffffff;
    text-decoration: underline;
    background-color: #88aaaa;
}

a:active {
    color: #ffffff;
    text-decoration: underline;
    background-color: #88aaaa;
}

ol {
    color: #00ff00;
}

img {
    padding: 1em;
    padding-left: 5em;
    border: solid 1px #0000ff;
    border-right-width: 10px;
    border-right-color: #00ffff;
    margin: 1em;
    margin-bottom: 3em;
}

  以下が xhtml2.html である。xhtml1.html との違いは、(1) CSS の設定を記した sample.css を指定している、(2) p 要素の一部に class の指定を加えて、 class による適用範囲の限定の仕方を示している。

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

<head>
<meta http-equiv="Content-type" content="text/html; charset=shift-jis" />
<meta http-equiv="Content-language" content="ja" />
<meta http-equiv="Content-style-type" content="text/css" />
<link rel="stylesheet" href="sample.css" type="text/css" />
<meta name="description" content="このページの説明文を書く" />
<meta name="keywords" content="キーワード1, キーワード2, キーワード3" />
<meta name="robots" content="all" />
<meta name="author" content="作者の名前" />
<title>Webページの書き方, HTML/XHTML の基本</title>
</head>

<body>

<div class="page">

<h1>見出しの書き方</h1>

<p>
見出しは次のように書きます。全部で6レベルあります。
</p>

<h1>見出し1</h1>
<h2>見出し2</h2>
<h3>見出し3</h3>
<h4>見出し4</h4>
<h5>見出し5</h5>
<h6>見出し6</h6>

<h2>本文の書き方</h2>

<p>
本文の文章はここに書く。
改行したいときには次のように書く。<br />
</p>
<hr />
<p>
直前の行のように指示するとこのように線を引くこともできます。
文章の一部を強調したいときには<em>このように</em>書く。
<a href="http://edu.isc.chubu.ac.jp/naga/index.html">他のWebページへのリンク</a> はこのように書く。<br />
<a id="abc" name="abc">このように</a>文章の一部に印を付けることができます。
</p>

<p class="small">
別の段落はこのように書きます。段落と段落の間は空行が入ります。
</p>

<h2>箇条書きの書き方</h2>

<p>
箇条書きは次のように書きます。
</p>

<ul>
<li>箇条書きの項目</li>
<li>箇条書きの項目</li>
<li>箇条書きの項目</li>
</ul>

<ol>
<li>番号付き箇条書きの項目</li>
<li>番号付き箇条書きの項目</li>
<li>番号付き箇条書きの項目</li>
</ol>

<h2>図の挿入の仕方</h2>

<p>
画像を表示することもできます。
</p>

<img src="dragon.gif" alt="ドラゴン"></img>

<h2>表の書き方</h2>

<p>
表を作ることもできます。
タイトルを付けることもできます。
</p>

<table border="1">
<caption>各地の降水量</caption>
<tr>
<th> </th> <th>愛知</th> <th>岐阜</th> <th>三重</th> <th>静岡</th> <th>東京</th> <th>大阪</th>
</tr>
<tr>
<th>1月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
<tr>
<th>2月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
<tr>
<th>3月</th> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td> <td>10</td>
</tr>
</table>

<a href="#abc">上で印を付けたところ</a>に戻ることができます。

<hr />

<address>Copyright 2012,2013 NAGASAKA Yasunori, All Rights Reserved.</address>

</div>

</body>

</html>



4.4   JavaScript

  JavaScript とは、Web ブラウザ上で簡単なプログラムを実行したり、 データ処理や動的なページ生成を行うためのプログラミング言語である。 Java という単語が名称に含まれているが、プログラミング言語の Java とは直接の関係はない。 マーケティング上の理由で命名されたが、Java と混同されたり、 Java と同じ機能が使えるというような誤解を生んだため、 一部にはこの名前にしたことは失敗だったという意見がある。

  開発当初は Web ブラウザに搭載された JavaScript 処理系間の機能の相違、 互換性の低さや、初心者ユーザが JavaScript で作成した機能を Web ページに組み込むとセキュリティが低下すると考えられていた時期があり、普及しなかった。 しかし JavaScript の仕様が統一され、 後年の version で機能が豊富になると徐々に使われるようになり、 Ajax (Asynchronous JavaScript + XML) という概念および Web ページの実現方法が提唱された頃から一気に使われるようになった。 JavaScript の主な特徴や機能を以下に列挙する。

  次に JavaScript の主な言語仕様を示す。


4.4.1   簡単な JavaScript のプログラムを含む xhtml ファイル (xhtml3.html)

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

<head>
<meta http-equiv="Content-type" content="text/html; charset=shift-jis" />
<meta http-equiv="Content-language" content="ja" />
<meta http-equiv="Content-style-type" content="text/css" />
<link rel="stylesheet" href="sample.css" type="text/css" />
<meta name="description" content="このページの説明文を書く" />
<meta name="keywords" content="キーワード1, キーワード2, キーワード3" />
<meta name="robots" content="all" />
<meta name="author" content="作者の名前" />
<title>Webページの書き方, HTML/XHTML の基本</title>
</head>

<body>

<h1>JavaScript の簡単なサンプル</h1>

<h2>sample.js</h2>

<p>
以下では JavaScript の簡単なサンプルが挿入されている。
文法はC言語にかなり似ている。
</p>

<script type="text/javascript" src="sample.js"></script>

<p>
プログラムは実行された後、ソースファイルが配置された場所に表示される。
</p>

</body>

</html>


4.4.2   JavaScript のプログラム例 (sample.js)

var i, j = 0;
var strMsg = "Hello, world.";
var strDate = Date();

document.writeln(strMsg + "<br />");
document.writeln(strDate + "<br />");

for (i = 0; i < 10; i++) {
    document.writeln(i + "<br />");
    j += i;
}
document.writeln(j + "<br />");

if (0 == j % 2) {
    document.writeln("even number<br />");
}
else {
    document.writeln("odd number<br />");
}

i = 0;
while (i < 10) {
    document.writeln(i++ + " ");
}


4.4.3   入力エリアやボタンのイベントに JavaScript を連動させる (xhtml4.html)

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

<head>
<meta http-equiv="Content-type" content="text/html; charset=shift-jis" />
<meta http-equiv="Content-language" content="ja" />
<meta http-equiv="Content-style-type" content="text/css" />
<link rel="stylesheet" href="sample.css" type="text/css" />
<meta name="description" content="このページの説明文を書く" />
<meta name="keywords" content="キーワード1, キーワード2, キーワード3" />
<meta name="robots" content="all" />
<meta name="author" content="作者の名前" />
<script type="text/javascript" src="sample2.js"></script>
<title>Webページの書き方, HTML/XHTML の基本</title>
</head>

<body id="body1">

<form action="mailto:any.naga@gmail.com" method="post" enctype="text/plain">
<p>
<textarea name="test" rows="4" cols="40">
</textarea>
</p>
<input type="submit" value="Submit" />
<input type="reset" value="Cancel" />
</form>

<form name="form1">
<input type="button" name="b1" value="color" onclick="color()" />
<input type="button" name="b2" value="hello" onclick="hello()" />
<input type="button" name="b3" value="number" onclick="number()" />
</form>

<address>Copyright 2012,2013 NAGASAKA Yasunori, All Rights Reserved.</address>

</body>

</html>


4.4.4   イベントに連動させる JavaScript のプログラム例 (sample2.js)

document.onload = init();
document.form1.b1.onclick = color();
document.form1.b2.onclick = hello();
document.form1.b3.onclick = number();

var intRandom, intR10, intR1;

function init() {
    var strDate = Date();
    var strMsg = "Hello, world."
    var i, j;

    document.writeln(strMsg + "<br />");
    document.writeln(strDate);

    intRandom = Math.floor(Math.random() * 100);
    intR10 = Math.floor(intRandom / 10);
    intR1 = intRandom % 10;
}

function hello() {
    var boolFlag;

    alert("Hello, world.\n");
    boolFlag = confirm("Hello, world.\n");
    if (true == boolFlag) {
	alert("OK was selected.\n");
    }
    else {
	alert("Cancel was selected.\n");
    }
}

function color() {
    var strColor;
    var b;

    strColor = prompt("背景の色", "gray");
    alert(strColor);
    b = document.getElementById("body1");
    b.style.backgroundColor = strColor;
}

function number() {
    var intNum, int10, int1, a = 0, b = 0;

    while (a < 2) {
    	a = 0;
   	b = 0;
  	intNum = prompt("0 ~ 99", "00");
  	int10 = Math.floor(intNum / 10);
  	int1 = intNum % 10;
  	if (intR10 == int10) a++;
  	if (intR1  == int1)  a++;
  	if (intR10 == int1)  b++;
  	if (intR1  == int10) b++;
 	alert(a + " " + b);
	if (2 == a) {
	    intRandom = Math.floor(Math.random() * 100);
 	    intR10 = Math.floor(intRandom / 10);
   	    intR1 = intRandom % 10;
	}
    }
}


4.4.5   form で入力した値を JavaScript のプログラムに渡す (xhtml5.html)

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

<head>
<meta http-equiv="Content-type" content="text/html; charset=shift-jis" />
<meta http-equiv="Content-language" content="ja" />
<meta http-equiv="Content-style-type" content="text/css" />
<link rel="stylesheet" href="sample.css" type="text/css" />
<meta name="description" content="このページの説明文を書く" />
<meta name="keywords" content="キーワード1, キーワード2, キーワード3" />
<meta name="robots" content="all" />
<meta name="author" content="作者の名前" />
<script type="text/javascript" src="sample3.js"></script>
<title>Webページの書き方, HTML/XHTML の基本</title>
</head>

<body id="body1">

<form name="form1">
1個目の数 <input type="text" id="text1" size="10" /> <br />
2個目の数 <input type="text" id="text2" size="10" /> <br />
3個目の数 <input type="text" id="text3" size="10" /> <br />
<input type="button" id="calc" value="合計を計算" /> <br />
合計 <input type="text" id="sum" size="10" /> <br />
</form>

<address>Copyright 2012,2013 NAGASAKA Yasunori, All Rights Reserved.</address>

</body>

</html>


4.4.6   form で入力した値を JavaScript のプログラムで読み込む (sample3.js)

window.onload = WindowOnLoad;

function WindowOnLoad() {
    document.getElementById('calc').onclick = calc;
}

function calc() {
    var a = document.getElementById("text1").value - 0;
    var b = document.getElementById("text2").value - 0;
    var c = document.getElementById("text3").value - 0;
    var sum = a + b + c;
    document.getElementById("sum").value = sum;
}