Visual Basic'te DTD, XDR veya XSD kullanarak XML belgesini doğrulama

Bu makalede, Visual Basic 2005 veya Visual Basic .NET'te DTD, XDR şeması veya XSD şemasına karşı XML belgesini doğrulamak için sınıfının nasıl kullanılacağı XmlValidatingReader gösterilmektedir. Ayrıca şemaları önbelleğe alarak doğrulamayı iyileştirmeyi de açıklar.

Orijinal ürün sürümü: Visual Basic
Özgün KB numarası: 315533

Özet

Genişletilebilir biçimlendirme dili (XML) belgeleri öğeler ve öznitelikler içerir ve uygulamalarla kuruluşlar arasında veri alışverişi yapmak için esnek ve güçlü bir yol sağlar. Xml belgesinin izin verilebilir yapısını ve içeriğini belirtmek için, Belge Türü Tanımı (DTD), Microsoft XML-Data Azaltılmış (XDR) şeması veya XML Şema tanımı dili (XSD) şeması yazabilirsiniz.

XSD şemaları, .NET Framework XML dil bilgisi belirtmenin tercih edilen yoludur, ancak DTD'ler ve XDR şemaları da desteklenir.

Bu makalede, Microsoft Visual Basic 2005 veya Microsoft Visual Basic .NET'te xml belgesine DTD, XDR şeması veya XSD şeması uygulamayı öğreneceksiniz. Ardından xml belgesini belirtilen dil bilgisi ile doğrulamak için XmlValidatingReader sınıfını kullanmayı öğreneceksiniz. Ayrıca XML doğrulamasını iyileştirmenin bir yolu olarak şemaları bellekte önbelleğe almak için XmlSchemaCollection sınıfını kullanmayı da öğreneceksiniz.

Gereksinimler

Aşağıdaki listede ihtiyacınız olan önerilen donanım, yazılım, ağ altyapısı ve hizmet paketleri özetlenmiştir: Microsoft Visual Basic 2005 veya Microsoft Visual Basic .NET

Bu makale, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanlarını ifade eder:

  • System.Xml
  • System.Xml.Schema

Bu makalede, aşağıdaki konular hakkında bilgi sahibi olduğunuz varsayılır:

  • Visual Basic 2005 veya Visual Basic .NET söz dizimi
  • Doğrulama sorunları da dahil olmak üzere XML kavramları

XML belgesi oluşturma

  1. Microsoft Visual Studio 2005 veya Microsoft Visual Studio .NET'i başlatın. Ardından yeni bir XML dosyası oluşturun (Dosya menüsünde Yeni'nin üzerine gelin ve Dosya'ya tıklayın).

  2. XML Dosya türünü seçin ve aç'a tıklayın.

  3. Katalogdaki bir ürünü temsil etmek için XML belgesine aşağıdaki verileri ekleyin:

    <Product ProductID="123">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  4. Dosyayı Product.xml olarak daha sonra kolayca erişilebileceği bir klasöre kaydedin (bu makaledeki kod örnekleri adlı C:\MyFolderbir klasör olduğunu varsayar).

  1. Visual Studio 2005'te veya Visual Studio .NET'te, Dosya menüsünde Yeni'nin üzerine gelin ve Dosya'ya tıklayın.

  2. Metin Dosyası türünü seçin ve aç'a tıklayın.

  3. XML belgesinin dil bilgisini açıklamak için aşağıdaki DTD bildirimlerini dosyaya ekleyin:

    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    
  4. Dosyayı Xml belgenizle aynı klasöre Product.dtd olarak kaydedin.

  5. Visual Studio 2005 veya Visual Studio .NET'te Product.xml yeniden açın; bunu yapmak için, Dosya menüsünde Aç'ın üzerine gelin ve Dosya'ya tıklayın. Aşağıdaki gibi bir DOCTYPE deyimi (satırın ?xml version="1.0" altına) ekleyin. Bu, XML belgesini DTD dosyasına bağlar).

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    
  6. Değiştirilen XML belgesini ProductWithDTD.xmlolarak kaydedin.

DTD kullanarak doğrulama gerçekleştirme

  1. Visual Studio 2005'te veya Visual Studio .NET'te ValidateXmlUsingVB adlı yeni bir Visual Basic Konsol Uygulaması projesi oluşturun.

  2. Visual Studio 2005 veya Visual Studio .NET , Module1.vb adlı yeni bir dosya görüntüler. Bu dosyanın başına aşağıdaki gibi iki Imports deyimi ekleyin:

    Imports System.Xml ' For XmlTextReader and XmlValidatingReader
    Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
    
  3. Module1'de (Main alt alanının başlangıcından önce), aşağıdaki gibi isValid adlı bir boole değişkeni bildirin:

    'If a validation error occurs,
    ' you will set this flag to False 
    ' in the validation event handler. 
    Private isValid As Boolean = True
    
  4. Ana alt yordamda, xml belgesini bir metin dosyasından okumak için bir XmlTextReader nesnesi oluşturun. Ardından, bu XML verilerini doğrulamak için bir XmlValidatingReader nesne oluşturun:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml")
    Dim v As New XmlValidatingReader(r)
    
  5. XmlValidatingReader nesnesinin, gerekli doğrulama türünü (DTD, XDR veya Schema) gösteren bir ValidationType özelliği vardır. Bu özelliği aşağıdaki gibi DTD olarak ayarlayın:

    v.ValidationType = ValidationType.DTD
    
  6. Herhangi bir doğrulama hatası oluşursa, doğrulayıcı okuyucu bir doğrulama olayı oluşturur. Doğrulama olay işleyicisini kaydetmek için aşağıdaki kodu ekleyin (bu bölümün 8. adımında MyValidationEventHandler alt yordamını uygulayacaksınız):

    AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
    
  7. XML belgesini okumak ve doğrulamak için aşağıdaki kodu ekleyin. Herhangi bir doğrulama hatası oluşursa, hatayı işlemek için MyValidationEventHandler çağrılır. Bu alt yordam False olarak ayarlanır isValid (bu bölümün 8. adımına bakın). Belgenin geçerli mi yoksa geçersiz mi olduğunu görmek için doğrulamadan sonra isValid'nin durumunu de kontrol edebilirsiniz.

    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 alt yordamdan sonra MyValidationEventHandler alt yordamını aşağıdaki gibi yazın:

    Public Sub MyValidationEventHandler(ByVal sender As Object, _
     ByVal args As ValidationEventArgs)
         isValid = False
         Console.WriteLine("Validation event" & vbCrLf & args.Message)
    End Sub
    
  9. Uygulamayı derleyin ve çalıştırın.

Uygulamanın XML belgesinin geçerli olduğunu bildirmesi gerekir. 10. Visual Studio 2005'te veya Visual Studio .NET'te ProductWithDTD.xml geçersiz hale getirmek için değiştirin (örneğin, ProductName Rugby formasını/ ProductName öğesini silin). 11. Uygulamayı yeniden çalıştırın.

Uygulama aşağıdaki hata iletisini göstermelidir:

Doğrulama olayı Öğesi 'Product' eksik içeriğe sahip. 'ProductName' bekleniyor. file:///C:/MyFolder/ProductWithDTD.xml(4, 3) konumunda bir hata oluştu. Belge geçersiz

  1. Visual Studio 2005'te veya Visual Studio .NET'te, Dosya menüsünde Yeni'nin üzerine gelin ve Dosya'ya tıklayın.

  2. Metin Dosyası türünü seçin ve aç'a tıklayın.

  3. XML belgesinin dil bilgisini açıklamak için aşağıdaki XDR şema tanımlarını dosyaya ekleyin:

    <?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. Dosyayı Product.xdr olarak XML belgenizle aynı klasöre kaydedin.

  5. özgün Product.xmlyeniden açın ve ardından aşağıdaki gibi XDR şemasına bağlayın:

    <?xml version="1.0" encoding="utf-8" ?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  6. Değiştirilen XML belgesini ProductWithXDR.xmlolarak kaydedin.

XDR şeması kullanarak doğrulama gerçekleştirme

  1. XmlTextReader'ın ProductWithXDR.xmlyükleyebilmesi için uygulamanızı aşağıdaki gibi değiştirin:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
    
  2. Doğrulayıcı okuyucunun ValidationType XDR doğrulamasını aşağıdaki gibi gerçekleştirmesi için XDR olarak ayarlayın:

    v.ValidationType = ValidationType.XDR
    
  3. Uygulamayı derleyin ve çalıştırın.

    Uygulamanın XML belgesinin geçerli olduğunu bildirmesi gerekir.

  4. ProductWithXDR.xml bilerek geçersiz hale getirmek için değiştirin.

  5. Uygulamayı yeniden çalıştırın.

    Uygulama bir doğrulama hatası bildirmelidir.

  1. Visual Studio .NET'te, Dosya menüsünde Yeni'nin üzerine gelin ve dosya'ya tıklayın.

  2. Metin Dosyası türünü seçin ve aç'a tıklayın.

  3. XML belgesinin dil bilgisini açıklamak için dosyaya aşağıdaki XSD şema tanımını ekleyin:

    <?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. Dosyayı XML belgenizle aynı klasöre Product.xsd olarak kaydedin.

  5. Özgün Product.xmlyeniden açın ve ardından aşağıdaki gibi XSD şemasına bağlayın:

    <?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. Değiştirilen XML belgesini ProductWithXSD.xmlolarak kaydedin.

XSD şeması kullanarak doğrulama gerçekleştirme

  1. Uygulamanızı, yüklerin XmlTextReaderProductWithXSD.xmliçin aşağıdaki gibi değiştirin:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
    
  2. Doğrulayıcı okuyucunun ValidationType aşağıdaki gibi XSD şema doğrulaması gerçekleştirmesi için Şeması olarak ayarlayın:

    v.ValidationType = ValidationType.Schema
    
  3. XSD şemasını kullanarak XML belgesini doğrulamak için uygulamayı derleyin ve çalıştırın.

    Uygulamanın XML belgesinin geçerli olduğunu bildirmesi gerekir.

XSD şemasında ad alanlarını kullanma

  1. Visual Studio 2005 veya Visual Studio .NET'te ProductWithXSD.xmlaçın. Belgede varsayılan ad alanı olan urn:MyNamespaceöğesini bildirin. Bu ad alanındaki içeriği doğrulamak için XSD şemasını belirtmek için XSD bağlantısını aşağıdaki gibi değiştirin:

    <?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.xmlkaydedin.

  3. Product.xsd dosyasını açın, XML sekmesine tıklayın ve ardından xsd:schema start etiketini aşağıdaki gibi değiştirerek şemanın ad alanına urn:MyNamespaceuygulanabilmesini sağlayın:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="urn:MyNamespace"
     elementFormDefault="qualified">
    
  4. Product.xsd dosyasını kaydedin.

  5. XSD şemasını kullanarak XML belgesini doğrulamak için uygulamayı çalıştırın.

Önbellek ad alanları

  1. Visual Studio 2005 veya Visual Studio .NET'te Module1.vb açın. Main alt öğesinin başında aşağıdaki gibi bir XmlSchemaCollection nesne oluşturun:

    Dim cache As New XmlSchemaCollection()
    
  2. XmlSchemaCollection nesnesi, geliştirilmiş performans için şemaları bellekte önbelleğe almanızı sağlar. Her şema farklı bir ad alanıyla ilişkilendirilir. Product.xsd'yi önbelleğe almak için aşağıdaki kodu ekleyin:

    cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
    
  3. nesnesini oluşturan koddan XmlValidatingReader sonra aşağıdaki deyimini ekleyin. Bu, okuyucunun bellek içi şemaları kullanabilmesi için XmlValidatingReader şema önbelleğini öğesine ekler.

    v.Schemas.Add(cache)
    

Doğrulama

  1. Uygulamayı derleyin ve çalıştırın.
  2. XML belgesinin XSD şemasında hala doğrulandığını doğrulayın.
  3. Kasıtlı olarak geçersiz hale getirmek için ProductWithXSD.xml bazı değişiklikler yapın.
  4. Uygulamanın bu doğrulama hatalarını algıladığını doğrulayın.