- PR -

DTDの書き方

1
投稿者投稿内容
づめ
会議室デビュー日: 2001/12/11
投稿数: 8
投稿日時: 2001-12-11 10:54
はじめまして。づめといいます。

 今日はDTDについて質問があり書き込みをさせてもらいました。
 質問というのは、特定のタグもしくは文字列を要素に持つELEMENTのDTDの書式が判らないということです。
 具体的には、下のxmlにおいて、bookのtitleはmainとsubを持ちうるが、titleに一つしか要素を持たせない時は直接文字列で書き込んでも構わないようにしたいのです。更に下に張りつけたDTDだとエラーが出ます。
 環境はMSXML3.0で、チェックにはMSDNのXML Validatorを使っています。
 どなたかお分かりの方御教授願います。


↓books.xml↓
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE books SYSTEM "booklist.dtd">
<books>
 <book>
  <title>
   <main>
    ○○○
   </main>
   <sub>
    ●●●
   </sub>
  </title>
  <price>
   500
  </price>
 </book>
 <book>
  <title>
   <main>
    ×××
   </main>
   <sub>
    □□□
   </sub>
  </title>
  <price>
   800
  </price>
 </book>
</books>

↓books.dtd↓
<!ELEMENT books (book*)>
 <!ELEMENT book (title,price)>
  <!ELEMENT title ((main,sub)|(#PCDATA))>
   <!ELEMENT main (#PCDATA)>
   <!ELEMENT sub (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
やなぎ
会議室デビュー日: 2001/12/11
投稿数: 12
投稿日時: 2001-12-11 19:05
引用:

づめさんの書き込み (2001-12-11 10:54) より:

↓books.dtd↓
<!ELEMENT books (book*)>
 <!ELEMENT book (title,price)>
  <!ELEMENT title ((main,sub)|(#PCDATA))>
   <!ELEMENT main (#PCDATA)>
   <!ELEMENT sub (#PCDATA)>
  <!ELEMENT price (#PCDATA)>



私も初心者ですが、以下のようにすれば良いのでは?

↓books.dtd↓
<!ELEMENT books (book*)>
 <!ELEMENT book (title,price)>
  <!ELEMENT title (#PCDATA|main|sub)*>
   <!ELEMENT main (#PCDATA)>
   <!ELEMENT sub (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2001-12-11 19:19
3.2.2 混合内容
http://www.fxis.co.jp/DMS/sgml/xml/rec-xml.html#sec-mixed-content
XML の混合内容はSGML と違います。 (#PCDATA|要素名1|要素名2・・・)*
しか書けません。
<!ELEMENT title (#PCDATA|main|sub)*>
そういうことに、なっています。混合内容でも細かな構造制約を記述
できるようにすると、パーサーが重くなるし、
データなら混合内容無しでやって行けるでしょう。
対策? SGMLのソフトで検証する、DTD 以外のスキーマ言語を試す
前処理のプログラムでタグを補完してから、検証する、など
づめ
会議室デビュー日: 2001/12/11
投稿数: 8
投稿日時: 2001-12-12 10:59
有用なレスを有り難うございました。さっそく試してみます。
今後も何か質問をさせて頂くかと思いますが宜しくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)