エンジニアのためのXMLスキーマ講座
第3回:XMLの標準スキーマ表現 DTDを「書く」
(株)日本ユニテック
竹内 理
目次
7.STEP6:属性リスト宣言を記述する
おわりに
|
STEP6:属性リスト宣言を記述する
最後に属性リスト宣言を記述していきましょう。まずどの要素に属性が必要かを考えます。
電子メールのサンプルでは、「重要度」という項目がありましたがこれは「電子メール(email)」要素の属性にしてしまいましょう。また、「添付ファイル(appending-file)」要素は実際のファイルへの参照を属性として持ちます。
次に、それぞれの属性に関して属性名、属性値の候補、デフォルト値を決める必要があります。
「重要度」属性の名前は"importance"にしましょう。「重要度」には「高」「低」の2つがあるとすると、"importance"の属性値の候補は"HIGH"、"LOW"の2つです。また、「重要度」は明示的に指定されなかった場合は「低」に設定されるとして、importance属性のデフォルト値は"LOW"となります。Importance属性を属性リスト宣言で宣言しましょう。
<!ATTLIST email importance (HIGH|LOW) "LOW">
次にappending-file要素の属性について考えましょう。この要素は添付ファイルへの参照を属性として持つわけですから属性値の候補はENTITY型ということになります。またこの属性はappending-fileに必ず指定しなければなりません。ですからデフォルト値は"#REQUIRED"となります。また、この属性の名前は"fileref"としておきましょう。以下にこの属性の宣言を示します。
<!ATTLIST appending-file fileref ENTITY #REQUIRED>
属性リスト宣言は以上で書きあがりました。
出来上がったDTDは以下のようになります。このDTDは"email.dtd"という名前の外部サブセットとして保存しましょう。
<!NOTATION FILE SYSTEM "http://www.utj.com/file">
<!ENTITY % personal-data "name,mail-address">
<!ENTITY data1 SYSTEM "http://www.utj.com/資料1.file" NDATA FILE>
<!ELEMENT email (front,body,back)>
<!ATTLIST email importance (LOW|HIGH) "LOW">
<!ELEMENT front (from,to+,cc*,bcc*,title)>
<!ELEMENT from (%personal-data;)>
<!ELEMENT to (%personal-data;)>
<!ELEMENT cc (%personal-data;)>
<!ELEMENT bcc (%personal-data;)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT mail-address (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT body (p+)>
<!ELEMENT p (#PCDATA)>
<!ELEMENT back (sign?,appending-file*)>
<!ELEMENT sign (#PCDATA)>
<!ELEMENT appending-file EMPTY>
<!ATTLIST appending-file fileref ENTITY #REQUIRED>
|
<リスト1.email.dtd>
最初に図1で示した電子メールのサンプルをemail.dtdに沿ったXMLの文書インスタンスに直すと次のようになります。
<?xml version="1.0" ?>
<!DOCTYPE email SYSTEM "email.dtd" [ ]>
<email importance="HIGH">
<front>
<from>
<name>竹内 理</name>
<mail-address>takeuchi@utj.com</mail-address>
</from>
<to>
<name>佐藤 太郎</name>
<mail-address>sato@utj.com</mail-address>
</to>
<cc>
<name>鈴木 花子</name>
<mail-address>suzuki@utj.com</mail-address>
</cc>
<title>こんにちは</title>
</front>
<body>
<p>こんにちは。</p>
<p>先日はありがとうございました。</p>
<p>新しい資料を添付いたします。</p>
</body>
<back>
<sign>Takeuchi Osamu</sign>
<appending-file fileref="data1"/>
</back>
</email>
|
<リスト2.電子メールの文書インスタンス>
おわりに
今回はDTDの「書き方」を幾つかのステップに分けて学ぶことが出来ました。非常に簡単な例ではありましたが、より複雑な構造を持つデータの場合でも同じ手順を踏んでDTDを作成することができます。
DTDの作成で重要なのは、前述したとおりSTEP2,STEP3あたりのデータの分析です。実際にDTDを書くときには非常に慎重に既存のデータを分析する必要があり、この作業は多大の時間と労力を必要とします。この問題をクリアして良いDTDを書いていくには、実践を重ねて徐々にスキルを上げていくしかありません。このように「使える」DTDを作成するのは難しいものです。
では、システムが処理しやすく、また人間が読みやすく、なおかつ実際に「使える」DTDを書けるように努力と工夫をしていきましょう。
関連サービス
XMLスキーマの策定、作成業務
|