<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<TITLE>SGML-DTD-</TITLE>
</HEAD>
<BODY BGCOLOR="#FCFCFC">
<!--BODY BACKGROUND="/~miuraj/images/sgml1.gif"-->
<H2>DTD (Document Type Definition)</H2>
<HR>
タグの定義は一般に<STRONG>DTD</STRONG>と呼ばれるファイルに記述されています(正確には、DTDというファイルは存在せず、前書き(prolog)と呼ばれるものにDTDは記述されます)。基本的に、SGMLで文書を作成する時は、
<OL>
<LI>作成する文書の<STRONG>DTD</STRONG>を選択する(無い場合は作成する)
<LI>選択した<STRONG>DTD</STRONG>に定義されているタグを用いて文書作成する
</OL>
という手順で作成します。
<P>
では、実際の<STRONG>DTD</STRONG>の例を見てみましょう。仮に伝言メモの<STRONG>DTD</STRONG>を
<XMP>
	<!--伝言めもDTD-- >
	<!ELEMENT MEMO - -  ((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)    --引用-- >
</XMP>
のように記述したとします(DTD内の <STRONG>--</STRONG>と</STRONG>--</STRONG>に挟まれた部分はコメントなので無視します)。
<P>
このとき、この<STRONG>DTD</STRONG>では伝言メモを以下のように定義したことになります。
<OL>
<LI>&lt;!ELEMENT MEMO - -  ((TO,FROM)?,DATE?,BODY) &gt;
<P>
	<UL>
	<LI>伝言メモは、要素(ELEMENT)MEMOを持ち、その開始は<STRONT>&lt;MEMO&gt;</STRONG>、終了には<STRONT>&lt;/MEMO&gt;</STRONG>というタグを用いる
	<UL>
	<LI>&lt;MEMO&gt;と&lt/MEMO&gt;は省略できない
	<LI>&lt;MEMO&gt;と&lt/MEMO&gt;の間には、要素として、
		<UL>
		<LI>TO
		<LI>FROM
		<LI>DATE
		<LI>BODY
		</UL>
	があり、
		<UL>
		<LI>TOとFROMは、TOが先、続いてFROMの順番で、必ず1つずつ、ペアで0回または1回のみ現れる(省略できる)
		<LI>その次にDATEが現れるが、DATEも0回または1回のみ現れる(省略できる)
		<LI>最後にBODYが現れるが、BODYは1回のみ現れる(省略できない)
		</UL>
	</UL>
	</UL>
<P>
<LI>&lt;!ELEMENT TO     - O  (#PCDATA)    --宛先--&gt;
<BR>
&lt;!ELEMENT FROM   - O  (#PCDATA)    --発信--&gt;
<BR>
&lt;!ELEMENT DATE   - O  (#PCDATA)    --日付--&gt;
<P>
	<UL>
	<LI>伝言メモは、要素TO(FROM,DATE)を持ち、その開始は<STRONT>&lt;TO&gt;</STRONG>、終了には<STRONT>&lt;/TO&gt;</STRONG>というタグを用いる
	<UL>
	<LI>TO(FROM,DATE)の開始タグは必須だが、終了タグは省略できる
	<LI>TO(FROM,DATE)の開始タグの後に、文がくる
	</UL>
	</UL>
<P>
<LI>&lt;!ELEMENT BODY - -  (P)*         --本文--&gt;
<P>
	<UL>
	<LI>伝言メモは、要素BODYを持ち、その開始は<STRONT>&lt;BODY&gt;</STRONG>、終了には<STRONT>&lt;/BODY&gt;</STRONG>というタグを用いる
	<UL>
	<LI>&lt;BODY&gt;と&lt/BODY&gt;は省略できない
	<LI>&lt;BODY&gt;と&lt/BODY&gt;の間には、要素として、
		<UL>
		<LI>P
		</UL>
	があり、
		<UL>
		<LI>Pは、0回以上何回でも出てきてよい
		</UL>
	</UL>
	</UL>
<P>
<LI>&lt;!ELEMENT P    - O  (#PCDATA|Q)* --段落--&gt;
<P>
	<UL>
	<LI>伝言メモは、要素Pを持ち、その開始は<STRONT>&lt;P&gt;</STRONG>、終了には<STRONT>&lt;/P&gt;</STRONG>というタグを用いる
	<UL>
	<LI>Pの開始タグは必須だが、終了タグは省略できる
	<LI>&lt;P&gt;と&lt/P&gt;の間には、要素として、
		<UL>
		<LI>文
		<LI>Q
		</UL>
	があり、
		<UL>
		<LI>それらは共に、0回以上何回出てきてもよい
		</UL>
	</UL>
	</UL>
<P>
<LI>&lt;!ELEMENT Q    - O  (#PCDATA)    --引用-- &gt;
<P>
	<UL>
	<LI>伝言メモは、要素Qを持ち、その開始は<STRONT>&lt;Q&gt;</STRONG>、終了には<STRONT>&lt;/Q&gt;</STRONG>というタグを用いる
	<UL>
	<LI>Qの開始タグは必須だが、終了タグは省略できる
	<LI>&lt;Q&gt;と&lt/Q&gt;の間には、要素として、
		<UL>
		<LI>文のみ
		</UL>
	がある
	</UL>
	</UL>
</OL>
<P>
以上ではわかりずらいので、実際に、伝言メモで定義された<A HREF="./sgml4.html">タグを付けられた文書</A>の例を示します。
<HR>
<DL>
<DT>DTD<DD>Document Type Definition(or Declaration)
	<DD>文書型定義(あるいは宣言)
<DT>prolog
	<DD>前書き。DTDが記述される。
</DL>
<HR>
<A HREF="./sgml4.html">次ページへ</A>　<A HREF="./sgml2.html">前ページへ</A>
<BR>
<A HREF="./index.html">目次へ戻る</A>
<BR>
<A HREF="../../index.html#SGML">SGMLへ戻る</A>
<HR>
<ADDRESS>
miuraj@isc.meiji.ac.jp
</ADDRESS>
</BODY>
</HTML>
