XmlValidatingReader.Schemas Propriedade
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um XmlSchemaCollection que será usado para validação.
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
O XmlSchemaCollection
a ser usado para validação.
O exemplo a seguir valida três arquivos XML usando esquemas armazenados no 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
O exemplo usa os seguintes cinco arquivos de entrada:
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>
Observação
A XmlValidatingReader classe está obsoleta no .NET Framework 2.0. Você pode criar uma instância de validação XmlReader usando a XmlReaderSettings classe e o Create método. Para obter mais informações, consulte a seção de Comentários da página de referência XmlReader.
As XmlSchemaCollection
retenções são pré-carregadas XML-Data esquemas XDR (XDR) e XSD (linguagem de definição de esquema XML). Essa propriedade fornece ao leitor acesso ao cache de esquemas e permite que ele valide sem precisar recarregar esquemas sempre. O leitor não adiciona nada ao XmlSchemaCollection
.
Se incluir XmlSchemaCollection
um esquema XML (XSD) que contém ou import
elementos que fazem include
referência a outros namespaces, os esquemas para esses outros namespaces serão carregados somente para fins de validação. A menos que esses esquemas tenham sido explicitamente adicionados à coleção de esquemas, eles não estarão acessíveis usando nenhum dos métodos ou propriedades da coleção. Por exemplo, se a coleção contiver o arquivo a.xsd
de esquema, que contém uma referência ao arquivo b.xsd
de esquema, você deverá adicionar b.xsd
à coleção de esquemas antes de acessá-lo usando qualquer um dos métodos ou propriedades da coleção.
Quando é XmlSchemaCollection
acessado usando a Schemas
propriedade, o XmlSchemaCollection.Add método usa o XmlResolver especificado pela XmlValidatingReader.XmlResolver propriedade.
Observação
Os esquemas devem ser adicionados à XmlSchemaCollection
chamada anterior à primeira Read
chamada.