ホームページへ戻る
 

上へ戻る
 

     XML入門  その1      by   H.Y    3月 31 18:35:36 JST 2002


目次
1。XML とは
1ー1。XML の特徴
1ー2。XML パーサ
1ー3。スキーマ言語
1ー4。XML文書の表示と変換
1)CSS (Cascading Style Sheet Languge)
2)XSL (eXtensible Stayle Sheet Language)
3)XSLT (XSL Transformation)
4)FO (Formatting Object)
2。XML 文書の基本
2ー1。XML宣言
1)書式
2)主な文字コード名
2ー2。文書型宣言
1)Well-formed XML
2)整形型 XML 文書(Valid XML)
3) DTD の宣言
4)宣言の種類
2ー3。処理命令
2ー3。コメント
1)書式
2)コメントの内容に -- をいれてはならない。
3) コメントタグの中に、コメントをいれてはならない。
4)例
2ー4。空白
2ー5。文書の構成要素
1) XMLインスタンスの構成要素
2) 例
3)ルート要素
4)文書要素の属性指定
5)空要素
6)文字の置換
(1)実態参照
(2)文字参照
2ー6。大文字と小文字
2ー7。CDATA セクション
2ー8。参考文書
2ー9。演習
3。DTD
3ー1。DTD の形式
1)COCTYEP 宣言
(1)内部サブセットの指定
(2)外部サブセット
2)要素型の宣言
3)内容モデル
(1)要素内容
(a)要素が順番に現れる場合
(b)どちからの要素が現れるばあい
(c)出現回数を表現する場合
(d)出現順序と回数を組み合わせて表現する場合
(2)混合内容
(3)空要素
(4)任意要素
4)属性リスト宣言
(1)データ型による属性値の候補の指定
(a)CDATA 型 の例
(b)ID, IDREF型の例
(c)IDREFS 型の例
(d)NMTOKEN, NMTOKENS 型の例
(2)列挙型による属性値候補の指定
(1)データ型による属性値の候補の指定
(a)CDATA 型 の例
(b)ID, IDREF型の例
(c)IDREFS 型の例
(d)NMTOKEN 型の例
(e)ENTITY 型の例
(2)列挙型による属性値候補の指定
5)既定値の定義方法
(1) 属性の既定値を二重引用符で指定する。
(2) #REQUIRED
(3) #IMPLIED
(4) #FIXED と二重引用符で囲った属性値の併用
6)実体宣言 (ENTITY)
(1)実態宣言の種類
(2)置換文字列の実態宣言 (内部実体)
(3)システム識別子を使った実体宣言
(4)公開識別子(Public Identifier) を使った実体宣言
7)記法宣言 (NOTATION)

3ー2。DTD 演習

=============================================================================================

1。XML とは
XMLは、SGML(Standard Generalized Markup Language)をルーツとしてうまれた言語である。
目的は、異るプラットフォーム間での、データ交換の標準である。
SGMLでは複雑で面倒なルールを、この複雑さを極力取り除いて、シンプルかつ解りやすくアレンジ
したものに、HTMLのもつWebにおける利用環境を統合したものである。

SGMLのもつ文書構造の定義機能と、HTMLのシンプルさおよびWebでの利用環境を統合したもの。
------------------- -------------------
| SGML | ---------------------------------> | XML |
| データ記述のルール | DTD をシンプルに | |
| が複雑 | | |
------------------- -------------------
| Web 上での利用に ↑ |
| 適した形に、タグを | |
| シンプルにした | |
↓ (決められたDTD) | |
-------------------- Web の利用環境を採り入れた | ↓
| HTML | ---------------------------------------- -------------
| | ----------------------------------------> | XHTML |
-------------------- HTML の XML 化 -------------

XHTML の HTMLとの主な相違点
1)文書全体が整形式である。
2)終了タグは省略できない。
3)要素名と属性は小文字で記述する。
4)属性の値は""等の引用符で括る必要がある。
5)要素の内容が無いものは、空要素として表現する。<br> は <br/>

XML文書は、それだけでは「タグ付けされた文書」でしかない。
XML文書の構造を解析し、利用できるように加工し、これを利用するアプリケーションがあって初
めて、XML文書の本領が発揮できる。

XML文書 --------- Windows アプリケーション
|
|------- Unix アプリケーション
|
------- Mac OS アプリケーション

1ー1。XMLの特徴
1)タグを自由に決められる。
2)テキスト形式のデータである。
Word,一太郎、Excel等はテキストではなく、専用のアプリケーションがないと内容を見れない。
3)文書構造の定義と、データ本体が分離している。
文書構造が分離されていると、外部アプリケーションが XML文書を利用するときに、便利であ
る。
4)規格が W3C(World Wide Web Consortium) で策定されており、常にオープンである。
サイトは http://www.w3.org

1ー2。XML パーサ
XML パーサは、XML文書がルールにしたがって記述されているか、検証する。また、XML文書の
データ構造を解析する。 このXMLパーサが、解釈し取り出したデータを利用するソフトウェアの
ことを「XMLアプリケーション」と言う。
「XMLパーサ」の広い意味では、この「XMLアプリケーション」も含める場合もある。

1ー3。スキーマ言語
XML文書は、「データ」と「文書構造」は分離されている。この「文書構造」は「スキーマ言語」
で定義される。
この「スキーマ言語」の代表的なものが DTD (Document Type Definition) である。DTD は最
も古く、かつ広く使われている XML のスキーマ言語である。
DTD の問題点として次のものが指摘されている。
(1)文法が複雑
(2)データ型を定義できない
(3)名前空間が使えない
名前空間とは、XML文書で要素名や属性名として使用できる名前の集まりのこと。
そこで、この問題を解決するために、W3C により XML-Schema の標準化がすすめられている。
また、日本発の RELAX も注目をあびている。

1ー4。XML文書の表示と変換
XMLはHTMLと異り、文書の体裁(レイアウト)に関する情報を持っていない。XML文書を Webブラ
ウザ上に表示するには、スタイル言語が必要になる。
1)CSS (Cascading Style Sheet Languge)
HTML でホームページを作成する際に CSSを使用することがある。
XML文書のレイアウト用に用いるもともできる。
2)XSL (eXtensible Stayle Sheet Language)
XML文書のレイアウト用に現在最も広く用いられている。XML専用の言語である。
XSLTはXML文書内のデータを、どのような形に変換して表現するかと言ったルールを定めたも
のである。レイアウトのみならず、オリジナルのXML文書を元に、別の形にフォーマッティング
を行ったりもできる。
XSL は XSLT(XSL Transformation) と FO (Formatting Object) に分割できる。
3)XSLT (XSL Transformation)
XSL のうちで、
(1) 文書中のデータを取り出し、加工をする。
(2) 特定のキーワードでソティングを行う
等の、プログラミング的な操作を行う。
4)FO (Formatting Object)
文書の整形に関する指示を行う。

2。XML 文書の基本
XML文書は、「XML宣言」、「文書型宣言」、「XMLインスタンス」の三つのブロックから構成
される。
XML文書として、最低限必要なものは「XMLインスタンス」である。

2ー1。XML宣言
1)書式
<?xml version="XMLのバージョン番号" encording="文字コード名"
standalone="yes" or "no" ?>
2)主な文字コード名
詳しくは code.txt を参照のこと
(1) ISO-10646-UCS-2 Unicode と同じ
(2) ISO-10646-UCS-4 2バイトで表し切れなかった文字を4バイトで表現
(3) UTF-8 UCS-2 と UCS-4 をカバー。日本語は 1 文字 3 バイト
(4) UTF-16 UCS-2 を含み、UCS-4 は UCS-2 コードをペア表現する
(5) EUC-JP EUC コード
(6) shift-JIS シフトJIS
(7) ISO-2022-JP 「JISコード」文字集合

XML宣言は無くても、XML文書として機能する。

2ー2。文書型宣言
書要素(エレメント)、およびその階層構造の宣言、属性の宣言を行い、どのようなタグ
付けを行うかを定義する。
Schema 言語(DTD, Relax, XML-Schema)を用いて定義する。
1)Well-formed XML
DTD を持たず、XMLインスタンスの部分が XMLの文法に従って記述されている文書。
2)整形型 XML 文書(Valid XML)
「XML宣言」、「文書型宣言」、「XMLインスタンス」を全て含み、かつXMLインスタンスが
DTD で記述された通りに記述されており、かつXMLの文法に従っている文書。
3) DTD の宣言
<!DOCTYPE ルート要素名 [ -----------------
要素型宣言 --- |
属性リスト宣言 | |
実体宣言 | DTD | 文書型宣言
記法宣言 --- |
]> -----------------
4)宣言の種類
3ー1。 1)DOCTYPE 宣言
を参照のこと。


2ー3。処理命令
タグによって表される要素の構造とは関係なく、アプリケーションに処理を依頼する場合に
使用する。処理命令ターゲットの名前は、事前にアプリケーションに定義しておく。
1)書式
<? 処理命令ターゲット 処理内容 ?>
2)例
<? browser break ?>
<? xml-stylesheet type="text/xsl" href="adrsbook.xsl" ?>

2ー3。コメント
XML 宣言以降にコメントを書くことができる。
1)書式
<!-- コメント内容 -->
2)コメントの内容に -- をいれてはならない。
3) コメントタグの中に、コメントをいれてはならない。
4)例
(1)良い例
<!-- <p> このタグはコメントである。 </p> -->
(2)悪い例
<!-- これはコメントの悪い例 -- である。 -->
<!-- <!-- これも悪い例である。 --> -->

2ー4。空白
XML文書では、XML文書内の連続した空白(スペース文字(#x20)、改行、復帰、タブ)は、
一つのスペース文字と同様に扱われる。

2ー5。文書の構成要素
文書は、階層構造を持った要素の集まりである。要素を識別するためにタグを用いる。
1) XMLインスタンスの構成要素
(1) 開始タグ
(2) 内容
(3) 終了タグ
(4) 空要素
2) 例
<item personID = "1234" >
内容
</item>
3)ルート要素
XML インスタンスの最初の要素は、ルート要素と呼び、一つだけ存在できる。
4)文書要素の属性指定
属性によって、要素に付加情報を追加できる。属性は、開始タグまたは空要素タグの
中に書く。

<要素名 属性名1= "属性値" 属性名2="属性値2" ...... >
5)空要素
文書要素が、下位の要素を持たない、つまり内容がないことを明示する。
例1:
<tag1/>
これは <tag1> </tag1> と同じ
例2:
<image file="text.txt" />
<image file="text.txt" > </image> と同じ
6)文字の置換
タグや属性を記述するときに、予約文字や、キーボードから直接入力できない文字をを
「実体参照」と「文字参照」で表す。
(1)実態参照
表現したい実体を、
&定義済み実態名;
であらわす。
---------------------------------------
置換したい文字 定義済み実体名
< lt
> gt
& amp
" quot
' apos
「例」
<p> 開始タグは &lt;要素名&gt;と表す。</p>
(2)文字参照
&#10進文字コード; あるいは
&#x16進文字コード; であらわす。
[例」
<p> 開始タグは &#60;要素名&#62;と表す。</p>
<p> 開始タグは &#x3c;要素名&#x3e;と表す。</p>

2ー6。大文字と小文字
XMLでは、大文字と小文字は区別される。
XML規格の基本方針として、
(1) SGMLから引き継いだキーワードは大文字。
(2) XMLで新たに導入したキーワードや予約属性は小文字

2ー7。CDATA セクション
XML 文書には、CDATA セクションを設けることができる。
[書式]
<![CDATA[
この内容は通常のテキストとして扱う。
]]>
予約記号の > , < 等を XML 文書に記述する場合は、エンティティ参照を用いる必要があるが
CDATA セクションを用いると,このセクション内では、その必要はない。

2ー8。参考文書
W3C 勧告 拡張可能なマーク付け言語(XML)1.0

最新バージョンは
http://www/w3c.org/TR/REC-xml
以前のバージョンではあるが、日本語訳が
http://www/w3c.org/TR/1998/REC-xml-980210

2ー9。演習
XML文書で各自のデータベースを作成する。要素名を下記のものを使用する。
----------------------------------------------------
1.root element : <name and id >
2.sub element
<family>
<father>,<mother>,<sister>,<brother>
for each family
<name>
<birthday>,<sex>,<address>,<occupation>,<marriage>
<address>
<country>
<prefecture>
<city>
<etc>
<birthday>
<hoby>
<affiliation> 所属
<department> 部
<section> 課
<marriage>
<telephone>

3。DTD (Document Type Definition) の基礎
DTD は XML文書の設計図のようなものである。XML文書は、タグの名前や属性を自由に定義す
ることができるが、これらの情報をあらかじめ定義しておけば、この形式に従ってXML文書が作
成されているかどうかを検証するときに便利である。また、複数のXML文書を作成したり、第三
者との間でXML文書を使って、データの交換をすることも可能になる。
3ー1。DTD の形式
<!DOCTYPE ルート要素名 [ ....1)
要素型宣言 ....2)
属性リスト宣言 ....3)
実体宣言 ....4)
記法宣言 ....5)
]> ....1)
1)DOCTYEP 宣言
文書型宣言の 最初に DTD を指定する。
DTD の指定するには、「内部サブセット」と「外部サブセット」の二種類野指定方法がある。
(1)内部サブセットの指定
XMLインスタンスと同一のファイルで DTD を記述する指定である。
「要素型宣言」や「属性リスと」を DOCTYPE宣言の中に直接書き込む。
----------- 例 -----------------------------------------
<!DOCTYPE memo [
<!EMEMENT memo(title, header, subject) >
<!ELEMENT title(#PCDATA) >
...............
<!ATTLIST importace level (high|mddle|low) "middle" >
]>
(2)外部サブセット
あらかじめ作成された DTD ファイルをへの参照を URL で指定する。
----------- 例 -------------------------------------
<!DOCTYPE memo SYSTEM "memo.dtd" >
2)要素型の宣言 (ELEMENT)
XMLインスタンスで使用する要素名と要素の階層構造を定義する。
[書式]
<!ELEMENT 要素名 内容モデル >
[例]
<!ELEMENT title (#PCDATA) >
#PCDATA はテキストを表すキーワード
title はテキストを内容として持つ、要素名
3)内容モデル
内容モデルの書き方には、次の種類がある。
(1)要素内容
子供となる内容が要素のみの場合。
(a)要素が順番に現れる場合
<!ELEMENT x(a,b) >
インスタンスは
<x>
<a> ......... </a>
<b> ........ </b>
</x>
(b)どちからの要素が現れるばあい
<!ELEMENT x(a|b) >
インスタンスは
<x>
<a> ......... </a>
</x>
または
<b> ........ </b>
</x>
(c)出現回数を表現する場合
<!ELEMENT x(a) > a は必ず一回現れる
<!ELEMENT x(a?) > a は 0 回 もしくは 一回 現れる
<!ELEMENT x(a+) > a は 一回以上現れる
<!ELEMENT x(a*) > a は 0 回以上、何回でも現れる
(d)出現順序と回数を組み合わせて表現する場合
------ 例 1 --------------------------
<!ELEMENT x(a,(b|c)*) >
インスタンスは
<x>
<a> ....... </a>
</x>

<x>
<a>........</a>
<b>........</b>
</x>

<x>
<a>........</a>
<c>........</c>
</x>

<x>
<a>.......</a>
<c>.......</c>
<b>.......</b>
</x>

-------- 例 2----------------------
階層構造の場合は順番に書く。

<!ELEMENT docname (suba | subb)* >
<!ELEMENT suba (a | b)* >
<!ELEMENT subb (a , b) >
インスタンスは
<docname>
<subb>
<b>......</b>
<a>......</a>
<b>......</b>
</subb>
<suba>
<a>......</a>
<b>......</b>
</suba>
</docname>

(2)混合内容
子供となる要素にテキストが存在し、テキスト中に他の要素が混じることもある。
[形式]
<!EMELENT x (#PCDATA | a | b | ...... )* >
#PCDATA を必ず混合内容の最初に書く。
[例]
<!ELEMENT p (#PCDATA | emph )* >
インスタンスは
<p>
この住所録は
<emph>
社外持ち出し禁止
</empth>
です。
</p>
内容がテキストだけの場合は
<!ELEMENT x #PCDATA >
(3)空要素
子供となる要素が無い場合。
[形式]
<!ELEMENT x EMPTY >
インスタンスは
<x> </x> または
<x/>
(4)任意要素
テキストを含む DTDの要素型宣言で宣言された要素なら、直下の子供要素としてどんな
順番でも書ける。
[形式]
<!ELEMENT x ANY >
ANY は (#PCDATA/a/b/c/...../x/y/z)* と同じ。a,.....,z は要素
4)属性リスト宣言 (ATTLIST)
要素が持つことのできる属性を定義する。属性を持たない要素については、記述する必要
はない。また同じ要素に、複数の属性を持たせることもできる。
[形式1]
<!ATTLIST 要素名 属性名 属性値の候補 "既定値" >
既定値は、デフォルトの値である。
[形式2]
<!ATTLIST 要素名 属性名1 属性値の候補 "既定値"
属性名2 属性値の候補 "既定値" >
[例]
<!ATTLIST report security (high|low) "high" segnum NMTOKEN #REQUIED >

(1)データ型による属性値の候補の指定
データ型により、属性値として用いる文字を制限する。
--------------------------------------------------------------------------------
データ型 意味 書き方
--------------------------------------------------------------------------------
CDATA 文字データ 任意の文字を使える
ID 識別子 名前の形で書く
IDREF 識別子参照値 名前の形で書く
ID型の属性で指定された
識別子への参照値
IDREFS 複数のIDREF の属性値 複数の名前を空白で区切って書く
NMTOKEN 名前トークン 名前において2文字目以降に使える文字で書ける
NMTOKENS 複数の名前トークン 複数の名前トークンを空白で区切って書く
ENTITY 実体参照値 NMTOKEN 型で書く
ENTITYS 複数の実体参照値 複数の名前を空白で区切って書く

[名前で使用できる文字]
先頭の文字 Letter クラスも文字
_ (アンダースコア)
:
2番目以降 上の文字
Digitクラス文字
. (ピリオド)
- (ハイフォン)
[属性値の省略指定]
#REQUIRED 必ず属性値を指定すること
#IMPLIED 属性値は省略してもよい
#FIXED DTD 内で、#FIXED に続けて記述された文字のみ指定可能である。
(a)CDATA 型 の例
<!ATTLIST homepage expl CDATA #IMPLIED >
インスタンスは
<homepage expl="このホームページは.....">
.....
</homepage>
(b)ID, IDREF型の例
<!ELEMENT item (#PCDATA) >
<!ATTLIST item id ID #REQUIRED >
<!ELEMENT itemref EMPTY > itemref は、空要素
<!ATTLIST itemef refid IDREF #REQIRED >
インスタンスは
<item id = "A" > 山田 </item>
<item id = "B" > 田中 </item>
......
<caution> なお <itemref refid = "A" />は部長です。</caution>
<caution> なお <itemref refid = "B" />は課長です。</caution>
refid = "A" によって エレメント "山田" を直接参照する。
refid = "B" は エレメント "田中" を直接参照する。

(c)IDREFS 型の例
<!ATTLIST item id ID #REQUIRED >
<!ATTLIST itemref refid IDREFS #REQUIRED >
インスタンスは
<item id = "A" > 山田 </item>
<iterm id = "B" > 田中 </iter>
..........
<caution> なお <itemref refid = "A B" /> は社員です。</caution>
refid = "A B" で、エレメント "山田" と "田中" を参照する。
(d)NMTOKEN 型 (名前トークン型) の例
名前トークンは、アプリケーションに対して、XML形式以外のものを渡したいが、特殊に
扱われる名前だけを属性として宣言するときに使う。

<!ATTLIST myfont size NMTOKEN #IMPLIED >
......
インスタンス
<myfont size = "20pt" />
(e)ENTITY 型 (実体型) の例
詳しくは、 6)実体宣言を 参考にすること。

<!ATTLIST fig file ENTITY #REQUIRED >
<!ENTITY figA SYSTEM "fig1.jpg" notion = "JPG" >
.....
インスタンス
<fig file = "figA" >
figA は fig1.jgp を参照している。
(2)列挙型による属性値候補の指定
データ型ではなく、具体的な値を列挙し、その中から属性値を選択できる。列挙型の
属性値は、データ型としては NMTOKEN 型になる。文字列の中に空白は含めない。
<!ATTLIST report security (high|middle|low) "high" >
5)既定値の定義方法
既定値は XML インスタンスが明示的に指定しない場合に使用する。既定値の定義方法は
次の通りである。
(1) 属性の既定値を二重引用符で指定する。
<!ATTLIST list type (ol | ul | sl) "ol" >
<!ATTLIST form method CDATA "POST" >
(2) #REQUIRED
属性値が必須であることを示す。文書要素の開始タグ内に必ず属性指定を書くので、既定
値はない。
<!ATTLIST item id ID #REQUIRED >
インスタンス
<item id = "A" > 芳之内 </item>
<item id = "B" > 田中 </item>
<item> 駄目之駄目尾 </item> これはダメ id がない
(3) #IMPLIED
属性画省略されると、アプリケーションに属性値は渡されない。

<!ATTLIST header shortname CDATA #IMPLIED >
インスタンス
<header> XML </header> shortname はなくても良い
(4) #FIXED と二重引用符で囲った属性値の併用
#FIXED キーワードで、属性値は固定される。

<!ATTLIST form method CDATA "post" >
インスタンス
<form method = "onlypost" > "post" のみが許される "onlypost" はダメ
6)実体宣言 (ENTITY)
XML文書の中で、複数のファイルや、置換文字列を、実体として使用するための宣言。
[書式]
&実体名;
(1)実態宣言の種類
(a)内部実態 置換文字列の実態宣言のこと。
(b)外部実態 外部に存在するファイルの実体宣言のこと。
(2)置換文字列 の実態宣言 (内部実体)
[書式]
<!ENTITY 実態名 "置換文字列" >
<!ENTTIY W3C "World Wide Web Consortium" >
内部実体では、さらに別の実体を参照することができる。
<!ENTITY W3Cexpl "W3C は 、&W3C;の略です。" >
これは、
<!ENTITY W3Cexpl "W3C は、World Wide Webの略です。" >
と同じである。
(3)システム識別子を使った実体宣言
URI (Uniform Resource Identifier)によって表される、システム識別子を使って宣言する。
[書式]
<!ENTITY 実体名 SYSTEM "ファイルの URL" >
[例]
<!ENTITY chapA SYSTEM "http://www.xml.org/chapterA.xml" >
(4)公開識別子(Public Identifier) を使った実体宣言
公開識別子は、ISO 等の標準化団体、業界等で広く利用することを目的として開発された
DTD や実体宣言集を特定するための表現である。フォーマル公開識別子が一般的に使用され
ている。
[書式]
<!ENTITY 実態名 PUBLIC "公開識別子" "ファイルのURL" >
[例1]
<!ENTITY xml-doc PUBLIC "-//XML-ORG//TEXT A Document of XML org //EN"
"http://www.xml.org/xml/xmlDoc.xml" >
公開識別子とシステム識別子の両方を指定するばあは、公開識別子を先に置き、
システム識別子の SYSTEM は付けない。
[例2]
<!ENTITY preface PUBLIC "-//megginson//TEXT Preface//EN" "preface.sgm" >

7)記法宣言 (NOTATION)
記法宣言は、外部のファイルとして参照する実体の記法を識別するための名前を定義する。
このために使用される名前を「記法」と呼ぶ。書き方に次の三種類がある。
<!NOTATION 記法名 SYSTEM "記法を特定するデータの URL" >
<!NOTATION 記法名 PUBLIC "公開識別子" "記法を特定するデータのURL" >
記法名の前に NDATA をつけた、実体宣言で記法を指定することもできる。
<!ENTITY 実体名 STSTEM "ファイルの URL名" NDATA "記法名" >
(1)例 1
読み込むファイルが、CGM と EPS のデータ形式で書かれている場合。
CGM:Computer Grahic Metafile
<!NOTATION EPS SYTEM "http://www.eps.org/....." >
<!NOTATION CGM PUBLIC "ISO 8632/4//NOTATION clear text encoding//EN"
"http://www.iso.ort/......." >
(2)CGM で書かれたファイルを実体宣言する場合
<!NOTATION CGM PUBLIC "ISO 8632/4//NOTATION clear text encoding//EN"
"http://www.iso.ort/......." >
..........
<!ATTLIST fig file ENTITIY #REQUEST >
........
<!ENTITY figA SYSTEM "http://www.xml.org/data/figA.ogm" NDATA "CGM" >
.......
インスタンス
<fig file = "figA" >

3ー2。DTD 演習
2ー9。演習で作成したファイルの DTD を作成せよ。