Valider un document XML à l’aide de DTD, XDR ou XSD en Visual Basic

Cet article explique comment utiliser la XmlValidatingReader classe pour valider un document XML par rapport à un DTD, un schéma XDR ou un schéma XSD dans Visual Basic 2005 ou dans Visual Basic .NET. Décrit également comment optimiser la validation en mettant en cache des schémas.

Version d’origine du produit : Visual Basic
Numéro de la base de connaissances d’origine : 315533

Résumé

Les documents XML (Extensible Markup Language) contiennent des éléments et des attributs et fournissent un moyen flexible et puissant d’échanger des données entre les applications et les organisations. Pour spécifier la structure et le contenu autorisés d’un document XML, vous pouvez écrire une définition de type de document (DTD), un schéma XDR (Microsoft XML-Data Reduced) ou un schéma XSD (XML Schema Definition).

Les schémas XSD sont le meilleur moyen de spécifier des grammaires XML dans le .NET Framework, mais les schémas DTD et XDR sont également pris en charge.

Dans cet article, vous allez apprendre à appliquer un DTD, un schéma XDR ou un schéma XSD à un document XML dans Microsoft Visual Basic 2005 ou microsoft Visual Basic .NET. Vous allez ensuite apprendre à utiliser la classe XmlValidatingReader pour valider un document XML par rapport à la grammaire spécifiée. Vous allez également apprendre à utiliser la classe XmlSchemaCollection pour mettre en cache des schémas en mémoire afin d’optimiser la validation XML.

Configuration requise

La liste suivante décrit le matériel, les logiciels, l’infrastructure réseau et les Service Packs recommandés dont vous avez besoin : Microsoft Visual Basic 2005 ou Microsoft Visual Basic .NET

Cet article fait référence aux espaces de noms de bibliothèque de classes Microsoft .NET Framework suivants :

  • System.Xml
  • System.Xml.Schema

Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Syntaxe Visual Basic 2005 ou Visual Basic .NET
  • Concepts XML, y compris les problèmes de validation

Créer un document XML

  1. Démarrez Microsoft Visual Studio 2005 ou Microsoft Visual Studio .NET. Ensuite, créez un fichier XML (dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Fichier).

  2. Sélectionnez le type de fichier XML, puis cliquez sur Ouvrir.

  3. Ajoutez les données suivantes au document XML pour représenter un produit dans un catalogue :

    <Product ProductID="123">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  4. Enregistrez le fichier en tant que Product.xml dans un dossier auquel vous pourrez facilement accéder ultérieurement (les exemples de code de cet article supposent un dossier nommé C:\MyFolder).

  1. Dans Visual Studio 2005 ou dans Visual Studio .NET, pointez sur Nouveau dans le menu Fichier, puis cliquez sur Fichier.

  2. Sélectionnez le type De fichier texte, puis cliquez sur Ouvrir.

  3. Ajoutez les déclarations DTD suivantes au fichier pour décrire la grammaire du document XML :

    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    
  4. Enregistrez le fichier sous Product.dtd dans le même dossier que votre document XML.

  5. Rouvrez Product.xml dans Visual Studio 2005 ou dans Visual Studio .NET ; pour ce faire, pointez sur Ouvrir dans le menu Fichier, puis cliquez sur Fichier. Ajoutez une instruction DOCTYPE (sous la ?xml version="1.0" ligne), comme suit. Cela lie le document XML au fichier DTD).

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    
  6. Enregistrez le document XML modifié sousProductWithDTD.xml.

Effectuer la validation à l’aide d’un DTD

  1. Dans Visual Studio 2005 ou dans Visual Studio .NET, créez un projet d’application console Visual Basic nommé ValidateXmlUsingVB.

  2. Visual Studio 2005 ou Visual Studio .NET affiche un nouveau fichier nommé Module1.vb. Au début de ce fichier, ajoutez deux instructions Imports, comme suit :

    Imports System.Xml ' For XmlTextReader and XmlValidatingReader
    Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
    
  3. Dans Module1 (avant le début de la sous-routine principale), déclarez une variable booléenne nommée isValid, comme suit :

    'If a validation error occurs,
    ' you will set this flag to False 
    ' in the validation event handler. 
    Private isValid As Boolean = True
    
  4. Dans la sous-routine Main, créez un objet XmlTextReader pour lire un document XML à partir d’un fichier texte. Ensuite, créez un XmlValidatingReader objet pour valider ces données XML :

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml")
    Dim v As New XmlValidatingReader(r)
    
  5. L’objet XmlValidatingReader a une propriété ValidationType, qui indique le type de validation requis (DTD, XDR ou Schema). Définissez cette propriété sur DTD, comme suit :

    v.ValidationType = ValidationType.DTD
    
  6. Si des erreurs de validation se produisent, le lecteur de validation génère un événement de validation. Ajoutez le code suivant pour inscrire un gestionnaire d’événements de validation (vous allez implémenter la sous-routine MyValidationEventHandler à l’étape 8 de cette section) :

    AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
    
  7. Ajoutez le code suivant pour lire et valider le document XML. Si des erreurs de validation se produisent, MyValidationEventHandler est appelé pour gérer l’erreur. Cette sous-routine aura la valeur isValidFalse (voir l’étape 8 de cette section). Vous pouvez case activée le status de isValid après validation pour voir si le document est valide ou non valide.

    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. Après la sous-routine Main, écrivez la sous-routine MyValidationEventHandler, comme suit :

    Public Sub MyValidationEventHandler(ByVal sender As Object, _
     ByVal args As ValidationEventArgs)
         isValid = False
         Console.WriteLine("Validation event" & vbCrLf & args.Message)
    End Sub
    
  9. Générez et exécutez l’application.

L’application doit signaler que le document XML est valide. 10. Dans Visual Studio 2005 ou dans Visual Studio .NET, modifiez ProductWithDTD.xml pour le rendre non valide (par exemple, supprimez l’élément ProductName Rugby jersey/ ProductName ). 11. Réexécutez l’application.

L’application doit afficher le message d’erreur suivant :

L’élément d’événement de validation 'Product' a un contenu incomplet. « ProductName » attendu. Une erreur s’est produite à file:///C:/MyFolder/ProductWithDTD.xml(4, 3). Le document n’est pas valide

  1. Dans Visual Studio 2005 ou dans Visual Studio .NET, pointez sur Nouveau dans le menu Fichier, puis cliquez sur Fichier.

  2. Sélectionnez le type De fichier texte, puis cliquez sur Ouvrir.

  3. Ajoutez les définitions de schéma XDR suivantes au fichier pour décrire la grammaire du document 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. Enregistrez le fichier en tant que Product.xdr dans le même dossier que votre document XML.

  5. Rouvrez le Product.xmld’origine , puis liez-le au schéma XDR, comme suit :

    <?xml version="1.0" encoding="utf-8" ?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  6. Enregistrez le document XML modifié sousProductWithXDR.xml.

Effectuer la validation à l’aide d’un schéma XDR

  1. Modifiez votre application afin que XmlTextReader se charge ProductWithXDR.xml, comme suit :

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
    
  2. Définissez sur ValidationType XDR afin que le lecteur de validation effectue la validation XDR, comme suit :

    v.ValidationType = ValidationType.XDR
    
  3. Générez et exécutez l’application.

    L’application doit signaler que le document XML est valide.

  4. Modifiez ProductWithXDR.xml pour le rendre délibérément non valide.

  5. Réexécutez l’application.

    L’application doit signaler une erreur de validation.

  1. Dans Visual Studio .NET, pointez sur Nouveau dans le menu Fichier, puis cliquez sur Fichier.

  2. Sélectionnez le type De fichier texte, puis cliquez sur Ouvrir.

  3. Ajoutez la définition de schéma XSD suivante au fichier pour décrire la grammaire du document 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. Enregistrez le fichier en tant que Product.xsd dans le même dossier que votre document XML.

  5. Rouvrez le Product.xmld’origine , puis liez-le au schéma XSD, comme suit :

    <?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. Enregistrez le document XML modifié sousProductWithXSD.xml.

Effectuer la validation à l’aide d’un schéma XSD

  1. Modifiez votre application afin que le XmlTextReader charge ProductWithXSD.xml, comme suit :

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
    
  2. Définissez sur ValidationType Schéma afin que le lecteur de validation effectue la validation du schéma XSD, comme suit :

    v.ValidationType = ValidationType.Schema
    
  3. Générez et exécutez l’application pour valider le document XML à l’aide du schéma XSD.

    L’application doit signaler que le document XML est valide.

Utiliser des espaces de noms dans le schéma XSD

  1. Dans Visual Studio 2005 ou dans Visual Studio .NET, ouvrez ProductWithXSD.xml. Déclarez un espace de noms par défaut, urn:MyNamespace, dans le document. Modifiez la liaison XSD pour spécifier le schéma XSD afin de valider le contenu de cet espace de noms, comme suit :

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

  3. Ouvrez Product.xsd, cliquez sur l’onglet XML, puis modifiez la balise de début xsd :schema comme suit, afin que le schéma s’applique à l’espace de noms urn:MyNamespace:

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

  5. Exécutez l’application pour valider le document XML à l’aide du schéma XSD.

Espaces de noms de cache

  1. Dans Visual Studio 2005 ou dans Visual Studio .NET, ouvrez Module1.vb. Au début de la sous-routine Main, créez un XmlSchemaCollection objet, comme suit :

    Dim cache As New XmlSchemaCollection()
    
  2. L’objet XmlSchemaCollection vous permet de mettre en cache des schémas en mémoire pour améliorer les performances. Chaque schéma est associé à un espace de noms différent. Ajoutez le code suivant pour mettre en cache Product.xsd :

    cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
    
  3. Après le code qui crée l’objet XmlValidatingReader , ajoutez l’instruction suivante. Cela ajoute le cache de schéma au XmlValidatingReader , afin que le lecteur puisse utiliser les schémas en mémoire.

    v.Schemas.Add(cache)
    

Vérification

  1. Générez et exécutez l’application.
  2. Vérifiez que le document XML est toujours en cours de validation par rapport au schéma XSD.
  3. Apportez des modifications au ProductWithXSD.xml pour le rendre délibérément non valide.
  4. Vérifiez que l’application détecte ces erreurs de validation.