XmlValidatingReader.Schemas Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient un XmlSchemaCollection à utiliser pour la validation.
public:
property System::Xml::Schema::XmlSchemaCollection ^ Schemas { System::Xml::Schema::XmlSchemaCollection ^ get(); };
public System.Xml.Schema.XmlSchemaCollection Schemas { get; }
member this.Schemas : System.Xml.Schema.XmlSchemaCollection
Public ReadOnly Property Schemas As XmlSchemaCollection
Valeur de propriété
XmlSchemaCollection
à utiliser pour la validation.
Exemples
L’exemple suivant valide trois fichiers XML à l’aide de schémas stockés dans xmlSchemaCollection.
#using <System.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;
public ref class SchemaCollectionSample
{
private:
XmlTextReader^ reader;
XmlValidatingReader^ vreader;
Boolean m_success;
public:
SchemaCollectionSample()
{
reader = nullptr;
vreader = nullptr;
m_success = true;
//Load the schema collection.
XmlSchemaCollection^ xsc = gcnew XmlSchemaCollection;
String^ schema = "books.xsd";
String^ schema1 = "schema1.xdr";
xsc->Add( "urn:bookstore-schema", schema ); //XSD schema
xsc->Add( "urn:newbooks-schema", schema1 ); //XDR schema
String^ doc1 = "booksSchema.xml";
String^ doc2 = "booksSchemaFail.xml";
String^ doc3 = "newbooks.xml";
//Validate the files using schemas stored in the collection.
Validate( doc1, xsc ); //Should pass.
Validate( doc2, xsc ); //Should fail.
Validate( doc3, xsc ); //Should fail.
}
private:
void Validate( String^ filename, XmlSchemaCollection^ xsc )
{
m_success = true;
Console::WriteLine();
Console::WriteLine( "Validating XML file {0}...", filename );
reader = gcnew XmlTextReader( filename );
//Create a validating reader.
vreader = gcnew XmlValidatingReader( reader );
//Validate using the schemas stored in the schema collection.
vreader->Schemas->Add( xsc );
//Set the validation event handler
vreader->ValidationEventHandler += gcnew ValidationEventHandler( this, &SchemaCollectionSample::ValidationCallBack );
//Read and validate the XML data.
while ( vreader->Read() )
{}
Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful" : "failed") );
Console::WriteLine();
//Close the reader.
vreader->Close();
}
void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ args )
{
m_success = false;
Console::Write( "\r\n\tValidation error: {0}", args->Message );
}
};
int main()
{
gcnew SchemaCollectionSample;
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
public class SchemaCollectionSample
{
private const String doc1 = "booksSchema.xml";
private const String doc2 = "booksSchemaFail.xml";
private const String doc3 = "newbooks.xml";
private const String schema = "books.xsd";
private const String schema1 = "schema1.xdr";
private XmlTextReader reader=null;
private XmlValidatingReader vreader = null;
private Boolean m_success = true;
public SchemaCollectionSample ()
{
//Load the schema collection.
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn:bookstore-schema", schema); //XSD schema
xsc.Add("urn:newbooks-schema", schema1); //XDR schema
//Validate the files using schemas stored in the collection.
Validate(doc1, xsc); //Should pass.
Validate(doc2, xsc); //Should fail.
Validate(doc3, xsc); //Should fail.
}
public static void Main ()
{
SchemaCollectionSample validation = new SchemaCollectionSample();
}
private void Validate(String filename, XmlSchemaCollection xsc)
{
m_success = true;
Console.WriteLine();
Console.WriteLine("Validating XML file {0}...", filename.ToString());
reader = new XmlTextReader (filename);
//Create a validating reader.
vreader = new XmlValidatingReader (reader);
//Validate using the schemas stored in the schema collection.
vreader.Schemas.Add(xsc);
//Set the validation event handler
vreader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
//Read and validate the XML data.
while (vreader.Read()){}
Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful" : "failed"));
Console.WriteLine();
//Close the reader.
vreader.Close();
}
private void ValidationCallBack (object sender, ValidationEventArgs args)
{
m_success = false;
Console.Write("\r\n\tValidation error: " + args.Message);
}
}
Option Strict
Option Explicit
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Public Class SchemaCollectionSample
Private doc1 As String = "booksSchema.xml"
Private doc2 As String = "booksSchemaFail.xml"
Private doc3 As String = "newbooks.xml"
Private schema As String = "books.xsd"
Private schema1 As String = "schema1.xdr"
Private reader As XmlTextReader = Nothing
Private vreader As XmlValidatingReader = Nothing
Private m_success As Boolean = True
Public Sub New()
'Load the schema collection
Dim xsc As New XmlSchemaCollection()
xsc.Add("urn:bookstore-schema", schema) 'XSD schema
xsc.Add("urn:newbooks-schema", schema1) 'XDR schema
'Validate the files using schemas stored in the collection.
Validate(doc1, xsc) 'Should pass.
Validate(doc2, xsc) 'Should fail.
Validate(doc3, xsc) 'Should fail.
End Sub
Public Shared Sub Main()
Dim validation As New SchemaCollectionSample()
End Sub
Private Sub Validate(filename As String, xsc As XmlSchemaCollection)
m_success = True
Console.WriteLine()
Console.WriteLine("Validating XML file {0}...", filename.ToString())
reader = New XmlTextReader(filename)
'Create a validating reader.
vreader = New XmlValidatingReader(reader)
'Use the schemas stored in the schema collection.
vreader.Schemas.Add(xsc)
'Set the validation event handler.
AddHandler vreader.ValidationEventHandler, AddressOf ValidationCallBack
'Read and validate the XML data.
While vreader.Read()
End While
Console.WriteLine("Validation finished. Validation {0}", IIf(m_success, "successful", "failed"))
Console.WriteLine()
'Close the reader.
vreader.Close()
End Sub
Private Sub ValidationCallBack(sender As Object, args As ValidationEventArgs)
m_success = False
Console.Write((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))
End Sub
End Class
L’exemple utilise les cinq fichiers d’entrée suivants :
booksSchema.xml
<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
<book genre="autobiography">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</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>
</bookstore>
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>
newbooks.xml
<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
<book genre="novel" style="hardcover">
<title>The Handmaid's Tale</title>
<author>
<first-name>Margaret</first-name>
<last-name>Atwood</last-name>
</author>
<price>19.95</price>
</book>
<book genre="novel" style="other">
<title>The Poisonwood Bible</title>
<author>
<first-name>Barbara</first-name>
<last-name>Kingsolver</last-name>
</author>
<price>11.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>
schema1.xdr
<?xml version="1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="first-name" content="textOnly"/>
<ElementType name="last-name" content="textOnly"/>
<ElementType name="name" content="textOnly"/>
<ElementType name="price" content="textOnly" dt:type="fixed.14.4"/>
<ElementType name="author" content="eltOnly" order="one">
<group order="seq">
<element type="name"/>
</group>
<group order="seq">
<element type="first-name"/>
<element type="last-name"/>
</group>
</ElementType>
<ElementType name="title" content="textOnly"/>
<AttributeType name="genre" dt:type="string"/>
<AttributeType name="style" dt:type="enumeration"
dt:values="paperback hardcover"/>
<ElementType name="book" content="eltOnly">
<attribute type="genre" required="yes"/>
<attribute type="style" required="yes"/>
<element type="title"/>
<element type="author"/>
<element type="price"/>
</ElementType>
<ElementType name="bookstore" content="eltOnly">
<element type="book"/>
</ElementType>
</Schema>
Remarques
Notes
La XmlValidatingReader classe est obsolète dans .NET Framework 2.0. Vous pouvez créer une instance de validation à XmlReader l’aide de la XmlReaderSettings classe et de la Create méthode . Pour plus d'informations, consultez la section Notes de la page de référence XmlReader.
Le XmlSchemaCollection
contient des schémas préchargés XML-Data XDR (XDR) et XSD (XML Schema Definition Language). Cette propriété donne au lecteur l’accès au cache des schémas et lui permet de valider sans avoir à recharger les schémas à chaque fois. Le lecteur n’ajoute rien au XmlSchemaCollection
.
Si inclut XmlSchemaCollection
un schéma XML (XSD) qui contient ou import
des include
éléments qui référencent d’autres espaces de noms, les schémas de ces autres espaces de noms sont chargés uniquement à des fins de validation. À moins que ces schémas n’aient été explicitement ajoutés à la collection de schémas, ils ne seront accessibles à l’aide d’aucune des méthodes ou propriétés de collection. Par exemple, si la collection contient le fichier a.xsd
de schéma , qui contient une référence au fichier b.xsd
de schéma , vous devez ajouter b.xsd
à la collection de schémas avant de pouvoir y accéder à l’aide de l’une des méthodes ou propriétés de la collection.
Lorsque le XmlSchemaCollection
est accessible à l’aide de la Schemas
propriété, la XmlSchemaCollection.Add méthode utilise le XmlResolver spécifié par la XmlValidatingReader.XmlResolver propriété .
Notes
Les schémas doivent être ajoutés à avant XmlSchemaCollection
le premier Read
appel.