Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile utilizzare XmlSchemaCollection per convalidare un documento XML rispetto agli schemi XSD (XML Schema Definition Language).
XmlSchemaCollection Migliora le prestazioni archiviando gli schemi nella raccolta in modo che non vengano caricati in memoria ogni volta che viene eseguita la convalida. Se lo schema esiste nella raccolta di schemi, l'attributo schemaLocation viene usato per cercare lo schema nella raccolta.
Importante
La XmlSchemaCollection classe è ora obsoleta ed è stata sostituita con la XmlSchemaSet classe . Per altre informazioni sulla XmlSchemaSet classe, vedere XmlSchemaSet per la compilazione dello schema.
Nell'esempio seguente viene illustrato l'elemento radice di un file di dati.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:bookstore-schema"
elementFormDefault="qualified"
targetNamespace="urn:bookstore-schema">
Per questo esempio, il valore dell'attributo targetNamespace è urn:bookstore-schema, che corrisponde allo stesso spazio dei nomi usato quando si aggiunge lo schema a XmlSchemaCollection.
Nell'esempio di codice seguente viene aggiunto un XML Schema all'oggetto XmlSchemaCollection.
Dim xsc As New XmlSchemaCollection()
' XML Schema.
xsc.Add("urn:bookstore-schema", schema)
reader = New XmlTextReader(filename)
vreader = New XmlValidatingReader(reader)
vreader.Schemas.Add(xsc)
XmlSchemaCollection xsc = new XmlSchemaCollection();
// XML Schema.
xsc.Add("urn:bookstore-schema", schema);
reader = new XmlTextReader (filename);
vreader = new XmlValidatingReader (reader);
vreader.Schemas.Add(xsc);
L'attributo targetNamespace viene in genere usato quando si aggiunge la namespaceURI proprietà nel Add metodo per .XmlSchemaCollection È possibile specificare un riferimento Null prima di aggiungere lo schema a XmlSchemaCollection. Una stringa vuota ("") si dovrebbe usare per gli schemi senza namespace.
XmlSchemaCollection può avere solo uno schema senza namespace.
Nell'esempio di codice seguente viene aggiunto uno Schema XML, HeadCount.xsd, a XmlSchemaCollection e viene eseguita la convalida di HeadCount.xml.
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Namespace ValidationSample
Class Sample
Public Shared Sub Main()
Dim tr As New XmlTextReader("HeadCount.xml")
Dim vr As New XmlValidatingReader(tr)
vr.Schemas.Add("xsdHeadCount", "HeadCount.xsd")
vr.ValidationType = ValidationType.Schema
AddHandler vr.ValidationEventHandler, AddressOf ValidationHandler
While vr.Read()
End While
Console.WriteLine("Validation finished")
End Sub
' Main
Public Shared Sub ValidationHandler(sender As Object, args As ValidationEventArgs)
Console.WriteLine("***Validation error")
Console.WriteLine("Severity:{0}", args.Severity)
Console.WriteLine("Message:{0}", args.Message)
End Sub
' ValidationHandler
End Class
' Sample
End Namespace
' ValidationSample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
namespace ValidationSample
{
class Sample
{
public static void Main()
{
XmlTextReader tr = new XmlTextReader("HeadCount.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.Schemas.Add("xsdHeadCount", "HeadCount.xsd");
vr.ValidationType = ValidationType.Schema;
vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);
while(vr.Read());
Console.WriteLine("Validation finished");
}
public static void ValidationHandler(object sender, ValidationEventArgs args)
{
Console.WriteLine("***Validation error");
Console.WriteLine("\tSeverity:{0}", args.Severity);
Console.WriteLine("\tMessage :{0}", args.Message);
}
}
}
Di seguito viene descritto il contenuto del file di input, HeadCount.xml, da convalidare.
<!--Load HeadCount.xsd in SchemaCollection for Validation-->
<hc:HeadCount xmlns:hc='xsdHeadCount'>
<Name>Waldo Pepper</Name>
<Name>Red Pepper</Name>
</hc:HeadCount>
Di seguito viene descritto il contenuto del file XML Schema, HeadCount.xsd, su cui eseguire la convalida.
<xs:schema xmlns="xsdHeadCount" targetNamespace="xsdHeadCount" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='HeadCount' type="HEADCOUNT"/>
<xs:complexType name="HEADCOUNT">
<xs:sequence>
<xs:element name='Name' type='xs:string' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='division' type='xs:int' use='optional' default='8'/>
</xs:complexType>
</xs:schema>
Nell'esempio di codice seguente viene creato un oggetto XmlValidatingReader che accetta un oggetto XmlTextReader. Il file di input, sample4.xml, viene convalidato in base allo schema XML, sample4.xsd.
Dim tr As New XmlTextReader("sample4.xml")
Dim vr As New XmlValidatingReader(tr)
vr.ValidationType = ValidationType.Schema
vr.Schemas.Add("datatypesTest", "sample4.xsd")
AddHandler vr.ValidationEventHandler, AddressOf ValidationCallBack
While vr.Read()
Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name)
End While
XmlTextReader tr = new XmlTextReader("sample4.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.ValidationType = ValidationType.Schema;
vr.Schemas.Add("datatypesTest", "sample4.xsd");
vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
while(vr.Read()) {
Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
}
Di seguito viene descritto il contenuto del file di input, sample4.xml, da convalidare.
<datatypes xmlns="datatypesTest">
<number>
<number_1>123</number_1>
</number>
</datatypes>
Di seguito viene descritto il contenuto del file xml Schema, sample4.xsd, per la convalida.
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="datatypesTest"
targetNamespace="datatypesTest"
elementFormDefault="qualified">
<xs:element name = "datatypes">
<xs:complexType>
<xs:all>
<xs:element name="number">
<xs:complexType>
<xs:sequence>
<xs:element name="number_1" type="xs:decimal" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>