cloudy and rain

UNIXやLINUX、時事放談など気になったことを無作為に書きつらねています。 The topic which becomes matter of concern of UNIX and LINUX and society is written on world wide.

Friday, August 10, 2007

DTDについてその2

というわけで、つまらないDTDはさておき、伝統的にシンプルで実用的というか、シンプルだがとても応用が利くDocBookである。コメントを除くと、以下のようになっている。

<!--<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2
//EN""http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"
[...]>Or,if
you have a higher-level driver file that customizes DocBook,
use the FPI in the parameter entity declaration:<!ENTITY % DocBookDTD PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN""http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd">
%DocBookDTD;

See the documentation for detailed information on the parameter entity and module scheme used in DocBook, customizing DocBook and planning for interchange, and changes made since the last release of DocBook.--><!ENTITY % dbnotn.module "INCLUDE">
<![%dbnotn.module;[
<!ENTITY % dbnotn PUBLIC
"-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN"
"dbnotnx.mod">
%dbnotn;
]]>



<!ENTITY % dbcent.module "INCLUDE">
<![%dbcent.module;[
<!ENTITY euro "€"><!-- euro sign, U+20AC NEW -->
<!ENTITY % dbcent PUBLIC
"-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN"
"dbcentx.mod">
%dbcent;
]]>



<!ENTITY % dbpool.module "INCLUDE">
<![ %dbpool.module; [
<!ENTITY % dbpool PUBLIC
"-//OASIS//ELEMENTS DocBook XML Information Pool V4.1.2//EN"
"dbpoolx.mod">
%dbpool;
]]>



<!ENTITY % intermod.redecl.module "IGNORE">
<![%intermod.redecl.module;[
<!-- Defining rdbmods here makes some buggy XML parsers happy. -->
<!ENTITY % rdbmods "">
%rdbmods;


<!ENTITY % dbhier.module "INCLUDE">
<![ %dbhier.module; [
<!ENTITY % dbhier PUBLIC
"-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1.2//EN"
"dbhierx.mod">
%dbhier;
]]>



<!ENTITY % dbgenent.module "INCLUDE">
<![ %dbgenent.module; [
<!ENTITY % dbgenent PUBLIC
"-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1.2//EN"
"dbgenent.mod">
%dbgenent;
]]>

簡単な話、全部外部参照で済ませている。条件によって振り分けて、扱われる内容によってどう振る舞うかを決めている様子はドシロートでもわかりやすいと思う。

で、結果のXMLが

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<article lang="en-US"><sect1><title>これはタイトルですが本文だろうとHTMLでは関係ありません</title>本文だろうとHTMLでは関係ありません<sect2><title>これは見出しですがHTMLでは関係ありません</title>見出しですがHTMLでは関係ありません<orderedlist>
<listitem>
<para>これは箇条書きですがHTMLのスタイル指定で、いわゆる拡張です</para>
</listitem>
<listitem>
<para>これは箇条書きですがHTMLのスタイル指定で、いわゆる拡張です</para>
</listitem>
<listitem>
<para>これは箇条書きですがHTMLのスタイル指定で、いわゆる拡張です</para>
</listitem>
</orderedlist>
<para>これも本文</para>
<para>こ</para>
<para>れも</para>
<para>html</para>
<para>では本文</para>
<para>です</para>
<para>これが意味あると思いますか?</para></sect2></sect1></article>

で、HTML

%<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=shift_jis">
<TITLE></TITLE>
<META NAME="GENERATOR" CONTENT="OpenOffice.org 2.2 (Win32)">
<META NAME="CREATED" CONTENT="20020715;12385300">
<META NAME="CHANGEDBY" CONTENT="kuniaki muroran">
<META NAME="CHANGED" CONTENT="20070809;23013803">
<STYLE TYPE="text/css">
<!--
@page { size: 21cm 29.7cm; margin-left: 3.18cm; margin-right: 3.18cm; margin-top: 2.54cm; margin-bottom: 2.54cm }
P { margin-bottom: 0.21cm }
H1 { margin-bottom: 0.21cm }
H1.western { font-family: "Thorndale", serif; font-size: 16pt }
H1.cjk { font-family: "Andale Sans UI"; font-size: 16pt }
H1.ctl { font-family: "Tahoma"; font-size: 16pt }
H2 { margin-bottom: 0.21cm }
H2.western { font-family: "Thorndale", serif; font-size: 14pt; font-style: italic }
H2.cjk { font-family: "Andale Sans UI"; font-size: 14pt; font-style: italic }
H2.ctl { font-family: "Tahoma"; font-size: 14pt; font-style: italic }
-->
</STYLE>
</HEAD>
<BODY LANG="zxx" DIR="LTR">
<H1 CLASS="cjk">これはタイトルですが本文だろうとHTMLでは関係ありません</H1>
<H2 CLASS="cjk">これは見出しですがHTMLでは関係ありません</H2>
<UL>
<LI><P STYLE="margin-bottom: 0cm">これは箇条書きですがHTMLのスタイル指定で、いわゆる拡張です</P>
<LI><P STYLE="margin-bottom: 0cm">これは箇条書きですがHTMLのスタイル指定で、いわゆる拡張です</P>
<LI><P STYLE="margin-bottom: 0cm">これは箇条書きですがHTMLのスタイル指定で、いわゆる拡張です</P>
</UL>
<P>これも本文</P>
<P>こ</P>
<P>れも</P>
<P>html</P>
<P>では本文</P>
<P>です</P>
<P>これが意味あると思いますか?</P>
</BODY>
</HTML>%

アプリはopen office.orgである。実際XMLからは、まんまhtml化しようとしても、h1とかは指定しないと駄目だ。というかそこまでDTDは関与すべきではない。

頭の要素もパラメータ参照で、dbと名前から察するにデータベースからELEMENTで前回のようにどれかひとつが出るよう実体を列挙してパラメータとし、実体名としていることが判る。
XMLは書式に関与してはならず、構造として保持しているということが、DTDが主眼としているゆえんである。ちなみに文中の>などは正規表現である。ブログではXMLをそのままでは表示できんからね。構造が判りやすいことにDTDもなっていることが、コメントも生きてくるというモノ。実体参照と要素の数が同じなのは馬鹿馬鹿しいのが普通である。

では一番上の.modを見てみよう。
例のごとくコメント抜きだ。<!--  <!ENTITY % dbnotn PUBLIC
"-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN"
"dbnotnx.mod">
%dbnotn;
-->これもコメントだが、まあ一応そのままにしておいた。

<!ENTITY % local.notation.class "">
<!ENTITY % notation.class
"BMP| CGM-CHAR | CGM-BINARY | CGM-CLEAR | DITROFF | DVI
| EPS | EQN | FAX | GIF | GIF87a | GIF89a
| JPG | JPEG | IGES | PCX
| PIC | PNG | PS | SGML | TBL | TEX | TIFF | WMF | WPG
| linespecific
%local.notation.class;">

<!NOTATION BMP PUBLIC
"+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows bitmap//EN">
<!NOTATION CGM-CHAR PUBLIC "ISO 8632/2//NOTATION Character encoding//EN">
<!NOTATION CGM-BINARY PUBLIC "ISO 8632/3//NOTATION Binary encoding//EN">
<!NOTATION CGM-CLEAR PUBLIC "ISO 8632/4//NOTATION Clear text encoding//EN">
<!NOTATION DITROFF SYSTEM "DITROFF">
<!NOTATION DVI SYSTEM "DVI">
<!NOTATION EPS PUBLIC
"+//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language Ref. Manual//EN">
<!NOTATION EQN SYSTEM "EQN">
<!NOTATION FAX PUBLIC
"-//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1 Untiled Raster//EN">
<!NOTATION GIF SYSTEM "GIF">
<!NOTATION GIF87a PUBLIC
"-//CompuServe//NOTATION Graphics Interchange Format 87a//EN">

<!NOTATION GIF89a PUBLIC
"-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
<!NOTATION JPG SYSTEM "JPG">
<!NOTATION JPEG SYSTEM "JPG">
<!NOTATION IGES PUBLIC
"-//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial Graphics Exchange Specification//EN">
<!NOTATION PCX PUBLIC
"+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION ZSoft PCX bitmap//EN">
<!NOTATION PIC SYSTEM "PIC">
<!NOTATION PNG SYSTEM "http://www.w3.org/TR/REC-png">
<!NOTATION PS SYSTEM "PS">
<!NOTATION SGML PUBLIC
"ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN">
<!NOTATION TBL SYSTEM "TBL">
<!NOTATION TEX PUBLIC
"+//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN">
<!NOTATION TIFF SYSTEM "TIFF">
<!NOTATION WMF PUBLIC
"+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows Metafile//EN">
<!NOTATION WPG SYSTEM "WPG"> <!--WordPerfect Graphic format-->
<!NOTATION linespecific SYSTEM "linespecific">

思った通りパラメータ実体で、実体を列挙してある。その後外部解析対象外実体つまり外部にあるルールを記述した文書にある実体を公開識別子、とシステム識別子で参照している。最初のパラメータ実体には実体がないことに注意しよう。システム識別子にもURIがあるが、公式なので動くこともないということである。見りゃわかるが、画像に関する扱いで要素にそいつが現れた場合の対応として、何を”あて”にしたらいいのか記述してあるわけだ。
要素に意味を持たせたけりゃどういう事をすればいいのか、実は至極簡単ですよね。Microsoft社のWindowsが標準でサポートしているベクター画像のファイル形式。WMFとタグに書いても意味はないが、参照は+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows Metafile//ENとしてしてあるのでWMFとは画像ファイル形式であると。ユーザーがウィンドウズ100%なら、Internet Explorerでもいいけど。DTDはウダウダ考える必要の無いようににするべきであると思いますねぇ。

Powered by ScribeFire.



無料カウンター

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home