Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
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).
Selecteer het XML-bestandstype en klik vervolgens op Openen.
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>
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
).
Een DTD maken en een koppeling maken naar het XML-document
Wijs in Visual Studio 2005 of in Visual Studio .NET de optie Nieuw aan in het menu Bestand en klik vervolgens op Bestand.
Selecteer het bestandstype tekst en klik vervolgens op Openen.
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)>
Sla het bestand op als Product.dtd in dezelfde map als uw XML-document.
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">
Sla het gewijzigde XML-document op als ProductWithDTD.xml.
Validatie uitvoeren met behulp van een DTD
Maak in Visual Studio 2005 of in Visual Studio .NET een nieuw Visual Basic Console Application-project met de naam ValidateXmlUsingVB.
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)
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
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)
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
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
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
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
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
Een XDR-schema maken en een koppeling maken naar het XML-document
Wijs in Visual Studio 2005 of in Visual Studio .NET de optie Nieuw aan in het menu Bestand en klik vervolgens op Bestand.
Selecteer het bestandstype tekst en klik vervolgens op Openen.
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>
Sla het bestand op als Product.xdr in dezelfde map als uw XML-document.
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>
Sla het gewijzigde XML-document op als ProductWithXDR.xml.
Validatie uitvoeren met behulp van een XDR-schema
Wijzig de toepassing zo dat de XmlTextReader als volgt ProductWithXDR.xml laadt:
Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
Stel de
ValidationType
waarde in op XDR zodat de validatielezer XDR-validatie uitvoert, als volgt:v.ValidationType = ValidationType.XDR
Maak de toepassing en voer deze uit.
De toepassing moet rapporteren dat het XML-document geldig is.
Wijzig ProductWithXDR.xml om deze opzettelijk ongeldig te maken.
Voer de toepassing opnieuw uit.
De toepassing moet een validatiefout melden.
Een XSD-schema maken en een koppeling maken naar het XML-document
Wijs in Visual Studio .NET de optie Nieuw aan in het menu Bestand en klik vervolgens op Bestand.
Selecteer het bestandstype tekst en klik vervolgens op Openen.
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>
Sla het bestand op als Product.xsd in dezelfde map als uw XML-document.
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>
Sla het gewijzigde XML-document op als ProductWithXSD.xml.
Validatie uitvoeren met behulp van een XSD-schema
Wijzig uw toepassing zodat de
XmlTextReader
ProductWithXSD.xml als volgt wordt geladen:Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
Stel het
ValidationType
schema in op Schema zodat de validatielezer XSD-schemavalidatie uitvoert, als volgt:v.ValidationType = ValidationType.Schema
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
Open in Visual Studio 2005 of in Visual Studio .NET ProductWithXSD.xml. Declareer een standaardnaamruimte,
urn:MyNamespace
in 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>
Sla ProductWithXSD.xml op.
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">
Sla Product.xsd op.
Voer de toepassing uit om het XML-document te valideren met behulp van het XSD-schema.
Cachenaamruimten
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()
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")
Voeg na de code die het
XmlValidatingReader
object maakt, de volgende instructie toe. Hiermee wordt de schemacache toegevoegd aan deXmlValidatingReader
, zodat de lezer de schema's in het geheugen kan gebruiken.v.Schemas.Add(cache)
Verificatie
- Maak de toepassing en voer deze uit.
- Controleer of het XML-document nog steeds wordt gevalideerd op basis van het XSD-schema.
- Breng enkele wijzigingen aan in de ProductWithXSD.xml om deze opzettelijk ongeldig te maken.
- Controleer of de toepassing deze validatiefouten detecteert.