- - PR -
DBにinsertするxmlデータについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-02-20 15:30
はじめまして。xml歴2週間で思いっきり壁にブチあたってます。 DBにinsertするxmlデータ&DTDについて教えてください <?xml version = '1.0' encoding = 'Shift_JIS'?> <!DOCTYPE ROWSET SYSTEM "person.dtd"> <ROWSET> <ROW> <name>山田太郎</name> <job>会社員</job> <syokusyu>プログラマ</syokusyu> </ROW> </ROWSET> でDTDが <!ELEMENT name (#PCDATA)*> <!ELEMENT job (#PCDATA)*> <!ELEMENT syokusyu (#PCDATA)*> <!ELEMENT ROW (SYO,SETSU,KOU)> <!ATTLIST ROW num CDATA #REQUIRED > <!ELEMENT ROWSET (ROW)*> だとうまくいくのですが、ROW以下の階層をもう一段深くするとうまく行きません <ROWSET> <ROW> <name>山田太郎</name> <job>会社員 <syokusyu>プログラマ</syokusyu> </job> </ROW> </ROWSET> DTD↓ <!ELEMENT name (#PCDATA)*> <!ELEMENT job (#PCDATA|syokusyu)*> <!ELEMENT syokusyu (#PCDATA)*> <!ELEMENT ROW (SYO,SETSU,KOU)> <!ATTLIST ROW num CDATA #REQUIRED > <!ELEMENT ROWSET (ROW)*> とやっても <ROWSET> <ROW> <name>山田太郎</name> <job>会社員</job> <gyomu> <syokusyu>プログラマ</syokusyu> </gyomu> </ROW> </ROWSET> DTD↓ <!ELEMENT name (#PCDATA)*> <!ELEMENT job (#PCDATA)*> <!ELEMENT gyomu (syokusyu)*> <!ATTLIST gyomu num CDATA #REQUIRED > <!ELEMENT syokusyu (#PCDATA)*> <!ELEMENT ROW (SYO,SETSU,KOU)> <!ATTLIST ROW num CDATA #REQUIRED > <!ELEMENT ROWSET (ROW)*> と書いてもうまく行きません。 ちなみにテーブルはは CREATE TABLE PERSON ( name VARCHAR2, job VARCHAR2, gyomu VARCHAR2 ) です。 ROW以下の階層を深くするときの、記述方法を教えてください。 (そもそも、ROW以下の階層を深くすることは可能ですか?) よろしくお願いいたします。 |
|
投稿日時: 2002-02-20 16:18
井上です。
どちらのケースも、ROW 要素と、その下位の name 要素と job 要素、gyoumu 要素 (3 番目の場合) の親子関係を宣言する ELEMENT 宣言が抜けていませんか ? 複数の階層構造を持つ要素を宣言するときは、ルート要素から順番に ・下位の要素の存在を宣言 ・宣言された下位要素のそれぞれについて、さらに下位要素があればそれを宣言、ない場合は #PCDATA を宣言 というサイクルを繰り返して、最終的にすべて #PCDATA で行き止まりになるまで続ける必要があります。 _________________ www.kojii.net |
|
投稿日時: 2002-02-20 17:00
早速の回答ありがとうございます。
>どちらのケースも、ROW 要素と、その下位の name 要素と job 要素、gyoumu 要素 (3 番目の場合) の親子関係を宣言する ELEMENT 宣言が抜けていませんか ? <!ELEMENT ROW (SYO,SETSU,KOU)>の行のことですね。 すみません、正しくは 上の例の場合:<!ELEMENT ROW (name,job,syokusyu)> 下の例の場合:<!ELEMENT ROW (name,job,gyomu)> ですね。 元は、違うデータでテストしていたのですが、こちらに投稿する際に上記のような例に変更して、その時の変更もれです。 その後調べてみて http://www.atmarkit.co.jp/fxml/rensai/xdk05/xdk05.html で<ROW>以下は1階層しか置けないことがわかりました。 XSLTを使用すればなんとかできるのかもしれないのですが、まだXSLTがよくわかっていないので、実現できるのかどうか闇の中というかんじです。 回答ありがとうございました。心から感謝!です。 |
1