DTD

Document Type Definition(DTD)
XML1.0仕様の中で定義されている

  • 要素型宣言
    要素の名前、内容(文字データ、子要素)を定義する

  • 属性リスト宣言
    要素に含まれる属性の名前、型、デフォルト値を定義する

  • 実体宣言
    XML文書内やDTDの内部から参照される実体について、その実体参照名と、置換文字列かリソースの場所(URI)を定義

  • 記法宣言
    解析対象外実体などで用いられる外部リソースのフォーマットを定義

1
2
<!ELEMENT name (#PCDATA)>
<!ELEMENT user (#PCDATA)>
  • 外部サブセットDTD
    1. 複数のXML文書から利用可能
    2. 複数のシステムで共通のDTDを使用可能
    3. 汎用的に使用できるため、特定用用途向けの標準言語の定義になどにも使用される

※外部サブセットDTDの場合は「DOCTYPEの宣言がいらない」

  • 内部サブセットDTD

    1. そのXML文書の文書本体の構造を定義する
    2. DTDとXML文書を一つにまとめることができる
  • 要素型宣言
    要素に関する定義

    1. 文字列型データ(#PCDATA)
    2. 子要素(子要素名、子要素名・・・)

記述パターン

1
2
3
<!ELEMENT polidog_works(title,link,test) //子要素を指定
<!ELEMENT title(#PCDATA)> //文字データののみが含まれる場合
<!ELEMENT name(#PCDATA|polidog)> //文字データと要素の両方が含まれている場合

  • 子要素の指定に関する出現順序

    • シーケンスの場合
      (title,link,test)と並んでいていたら、その順序で出てくる

1
2
3
4
<polidog_works>
 <a>test</a>
 <b>btest</b>
</polidog_works>
*   チョイス  
    (title|link|test) なかからどれかを選択?  
    親要素&#8212;  
    |&#8211;title  
    例</p> 
1
2
3
<polidog_works>
 <a>test</a>
</polidog_works>
    または
1
2
 <b>test</b>
</polidog_works>
    また『(a,b)|(c,d)』や『(a|b),(c|d)』などが出てくる。  
    時間があったら例を書こう・・・</li> 
    *   文字データと子要素  
        (#PCDATA|子要素1|子要素・・・)  
        必ずチョイスモデルで、出現回数は「*」になる。  
        #PCDATAは必ず先頭に書かなければならいない。</ul> </li> </ul> 
    *   子要素の指定に関する出現回数 
        *   *  無制限
        *   +  1~無制限
        *   ?  1or 0
        *   半角空白 1
        例
1
2
3
4
<名刺>
 <個人情報>aaaa</個人情報>
 <個人情報>bbbb</個人情報>
</名刺>

もしELEMENTの指定で(個人情報)のあとに?だったらたぶんダメってことだと思います。2回でてきてしまっているから。
また上記の出現順序と組み合わせて『(a*)』なども出てくる ぶっちゃけあんまり理解できていないわぁー。。

カテゴリ

comments powered by Disqus