İngilizce dilinde oku

Aracılığıyla paylaş


XmlSchemaValidator Gönderim Temelli Doğrulaması

XmlSchemaValidator sınıfı, XML verilerini XML şemalarına karşı gönderme tabanlı bir şekilde doğrulamak için verimli, yüksek performanslı bir mekanizma sağlar. Örneğin, sınıfı XML XmlSchemaValidator bilgi kümesini XML belgesi olarak seri hale getirmek zorunda kalmadan yerinde doğrulamanıza ve ardından belgeyi doğrulayan bir XML okuyucu kullanarak yeniden ayrıştırmanıza olanak tanır.

sınıfı, XmlSchemaValidator özel XML veri kaynakları üzerinden doğrulama altyapıları oluşturma gibi gelişmiş senaryolarda veya doğrulayıcı xml yazıcı oluşturmanın bir yolu olarak kullanılabilir.

Aşağıda, dosyasını şemaya XmlSchemaValidator göre doğrulamak için sınıfını contosoBooks.xml kullanma örneği verilmiştir contosoBooks.xsd . Örnek, dosyasını seri durumdan contosoBooks.xml çıkarmak ve düğümlerin değerini sınıfın yöntemlerine geçirmek için sınıfını XmlSchemaValidator kullanırXmlSerializer.

Not

Bu örnek, bu konunun tüm bölümlerinde kullanılır.

C#
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Collections;

namespace Microsoft.Samples.Xml.Schema
{
    class XmlSchemaValidatorExamples
    {
        static void Main()
        {
            // The XML document to deserialize into the XmlSerializer object.
            XmlReader reader = XmlReader.Create("contosoBooks.xml");

            // The XmlSerializer object.
            XmlSerializer serializer = new XmlSerializer(typeof(ContosoBooks));
            ContosoBooks books = (ContosoBooks)serializer.Deserialize(reader);

            // The XmlSchemaSet object containing the schema used to validate the XML document.
            XmlSchemaSet schemaSet = new XmlSchemaSet();
            schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd");

            // The XmlNamespaceManager object used to handle namespaces.
            XmlNamespaceManager manager = new XmlNamespaceManager(reader.NameTable);

            // Assign a ValidationEventHandler to handle schema validation warnings and errors.
            XmlSchemaValidator validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
            validator.ValidationEventHandler += new ValidationEventHandler(SchemaValidationEventHandler);

            // Initialize the XmlSchemaValidator object.
            validator.Initialize();

            // Validate the bookstore element, verify that all required attributes are present
            // and prepare to validate child content.
            validator.ValidateElement("bookstore", "http://www.contoso.com/books", null);
            validator.GetUnspecifiedDefaultAttributes(new ArrayList());
            validator.ValidateEndOfAttributes(null);

            // Get the next expected element in the bookstore context.
            XmlSchemaParticle[] particles = validator.GetExpectedParticles();
            XmlSchemaElement nextElement = particles[0] as XmlSchemaElement;
            Console.WriteLine("Expected Element: '{0}'", nextElement.Name);

            foreach (BookType book in books.Book)
            {
                // Validate the book element.
                validator.ValidateElement("book", "http://www.contoso.com/books", null);

                // Get the expected attributes for the book element.
                Console.Write("\nExpected attributes: ");
                XmlSchemaAttribute[] attributes = validator.GetExpectedAttributes();
                foreach (XmlSchemaAttribute attribute in attributes)
                {
                    Console.Write("'{0}' ", attribute.Name);
                }
                Console.WriteLine();

                // Validate the genre attribute and display its post schema validation information.
                if (book.Genre != null)
                {
                    validator.ValidateAttribute("genre", "", book.Genre, schemaInfo);
                }
                DisplaySchemaInfo();

                // Validate the publicationdate attribute and display its post schema validation information.
                if (book.PublicationDate != null)
                {
                    validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo);
                }
                DisplaySchemaInfo();

                // Validate the ISBN attribute and display its post schema validation information.
                if (book.Isbn != null)
                {
                    validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo);
                }
                DisplaySchemaInfo();

                // After validating all the attributes for the current element with ValidateAttribute method,
                // you must call GetUnspecifiedDefaultAttributes to validate the default attributes.
                validator.GetUnspecifiedDefaultAttributes(new ArrayList());

                // Verify that all required attributes of the book element are present
                // and prepare to validate child content.
                validator.ValidateEndOfAttributes(null);

                // Validate the title element and its content.
                validator.ValidateElement("title", "http://www.contoso.com/books", null);
                validator.ValidateEndElement(null, book.Title);

                // Validate the author element, verify that all required attributes are present
                // and prepare to validate child content.
                validator.ValidateElement("author", "http://www.contoso.com/books", null);
                validator.GetUnspecifiedDefaultAttributes(new ArrayList());
                validator.ValidateEndOfAttributes(null);

                if (book.Author.Name != null)
                {
                    // Validate the name element and its content.
                    validator.ValidateElement("name", "http://www.contoso.com/books", null);
                    validator.ValidateEndElement(null, book.Author.Name);
                }

                if (book.Author.FirstName != null)
                {
                    // Validate the first-name element and its content.
                    validator.ValidateElement("first-name", "http://www.contoso.com/books", null);
                    validator.ValidateEndElement(null, book.Author.FirstName);
                }

                if (book.Author.LastName != null)
                {
                    // Validate the last-name element and its content.
                    validator.ValidateElement("last-name", "http://www.contoso.com/books", null);
                    validator.ValidateEndElement(null, book.Author.LastName);
                }

                // Validate the content of the author element.
                validator.ValidateEndElement(null);

                // Validate the price element and its content.
                validator.ValidateElement("price", "http://www.contoso.com/books", null);
                validator.ValidateEndElement(null, book.Price);

                // Validate the content of the book element.
                validator.ValidateEndElement(null);
            }

            // Validate the content of the bookstore element.
            validator.ValidateEndElement(null);

            // Close the XmlReader object.
            reader.Close();
        }

        static XmlSchemaInfo schemaInfo = new XmlSchemaInfo();
        static object dateTimeGetterContent;

        static object dateTimeGetterHandle()
        {
            return dateTimeGetterContent;
        }

        static XmlValueGetter dateTimeGetter(DateTime dateTime)
        {
            dateTimeGetterContent = dateTime;
            return new XmlValueGetter(dateTimeGetterHandle);
        }

        static void DisplaySchemaInfo()
        {
            if (schemaInfo.SchemaElement != null)
            {
                Console.WriteLine("Element '{0}' with type '{1}' is '{2}'",
                    schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity);
            }
            else if (schemaInfo.SchemaAttribute != null)
            {
                Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'",
                    schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity);
            }
        }

        static void SchemaValidationEventHandler(object sender, ValidationEventArgs e)
        {
            switch (e.Severity)
            {
                case XmlSeverityType.Error:
                    Console.WriteLine("\nError: {0}", e.Message);
                    break;
                case XmlSeverityType.Warning:
                    Console.WriteLine("\nWarning: {0}", e.Message);
                    break;
            }
        }
    }

    [XmlRootAttribute("bookstore", Namespace = "http://www.contoso.com/books", IsNullable = false)]
    public class ContosoBooks
    {
        [XmlElementAttribute("book")]
        public BookType[] Book;
    }

    public class BookType
    {
        [XmlAttributeAttribute("genre")]
        public string Genre;

        [XmlAttributeAttribute("publicationdate", DataType = "date")]
        public DateTime PublicationDate;

        [XmlAttributeAttribute("ISBN")]
        public string Isbn;

        [XmlElementAttribute("title")]
        public string Title;

        [XmlElementAttribute("author")]
        public BookAuthor Author;

        [XmlElementAttribute("price")]
        public Decimal Price;
    }

    public class BookAuthor
    {
        [XmlElementAttribute("name")]
        public string Name;

        [XmlElementAttribute("first-name")]
        public string FirstName;

        [XmlElementAttribute("last-name")]
        public string LastName;
    }
}

Örnek, dosyayı giriş olarak alır contosoBooks.xml .

XML
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <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" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <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" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

Örnek, giriş olarak da alır contosoBooks.xsd .

XML
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:date" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XmlSchemaValidator kullanarak XML Verilerini Doğrulama

XML bilgi kümesini doğrulamaya başlamak için önce oluşturucuyu kullanarak XmlSchemaValidator sınıfın XmlSchemaValidator yeni bir örneğini başlatmanız gerekir.

OluşturucuXmlSchemaValidator, parametre olarak , XmlSchemaSetve XmlNamespaceManager nesnelerinin yanı sıra parametre olarak da bir XmlSchemaValidationFlags değer alırXmlNameTable. XmlNameTable nesnesi şema ad alanı, XML ad alanı vb. gibi bilinen ad alanı dizelerini atomize etmek için kullanılır ve basit içerik doğrulanırken yöntemine ParseValue geçirilir. nesnesi, XmlSchemaSet XML bilgi kümesi doğrulamak için kullanılan XML şemalarını içerir. XmlNamespaceManager nesnesi, doğrulama sırasında karşılaşılan ad alanlarını çözümlemek için kullanılır. XmlSchemaValidationFlags değeri, doğrulamanın belirli özelliklerini devre dışı bırakmak için kullanılır.

Oluşturucu hakkında XmlSchemaValidator daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Doğrulama Başlat

Bir XmlSchemaValidator nesne oluşturulduktan sonra, nesnenin XmlSchemaValidator durumunu başlatmak için kullanılan iki aşırı yüklenmiş Initialize yöntem vardır. aşağıdaki iki Initialize yöntemdir.

Varsayılan XmlSchemaValidator.Initialize yöntem bir XmlSchemaValidator nesneyi başlangıç durumuna başlatır ve parametre olarak alan XmlSchemaObject aşırı yüklenmiş XmlSchemaValidator.Initialize yöntem, kısmi doğrulama için bir XmlSchemaValidator nesneyi başlangıç durumuna başlatır.

Her iki Initialize yöntem de yalnızca bir XmlSchemaValidator nesne oluşturulduktan hemen sonra veya çağrısı EndValidationyapıldıktan hemen sonra çağrılabilir.

Yöntemin XmlSchemaValidator.Initialize bir örneği için girişteki örne bakın. yöntemi hakkında Initialize daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Kısmi Doğrulama

XmlSchemaValidator.Initialize parametre olarak alan XmlSchemaObject yöntem, kısmi doğrulama için bir XmlSchemaValidator nesneyi başlangıç durumuna başlatır.

Aşağıdaki örnekte, yöntemi kullanılarak XmlSchemaValidator.Initialize kısmi doğrulama için bir XmlSchemaObject başlatılır. orderNumber Şema öğesi, nesnesinin özelliği XmlSchemaSet tarafından döndürülen koleksiyonda XmlSchemaObjectTable tarafından şema öğesi XmlQualifiedName seçilerek GlobalElements geçirilir. Nesne XmlSchemaValidator daha sonra bu öğeyi doğrular.

C#
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(null, "schema.xsd");
schemaSet.Compile();
NameTable nameTable = new NameTable();
XmlNamespaceManager manager = new XmlNamespaceManager(nameTable);

XmlSchemaValidator validator = new XmlSchemaValidator(nameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
validator.Initialize(schemaSet.GlobalElements[new XmlQualifiedName("orderNumber")]);

validator.ValidateElement("orderNumber", "", null);
validator.ValidateEndOfAttributes(null);
validator.ValidateText("123");
validator.ValidateEndElement(null);

Örnek, giriş olarak aşağıdaki XML şemasını alır.

XML
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="orderNumber" type="xs:int" />
</xs:schema>

yöntemi hakkında Initialize daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Ek Şema ekleme

AddSchema sınıfının yöntemiXmlSchemaValidator, doğrulama sırasında kullanılan şema kümesine xml şeması eklemek için kullanılır. yöntemi, AddSchema doğrulanan XML bilgi kümesinde bir satır içi XML şemasıyla karşılaşmanın etkisinin benzetimini yapmak için kullanılabilir.

Not

parametresinin XmlSchema hedef ad alanı, nesne tarafından zaten karşılaşılan herhangi bir öğe veya özniteliğin ad alanıyla XmlSchemaValidator eşleşemez.

Değer oluşturucuya XmlSchemaValidationFlags.ProcessInlineSchema XmlSchemaValidator parametre olarak geçirilmediyse, AddSchema yöntemi hiçbir şey yapmaz.

yönteminin AddSchema sonucu geçerli XML düğümü bağlamının doğrulandığına bağlıdır. Doğrulama bağlamları hakkında daha fazla bilgi için bu konunun "Doğrulama Bağlamı" bölümüne bakın.

yöntemi hakkında AddSchema daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Öğeleri, Öznitelikleri ve İçeriği Doğrulama

sınıfı xml XmlSchemaValidator şemalarına karşı bir XML bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan çeşitli yöntemler sağlar. Aşağıdaki tabloda bu yöntemlerin her biri açıklanmaktadır.

Metot Açıklama
ValidateElement Geçerli bağlamda öğe adını doğrular.
ValidateAttribute Geçerli öğe bağlamında veya yöntemine parametre olarak geçirilen nesneye karşı XmlSchemaAttribute özniteliğini Initialize doğrular.
ValidateEndOfAttributes Öğe bağlamındaki tüm gerekli özniteliklerin mevcut olup olmadığını doğrular ve öğesinin XmlSchemaValidator alt içeriğini doğrulamak için nesnesini hazırlar.
ValidateText Geçerli öğe bağlamında metne izin verilip verilmeyeceğini doğrular ve geçerli öğenin basit içeriği varsa doğrulama için metni biriktirir.
ValidateWhitespace Geçerli öğe bağlamında boşluklara izin verilip verilmeyeceğini doğrular ve geçerli öğenin basit içeriği olup olmadığını doğrulamak için boşluk biriktirir.
ValidateEndElement Öğenin metin içeriğinin basit içeriğe sahip öğeler için veri türüne göre geçerli olup olmadığını doğrular ve geçerli öğenin içeriğinin karmaşık içeriğe sahip öğeler için tamamlanıp tamamlanmadığını doğrular.
SkipToEndElement Geçerli öğe içeriğini doğrulamayı atlar ve nesneyi üst öğenin bağlamındaki içeriği doğrulamak için hazırlar XmlSchemaValidator .
EndValidation Doğrulama seçeneğinin ayarlanması durumunda doğrulamayı sonlandırır ve XML belgesinin ProcessIdentityConstraints tamamı için kimlik kısıtlamalarını denetler.

Not

sınıfı, XmlSchemaValidator önceki tabloda açıklanan yöntemlerin her birine yapılan çağrıların sırasını ve oluşumunu zorlayan tanımlı bir durum geçişi içerir. Sınıfın XmlSchemaValidator belirli durum geçişi, bu konunun "XmlSchemaValidator Durum Geçişi" bölümünde açıklanmıştır.

XML bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan yöntemlere örnek için önceki bölümdeki örneklere bakın. Bu yöntemler hakkında daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

XmlValueGetter Kullanarak İçeriği Doğrulama

XmlValueGetterdelegate özniteliği, metin veya boşluk düğümlerinin değerini, özniteliğin, metnin veya boşluk düğümünün XML Şema Tanım Dili (XSD) türüyle uyumlu ortak dil çalışma zamanı (CLR) türleri olarak geçirmek için kullanılabilir. bir XmlValueGetterdelegate özniteliğin, metnin veya boşluk düğümünün CLR değeri zaten kullanılabiliyorsa ve bunu bir string öğesine dönüştürmenin ve sonra doğrulama için yeniden ayrıştırma maliyetinin önüne geçerse yararlıdır.

ValidateAttribute, ValidateTextve ValidateWhitespace yöntemleri aşırı yüklenmiştir ve öznitelik, metin veya boşluk düğümlerinin değerini veyadelegateXmlValueGetter olarak string kabul eder.

Sınıfının aşağıdaki yöntemleri XmlSchemaValidator parametre olarak kabul XmlValueGetterdelegate eder.

Aşağıda, girişteki XmlSchemaValidator sınıf örneğinden alınan bir örnek XmlValueGetterdelegate verilmiştir. özniteliğinin XmlValueGetterdelegate değerini nesne olarak DateTime döndürür. tarafından XmlValueGetterdöndürülen bu DateTime nesneyi doğrulamak için, nesne önce özniteliğin XmlSchemaValidator veri türü için ValueType'a dönüştürür (ValueType, XSD türü için varsayılan CLR eşlemesidir) ve ardından dönüştürülen değerdeki modelleri denetler.

C#
static object dateTimeGetterContent;

static object DateTimeGetterHandle()
{
    return dateTimeGetterContent;
}

static XmlValueGetter DateTimeGetter(DateTime dateTime)
{
    dateTimeGetterContent = dateTime;
    return new XmlValueGetter(dateTimeGetterHandle);
}

tam bir örneği XmlValueGetterdelegateiçin girişteki örne bakın. hakkında XmlValueGetterdelegatedaha fazla bilgi için, ve XmlSchemaValidator sınıf başvurusu belgelerine bakınXmlValueGetter.

Şema Sonrası Doğrulama Bilgileri

sınıfı, XmlSchemaInfo sınıfı tarafından doğrulanan bir XML düğümünün Şema Sonrası Doğrulama Bilgileri'nin XmlSchemaValidator bazılarını temsil eder. Sınıfın XmlSchemaValidator çeşitli yöntemleri, isteğe bağlı (null) out parametre olarak bir XmlSchemaInfo nesneyi kabul eder.

Doğrulama başarılı olursa, nesnenin XmlSchemaInfo özellikleri doğrulama sonuçlarıyla ayarlanır. Örneğin, yöntemini kullanarak bir özniteliğin başarıyla doğrulanması durumunda ValidateAttribute nesnenin XmlSchemaInfo (belirtildiyse) SchemaAttribute, SchemaType, MemberTypeve Validity özellikleri doğrulama sonuçlarıyla ayarlanır.

Aşağıdaki XmlSchemaValidator sınıf yöntemleri bir XmlSchemaInfo nesneyi out parametresi olarak kabul eder.

Sınıfın XmlSchemaInfo tam bir örneği için girişteki örne bakın. Sınıf hakkında XmlSchemaInfo daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaInfo bakın.

Beklenen Parçacıklar, Öznitelikler ve Belirtilmemiş Varsayılan Öznitelikleri Alma

sınıfı, XmlSchemaValidator geçerli doğrulama bağlamında beklenen parçacıkları, öznitelikleri ve belirtilmemiş varsayılan öznitelikleri almak için , GetExpectedParticlesve GetUnspecifiedDefaultAttributes yöntemlerini sağlarGetExpectedAttributes.

Beklenen Parçacıkları Alma

yöntemi, GetExpectedParticles geçerli öğe bağlamında beklenen parçacıkları içeren bir nesne dizisi XmlSchemaParticle döndürür. yöntemi tarafından GetExpectedParticles döndürülebilecek geçerli parçacıklar ve XmlSchemaAny sınıflarının XmlSchemaElement örnekleridir.

Con çadır modu l için bir oluşturan bir xs:sequenceolduğunda, dizideki yalnızca sonraki parçacık döndürülür. Con çadır modu l için oluşturan bir xs:all veya xs:choiceise, geçerli eleman bağlamında izleyebilecek tüm geçerli parçacıklar döndürülür.

Not

GetExpectedParticles yöntemi çağrıldıktan hemen sonra çağrılırsaInitialize, GetExpectedParticles yöntem tüm genel öğeleri döndürür.

Örneğin, izleyen XML Şema Tanım Dili (XSD) şemasında ve XML belgesinde, öğe book doğrulandıktan book sonra geçerli öğe bağlamıdır. yöntemi, GetExpectedParticles öğesini temsil eden title tek XmlSchemaElement bir nesne içeren bir dizi döndürür. Doğrulama bağlamı öğesi olduğunda title , GetExpectedParticles yöntemi boş bir dizi döndürür. GetExpectedParticles yöntemi öğe doğrulandıktan sonra title ancak öğe doğrulanmadan önce description çağrılırsa, öğesini temsil eden description tek XmlSchemaElement bir nesne içeren bir dizi döndürür. GetExpectedParticles öğesi doğrulandıktan sonra description yöntemi çağrılırsa joker karakteri temsil eden tek XmlSchemaAny bir nesne içeren bir dizi döndürür.

C#
XmlReader reader = XmlReader.Create("input.xml");

var schemaSet = new XmlSchemaSet();
schemaSet.Add(null, "schema.xsd");
var manager = new XmlNamespaceManager(reader.NameTable);

var validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
validator.Initialize();

validator.ValidateElement("book", "", null);

validator.ValidateEndOfAttributes(null);
foreach (XmlSchemaElement element in validator.GetExpectedParticles())
{
    Console.WriteLine(element.Name);
}

validator.ValidateElement("title", "", null);
validator.ValidateEndOfAttributes(null);
foreach (XmlSchemaElement element in validator.GetExpectedParticles())
{
    Console.WriteLine(element.Name);
}
validator.ValidateEndElement(null);

foreach (XmlSchemaElement element in validator.GetExpectedParticles())
{
    Console.WriteLine(element.Name);
}

validator.ValidateElement("description", "", null);
validator.ValidateEndOfAttributes(null);
validator.ValidateEndElement(null);

foreach (XmlSchemaParticle particle in validator.GetExpectedParticles())
{
    Console.WriteLine(particle.GetType());
}

validator.ValidateElement("namespace", "", null);
validator.ValidateEndOfAttributes(null);
validator.ValidateEndElement(null);

validator.ValidateEndElement(null);

Örnek, giriş olarak aşağıdaki XML'yi alır:

XML
<xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema">
  <xs:element name="book">
    <xs:sequence>
      <xs:element name="title" type="xs:string" />
      <xs:element name="description" type="xs:string" />
      <xs:any processContent="lax" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:element>
</xs:schema>

Örnek, giriş olarak aşağıdaki XSD şemasını alır:

XML
<book>
  <title>My Book</title>
  <description>My Book's Description</description>
  <namespace>System.Xml.Schema</namespace>
</book>

Not

sınıfının , GetExpectedAttributesve AddSchema yöntemlerinin XmlSchemaValidator sonuçları GetExpectedParticlesdoğrulanan geçerli bağlama bağlıdır. Daha fazla bilgi için bu konunun "Doğrulama Bağlamı" bölümüne bakın.

Yöntemin GetExpectedParticles bir örneği için girişteki örne bakın. yöntemi hakkında GetExpectedParticles daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Beklenen Öznitelikleri Alma

yöntemi, GetExpectedAttributes geçerli öğe bağlamında beklenen öznitelikleri içeren bir nesne dizisi XmlSchemaAttribute döndürür.

Örneğin, girişteki örnekte yöntemi, GetExpectedAttributes öğesinin tüm özniteliklerini book almak için kullanılır.

yönteminden GetExpectedAttributes hemen sonra ValidateElement yöntemini çağırırsanız, XML belgesinde görünebilen tüm öznitelikler döndürülür. Ancak yöntemine GetExpectedAttributes yapılan bir veya daha fazla çağrıdan ValidateAttribute sonra yöntemini çağırırsanız, geçerli öğe için henüz doğrulanmamış öznitelikler döndürülür.

Not

sınıfının , GetExpectedAttributesve AddSchema yöntemlerinin XmlSchemaValidator sonuçları GetExpectedParticlesdoğrulanan geçerli bağlama bağlıdır. Daha fazla bilgi için bu konunun "Doğrulama Bağlamı" bölümüne bakın.

Yöntemin GetExpectedAttributes bir örneği için girişteki örne bakın. yöntemi hakkında GetExpectedAttributes daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Belirtilmeyen Varsayılan Öznitelikleri Alma

yöntemi, GetUnspecifiedDefaultAttributes öğe bağlamında yöntemi ArrayList kullanılarak ValidateAttribute daha önce doğrulanmamış varsayılan değerlere sahip tüm öznitelikler için belirtilen nesneleriyle XmlSchemaAttribute doldurur. GetUnspecifiedDefaultAttributes yöntemi, öğe bağlamındaki ValidateAttribute her öznitelikte yöntemini çağırdıktan sonra çağrılmalıdır. yöntemi, GetUnspecifiedDefaultAttributes doğrulanan XML belgesine hangi varsayılan özniteliklerin ekleneceğini belirlemek için kullanılmalıdır.

yöntemi hakkında GetUnspecifiedDefaultAttributes daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaValidator bakın.

Şema Doğrulama Olaylarını İşleme

Doğrulama sırasında karşılaşılan şema doğrulama uyarıları ve hataları sınıfın ValidationEventHandler XmlSchemaValidator olayı tarafından işlenir.

Şema doğrulama uyarılarının değeri XmlSeverityType Warning ve şema doğrulama hatalarının değeri vardır XmlSeverityType Error. AtanmamışsaValidationEventHandler, XmlSchemaValidationException değeri Errorolan tüm şema doğrulama hataları için bir XmlSeverityType oluşturulur. Ancak, değeri Warningolan şema doğrulama uyarıları için bir XmlSchemaValidationException XmlSeverityType atılmaz.

Aşağıda, girişteki örnekten alınan şema doğrulaması sırasında karşılaşılan şema doğrulama uyarılarını ve hatalarını alan bir ValidationEventHandler örnek verilmiştir.

C#
static void SchemaValidationEventHandler(object sender, ValidationEventArgs e)
{
    switch (e.Severity)
    {
        case XmlSeverityType.Error:
            Console.WriteLine("\nError: {0}", e.Message);
            break;
        case XmlSeverityType.Warning:
            Console.WriteLine("\nWarning: {0}", e.Message);
            break;
    }
}

tam bir örneği ValidationEventHandleriçin girişteki örne bakın. Daha fazla bilgi için sınıf başvurusu belgelerine XmlSchemaInfo bakın.

XmlSchemaValidator Durum Geçişi

sınıfı, XmlSchemaValidator xml bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan yöntemlerin her birine yapılan çağrıların sırasını ve oluşumunu zorlayan tanımlı bir durum geçişi içerir.

Aşağıdaki tabloda sınıfın durum geçişi XmlSchemaValidator ve her durumda yapılabilecek yöntem çağrılarının dizisi ve oluşumu açıklanmaktadır.

Not

yöntemine InvalidOperationException yapılan çağrı, bir XmlSchemaValidator nesnenin geçerli durumuna göre yanlış sırada yapıldığında yukarıdaki tablodaki yöntemlerin her biri tarafından oluşturulur.

Yukarıdaki durum geçiş tablosu, sınıfın durum geçişinin XmlSchemaValidator her durumu için çağrılabilecek yöntemleri ve diğer durumları açıklamak için noktalama işaretlerini kullanır. Kullanılan simgeler, Belge Türü Tanımı (DTD) için XML Standartları başvurusunda bulunan simgelerle aynıdır.

Aşağıdaki tabloda, yukarıdaki durum geçiş tablosunda bulunan noktalama simgelerinin, sınıfın durum geçişindeki XmlSchemaValidator her durum için çağrılabilen yöntemleri ve diğer durumları nasıl etkilediği açıklanmaktadır.

Simge Açıklama
| Yöntem veya durum (çubuk öncesi veya sonrasındaki) çağrılabilir.
? Soru işaretinin önündeki yöntem veya durum isteğe bağlıdır, ancak çağrılırsa yalnızca bir kez çağrılabilir.
* * simgesinden önce gelen yöntem veya durum isteğe bağlıdır ve birden çok kez çağrılabilir.

Doğrulama Bağlamı

XML bilgi kümesindeki XmlSchemaValidator öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan sınıfın yöntemleri, nesnenin XmlSchemaValidator doğrulama bağlamını değiştirir. Örneğin, SkipToEndElement yöntemi geçerli öğe içeriğini doğrulamayı atlar ve nesneyi üst öğenin bağlamındaki içeriği doğrulamak için hazırlar XmlSchemaValidator ; geçerli öğenin tüm alt öğeleri için doğrulamayı atlayıp yöntemini çağırmaya ValidateEndElement eşdeğerdir.

sınıfının , GetExpectedAttributesve AddSchema yöntemlerinin XmlSchemaValidator sonuçları GetExpectedParticlesdoğrulanan geçerli bağlama bağlıdır.

Aşağıdaki tabloda, xml bilgi kümesindeki öğeleri, öznitelikleri ve içeriği doğrulamak için kullanılan sınıfın XmlSchemaValidator yöntemlerinden birini çağırdıktan sonra bu yöntemleri çağırmanın sonuçları açıklanmaktadır.

Metot GetExpectedParticles GetExpectedAttributes AddSchema
Initialize Varsayılan Initialize yöntem çağrılırsa, GetExpectedParticles tüm genel öğeleri içeren bir dizi döndürür.

Bir öğenin kısmi doğrulamasını başlatmak için parametre olarak alan aşırı yüklenmiş Initialize yöntem çağrılırsa, GetExpectedParticles yalnızca nesnenin başlatıldığı öğeyi XmlSchemaValidator XmlSchemaObject döndürür.
Varsayılan Initialize yöntem çağrılırsa boş GetExpectedAttributes bir dizi döndürür.

Bir özniteliğin kısmi doğrulamasını Initialize başlatmak için parametre olarak alan XmlSchemaObject yöntemin aşırı yüklenmesi çağrılırsa, GetExpectedAttributes yalnızca nesnenin XmlSchemaValidator başlatıldığı özniteliği döndürür.
Ön işleme hatası yoksa şemayı XmlSchemaSet XmlSchemaValidator nesnesine ekler.
ValidateElement Bağlam öğesi geçerliyse, GetExpectedParticles bağlam öğesinin alt öğesi olarak beklenen öğelerin sırasını döndürür.

Bağlam öğesi geçersizse boş GetExpectedParticles bir dizi döndürür.
Bağlam öğesi geçerliyse ve çağrısı daha önce yapılmadıysa ValidateAttribute , GetExpectedAttributes bağlam öğesinde tanımlanan tüm özniteliklerin listesini döndürür.

Bazı öznitelikler zaten doğrulanmışsa, GetExpectedAttributes doğrulanacak kalan özniteliklerin listesini döndürür.

Bağlam öğesi geçersizse boş GetExpectedAttributes bir dizi döndürür.
Yukarıdakiyle aynıdır.
ValidateAttribute Bağlam özniteliği üst düzey bir öznitelikse boş GetExpectedParticles bir dizi döndürür.

Aksi takdirde GetExpectedParticles , bağlam öğesinin ilk alt öğesi olarak beklenen öğelerin sırasını döndürür.
Bağlam özniteliği üst düzey bir öznitelikse boş GetExpectedAttributes bir dizi döndürür.

Aksi takdirde GetExpectedAttributes , doğrulanacak kalan özniteliklerin listesini döndürür.
Yukarıdakiyle aynıdır.
GetUnspecifiedDefaultAttributes GetExpectedParticles bağlam öğesinin ilk alt öğesi olarak beklenen öğelerin sırasını döndürür. GetExpectedAttributes bağlam öğesi için henüz doğrulanmamış gerekli ve isteğe bağlı özniteliklerin listesini döndürür. Yukarıdakiyle aynıdır.
ValidateEndOfAttributes GetExpectedParticles bağlam öğesinin ilk alt öğesi olarak beklenen öğelerin sırasını döndürür. GetExpectedAttributes boş bir dizi döndürür. Yukarıdakiyle aynıdır.
ValidateText Bağlam öğesinin contentType değeri Karma ise, GetExpectedParticles sonraki konumda beklenen öğelerin sırasını döndürür.

Bağlam öğesinin contentType değeri TextOnly veya Empty ise boş GetExpectedParticles bir dizi döndürür.

Bağlam öğesinin contentType öğesi ElementOnly ise, GetExpectedParticles sonraki konumda beklenen öğelerin sırasını döndürür, ancak bir doğrulama hatası zaten oluştu.
GetExpectedAttributes bağlam öğesinin doğrulanmamış öznitelik listesini döndürür. Yukarıdakiyle aynıdır.
ValidateWhitespace Bağlam boşluğu en üst düzey boşluksa boş GetExpectedParticles bir dizi döndürür.

Aksi takdirde yöntemin GetExpectedParticles davranışı ile ValidateTextaynıdır.
Bağlam boşluğu en üst düzey boşluksa boş GetExpectedAttributes bir dizi döndürür.

Aksi takdirde yöntemin GetExpectedAttributes davranışı ile ValidateTextaynıdır.
Yukarıdakiyle aynıdır.
ValidateEndElement GetExpectedParticles bağlam öğesinden (olası eşdüzeyler) sonra beklenen öğelerin sırasını döndürür. GetExpectedAttributes bağlam öğesinin doğrulanmamış öznitelik listesini döndürür.

Bağlam öğesinin üst GetExpectedAttributes öğesi yoksa boş bir liste döndürür (bağlam öğesi, üzerinde çağrılan ValidateEndElement geçerli öğenin üst öğesidir).
Yukarıdakiyle aynıdır.
SkipToEndElement ile ValidateEndElementaynı. ile ValidateEndElementaynı. Yukarıdakiyle aynıdır.
EndValidation Boş bir dizi döndürür. Boş bir dizi döndürür. Yukarıdakiyle aynıdır.

Not

Sınıfın çeşitli özellikleri XmlSchemaValidator tarafından döndürülen değerler, yukarıdaki tabloda yer alan yöntemlerden herhangi biri çağrılarak değiştirilmez.

Ayrıca bkz.