SGMLって

line
_________________________________________________________


 DTDの見方にSGMLが関わっています。DTDは、SGMLアップリケーションでといった言 葉にであいます(Standart Generalized Markup Language)。さまざまなアプリケーシ ョンにより形式が異なり文書交換ができない状況なので、これを改善するためにSGML が提案されました。
 ソフト固有の情報を必要とするレイアウト情報を採用しないで、文書をすべてテキ スト形式で表現するようにしました。ここは「見出し」、ここの範囲が「段落(パラ グラフといったがいいのでしょう)」といった識別情報は必要で「タグ」とよばれる 特別の形式で書くとになっています。
 さらに、識別情報もユーザーが定義できるようになっていますので、表現の自由度 は高くなっています。要素名や文書構造を自由に定義できます。その定義のしかたが 規格になっていて、DTD(Document Type Definition:文書型定義)と呼ばれる部分で す。
 印刷するつまりレイアウトできるには、別の仕組が必要になりますが文書の意味を 伝えることに絞った形式、それがSGMLの目的です。

から構成されています。DTDで定義された文書の要素に従って、実際の文書がかかれま す。DTDの定義を実現させたものが文書なので、文書インスタンス(文書実現値)とい うわけです。実現像はあるが、それが文書形式だということで、何処へでも送れ、そ のことが目的でもあります。
 DTDは、文書インスタンスのタグ付けの方法を定義します。DTDは要素の出現順序、 親子関係、出現回数といった型を示すだけですので、その範囲内で文書インスタンス を自由に書けます。
 HTML(Hyper Text Markup Language)もかなりSGMLに近いのですが、タグ名が固定 的に決まっています(!DOCTYPE HTML PUBLICと公開されて、それに従います。そのDTDは、"-//W3C//DTD HTML 3.2 Final//EN"と記載してDOC宣言します)。SGMLでは、タグ名や文書構造が固定的でなく、ユーザーがそれ を定義する方法がきめられているのです。その定義をする部分がDTDです。DTDの数だ けタグ付けの方法ができます。その一つがDTD 3.2で、HTMLはSGMLアプリケーションで といわれるわけです。


DTD 3.2の例で見ます。

DTDは要素宣言、属性宣言、実体宣言の三つの宣言から構成されています。

---------------------+
** 要素宣言 ** |
---------------------+---------------------------------
<!ELEMENT   要素名  省略情報       (要素内容)> 
-------------------------------------------------------
<!ELEMENT   FONT    - -       (%text)* >

<!ELEMENT  P        - O        (%text)*>

<!ELEMENT   DL         - -           (DT|DD)+>
<!ELEMENT   DT         - O             (%text)*>
<!ELEMENT   DD         - O             %flow;>

<!ELEMENT   (OL|UL)    - -           (LI)+>
<!ELEMENT   LI         - O             %flow>

<!ELEMENT   table      - -            (caption?, tr+)>
<!ELEMENT   tr         - O           (th|td)*>
<!ELEMENT   (th|td)    - O            %body.content>

タグ省略情報:
	" - "  ハイホン 省略不可
	" O " OMITTAG  省略可能 (オーです)

要素の出現順番:
	" | "  どれか一つ出現
	" , "  順番に出現
	" & "  順不動に出現
	
要素の出現回数:
	マーク  0回 1回 複数回
	なし    X    O     X    必ず一回
	 ?        O    O     X
	 +        X    O     O
	 *        O    O     O

---------------------+
** 属性宣言 ** |
--------------------------------------------------------------------
<!ATTLIST  要素名  属性名     宣言値          省略時値>
--------------------------------------------------------------------
<!ATTLIST    P         align   (left|center|right)   #IMPLIED>

<!ATTLIST    IMG       src           %URL            #REQUIRED>

値を選択肢の中から選ぶ:
	" | "   (left|center|right)のように

省略時値:
  #REQUIRED 開始タグの中に必ず属性値を指定しなくてはならない。
        省略できない。
  #IMPLIED  指定しなければ、アプリケーションが暗黙の属性を与える。


<!ELEMENT P     - O (%text)*>
<!ATTLIST P
        align  (left|center|right) #IMPLIED
        >
        
<!ELEMENT IMG    - O EMPTY --  Embedded image -->
<!ATTLIST IMG
        src     %URL     #REQUIRED  -- URL of image to embed --
        alt     CDATA    #IMPLIED   -- for display in place of image --
        align   %IAlign  #IMPLIED   -- vertical or horizontal alignment --
        height  %Pixels  #IMPLIED   -- suggested height in pixels --
        width   %Pixels  #IMPLIED   -- suggested width in pixels --
        border  %Pixels  #IMPLIED   -- suggested link border width --
        hspace  %Pixels  #IMPLIED   -- suggested horizontal gutter --
        vspace  %Pixels  #IMPLIED   -- suggested vertical gutter --
        usemap  %URL     #IMPLIED   -- use client-side image map --
        ismap   (ismap)  #IMPLIED   -- use server image map --
        >

---------------------+
** 実体宣言 ** |
--------------------------------------
<!ENTITY   実体名  "実体">
--------------------------------------
<!ENTITY     gt        CDATA ">"  >

<!ENTITY     lt        CDATA "<"  >

実体(ENTITY)とは、「名前をつけて参照できるデータ」を指し、実体名はリテラル (「"」)で囲います。一般実体パラメータ実体とにわかれています。


一般実体は、"&"";"の間に実体名を書いて参照するもので、文書インスタンスで使 われます。 文書交換上での障害のひとつに、ある文字をキーボードで入力できなかったり、割り 当てられたコードがシステム環境によって異なることがあります。実体宣言とその参 照という形で障害を克服できます。 タグと間違う < は &lt; と書き、<(実体)を参照するということです。

<!--================ Entities for special symbols =======================-->
<!-- &trade and &cbsp are not widely deployed and so not included here -->

<!ENTITY amp    CDATA "&"   -- ampersand          -->
<!ENTITY gt     CDATA ">"   -- greater than       -->
<!ENTITY lt     CDATA "<"   -- less than          -->

パラメータ実体は、DTDにおいてのみ使われるもので、"%" と ":" の間に実体名を書いて 参照します。DTDの記述を簡略化するためのものです。HTML DTDは、自分でかくことは ありません。

<!ELEMENT   (OL|UL)    - -           (LI)+>
<!ELEMENT   LI         - O             %flow>
で、%flowとは何なのかを知るとき必要です。

<!--=================== text level================================-->

#PCDATA は、文字のこと(例えば、iso-8859-1, iso=2022-jp)
<!ENTITY % text "#PCDATA | %font | %phrase | %special | %form">

<!ENTITY % font "TT | I | B  | U | STRIKE | BIG | SMALL | SUB | SUP">
<!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE">
<!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT | MAP">
<!ENTITY % form "INPUT | SELECT | TEXTAREA">

<!--===================block level==================================-->
<!ENTITY % block "P | %list | DL| %preformatted| %block.forms">
		<!ENTITY % preformatted "PRE">
		<!ENTITY % block.forms "BLOCKQUOTE">
<!ENTITY % flow "(%text | %block)*">
<!ENTITY % body.content "(%heading|%block|HR|ADDRESS|IMG)*">

-----------------------+
** マーク区間 ** |
---------------------------------------------------
<![ 状態キーワード [******文書部分******]]">
---------------------------------------------------
<![ INCLUDE [*****文書部分を無視せず、解析する************]]">
<![ IGNORE  [*****文書部分を無視し、ないものとして処理****]]">

 殆ど同じ文書で、多少異なる場合に、変更する部分を指定するのにつかいます。状態キーワードの書換えには、実体宣言を使います。HTML 4.0 FRAMESETは、BODYをFRAMSETに置き代え、NOFRAMESの内容をBODYにする以外は、HTML 4.0 Transionalと同じです。この場合、実体宣言とマーク区分を記載してHTML 4.0 TransionalとHTML 4.0 FRAMESETを切り代えます。以下はDTDの記載です。

HTML 4.0 FRAMSETのDTDに
<!ENTITY % HTML.Frameset "INCLUDE">
<!ENTITY % HTML4.dtd PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
%HTML4.dtd;

と、 <!ENTITY % HTML.Frameset "INCLUDE">があります。 %HTML.Framesetは、マーク区間の状態キーワードのINCLUDEとします。HTML 4.0 Transionalをみると


<![ %HTML.Frameset;[<!ENTITY % html.content "HEAD, FRAMESET">]]>

<![ %HTML.Frameset; [
<!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) -- window subdivision-->
<!ATTLIST FRAMESET
  %coreattrs;                          -- id, class, style, title --
  rows        %MultiLengths; #IMPLIED  -- list of lengths,
                                          default: 100% (1 row) --
  cols        %MultiLengths; #IMPLIED  -- list of lengths,
                                          default: 100% (1 col) --
  onload      %Script;       #IMPLIED  -- all the frames have been loaded  -- 
  onunload    %Script;       #IMPLIED  -- all the frames have been removed -- 
  >
]]>

<![ %HTML.Frameset; [<!ENTITY % noframes.content "(BODY) -(NOFRAMES)">]]>

は、

<![ INCLUDE [<!ENTITY % html.content "HEAD, FRAMESET">]]>
と切り代えて、HEADに続いて、BODYでなくFRAMESETがくると規定しています。
また、
<![ INCLUDE [<!ENTITY % noframes.content "(BODY) -(NOFRAMES)">]]>
と切り代えて、%noframes.contentはBODYと規定しなおします。

===========================================================
** <!DOCTYPE HTML PUBLIC "%HTML.Version"> **
<!ENTITY % HTML.Version "-//W3C//DTD HTML 3.2 Final//EN"
===========================================================

HTMLでは、公開されたDTDを使っています。先頭に、宣言をかきます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

ブラウザで見るぶんには必要ありませんが、ページを検証するため検証サーバーに かける際にこのDOCTYPEにそって解釈されます。宣言がない場合には、DTD 2.0で 検証されます。


HTML 3.2勧告にそったHTMLの典型的なパターン

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
 <HTML>
 <HEAD>
   <META http-equiv="content-type" content="text/html; charset=iso-2022-jp">
   <TITLE>HTMLのコーディングチェック</TITLE>
   <META name="description" content="This is a docyument on a style">
   <LINK rev=made href="mailto:y.kato@personal.email.ne.jp">
   <!--====================文書全体のコメント====================-->
 </HEAD>
 <BODY>
 <H1 align="center">文書全体用表題:センタリングする</H1>
 
 <H2>第一章</H2>
 <P>文章</P>
 <!--==途中のメモ リスト開始==-->
 <Ul>
    <LI>項目1
    <LI>項目2
 </UL>
 <!--==途中のメモ リスト終==-->
 <P>文章</P>
 
 <H2>第二章</H2>
 <H3>第一節</H3>
 <P><EM>文章</EM></P>
 <!--==センタリング開始==-->
 <DIV align="center">
 <P><EM>文章</EM></P>
 <P><EM>文章</EM></P>
 <P><EM>文章</EM></P>
 <P><EM>文章</EM></P>
 </DIV>
 <!--==センタリング終了==-->
 
 <HR>
 
 <ADDRESS>署名など</ADDRESS>
 </BODY>
 </HTML>
  
  ----------------------------------------------------------------------
  
<META http-equiv="content-type" content="text/html; charset=iso-2022-jp">
は、head 内で最初に記載します。文字指定を早く知らせるためす。文書全体のコメ
ントも日本語を使う場合は、文字宣言の後で記載します。


DOC宣言


漢字コード

Another HTML-lint gateway(vector版)からの引用

現在日本語で書かれているHTMLの多くには、文字コードとして JIS、Shift JIS 、EUCが利用されています。HTMLがどのコードで書かれているのかを明示するために、このタグを書くようにしましょう。

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-2022-JP">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP">

これらのどれか適切なものを書けばいいのです。こうしておくと、よくできたブラウザでは、文字コードのエンコーディングが欧米などになっていても、正しく日本語が表示されます。Navigatorなどでは、表示するフォントを指定さている文字コードごとに指定できるようになっています。<META>で文字セッを指定していると、それに対応したフォントで表示してくれますまた、<META>での文字セットの指定がない場合、文字コードのエンコーディングを日本語(自動判別)にしてあると、Shift JISと EUCの誤認識をすることもあるようです。

インタネット上で使うさまざまなコードは、IANA(Internet Assigned Numbers Authority)という組織が管理しています。ここで指定する文字コードも管理していて、に一覧がありま す。よく、"charset=x-sjis"や "charset=x-euc-jp"を見かけますが、これらは 、IANAには登録されていません。しかし、ブラウザによっては、これらは解釈するけどIANAに登録されているやつは解釈しないというのもあります 。Navigator2.0などは、x-sjisは解釈するけど Shift_JISは解釈しないそうです。

[DTD 3.2 概観]
[HTML 4.0翻訳メモ]


JIS版:http://www.asahi-net.or.jp/‾bd9y-ktu/dtd_f/sg.html

加藤泰孝 bd9y-ktu@asahi-net.or.jp
email : y.kato@personal.email.ne.jp
Last modified 97.7.13