http://www.sw.it.aoyama.ac.jp/2012/PB1/lecture7.html
© 2006-12 Martin J. Dürst 青山学院大学
Well-formed (整形):
Valid (整合):
データを種類別にまとめる:
<ELEMENT 書籍 (著者, 出版, 販売)> <ELEMENT 著者 (著者名, 住所)> ...
データを区切りなく並べる:
<ELEMENT 書籍 (著者名, 住所, 出版社, 出版年, 販売値段,...)>
複数のものがある場合、全部一つの要素でまとめた方がよい
<ELEMENT authors (author+)> <ELEMENT author (name, address,...)>
日本語の場合、<著者集>
などが使える
英文の DTD で単数形と複数形の違いに注意
要素の場合:
<ELEMENT 要素 (必須, (任意?))>
属性の場合:
<ATTLIST 要素 必須属性 CDATA #REQUIRED>
<ATTLIST 要素 任意属性 CDATA #IMPLIED>
開発途中には任意にする方が多い
任意のものは必須のものの後がよい
括弧内は自動生成可能なので省略が多い
<ELEMENT 本 (章+)> <ELEMENT 章 (節+)> <ELEMENT 節 (段落+)> <ELEMENT 段落 (#PCDATA)>
章や節をそれぞれ別の構造にしたい場合に便利
ある部分を章から節に変更したいときに不便
同じものを再利用する時:
<ELEMENT 本 (章節+)> <ELEMENT 章節 ((章節+)|(段落+))> <ELEMENT 段落 (#PCDATA)>
「章節」は入れ子になっている。情報テクノロジーで「再帰」(recursion) ともいう。
章を必ず節に分けないといけない:
<ELEMENT 章 (見出し, 節+)>
章の先頭に節に属してない部分が可能:
<ELEMENT 章 (見出し, (段落*), (節+))>
章に節が必ずしも必要ない:
<ELEMENT 章 (見出し, (段落*), (節*))>
段落の中:
<ELEMENT 段落 (#PCDATA | 図 | リスト)*>
段落の外 (e.g. HTML の <li>
, ...):
<ELEMENT 節 (段落 | 図 | リスト)*>
図などの場合には表示の時に必ずマークアップと同じ位置にする必要がない。
XML 形式の設計の時、あるデータ項目を要素にするか属性にするかが一番よく議論される点
次の項目が判断基準に
要素 | 属性 | |
---|---|---|
順番の指定 | ○ | × |
複数 | ○ | × |
構造の指定 | ○ | × |
普通の時に表示 | ○ | × |
自然言語の文書 | ○ | × |
XML で要素の順番は重要。勝手に入れ替わることはない。
<a><b/><c/><d/></a>
≠
<a><c/><d/><b/></a>
XML で属性の順番は適当。入れ替わることもある。
<a b='x' c='y' d='z'/>
= <a c='y' d='z'
b='x'/>
結論: 順番が大切なときは要素を使う。
要素は複数あっても良い:
<b/><b/><b/>
同じ名前の属性は一個しかできない:
<a b='x' b='y' b='z'/>
結論: 複数必要なときは要素を使う。
要素には内部構造がある:
属性には内部構造がない
結論: 内部構造が必要なときには要素を使用
人間が読む文書の場合に、内部構造が必要になるときがあるので、要素を使用
(例: 見出しに数式や振り仮名などが必要なとき)
要素は普段 (例えば空の CSS スタイルシートでも) 表示される。
要素ごとにスタイルを細かく設定できる。
属性は普段表示されない。スタイルも細かくは指定できない。
表示したいものは要素にした方が良い。
要素の場合、xml:lang
属性で自然言語の指定が可能
要素の場合、振り仮名など内部構造が可能
<published> <place xml:lang='ja'><ruby><rb>三田</rb><rt>さんだ</rt><ruby><place> </published>
<published place='三田' />
CD の XML データのための DTD を作成
内部 DTD を含む文書を 5月25日 (金) の 22:00 時までに Moodle に投稿
XML そのものは絶対に変更しないこと
検証を使って DTD が正しいかどうを必ず確認する
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE CDs [ ]> <!-- XML 文書そのもの -->
<!ELEMENT CDs (CD, CD)>
のではなく、<!ELEMENT CDs (CD+) >
とか)