Aracılığıyla paylaş


XmlSchemaCollection ile XML Şeması (XSD) Doğrulaması

XML belgesini XML Şema tanım dili (XSD) şemalarına göre doğrulamak için kullanabilirsiniz XmlSchemaCollection . , XmlSchemaCollection doğrulama her gerçekleştiğinde belleğe yüklenmemeleri için şemaları koleksiyonda depolayarak performansı artırır. Şema, şema koleksiyonunda varsa, schemaLocation özniteliği koleksiyondaki şemayı aramak için kullanılır.

Önemli

Sınıf XmlSchemaCollection artık kullanımdan kaldırıldı ve sınıfıyla XmlSchemaSet değiştirildi. Sınıfı hakkında XmlSchemaSet daha fazla bilgi için bkz . Şema Derlemesi için XmlSchemaSet.

Aşağıdaki örnekte bir veri dosyasının kök öğesi gösterilmektedir.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns="urn:bookstore-schema"  
    elementFormDefault="qualified"  
    targetNamespace="urn:bookstore-schema">  

Bu örnekte özniteliğinin targetNamespace değeri, urn:bookstore-schemaşemasını öğesine eklerken kullanılan ad alanıyla XmlSchemaCollectionaynıdır.

Aşağıdaki kod örneği öğesine XmlSchemaCollectionbir XML Şeması ekler.

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);  

targetNamespace özniteliği genellikle için yöntemine namespaceURIAddXmlSchemaCollectionözelliğini eklediğinizde kullanılır. şemasını XmlSchemaCollectionöğesine eklemeden önce null başvuru belirtebilirsiniz. Ad alanı olmayan şemalar için boş bir dize ("") kullanılmalıdır. XmlSchemaCollection ad alanı olmayan tek bir şemaya sahip olabilir.

Aşağıdaki kod örneği, öğesine HeadCount.xsd XmlSchemaCollection xml şeması ekler ve HeadCount.xml doğrular.

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);  
      }  
   }  
}  

Aşağıda, doğrulanacak HeadCount.xml giriş dosyasının içeriği özetlenmiştir.

<!--Load HeadCount.xsd in SchemaCollection for Validation-->  
<hc:HeadCount xmlns:hc='xsdHeadCount'>  
   <Name>Waldo Pepper</Name>  
   <Name>Red Pepper</Name>  
</hc:HeadCount>  

Aşağıda, doğrulanacak HEADCount.xsd XML Şeması dosyasının içeriği özetlenmiştir.

<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>  

Aşağıdaki kod örneği, bir XmlValidatingReader alan XmlTextReaderoluşturur. sample4.xml giriş dosyası, sample4.xsd XML Şemasına göre doğrulanır.

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);  
    }  

Aşağıda, doğrulanacak sample4.xml giriş dosyasının içeriği özetlenmiştir.

<datatypes xmlns="datatypesTest">  
    <number>  
        <number_1>123</number_1>  
    </number>  
</datatypes>  

Aşağıda, doğrulanacak XML Şema dosyasının (sample4.xsd) içeriği özetlenmiştir.

<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>  

Ayrıca bkz.