XMLファイルの属性リスト宣言

このQ&Aのポイント
  • XMLファイルの属性リスト宣言について解説します。
  • XMLファイルの属性リスト宣言の例として、製品番号、名前、SKUの属性と要素について説明します。
  • また、製品番号はID型、名前は文字データの要素であること、SKUは倉庫と単価の属性を持つことを示します。
回答を見る
  • ベストアンサー

属性リスト宣言

以下がxmlファイルです。 --------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE 製品管理 SYSTEM "s1.dtd"> <製品管理> <製品 製品番号="001"> <名前>シューズ</名前> <SKU 倉庫="ABC" 単価="10000" /> </製品> </製品管理> --------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <!ELEMENT 製品管理 (製品)*> <!ATTLIST 製品 製品番号 ID #REQUIRED> <!ELEMENT 製品 (名前|SKU)*> <!ELEMENT 名前 (#CDATA)*> <!ELEMENT SKU entity> <!ATTLIST SKU 倉庫 NMTOKENS #REQUIRED SKU 単価 CDATA #REQUIRED> --------------------------------------------- 補足 製品番号 属性:ID型 名前   要素:文字データ SKU    空 倉庫   属性:NMTOKENS型 単価   CDATA型 この外部サブセットではダメでした。 ヒントでも何でもお待ちしております。m(._.)m

noname#105606
noname#105606
  • XML
  • 回答数3
  • ありがとう数13

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>#1 はずれ。 http://www.w3.org/TR/xml/#elemdecls 'empty'は認められない。正しくは'EMPTY' >質問文 <!ELEMENT 名前 (#CDATA)*> 同様に、#CDATAではなく#PCDATAが正しく、、 #PCDATA単独の時は*を付けないのが正しい。 http://www.w3.org/TR/xml/#attdecls >The Name in the AttlistDecl rule is the type of an element. >The Name in the AttDef rule is the name of the attribute. ということで、一つの属性リスト宣言中に出てくる要素名の回数は1回。 それに続いて属性名と属性値の型、デフォルト値と続きます。 したがって <!ATTLIST SKU 倉庫 NMTOKENS #REQUIRED 単価 CDATA #REQUIRED > あるいは <!ATTLIST SKU 倉庫 NMTOKENS #REQUIRED> <!ATTLIST SKU 単価 CDATA #REQUIRED> が正しいです。 ここまでを総合すると、 ===============外部DTD(Q5484519-1.dtd)=============== <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT 製品管理 (製品)*> <!ATTLIST 製品 製品番号 ID #REQUIRED> <!ELEMENT 製品 (名前|SKU)*> <!ELEMENT 名前 (#PCDATA)> <!ELEMENT SKU EMPTY> <!ATTLIST SKU 倉庫 NMTOKENS #REQUIRED 単価 CDATA #REQUIRED > ===================XMLそのもの(Q5484519-2.xml)================= <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 製品管理 SYSTEM "Q5484519-1.dtd"> <製品管理> <製品 製品番号="001"> <名前>シューズ</名前> <SKU 倉庫="ABC" 単価="10000" /> </製品> </製品管理> となります。なお、文字符号化方式とファイル名はこちらの都合で弄っています。 ================ 説明については やさしく読むXML 1.0勧告 http://www.atmarkit.co.jp/fxml/indexes/index_col.html#xe13 や、その序盤で出てくる EBNFの記事で学んでください。 http://www.atmarkit.co.jp/fxml/ddd/ddd004/ddd004-bnf.html ================= ただ…個人的には スキーマを作るメモのつもりでインスタンスを書くならともかく、 スキーマの無いXMLのインスタンスからスキーマを書け、というのは嫌いだ。 ひょっとしたら <!ELEMENT 製品管理 (製品)> かもしれないのを、根拠も無く、複数の製品要素が登場する、と決め付けているから。

noname#105606
質問者

お礼

回答ありがとうございます。

その他の回答 (2)

回答No.3

あ。良く考えたら問題がおかしい気がする。ちょっと課題出している人に聞いてくれる? >【Values of type ID MUST match the Name production.】 A name MUST NOT appear more than once in an XML document as a value of this type; i.e., ID values MUST uniquely identify the elements which bear them. #IEがエラー吐かなかった

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず <!ELEMENT SKU entity> は <!ELEMENT SKU empty> でしょうね.

noname#105606
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • XMLの属性について。

    XML,DTD,XSLの勉強をしています。 最終的に写真が表示され、その下に「PM 7:30」もしくは「19:30」と表示するようなページを作ろうと思っているのですが、属性の意味がよく理解できておらず下の3つのうちどれを採用したらいいか悩んでいます。どれが正解というか、どれを選ぶのがいい方法なんでしょうか? また、その理由(属性について)教えて頂けないでしょうか?具体的には次の2つが疑問点です。 1. 写真を表示するのに、写真のアドレスを属性にする理由はなんとなく分かるような気がするにですが、いまいちはっきりした理由が理解できていません。 DTDを<!ELEMENT アルバム (#PCDATA) >にして、XMLを<アルバム>0101.jpg</アルバム>でも写真の表示は可能なのでしょうか? 2. 一番の疑問点なのですが、時間を(#PCDATA)にするのか、EMPTYにして属性で CDATA にするべきなのかがよく分かりません。 (「分」も属性値にしてしまった方がいいのでしょうか?) (xslは、まだ作成していません。) よろしくお願い致します。 具体例↓ 3つ 「arubamu.dtd」 <?xml version="1.0" encoding="Shift_JIS"?> <!ELEMENT アルバム (時,分) > <!ATTLIST アルバム file CDATA #REQUIRED > <!ELEMENT 時 EMPTY > <!ATTLIST 時 ampm (am|pm) "am" > <!ATTLIST 時 time CDATA #REQUIRED > <!ELEMENT 分 (#PCDATA) > 「アルバム.xml」 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE アルバム SYSTEM "arubamu.dtd"> <アルバム file = "0101.jpg" > <時 ampm = "pm" time = "7" /> <分>30</分> </アルバム> ------------------------------------------------------------------ 「arubamu2.dtd」 <?xml version="1.0" encoding="Shift_JIS"?> <!ELEMENT アルバム (時) > <!ATTLIST アルバム file CDATA #REQUIRED > <!ELEMENT 時 EMPTY > <!ATTLIST 時 ampm (am|pm) "am" > <!ATTLIST 時 time CDATA #REQUIRED > <!ATTLIST 時 minute CDATA #REQUIRED > 「アルバム2」 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE アルバム SYSTEM "arubamu2.dtd"> <アルバム file = "¥0101.jpg" > <時 ampm = "pm" time = "7" minute = "30" /> </アルバム> ------------------------------------------------------------------- 「arubamu3.dtd」 <?xml version="1.0" encoding="Shift_JIS"?> <!ELEMENT アルバム (時,分) > <!ATTLIST アルバム file CDATA #REQUIRED > <!ELEMENT 時 (#PCDATA) > <!ATTLIST 時 ampm (am|pm) "am" > <!ELEMENT 分 (#PCDATA) > 「アルバム3.xml」 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE アルバム SYSTEM "arubamu3.dtd"> <アルバム file = "0101.jpg" > <時 ampm = "pm">7</時> <分>30</分> </アルバム>

    • ベストアンサー
    • XML
  • DTD作成について

    以下のXMLをDTDに使用としています。 B以降の設定の方法が分かりません。 よろしくお願い致します。 XML - <Aブロック> - <A a番号="01" b="xxxx" c="x"> <B 番号="1" d="xxxx" /> <B 番号="2" d="xxxx" /> <B 番号="3" d="xxxx" /> </A> DTD <!ELEMENT Aブロック (A*)> <!ELEMENT A EMPTY> <!ATTLIST A a CDATA #REQUIRED> <!ATTLIST A b CDATA #REQUIRED> <!ATTLIST A c CDATA #REQUIRED>

    • ベストアンサー
    • XML
  • 外部サブセットについて

    以下がxmlファイルです。 --------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE 製品一覧 SYSTEM "s1.dtd"> <製品一覧> <タイトル>製品リスト</タイトル> <製品> <名前>シューズ</名前> <単価>10000</単価> <カテゴリ>靴</カテゴリ> <カテゴリ>カジュアル</カテゴリ> <補足>注文は1 ダース単位</補足> </製品> <製品> <名前>サンダル</名前> <単価>5000</単価> <カテゴリ>靴</カテゴリ> </製品> </製品一覧> --------------------------------------------- 上記のxml文書に文書型宣言を記述して、作成したDTDを外部サブセットとして適用して下さい。とのことです。 私が書いた外部サブセット(s1.dtd) --------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <!ELEMENT 製品一覧 (製品*)> <!ELEMENT 製品 (タイトル,名前,単価,カテゴリ,補足)> <!ELEMENT タイトル (#PCDATA)> <!ELEMENT 名前 (#PCDATA)> <!ELEMENT 単価 (#PCDATA)> <!ELEMENT カテゴリ (#PCDATA)> <!ELEMENT 補足 (#PCDATA)> --------------------------------------------- この外部サブセットではダメでした。 勉強する気は、あるのですが、教科書見てもわからず、先生に聞いても理解出来ず、友達もさっぱりわかってないみたいで... ヒントでも何でもお待ちしております。m(._.)m

    • ベストアンサー
    • XML
  • XMLのDTDによる文書型宣言の記述の仕方

    初心者ですが簡単なXMLのDTDによる文書型宣言の記述の仕方がよく分かりませんので教えてください。 XMLでは同じ要素名の要素でも親が異なる場合は別の要素として扱うことができます。例えば、要素Bの子の要素Dと、要素Cの子の要素Dがある場合、要素Bの子の要素Dには属性bdを、要素Cの子の要素Dには属性cdを定義できます。この場合にDTDによる文書型宣言を記述する場合、要素Bの子の要素Dと、要素Cの子の要素Dをどのように記述するのでしょうか。 例えば <A>  <B>   <D bd="123"></D>  </B>  <C>   <D cd="abc"></D>  </C> </A> というようなXMLインスタンスがあった場合 この場合のDTDによる文書型宣言の記述は <!DOCTYPE A [  <!ELEMENT A (B,C)>  <!ELEMENT B (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D bd CDATA #REQUIRED>  <!ELEMENT C (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D cd CDATA #REQUIRED> ]> と記述しましたがこれでは駄目でした。2つ目の要素DのELEMENTの宣言で、要素Dはすでに宣言されているというエラーになるのです。上記の例の場合にDTDによる文書型宣言はどのように記述するのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • FirefoxでのXML外部実体参照について。

    FirefoxでのXML外部実体参照について。 XMLをイチから勉強しているのですが、外部実体参照のところで分からなくなってしまいました。 <!ENTITY [要素名] SYSTEM "[ファイルパス]"> で外部ファイルを読み込もうとしているのですが、これがIE8なら期待通りに(外部ファイルを読み込んで)動いてくれるのですが、Firefox3だと動いてくれません。 ソースは以下の通りです。 ----------------------------------------- [members.xml] <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE members SYSTEM "members.dtd" [ <!ENTITY member1 SYSTEM "member1.xml"> ]> <members> &member1; </members> ----------------------------------------- [members.dtd] <!ELEMENT members (member)*> <!ELEMENT member (name, sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST member id ID #REQUIRED> ----------------------------------------- [member1.xml] <?xml version="1.0" encoding="Shift_JIS"?> <member id="0001"> <name>Tarou.Nihon</name> <sex>Male</sex> </member> ----------------------------------------- FirefoxとIEの間に何か違いがあるのでしょうか。 あと、<!ELEMENT>ですが、 <!ELEMENT members (member)*> と書くのと、 <!ELEMENT members (member*)> と書くのでは何か違いがあるのでしょうか。 以上2点、詳しい方がいればお教え下さい。宜しくお願い致します。

    • ベストアンサー
    • XML
  • xml宣言の文字コード変更

    xhtmlとcssでのコーディングを行った際、途中で「UTF-8」で作成してと言われました。 そのため、作成していたコードの冒頭をshift_jisからUTF-8にかきかえてみたところ、文字化け。ブラウザの表示をUTF-8に変えても化けたままなので、作業にならんと宣言をshift_jisに戻しました。 が、書き換えても文字化けが直りません。 宣言自体を消して保存しなおしたりもしたのですが、以前文字化けたままです。 テキストエディタで見るとちゃんとshift_jisになっているのですが、 これはどうすれば直るものなのでしょうか? 手を入れたのは以下の二行になります。(抜き出してるだけですので実際はheadタグ等を挟んでいます) 初期 <?xml version="1.0" encoding="shift_jis"?> <meta http-equiv="content-type" content="text/html; charset=shift_jis" /> ↓ UTF-8に書き換え <?xml version="1.0" encoding="UTF-8"?> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> ご教授ねがいます。

  • ホームページビルダー encoding

    ホームページビルダーでホームページをW3Cで作っていますが、 どうしても、 <?xml version="1.0" encoding="Shift_JIS"?>のencodingを UTF-8にしたいのに、変わってくれません。 UTF-8にしても、保存すると勝手にShift_JISになってしまいます。 書き換えることはできますか?

  • XmlをDetaSetに読み込んだ場合の属性値所得について

    初めて書き込みさせていただきます。 ただいまxmlをDetaSetに読み込ませ、そこから指定した属性値を所得し DataGridViewに表示しようとしているのですが思うようにいかず困っています。できればご享受お願いいたします。 以下、使用するxmlのイメージです。 <?xml version="1.0" encoding="Shift_JIS" ?> <タグ1> <タグ2 属性21="a1" 属性22="a2"> <タグ3 属性31="b1" 属性32="b2"></タグ3> <タグ4 属性41="c1" 属性42="c2"></タグ4> <タグ4 属性41="d1" 属性42="d2"></タグ4> </タグ2> <タグ2 属性21="e1" 属性22="e2"> <タグ3 属性31="f1" 属性32="f2"></タグ3> ○ <タグ4 属性41="g1" 属性42="g2"></タグ4> ○ <タグ4 属性41="h1" 属性42="h2"></タグ4> </タグ2> <タグ2 属性21="i1" 属性22="i2"> <タグ3 属性31="j1" 属性32="j2"></タグ3> <タグ4 属性41="k1" 属性42="k2"></タグ4> <タグ4 属性41="l1" 属性42="l2"></タグ4> </タグ2> </タグ1> 希望する結果: g1 g2 h1 h2 (xmlで○をつけた所の属性値のみをDataGridViewに表示) 一応現在のコード: Dim dset As New DataSet dset.ReadXml("./test.xml") DataGridView.DataSource = dset.Tables(3).DefaultView (この場合、タグ4の全ての属性値 c1~l2 が表示されてしまいます) なお環境はvb2005を使用しています。

  • xmlの宣言文をPHPで出力するには

    PHP4.3を使っています。 PHPの後にHTMLを入れて表示させようと思っていますが、HTML文の先頭にXMLの宣言文が入っており、そこでエラーになってしまいます。 <?php ・・・ ・・・ ?> <?xml version="1.0" encoding="Shift_JIS"?> <html> ・・・ </html> この1行をphpのほうにいれてprint文で打ってやればもちろんエラーはでないのですが、HTMLのほうは別な人間が作っており、できればPHPとHTMLは分離させておきたいと考えています。 どのような対処法がいいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • LoadCML

    宜しくお願いいたします。 下記のプログラムで、 set Session("ServiceInfo") = CreateObject("MSXML2.DOMDocument.3.0") Session("ServiceInfo").Async = False Session("ServiceInfo").LoadXML "<?xml version=""1.0"" encoding=""Shift_JIS"" ?>" & Session("RoeApi").ReturnXml.xml とやると、encoding属性が削除されてしまいます。 どうにかencoding属性までロードしたいのですが どなたかご教授頂けないでしょうか。

    • ベストアンサー
    • XML

専門家に質問してみよう