Delen via


Een XML-document valideren met behulp van DTD, XDR of XSD in Visual Basic

In dit artikel wordt beschreven hoe u de XmlValidatingReader klasse gebruikt om een XML-document te valideren op basis van een DTD, een XDR-schema of een XSD-schema in Visual Basic 2005 of in Visual Basic .NET. Beschrijft ook hoe u validatie optimaliseert door schema's in de cache op te geven.

Oorspronkelijke productversie: Visual Basic
Oorspronkelijk KB-nummer: 315533

Samenvatting

XML-documenten (Extensible Markup Language) bevatten elementen en kenmerken en bieden een flexibele en krachtige manier om gegevens uit te wisselen tussen toepassingen en organisaties. Als u de toegestane structuur en inhoud van een XML-document wilt opgeven, kunt u een DTD (Document Type Definition), een XDR-schema (Microsoft XML-Data Reduced) of een XSD-schema (XML Schema Definition Language) schrijven.

XSD-schema's zijn de voorkeurswijze voor het opgeven van XML-grammatica in .NET Framework, maar DTD's en XDR-schema's worden ook ondersteund.

In dit artikel leert u hoe u een DTD, een XDR-schema of een XSD-schema toepast op een XML-document in Microsoft Visual Basic 2005 of in Microsoft Visual Basic .NET. Vervolgens leert u hoe u de klasse XmlValidatingReader gebruikt om een XML-document te valideren op basis van de opgegeven grammatica. U leert ook hoe u de klasse XmlSchemaCollection gebruikt om schema's in het geheugen op te cachen als een manier om XML-validatie te optimaliseren.

Behoeften

De volgende lijst bevat een overzicht van de aanbevolen hardware, software, netwerkinfrastructuur en servicepacks die u nodig hebt: Microsoft Visual Basic 2005 of Microsoft Visual Basic .NET

Dit artikel verwijst naar de volgende Microsoft .NET Framework Class Library-naamruimten:

  • System.Xml
  • System.Xml.Schema

In dit artikel wordt ervan uitgegaan dat u bekend bent met de volgende onderwerpen:

  • Visual Basic 2005 of Visual Basic .NET-syntaxis
  • XML-concepten, inclusief validatieproblemen

Een XML-document maken

  1. Start Microsoft Visual Studio 2005 of Microsoft Visual Studio .NET. Maak vervolgens een nieuw XML-bestand (wijs nieuw aan in het menu Bestand, wijs Nieuw aan en klik vervolgens op Bestand).

  2. Selecteer het XML-bestandstype en klik vervolgens op Openen.

  3. Voeg de volgende gegevens toe aan het XML-document om een product in een catalogus weer te geven:

    <Product ProductID="123">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  4. Sla het bestand op als Product.xml in een map die u later gemakkelijk kunt openen (in de codevoorbeelden in dit artikel wordt uitgegaan van een map met de naam C:\MyFolder).

  1. Wijs in Visual Studio 2005 of in Visual Studio .NET de optie Nieuw aan in het menu Bestand en klik vervolgens op Bestand.

  2. Selecteer het bestandstype tekst en klik vervolgens op Openen.

  3. Voeg de volgende DTD-declaraties toe aan het bestand om de grammatica van het XML-document te beschrijven:

    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    
  4. Sla het bestand op als Product.dtd in dezelfde map als uw XML-document.

  5. Open Product.xml opnieuw in Visual Studio 2005 of in Visual Studio .NET. Wijs dit aan, wijs Openen aan in het menu Bestand en klik vervolgens op Bestand. Voeg als volgt een DOCTYPE-instructie (onder de ?xml version="1.0" regel) toe. Hiermee wordt het XML-document gekoppeld aan het DTD-bestand).

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    
  6. Sla het gewijzigde XML-document op als ProductWithDTD.xml.

Validatie uitvoeren met behulp van een DTD

  1. Maak in Visual Studio 2005 of in Visual Studio .NET een nieuw Visual Basic Console Application-project met de naam ValidateXmlUsingVB.

  2. Visual Studio 2005 of Visual Studio .NET geeft een nieuw bestand weer met de naam Module1.vb. Voeg aan het begin van dit bestand als volgt twee importinstructies toe:

    Imports System.Xml ' For XmlTextReader and XmlValidatingReader
    Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
    
  3. Declareer in Module1 (vóór het begin van de Hoofdsubroutine) als volgt een booleaanse variabele met de naam IsValid:

    'If a validation error occurs,
    ' you will set this flag to False 
    ' in the validation event handler. 
    Private isValid As Boolean = True
    
  4. Maak in de hoofdsubroutine een XmlTextReader-object om een XML-document uit een tekstbestand te lezen. Maak vervolgens een XmlValidatingReader object om deze XML-gegevens te valideren:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml")
    Dim v As New XmlValidatingReader(r)
    
  5. Het object XmlValidatingReader heeft een eigenschap ValidationType, die aangeeft welk type validatie is vereist (DTD, XDR of Schema). Stel deze eigenschap als volgt in op DTD:

    v.ValidationType = ValidationType.DTD
    
  6. Als er validatiefouten optreden, genereert de validatielezer een validatie-gebeurtenis. Voeg de volgende code toe om een validatiegebeurtenishandler te registreren (u implementeert de subroutine MyValidationEventHandler in stap 8 van deze sectie):

    AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
    
  7. Voeg de volgende code toe om het XML-document te lezen en te valideren. Als er validatiefouten optreden, wordt MyValidationEventHandler aangeroepen om de fout af te handelen. Deze subroutine wordt ingesteld op isValid False (zie stap 8 van deze sectie). U kunt de status van isValid controleren na validatie om te zien of het document geldig of ongeldig is.

    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. Schrijf na de Hoofdsubroutine de subroutine MyValidationEventHandler als volgt:

    Public Sub MyValidationEventHandler(ByVal sender As Object, _
     ByVal args As ValidationEventArgs)
         isValid = False
         Console.WriteLine("Validation event" & vbCrLf & args.Message)
    End Sub
    
  9. Maak de toepassing en voer deze uit.

De toepassing moet rapporteren dat het XML-document geldig is. 10. Wijzig in Visual Studio 2005 of in Visual Studio .NET ProductWithDTD.xml om deze ongeldig te maken (verwijder bijvoorbeeld het element ProductName Rugby/ ProductName ). 11. Voer de toepassing opnieuw uit.

De toepassing moet het volgende foutbericht weergeven:

Het validatiegebeurteniselement Product bevat onvolledige inhoud. Verwachte 'ProductName'. Er is een fout opgetreden bij file:///C:/MyFolder/ProductWithDTD.xml(4, 3). Document is ongeldig

  1. Wijs in Visual Studio 2005 of in Visual Studio .NET de optie Nieuw aan in het menu Bestand en klik vervolgens op Bestand.

  2. Selecteer het bestandstype tekst en klik vervolgens op Openen.

  3. Voeg de volgende XDR-schemadefinities toe aan het bestand om de grammatica van het XML-document te beschrijven:

    <?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. Sla het bestand op als Product.xdr in dezelfde map als uw XML-document.

  5. Open de oorspronkelijke Product.xml opnieuw en koppel deze als volgt aan het XDR-schema:

    <?xml version="1.0" encoding="utf-8" ?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  6. Sla het gewijzigde XML-document op als ProductWithXDR.xml.

Validatie uitvoeren met behulp van een XDR-schema

  1. Wijzig de toepassing zo dat de XmlTextReader als volgt ProductWithXDR.xml laadt:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
    
  2. Stel de ValidationType waarde in op XDR zodat de validatielezer XDR-validatie uitvoert, als volgt:

    v.ValidationType = ValidationType.XDR
    
  3. Maak de toepassing en voer deze uit.

    De toepassing moet rapporteren dat het XML-document geldig is.

  4. Wijzig ProductWithXDR.xml om deze opzettelijk ongeldig te maken.

  5. Voer de toepassing opnieuw uit.

    De toepassing moet een validatiefout melden.

  1. Wijs in Visual Studio .NET de optie Nieuw aan in het menu Bestand en klik vervolgens op Bestand.

  2. Selecteer het bestandstype tekst en klik vervolgens op Openen.

  3. Voeg de volgende XSD-schemadefinitie toe aan het bestand om de grammatica van het XML-document te beschrijven:

    <?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. Sla het bestand op als Product.xsd in dezelfde map als uw XML-document.

  5. Open de oorspronkelijke Product.xml opnieuw en koppel deze als volgt aan het XSD-schema:

    <?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. Sla het gewijzigde XML-document op als ProductWithXSD.xml.

Validatie uitvoeren met behulp van een XSD-schema

  1. Wijzig uw toepassing zodat de XmlTextReader ProductWithXSD.xml als volgt wordt geladen:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
    
  2. Stel het ValidationType schema in op Schema zodat de validatielezer XSD-schemavalidatie uitvoert, als volgt:

    v.ValidationType = ValidationType.Schema
    
  3. Bouw en voer de toepassing uit om het XML-document te valideren met behulp van het XSD-schema.

    De toepassing moet rapporteren dat het XML-document geldig is.

Naamruimten gebruiken in het XSD-schema

  1. Open in Visual Studio 2005 of in Visual Studio .NET ProductWithXSD.xml. Declareer een standaardnaamruimte, urn:MyNamespacein het document. Wijzig de XSD-koppeling om het XSD-schema op te geven om inhoud in deze naamruimte te valideren, als volgt:

    <?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. Sla ProductWithXSD.xml op.

  3. Open Product.xsd, klik op het XML-tabblad en wijzig vervolgens de tag xsd:schema start als volgt, zodat het schema van toepassing is op de naamruimte urn:MyNamespace:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="urn:MyNamespace"
     elementFormDefault="qualified">
    
  4. Sla Product.xsd op.

  5. Voer de toepassing uit om het XML-document te valideren met behulp van het XSD-schema.

Cachenaamruimten

  1. Open in Visual Studio 2005 of in Visual Studio .NET Module1.vb. Maak aan het begin van de hoofdsubroutine als volgt een XmlSchemaCollection object:

    Dim cache As New XmlSchemaCollection()
    
  2. Met XmlSchemaCollection het object kunt u schema's in het geheugen opslaan voor verbeterde prestaties. Elk schema is gekoppeld aan een andere naamruimte. Voeg de volgende code toe om Product.xsd in de cache op te cachen:

    cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
    
  3. Voeg na de code die het XmlValidatingReader object maakt, de volgende instructie toe. Hiermee wordt de schemacache toegevoegd aan de XmlValidatingReader , zodat de lezer de schema's in het geheugen kan gebruiken.

    v.Schemas.Add(cache)
    

Verificatie

  1. Maak de toepassing en voer deze uit.
  2. Controleer of het XML-document nog steeds wordt gevalideerd op basis van het XSD-schema.
  3. Breng enkele wijzigingen aan in de ProductWithXSD.xml om deze opzettelijk ongeldig te maken.
  4. Controleer of de toepassing deze validatiefouten detecteert.