これは、EMPTYの指定がコンテンツがないことを示しているためです。!ATTLISTは、記述できる属性の名前と値の組を列挙します。このような要素の性質を与えるいくつかのオプションがあります。ENTITYDTDの宣言には、さらにENTITYがあります。ENTITYは、ドキュメントの構造とは関係なく、単に名前と値の組を宣言します。名前の参照箇所を値で置き換えます。ENTITYの宣言には2つ形式があり、使用箇所目的が異なります。DTDを使うXML記述で使うこのが目的で、DTDの宣言では参照されていません。記述するような実体参照で、XML中の記述を1文字に置き換えるのに使われます。DTDの宣言でのみ、宣言と参照が行われています。PEReferenceは、文字列の置き換えを行います。上の表の例のように、複数個所に同じ文字列を記述する代わりに、文字列に名前を付けて、参照するようにします。ような部分文字列の置換を行います。条件によって宣言を変えるのに使われています。切り替え条件はDTD内に固定的に宣言されているので目的はわかりません。するかで、ENTITYの宣言が行われたり、行われなかったりします。DTDDTDファイルを読み込むとXmlReaderでDTDファイルを読み込むと、DOCTYPEが先行していない旨のエラーになります。記述は、DOCTYPE内でのみ可能で、DTD自体を調べる目的にはXmlReaderは使えないようです。DTDがないときDTD記述は必須ではなく、DOCTYPEのないXMLは普通にパースできます。EndElementWhitespaceこの場合、要素間の親子関係や、要素と属性の関係は調べられていないことになります。不正や、終了していない要素などはエラーが検出されます。DTDのあるXMLDTDの記述をしたXMLを読み込もうとすると、エラーになります。エラーの理由は、「セキュリティ上の理由」とありますが理解できません。このエラーは、DTDを外部ファイルとしたときも、インラインで記述したときも同様です。設定」と、対策も表示されるので、これにしたがって見ます。>この例では、DTD(test2.dtd)とXML記述が合っていません。DTDでは、E1要素は、E9要素を持ちますが、XML(XMLFile2.xml)では、E11が子要素になっています。XmlReaderは、デフォルトではバリデーションを行わないもののようです。バリデーションバリデーションを行うには、設定が必要なようです。呼び出すようになります。e){Debug.WriteLine(e.Message);}実行すると、以下の出力になります。属性が宣言されていません。