Visual Basic에서 DTD, XDR 또는 XSD를 사용하여 XML 문서의 유효성 검사

이 문서에서는 클래스를 XmlValidatingReader 사용하여 Visual Basic 2005 또는 Visual Basic .NET에서 DTD, XDR 스키마 또는 XSD 스키마에 대해 XML 문서의 유효성을 검사하는 방법을 보여 줍니다. 스키마를 캐싱하여 유효성 검사를 최적화하는 방법도 설명합니다.

원래 제품 버전: Visual Basic
원래 KB 번호: 315533

요약

XML(Extensible Markup Language) 문서에는 요소와 특성이 포함되어 있으며 애플리케이션과 조직 간에 데이터를 교환하는 유연하고 강력한 방법을 제공합니다. XML 문서의 허용 가능한 구조와 내용을 지정하려면 DTD(문서 형식 정의), Microsoft XML-Data XDR(축소) 스키마 또는 XSD(XML 스키마 정의 언어) 스키마를 작성할 수 있습니다.

XSD 스키마는 .NET Framework XML 문법을 지정하는 기본 방법이지만 DTD 및 XDR 스키마도 지원됩니다.

이 문서에서는 Microsoft Visual Basic 2005 또는 Microsoft Visual Basic .NET의 XML 문서에 DTD, XDR 스키마 또는 XSD 스키마를 적용하는 방법을 알아봅니다. 그런 다음 XmlValidatingReader 클래스를 사용하여 지정된 문법에 대해 XML 문서의 유효성을 검사하는 방법을 알아봅니다. XML 유효성 검사를 최적화하는 방법으로 XmlSchemaCollection 클래스를 사용하여 메모리의 스키마를 캐시하는 방법도 알아봅니다.

요구 사항

다음 목록에서는 필요한 권장 하드웨어, 소프트웨어, 네트워크 인프라 및 서비스 팩을 간략하게 설명합니다. Microsoft Visual Basic 2005 또는 Microsoft Visual Basic .NET

이 문서에서는 다음 Microsoft .NET Framework 클래스 라이브러리 네임스페이스를 참조합니다.

  • System.Xml
  • System.Xml.Schema

이 문서에서는 다음과 같은 topics 잘 알고 있다고 가정합니다.

  • Visual Basic 2005 또는 Visual Basic .NET 구문
  • 유효성 검사 문제를 포함한 XML 개념

XML 문서 만들기

  1. Microsoft Visual Studio 2005 또는 Microsoft Visual Studio .NET을 시작합니다. 그런 다음 파일 메뉴에서 새로 만들기를 가리킨 다음 파일을 클릭하여 새 XML 파일을 만듭니다.

  2. XML 파일 형식을 선택한 다음 열기를 클릭합니다.

  3. XML 문서에 다음 데이터를 추가하여 카탈로그의 제품을 나타냅니다.

    <Product ProductID="123">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  4. 나중에 쉽게 액세스할 수 있는 폴더에 파일을Product.xml 저장합니다(이 문서의 코드 샘플에서는 라는 C:\MyFolder폴더를 가정합니다).

  1. Visual Studio 2005 또는 Visual Studio .NET에서 파일 메뉴에서 새로 만들기를 가리킨 다음 파일을 클릭합니다.

  2. 텍스트 파일 형식을 선택한 다음 열기를 클릭합니다.

  3. 다음 DTD 선언을 파일에 추가하여 XML 문서의 문법을 설명합니다.

    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    
  4. 파일을 XML 문서와 동일한 폴더에 Product.dtd 로 저장합니다.

  5. Visual Studio 2005 또는 Visual Studio .NET에서 Product.xml 다시 엽니다. 이렇게 하려면 파일 메뉴에서 열기를 가리킨 다음 파일을 클릭합니다. 다음과 같이 줄 아래에 ?xml version="1.0" DOCTYPE 문을 추가합니다. 그러면 XML 문서가 DTD 파일에 연결됩니다.)

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    
  6. 수정된 XML 문서를 ProductWithDTD.xml저장합니다.

DTD를 사용하여 유효성 검사 수행

  1. Visual Studio 2005 또는 Visual Studio .NET에서 ValidateXmlUsingVB라는 새 Visual Basic 콘솔 애플리케이션 프로젝트를 만듭니다.

  2. Visual Studio 2005 또는 Visual Studio .NET은 Module1.vb 라는 새 파일을 표시합니다. 이 파일의 시작 부분에 다음과 같이 두 개의 Imports 문을 추가합니다.

    Imports System.Xml ' For XmlTextReader and XmlValidatingReader
    Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
    
  3. Module1(Main subroutine 시작 전)에서 다음과 같이 isValid라는 부울 변수를 선언합니다.

    'If a validation error occurs,
    ' you will set this flag to False 
    ' in the validation event handler. 
    Private isValid As Boolean = True
    
  4. Main 서브루틴에서 XmlTextReader 개체를 만들어 텍스트 파일에서 XML 문서를 읽습니다. 그런 다음, 개체를 XmlValidatingReader 만들어 이 XML 데이터의 유효성을 검사합니다.

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml")
    Dim v As New XmlValidatingReader(r)
    
  5. XmlValidatingReader 개체에는 필요한 유효성 검사 유형(DTD, XDR 또는 스키마)을 나타내는 ValidationType 속성이 있습니다. 다음과 같이 이 속성을 DTD로 설정합니다.

    v.ValidationType = ValidationType.DTD
    
  6. 유효성 검사 오류가 발생하면 유효성 검사 판독기가 유효성 검사 이벤트를 생성합니다. 다음 코드를 추가하여 유효성 검사 이벤트 처리기를 등록합니다(이 섹션의 8단계에서 MyValidationEventHandler 서브루틴을 구현합니다).

    AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
    
  7. 다음 코드를 추가하여 XML 문서를 읽고 유효성을 검사합니다. 유효성 검사 오류가 발생하면 MyValidationEventHandler가 호출되어 오류를 처리합니다. 이 서브루틴은 False로 설정 isValid 됩니다(이 섹션의 8단계 참조). 유효성 검사 후 isValid의 상태 검사 문서가 유효한지 유효하지 않은지 확인할 수 있습니다.

    While v.Read()' Could add code here to process the content.
    End While
    v.Close()' Check whether the document is valid or invalid.
    If isValid Then
        Console.WriteLine("Document is valid")
    Else
        Console.WriteLine("Document is invalid")
    End If
    
  8. Main 서브루틴 뒤에 다음과 같이 MyValidationEventHandler 서브루틴을 작성합니다.

    Public Sub MyValidationEventHandler(ByVal sender As Object, _
     ByVal args As ValidationEventArgs)
         isValid = False
         Console.WriteLine("Validation event" & vbCrLf & args.Message)
    End Sub
    
  9. 애플리케이션을 빌드하고 실행합니다.

애플리케이션은 XML 문서가 유효하다고 보고해야 합니다. 10. Visual Studio 2005 또는 Visual Studio .NET에서 ProductWithDTD.xml 수정하여 유효하지 않도록 합니다(예: ProductName 럭비 저지/ ProductName 요소 삭제). 11. 애플리케이션을 다시 실행합니다.

애플리케이션은 다음 오류 메시지를 표시해야 합니다.

유효성 검사 이벤트 요소 'Product'에 불완전한 콘텐츠가 있습니다. 'ProductName'이 필요합니다. file:///C:/MyFolder/ProductWithDTD.xml(4, 3)에서 오류가 발생했습니다. 문서가 잘못되었습니다.

  1. Visual Studio 2005 또는 Visual Studio .NET에서 파일 메뉴에서 새로 만들기를 가리킨 다음 파일을 클릭합니다.

  2. 텍스트 파일 형식을 선택한 다음 열기를 클릭합니다.

  3. 다음 XDR 스키마 정의를 파일에 추가하여 XML 문서의 문법을 설명합니다.

    <?xml version="1.0"?>
    <Schema name="ProductSchema" 
     xmlns="urn:schemas-microsoft-com:xml-data"
     xmlns:dt="urn:schemas-microsoft-com:datatypes">
    
        <AttributeType name="ProductID" dt:type="int"/>
        <ElementType name="ProductName" dt:type="string"/>
    
        <ElementType name="Product" content="eltOnly">
            <attribute type="ProductID" required="yes"/>
            <element type="ProductName"/>
        </ElementType>
    </Schema>
    
  4. 파일을 XML 문서와 동일한 폴더에 Product.xdr 로 저장합니다.

  5. 원래 Product.xml다시 열고 다음과 같이 XDR 스키마에 연결합니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  6. 수정된 XML 문서를 ProductWithXDR.xml저장합니다.

XDR 스키마를 사용하여 유효성 검사 수행

  1. 다음과 같이 XmlTextReader가 ProductWithXDR.xml로드되도록 애플리케이션을 수정합니다.

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
    
  2. ValidationType 유효성 검사 판독기가 다음과 같이 XDR 유효성 검사를 수행하도록 을 XDR로 설정합니다.

    v.ValidationType = ValidationType.XDR
    
  3. 애플리케이션을 빌드하고 실행합니다.

    애플리케이션은 XML 문서가 유효하다고 보고해야 합니다.

  4. ProductWithXDR.xml 수정하여 의도적으로 유효하지 않도록 합니다.

  5. 애플리케이션을 다시 실행합니다.

    애플리케이션에서 유효성 검사 오류를 보고해야 합니다.

  1. Visual Studio .NET의 파일 메뉴에서 새로 만들기를 가리킨 다음 파일을 클릭합니다.

  2. 텍스트 파일 형식을 선택한 다음 열기를 클릭합니다.

  3. 다음 XSD 스키마 정의를 파일에 추가하여 XML 문서의 문법을 설명합니다.

    <?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="Product">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="ProductName" type="xsd:string"/>
            </xsd:sequence>
            <xsd:attribute name="ProductID" use="required" type="xsd:int"/>
        </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    
  4. 파일을 XML 문서와 동일한 폴더에 Product.xsd로 저장합니다.

  5. 원래 Product.xml다시 열고 다음과 같이 XSD 스키마에 연결합니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <Product ProductID="123" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="Product.xsd">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  6. 수정된 XML 문서를 ProductWithXSD.xml저장합니다.

XSD 스키마를 사용하여 유효성 검사 수행

  1. 다음과 같이ProductWithXSD.xml로드되도록 XmlTextReader 애플리케이션을 수정 합니다.

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
    
  2. ValidationType 유효성 검사 판독기가 다음과 같이 XSD 스키마 유효성 검사를 수행하도록 를 스키마로 설정합니다.

    v.ValidationType = ValidationType.Schema
    
  3. 애플리케이션을 빌드하고 실행하여 XSD 스키마를 사용하여 XML 문서의 유효성을 검사합니다.

    애플리케이션은 XML 문서가 유효하다고 보고해야 합니다.

XSD 스키마에서 네임스페이스 사용

  1. Visual Studio 2005 또는 Visual Studio .NET에서 ProductWithXSD.xml엽니다. 문서에서 기본 네임스페이스 를 urn:MyNamespace선언합니다. XSD 링크를 수정하여 다음과 같이 XSD 스키마를 지정하여 이 네임스페이스의 콘텐츠 유효성을 검사합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <Product ProductID="123" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:MyNamespace"
     xsi:schemaLocation="urn:MyNamespace Product.xsd">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  2. ProductWithXSD.xml저장합니다.

  3. Product.xsd를 열고 XML 탭을 클릭한 다음 다음과 같이 xsd:schema 시작 태그를 수정하여 스키마가 네임스페이스에 urn:MyNamespace적용되도록 합니다.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="urn:MyNamespace"
     elementFormDefault="qualified">
    
  4. Product.xsd를 저장합니다.

  5. 애플리케이션을 실행하여 XSD 스키마를 사용하여 XML 문서의 유효성을 검사합니다.

캐시 네임스페이스

  1. Visual Studio 2005 또는 Visual Studio .NET에서 Module1.vb 엽니다. Main 서브루틴의 시작 부분에 다음과 같이 개체를 XmlSchemaCollection 만듭니다.

    Dim cache As New XmlSchemaCollection()
    
  2. XmlSchemaCollection 개체를 사용하면 성능 향상을 위해 메모리에 스키마를 캐시할 수 있습니다. 각 스키마는 다른 네임스페이스와 연결됩니다. Product.xsd를 캐시하려면 다음 코드를 추가합니다.

    cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
    
  3. 개체를 만드는 코드 다음에 XmlValidatingReader 다음 문을 추가합니다. 그러면 판독기가 메모리 내 스키마를 XmlValidatingReader 사용할 수 있도록 스키마 캐시가 에 추가됩니다.

    v.Schemas.Add(cache)
    

확인

  1. 애플리케이션을 빌드하고 실행합니다.
  2. XML 문서가 여전히 XSD 스키마에 대해 유효성을 검사하고 있는지 확인합니다.
  3. ProductWithXSD.xml 일부 변경하여 의도적으로 무효화합니다.
  4. 애플리케이션이 이러한 유효성 검사 오류를 검색했는지 확인합니다.