XmlValidatingReader를 사용하여 DTD의 유효성 검사

업데이트: November 2007

W3C(World Wide Web 컨소시엄) XML(Extensible Markup Language) 1.0 권장 사항에 정의된 유효성 제약 조건을 사용하여 DTD(문서 종류 정의) 유효성 검사를 구현합니다. DTD에서는 정식 문법을 사용하여 XML 규격 문서의 구조와 구문을 설명하며 표준 XML 문서에 허용된 내용과 값을 지정합니다.

DTD에 대한 유효성 검사를 수행하기 위해 XmlValidatingReader에서는 XML 문서의 DOCTYPE 선언에 정의된 DTD를 사용합니다. DOCTYPE 선언은 인라인 DTD를 가리키거나 외부 DTD 파일에 대한 참조가 될 수 있습니다.

참고:

XmlValidatingReader 클래스는 .NET Framework 버전 2.0에서 사용되지 않습니다. XmlReaderSettings 클래스와 Create 메서드를 사용하여 유효성 검사 XmlReader 인스턴스를 만들 수 있습니다. 자세한 내용은 XmlReader를 사용하여 XML 데이터의 유효성 검사를 참조하십시오.

예제

다음 코드 예제에서는 XmlTextReader를 사용하는 XmlValidatingReader를 만듭니다. 입력 파일 HeadCount.xml은 외부 DTD 파일 HeadCount.dtd에 대해 유효성을 검사합니다. 모든 심각도 형식과 오류 메시지가 표시됩니다.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

public class ValidationSample

      public shared sub Main()
         Dim tr As XmlTextReader = new XmlTextReader("HeadCount.xml")
         Dim vr As XmlValidatingReader = new XmlValidatingReader(tr)

         vr.ValidationType = ValidationType.DTD
         AddHandler vr.ValidationEventHandler, AddressOf ValidationCallback
         while(vr.Read())
         end while
         Console.WriteLine("Validation finished")

      end sub      

      public shared sub ValidationCallBack (sender As object, args As ValidationEventArgs)
      
         Console.WriteLine("***Validation error")
         Console.WriteLine("Severity:{0}", args.Severity)
         Console.WriteLine("Message:{0}", args.Message)
     end sub
end class
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace ValidationSample
{
   class Sample
   {
      public static void Main()
      {
         XmlTextReader tr = new XmlTextReader("HeadCount.xml");
         XmlValidatingReader vr = new XmlValidatingReader(tr);

         vr.ValidationType = ValidationType.DTD;
         vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);

         while(vr.Read());
         Console.WriteLine("Validation finished");
      }

      public static void ValidationHandler(object sender, ValidationEventArgs args)
      {
         Console.WriteLine("***Validation error");
         Console.WriteLine("\tSeverity:{0}", args.Severity);
         Console.WriteLine("\tMessage  :{0}", args.Message);
      }
   }
}

다음에서는 유효성을 검사할 입력 파일 HeadCount.xml의 내용을 요약합니다.

<!DOCTYPE HeadCount SYSTEM "HeadCount.dtd">
<HeadCount>
  <Name First="Waldo" Last="Pepper">
    <Name First="Salt" Last="Pepper" Relation="spouse"/>
    <Name First="Red" Last="Pepper" Relation="child"/>
  </Name>
  <Name First="&MyFirst;" Last="&MyLast;">
    <Name First="Sharon" Last="&MyLast;" Relation="spouse"/>
    <Name First="Morgan" Last="&MyLast;" Relation="child"/>
    <Name First="Shelby" Last="&MyLast;" Relation="child"/>
  </Name>
</HeadCount>

다음에서는 유효성을 검사할 외부 DTD 파일 HeadCount.dtd의 내용을 요약합니다.

<!ELEMENT HeadCount (Name)*>
<!ELEMENT Name (Name)*>
<!ATTLIST Name First CDATA #REQUIRED>
<!ATTLIST Name Last CDATA #REQUIRED>
<!ATTLIST Name Relation (self | spouse | child) "self">
<!ENTITY MyFirst "Jeff">
<!ENTITY MyLast "Smith">

참고 항목

개념

XmlReader로 XML 읽기

기타 리소스

XmlReader 클래스 사용