ケース1
整形式の XML ドキュメント:
<!DOCTYPE root SYSTEM "idtest.dtd">
<root>
<book id="ID01" />
<magazine id="ID01" />
</root>
DTD:
<!ELEMENT root ANY>
<!ELEMENT book ANY>
<!ATTLIST book id ID #IMPLIED>
<!ELEMENT magazine ANY>
<!ATTLIST magazine id ID #IMPLIED>
xmllint からの出力:
$ xmllint --postvalid idtest.xml
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "idtest.dtd">
<root>
<book id="ID01"/>
<magazine id="ID01"/>
</root>
idtest.xml:4: element magazine: validity error : ID ID01 already defined
<magazine id="ID01" />
^
idtest.xml:4: element magazine: validity error : ID ID01 already defined
Document idtest.xml does not validate
ケース 2
整形式の XML ドキュメント:
<!DOCTYPE root SYSTEM "idtest.dtd">
<root>
<book book_id="ID01" />
<magazine magazine_id="ID01" />
</root>
DTD:
<!ELEMENT root ANY>
<!ELEMENT book ANY>
<!ATTLIST book book_id ID #IMPLIED>
<!ELEMENT magazine ANY>
<!ATTLIST magazine magazine_id ID #IMPLIED>
xmllint からの出力:
$ xmllint --postvalid idtest.xml
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "idtest.dtd">
<root>
<book book_id="ID01"/>
<magazine magazine_id="ID01"/>
</root>
idtest.xml:4: element magazine: validity error : ID ID01 already defined
<magazine magazine_id="ID01" />
^
idtest.xml:4: element magazine: validity error : ID ID01 already defined
Document idtest.xml does not validate
結論: 属性名を変更しても役に立ちません。大事なのはタイプです。タイプ ID の属性の値は固有でなければなりません。解説1が正しい。