家・車以外で、人生で一番奮発した買い物

以下が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

A 回答 (3件)

>#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 …
や、その序盤で出てくる
EBNFの記事で学んでください。
http://www.atmarkit.co.jp/fxml/ddd/ddd004/ddd004 …
=================
ただ…個人的には
スキーマを作るメモのつもりでインスタンスを書くならともかく、
スキーマの無いXMLのインスタンスからスキーマを書け、というのは嫌いだ。

ひょっとしたら

<!ELEMENT 製品管理 (製品)>

かもしれないのを、根拠も無く、複数の製品要素が登場する、と決め付けているから。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/29 21:06

あ。

良く考えたら問題がおかしい気がする。ちょっと課題出している人に聞いてくれる?

>【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がエラー吐かなかった
    • good
    • 0

とりあえず


<!ELEMENT SKU entity>

<!ELEMENT SKU empty>
でしょうね.
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/29 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報