Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
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).
Sélectionnez le type de fichier XML, puis cliquez sur Ouvrir.
Ajoutez les données suivantes au document XML pour représenter un produit dans un catalogue :
<Product ProductID="123"> <ProductName>Rugby jersey</ProductName> </Product>
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
).
Créer un DTD et créer un lien vers le document XML
Dans Visual Studio 2005 ou dans Visual Studio .NET, pointez sur Nouveau dans le menu Fichier, puis cliquez sur Fichier.
Sélectionnez le type de fichier texte, puis cliquez sur Ouvrir.
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)>
Enregistrez le fichier en tant que Product.dtd dans le même dossier que votre document XML.
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">
Enregistrez le document XML modifié en tant que ProductWithDTD.xml.
Effectuer une validation à l’aide d’un DTD
Dans Visual Studio 2005 ou dans Visual Studio .NET, créez un projet d’application console Visual Basic nommé ValidateXmlUsingVB.
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)
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
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)
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
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
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
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
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
Créer un schéma XDR et créer un lien vers le document XML
Dans Visual Studio 2005 ou dans Visual Studio .NET, pointez sur Nouveau dans le menu Fichier, puis cliquez sur Fichier.
Sélectionnez le type de fichier texte, puis cliquez sur Ouvrir.
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>
Enregistrez le fichier en tant que Product.xdr dans le même dossier que votre document XML.
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>
Enregistrez le document XML modifié en tant que ProductWithXDR.xml.
Effectuer une validation à l’aide d’un schéma XDR
Modifiez votre application afin que XmlTextReader charge ProductWithXDR.xml, comme suit :
Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
Définissez la
ValidationType
valeur XDR pour que le lecteur de validation effectue la validation XDR, comme suit :v.ValidationType = ValidationType.XDR
Générez et exécutez l’application.
L’application doit signaler que le document XML est valide.
Modifiez ProductWithXDR.xml pour le rendre délibérément non valide.
Exécutez de nouveau l'application.
L’application doit signaler une erreur de validation.
Créer un schéma XSD et créer un lien vers le document XML
Dans Visual Studio .NET, pointez sur Nouveau dans le menu Fichier, puis cliquez sur Fichier.
Sélectionnez le type de fichier texte, puis cliquez sur Ouvrir.
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>
Enregistrez le fichier en tant que Product.xsd dans le même dossier que votre document XML.
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>
Enregistrez le document XML modifié en tant que ProductWithXSD.xml.
Effectuer une validation à l’aide d’un schéma XSD
Modifiez votre application afin que les
XmlTextReader
chargements ProductWithXSD.xml, comme suit :Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
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
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
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 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>
Enregistrez ProductWithXSD.xml.
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">
Enregistrez Product.xsd.
Exécutez l’application pour valider le document XML à l’aide du schéma XSD.
Espaces de noms de cache
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()
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")
Après le code qui crée l’objet
XmlValidatingReader
, ajoutez l’instruction suivante. Cela ajoute le cache de schéma auXmlValidatingReader
lecteur afin que le lecteur puisse utiliser les schémas en mémoire.v.Schemas.Add(cache)
Vérification
- Générez et exécutez l’application.
- Vérifiez que le document XML est toujours validé par rapport au schéma XSD.
- Apportez des modifications à la ProductWithXSD.xml pour le rendre délibérément non valide.
- Vérifiez que l’application détecte ces erreurs de validation.