|
XML見習所
XML文書の構造<DTD>
■DTDを記述する
●文書宣言の中のDTD:内部サブセット
<!DOCTYPE ドキュメント名[
<!ELEMENT エレメント名>
] > |
●外部のファイルのDTD:外部サブセット
<!DOCTYPE ドキュメント名 SYSTEM "ファイル名.dat"> |
外部サブセットを使う場合は、「SYSTEM」というキーワードを指定します。(外部ファイルの内容は、内部サブセットと同様です)
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> |
ISOなどで、規格化されている標準的なDTDを使う場合は、「PUBLI|C」というキーワードを指定します。
●外部のファイルと内部宣言のDTD
<!DOCTYPE ドキュメント名 SYSTEM "ファイル名.dat"[
<!ATTLIST 追加項目 (A|B) "B">
...
]> |
外部サブセットに加えて、内部サブセットを追加する形で複数のDTDを扱えます。この際、優先されるのは、先に処理される内部サブセットです。
このときに、外部サブセットを無視しても良いことが明らかなときは、XML宣言で「standalone」を「yes」にします。
■要素の回数と順序指定
●要素型宣言:
XML文書中に要素や文字データがどのように現れるのかを<!ELEMENT...>という指定の中に書きます。
<!ELEMENT 要素A(要素1,要素2,要素3...)> |
一種類の要素については、一つの要素型宣言だけ記述します。要素の内容として記述されるものを、順に()内に記述します。これを内容モデルといいます。
●要素の現れる回数の指定
要素の中に別の要素が現れる場合は、次のような指定をします。
記号 |
意味 |
無指定 |
要素は一回現れる |
+ |
要素は一回以上現れる |
* |
要素は0回以上現れる |
? |
要素は0回または、一回現れる |
<!ELEMENT 親(子?)> → |
<親>
<子>長男</子>
</親> |
タグの要素としてクラスで指定します。→<タグ class="クラス名">
●要素の現れる順序の指定
要素の中に別の要素が現れる順序は「,」「|」と言う記号で表します。「,」記号は要素が順番に現れることを表します「|」は、要素の中のいずれか一つが現れることを表します。
記号 |
意味 |
, |
要素は順番に現れる |
| |
要素はいずれか一つが現れる |
<!ELEMENT 親(子1,子2,子3)> → |
<親>
<子1>長男</子1>
<子2>次男</子2>
<子3>三男</子3>
</親> |
<!ELEMENT 親(子1|子2|子3)> → |
<親>
<子2>次男</子2>
</親> |
■その他のようその取り決め方
●要素の中に文字データがある場合
<!ELEMENT 要素 (#PCDATA)> |
<要素>内容</要素> |
●その他の要素がある場合
<!ELEMENT 画像 EMPTY> |
<画像/> |
●要素の中にどんなものでもいれられる場合
<!ELEMENT 要素 ANY> |
<要素>内容<要素>内容</要素></要素> |
■属性について取り決める
●属性リスト宣言
この指定は、「「A」要素に「B」属性をもたせ、その値を「0」または、「1」とする。指定しなかった場合は、「1」 とみなす。」となります。
●属性の値の種類
・指定がどちらか二つのうち一つ
・値が文字データの場合
指定 |
意味 |
CDATA |
文字データ |
ID |
文書内でただ一つの値 |
IDREF,IDREFS |
ID型の値 |
ENTITY,ENTITIES |
実体名 |
NMTOKEN,NMTOKENS |
最初の文字が数値でも良い |
NOTATION |
記法名 |
●属性のデフォルト値を決める
指定 |
意味 |
"デフォルト値" |
属性値を省略したときは、デフォルト値となる |
#REQUIRED |
属性値を省略することはできない |
#IMPLIED |
属性値を省略したときは、何の値も渡されない |
#FIXED"デフォルト値" |
属性値をデフォルト値以外にするとエラーになる |
■実体について取り決める
●実体参照
特殊な記号などのほかにも、文字列やファイルなどのデータが表されているものを、広く実体(エンティティ)と呼んでいます。
DTDでは、自分で実体を取り決めておき、その実体を使う(参照する)ことができます。これを実体宣言といいます。
実体は、文字列(内部実体)、またはファイル(外部実体)も指定できます。
●一般実体とパラメータ実体
XML文書本体の中で参照される通常の実体を一般実体といい、DTDの中でも参照することができる実体を、パラメータ実体といいます。
<!ENTITY %実体名 "変換される文字列">
<!ELEMENT タイトル (%実体名;)> |
●解析対象実体と、解析対象外実体
XML文書の一部となるテキストデータ(解析対象実体)、画像・音声などのデータ(解析対象外実体)の二つがあります。
■他の形式のデータを処理する
●記法宣言
画像ファイルなどXMLを処理するアプリケーションでは扱えない形式のファイルを処理する準備をすることができます。
<!NOATTION 記法名 PUBLIC "ISO 12083;1994//NOTATION TIFF-1//EN" http://..... > |
<!ATTLIST 画像 種類 NOATTION "tiff"> → |
<画像 種類="tiff">file</画像> |
■DTDを切り替える
●条件セクション
INCLUDE:その間に書かれたDTDの指定が処理されます。
IGNORE :その間のDTDの指定は無視して処理されます。
<!ENTITY %S1 "IGNORE">
<!ENTITY %S2 "INGLUDE">
<![%S1;[
<!ELEMENT...>←処理されない
]>
<![%S2;[
<!ELEMENT...>←処理される
]> |
■タグが重複しないように設定する
●名前空間
いろいろなタグを混在させるときに、要素や属性の名を管理する仕組みです。URIを指定することによってタグが混在していても区別できるようにしています。
●プレフィックス
要素名や属性にプレフィックスをつけ、そこを名前空間対照内とする
<njg:要素 xmlns:njg="http://....">
<njg:要素名>内容</njg:要素名>←適応
<要素名>内容</要素名>→非適応
</njg:要素> |
|