Validation à l'aide de XmlSchemaSet
Mise à jour : November 2007
L'objet XmlSchemaSet est un cache ou une bibliothèque où des schémas de langage XSD (XML Schema Definition) peuvent être stockés. L'objet XmlSchemaSet améliore les performances en mettant les schémas en cache au lieu d'y accéder à partir d'un fichier ou d'une URL. Chaque schéma de l'objet XmlSchemaSet est identifié par l'URI d'espace de noms et l'emplacement de schéma spécifiés lorsque le schéma a été ajouté à l'objet XmlSchemaSet. La propriété Schemas assigne l'objet XmlSchemaSet à utiliser.
Exemple
L'exemple suivant valide un fichier XML à l'aide des schémas stockés dans l'objet XmlSchemaSet. L'espace de noms dans le fichier XML, urn:bookstore-schema, identifie le schéma dans l'objet XmlSchemaSet à utiliser pour la validation.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
public class Sample
public shared sub Main()
' Create the XmlSchemaSet class.
Dim sc as XmlSchemaSet = new XmlSchemaSet()
' Add the schema to the collection.
sc.Add("urn:bookstore-schema", "books.xsd")
' Set the validation settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas = sc
AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("booksSchemaFail.xml", settings)
' Parse the file.
while reader.Read()
end while
end sub
' Display any validation errors.
private shared sub ValidationCallBack(sender as object, e as ValidationEventArgs)
Console.WriteLine("Validation Error: {0}", e.Message)
end sub
end class
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class Sample {
public static void Main() {
// Create the XmlSchemaSet class.
XmlSchemaSet sc = new XmlSchemaSet();
// Add the schema to the collection.
sc.Add("urn:bookstore-schema", "books.xsd");
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = sc;
settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);
// Parse the file.
while (reader.Read());
}
// Display any validation errors.
private static void ValidationCallBack(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message);
}
}
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::IO;
// Display any validation errors.
static void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ e )
{
Console::WriteLine( L"Validation Error: {0}", e->Message );
}
int main()
{
// Create the XmlSchemaSet class.
XmlSchemaSet^ sc = gcnew XmlSchemaSet;
// Add the schema to the collection.
sc->Add( L"urn:bookstore-schema", L"books.xsd" );
// Set the validation settings.
XmlReaderSettings^ settings = gcnew XmlReaderSettings;
settings->ValidationType = ValidationType::Schema;
settings->Schemas = sc;
settings->ValidationEventHandler += gcnew ValidationEventHandler( ValidationCallBack );
// Create the XmlReader object.
XmlReader^ reader = XmlReader::Create( L"booksSchemaFail.xml", settings );
// Parse the file.
while ( reader->Read() )
;
return 1;
}
Entrée
L'exemple utilise les deux fichiers d'entrée suivants.
booksSchemaFail.xml
<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
<book>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
</book>
<book genre="novel">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
books.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:bookstore-schema"
elementFormDefault="qualified"
targetNamespace="urn:bookstore-schema">
<xsd:element name="bookstore" type="bookstoreType"/>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="authorName"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string"/>
<xsd:element name="last-name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Sortie
Erreur de validation : L'élément « book » dans l'espace de noms « urn:bookstore-schema » comporte l'élément enfant non valide « author » dans l'espace de noms « urn:bookstore-schema ». Élément « title » attendu dans l'espace de noms « urn:bookstore-schema ».
Erreur de validation : L'élément « author » dans l'espace de noms « urn:bookstore-schema » comporte l'élément enfant non valide « name » dans l'espace de noms « urn:bookstore-schema ». Élément « first-name » attendu dans l'espace de noms « urn:bookstore-schema ».