古典文学とXML(万葉集の構造を考えましょ)

2000年10月22日(日)更新


■「万葉集テキスト」のDTDを考えましょう: その2「属性」の定義の仕方

さらら: 今回は「属性」の書き方を教えてくれるんでしょ。

たけち: うん。ここでもう一度「歌の属性」にはどんなものがあるかを図で確認してみようね。黄色で囲ったところだよ。

「歌」の属性

さらら: あっ、そうそう。思い出したわ。。。。えっと・・・歌の種類は、雑歌や相聞歌があって、歌番号は1から4516で、作者名は、たけちとか私とか・・・ (^ ^;

たけち: そうそう。さららが言ったようなことを次の図にまとめておくね。それぞれの属性がどんな種類なのかを見ておかないとXMLとして定義できないんだ。

さらら: 種類って?

たけち: (任意の)文字列とか、ある決まった情報の並びの中から選べる「列挙」とかの種類のことで、XMLでは、「データ型」って言われているんだよ。

さらら: でも、図を見ると「歌の種類」も「作者」も単なるテキストで変わらないように見えるんだけど。

たけち: そうなんだけど、「歌の種類」はごく限られているだろ? だから、「雑歌・相聞歌・・・」の中から選ぶように「列挙型」にしておくと良いよね。こうしておくとたとえば、XMLテキストの「歌の種類」の記載に間違いがないかどうかプログラムで判断できるよね。

さらら: あっ、そっか・・・

「歌」の属性のデータ型

■XMLテキストに出てくる属性をあらわす「属性宣言

たけち: 「要素宣言」は次のように書くんだ。

<!ATTLIST 要素名 属性名 属性のデータ型 デフォルト値>

たけち: どの「要素」にはどんな名前の「属性」があって、それはどんな「データ型」なのか、っていうことをこれで定義しているんだよね。

さらら: 「デフォルト値」ってなぁに?

たけち: DTDに沿って作成された実際のXMLテキストで、その属性が書かれていなかったときに、"この属性が書かれていなかったときにはこの「デフォルト値」が書かれていると思ってください"っていう意味なんだ。

さらら: へぇ〜。そうなんだ。じゃあ、この「デフォルト値」を持つ「属性」だったときは、XMLテキストに書かなくていいのね。

たけち: じゃあ、どんな風に書くのかを次に載せておくね。

<!ATTLIST 歌 歌番号 ID #REQUIRED>
<!ATTLIST 歌 歌の種類 (雑歌 | 挽歌 | 相聞歌 | ・・・) #REQUIRED>
<!ATTLIST 歌 作者名 CDATA #REQUIRED>
<!ATTLIST 歌 贈答者名 CDATA #IMPLIED>
<!ATTLIST 歌 季節 (春 | 夏 | 秋 | 冬) "春">
<!ATTLIST 歌 ・・・・・         >

  • ID: XMLテキスト内で唯一のものとして識別する情報
  • #REQUIRED: XMLテキストでこの属性を必ず記載すること
  • #IMPLIED: XMLテキストでこの属性は書かなくてもよい
  • CDATA: 文字列

さらら: う〜ん。。。具体的にはどうなるの?

たけち: じゃあ、額田の歌の例を載せておくね。

「歌」の例

たけち: この「歌」をXMLテキストにしたときの例は次のようになるんだ。

<歌 歌番号="0020" 歌の種類="雑歌" 作者名="額田王"
贈答者名="大海人皇子" 状況="狩猟" 土地="蒲生野">
<原文>茜草指 武良前野逝 標野行
野守者不見哉 君之袖布流</原文>
<読み>あかねさす紫野行き標野行き
野守は見ずや君が袖振る</読み>
</歌>

さらら: あっ、やっと分かった気がするわ。

たけち: よかった。(^ ^;

→ 次回は万葉集のDTDサンプルです。