Partager via


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

Cet article montre comment utiliser la XmlValidatingReader classe pour valider un document XML sur 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 du produit d’origine : Visual Basic
Numéro de base de connaissances d’origine : 315533

Résumé

Les documents XML (Extensible Markup Language) contiennent des éléments et des attributs, et offrent 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 Language).

Les schémas XSD sont la méthode recommandée pour spécifier des grammaires XML dans le .NET Framework, mais les DTD et les schémas 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 dans 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.

Spécifications

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 serez en mesure d’accéder facilement ultérieurement (les exemples de code de cet article supposent qu’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 en tant que 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é en tant que ProductWithDTD.xml.

Effectuer une 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 principale, 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 a isValid la valeur False (voir l’étape 8 de cette section). Vous pouvez vérifier l’état 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 principale, é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 du 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.xml d’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é en tant que ProductWithXDR.xml.

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

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

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
    
  2. Définissez la ValidationType valeur XDR pour 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. Exécutez de nouveau 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.xml d’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é en tant que ProductWithXSD.xml.

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

  1. Modifiez votre application afin que les XmlTextReader chargements ProductWithXSD.xml, comme suit :

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
    
  2. Définissez le ValidationType schéma pour que le lecteur de validation effectue la validation de 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:MyNamespacedans le document. Modifiez la liaison XSD pour spécifier le schéma XSD pour valider le contenu dans 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émarrage 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 principale, 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 lecteur 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 validé par rapport au schéma XSD.
  3. Apportez des modifications à la ProductWithXSD.xml pour le rendre délibérément non valide.
  4. Vérifiez que l’application détecte ces erreurs de validation.