Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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, XmlSchemaValidator sınıfı XML bilgi kümesini bir XML belge olarak serileştirmeden 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, XmlSchemaValidator sınıfını kullanarak contosoBooks.xml dosyasını contosoBooks.xsd şemaya göre doğrulamanın bir örneği verilmiştir. Örnek, XmlSerializer dosyasını deserialize etmek ve düğümlerin değerini contosoBooks.xml sınıfının yöntemlerine geçirmek için XmlSchemaValidator sınıfını kullanır.
Uyarı
Bu örnek, bu konunun tüm bölümlerinde kullanılır.
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: '{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 '{schemaInfo.SchemaElement.Name}' with type '{schemaInfo.SchemaType}' is '{schemaInfo.Validity}'");
}
else if (schemaInfo.SchemaAttribute != null)
{
Console.WriteLine($"Attribute '{schemaInfo.SchemaAttribute.Name}' with type '{schemaInfo.SchemaType}' is '{schemaInfo.Validity}'");
}
}
static void SchemaValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine($"\nError: {e.Message}");
break;
case XmlSeverityType.Warning:
Console.WriteLine($"\nWarning: {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;
}
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.Serialization
Imports System.Collections
Namespace Microsoft.Samples.Xml.Schema
Class XmlSchemaValidatorExamples
Shared Sub Main()
' The XML document to deserialize into the XmlSerializer object.
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml")
' The XmlSerializer object.
Dim serializer As XmlSerializer = New XmlSerializer(GetType(ContosoBooks))
Dim books As ContosoBooks = CType(serializer.Deserialize(reader), ContosoBooks)
' The XmlSchemaSet object containing the schema used to validate the XML document.
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd")
' The XmlNamespaceManager object used to handle namespaces.
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(reader.NameTable)
' Assign a ValidationEventHandler to handle schema validation warnings and errors.
Dim validator As XmlSchemaValidator = New XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None)
'validator.ValidationEventHandler += New ValidationEventHandler(SchemaValidationEventHandler)
AddHandler validator.ValidationEventHandler, AddressOf 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", Nothing)
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
validator.ValidateEndOfAttributes(Nothing)
' Get the next expected element in the bookstore context.
Dim particles() As XmlSchemaParticle = validator.GetExpectedParticles()
Dim nextElement As XmlSchemaElement = particles(0)
Console.WriteLine("Expected Element: '{0}'", nextElement.Name)
For Each book As BookType In books.book
' Validate the book element.
validator.ValidateElement("book", "http://www.contoso.com/books", Nothing)
' Get the expected attributes for the book element.
Console.Write(vbCrLf & "Expected attributes: ")
Dim attributes() As XmlSchemaAttribute = validator.GetExpectedAttributes()
For Each attribute As XmlSchemaAttribute In attributes
Console.Write("'{0}' ", attribute.Name)
Next
Console.WriteLine()
' Validate the genre attribute and display its post schema validation information.
If Not book.Genre Is Nothing Then
validator.ValidateAttribute("genre", "", book.Genre, schemaInfo)
End If
DisplaySchemaInfo()
' Validate the publicationdate attribute and display its post schema validation information.
If Not book.PublicationDate = Nothing Then
validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo)
End If
DisplaySchemaInfo()
' Validate the ISBN attribute and display its post schema validation information.
If Not book.Isbn Is Nothing Then
validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo)
End If
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(Nothing)
' Validate the title element and its content.
validator.ValidateElement("title", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, 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", Nothing)
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
validator.ValidateEndOfAttributes(Nothing)
If Not book.Author.Name Is Nothing Then
' Validate the name element and its content.
validator.ValidateElement("name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.Name)
End If
If Not book.Author.FirstName Is Nothing Then
' Validate the first-name element and its content.
validator.ValidateElement("first-name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.FirstName)
End If
If Not book.Author.LastName Is Nothing Then
' Validate the last-name element and its content.
validator.ValidateElement("last-name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.LastName)
End If
' Validate the content of the author element.
validator.ValidateEndElement(Nothing)
' Validate the price element and its content.
validator.ValidateElement("price", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Price)
' Validate the content of the book element.
validator.ValidateEndElement(Nothing)
Next
' Validate the content of the bookstore element.
validator.ValidateEndElement(Nothing)
' Close the XmlReader object.
reader.Close()
End Sub
Shared schemaInfo As XmlSchemaInfo = New XmlSchemaInfo()
Shared dateTimeGetterContent As Object
Shared Function dateTimeGetterHandle() As Object
Return dateTimeGetterContent
End Function
Shared Function dateTimeGetter(ByVal dateTime As DateTime) As XmlValueGetter
dateTimeGetterContent = dateTime
Return New XmlValueGetter(AddressOf dateTimeGetterHandle)
End Function
Shared Sub DisplaySchemaInfo()
If Not schemaInfo.SchemaElement Is Nothing Then
Console.WriteLine("Element '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity)
ElseIf Not schemaInfo.SchemaAttribute Is Nothing Then
Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity)
End If
End Sub
Shared Sub SchemaValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine(vbCrLf & "Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine(vbCrLf & "Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
<XmlRootAttribute("bookstore", Namespace:="http://www.contoso.com/books", IsNullable:=False)> _
Public Class ContosoBooks
<XmlElementAttribute("book")> _
Public book() As BookType
End Class
Public Class BookType
<XmlAttributeAttribute("genre")> _
Public Genre As String
<XmlAttributeAttribute("publicationdate", DataType:="date")> _
Public PublicationDate As DateTime
<XmlAttributeAttribute("ISBN")> _
Public Isbn As String
<XmlElementAttribute("title")> _
Public Title As String
<XmlElementAttribute("author")> _
Public Author As BookAuthor
<XmlElementAttribute("price")> _
Public Price As Decimal
End Class
Public Class BookAuthor
<XmlElementAttribute("name")> _
Public Name As String
<XmlElementAttribute("first-name")> _
Public FirstName As String
<XmlElementAttribute("last-name")> _
Public LastName As String
End Class
End Namespace
Örnek, dosyayı giriş olarak alır contosoBooks.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, contosoBooks.xsd öğesini de giriş olarak alır.
<?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şturucu, XmlSchemaValidator, XmlNameTable, XmlSchemaSet, ve XmlNamespaceManager nesnelerinin yanı sıra bir XmlSchemaValidationFlags değeri de parametre olarak alır. Şema ad alanı, XML ad alanı ve benzeri bilinen ad alanı dizelerini işlemede kullanıldığı için XmlNameTable nesnesi, basit içerik doğrulaması sırasında ParseValue yöntemine iletilir. 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.
Daha fazla bilgi için XmlSchemaValidator oluşturucu ve XmlSchemaValidator sınıf referans belgelerine bakın.
Doğrulama Başlat
Bir XmlSchemaValidator nesne oluşturulduktan sonra, nesnenin Initialize durumunu başlatmak için kullanılan iki aşırı yüklenmiş XmlSchemaValidator 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 XmlSchemaValidator.Initialize aşırı yüklenmiş XmlSchemaObject 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. Initialize yöntemi hakkında daha fazla bilgi için, sınıfın başvuru 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, kısmi doğrulama için bir XmlSchemaObject yöntemi kullanılarak XmlSchemaValidator.Initialize başlatılır.
orderNumber şema öğesi, XmlQualifiedName nesnesinin XmlSchemaObjectTable özelliği tarafından döndürülen GlobalElements koleksiyonu içinde XmlSchemaSet tarafından seçilerek iletilir. Nesne XmlSchemaValidator daha sonra bu öğeyi doğrular.
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add(Nothing, "schema.xsd")
schemaSet.Compile()
Dim nameTable As NameTable = New NameTable()
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(nameTable)
Dim validator As XmlSchemaValidator = New XmlSchemaValidator(nameTable, schemaSet, manager, XmlSchemaValidationFlags.None)
validator.Initialize(schemaSet.GlobalElements.Item(New XmlQualifiedName("orderNumber")))
validator.ValidateElement("orderNumber", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
validator.ValidateText("123")
validator.ValidateEndElement(Nothing)
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.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="orderNumber" type="xs:int" />
</xs:schema>
Initialize yöntemi hakkında daha fazla bilgi için, sınıfın başvuru 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.
Uyarı
XmlSchema parametresinin hedef ad alanı, XmlSchemaValidator nesnesi tarafından zaten karşılaşılan herhangi bir öğe veya özniteliğin ad alanıyla eşleşemez.
Değer oluşturucuya XmlSchemaValidationFlags.ProcessInlineSchemaXmlSchemaValidator parametre olarak geçirilmediyse, AddSchema yöntemi hiçbir şey yapmaz.
AddSchema yönteminin sonucu, geçerli XML düğümü bağlamının doğrulanmakta olduğuna 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.
AddSchema yöntemi hakkında daha fazla bilgi için, sınıfın başvuru 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.
| Yöntem | Açıklama |
|---|---|
| ValidateElement | Geçerli bağlamda öğe adını doğrular. |
| ValidateAttribute | Geçerli öğe bağlamındaki özniteliği veya XmlSchemaAttribute yöntemine parametre olarak geçirilen Initialize nesnesine karşı 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. |
Uyarı
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
XmlValueGetter
delegate ö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, ValidateText ve ValidateWhitespace yöntemleri aşırı yüklenmiştir ve öznitelik, metin veya boşluk düğümlerinin değerini bir string veya XmlValueGetterdelegate olarak kabul eder.
Sınıfının aşağıdaki yöntemleri XmlSchemaValidator parametre olarak kabul XmlValueGetterdelegate eder.
Aşağıda, girişteki XmlValueGetter sınıf örneğinden alınan bir örnek delegateXmlSchemaValidator verilmiştir.
XmlValueGetter
delegate, bir özniteliğin değerini DateTime nesne olarak döndürür.
DateTime tarafından döndürülen bu XmlValueGetter nesneyi doğrulamak için, XmlSchemaValidator nesnesi ilk olarak bunu özniteliğin 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 kıstasları kontrol eder.
Shared dateTimeGetterContent As Object
Shared Function DateTimeGetterHandle() As Object
Return dateTimeGetterContent
End Function
Shared Function DateTimeGetter(dateTime As DateTime) As XmlValueGetter
dateTimeGetterContent = dateTime
Return New XmlValueGetter(AddressOf DateTimeGetterHandle)
End Function
static object dateTimeGetterContent;
static object DateTimeGetterHandle()
{
return dateTimeGetterContent;
}
static XmlValueGetter DateTimeGetter(DateTime dateTime)
{
dateTimeGetterContent = dateTime;
return new XmlValueGetter(dateTimeGetterHandle);
}
Tam bir örneği için, girişteki örneğe bakın. Daha fazla bilgi için XmlValueGetter ve delegate hakkında, XmlValueGetter ve XmlSchemaValidator sınıf başvuru belgelerine bakın.
Şema Sonrası-Validation-Information
XmlSchemaInfo sınıfı, XmlSchemaValidator sınıfı tarafından doğrulanan bir XML düğümünün Post-Schema-Validation-Information'ın bazılarını temsil eder. Sınıfın XmlSchemaValidator çeşitli yöntemleri, isteğe bağlı (XmlSchemaInfo) null parametre olarak bir out 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.
Beklenilen Parçacıklar, Öznitelikler ve Tanımlanmamış Varsayılan Öznitelikleri Alma
XmlSchemaValidator sınıfı, geçerli doğrulama bağlamında beklenen parçacıkları, öznitelikleri ve belirtilmemiş varsayılan öznitelikleri almak için GetExpectedAttributes, GetExpectedParticles ve GetUnspecifiedDefaultAttributes yöntemlerini sağlar.
Beklenen Parçacıkları Alma
GetExpectedParticles yöntemi, geçerli öğe bağlamında beklenen parçacıkları içeren XmlSchemaParticle nesne dizilerini döndürür. GetExpectedParticles yöntemi tarafından döndürülebilecek geçerli parçacıklar, XmlSchemaElement ve XmlSchemaAny sınıflarının örnekleridir.
İçerik modelinin oluşturucu bir xs:sequenceolduğunda, dizideki yalnızca sonraki parçacık döndürülür. İçerik modelinin oluşturucu xs:all veya xs:choice ise, geçerli öğe bağlamında izleyebilecek tüm geçerli parçacıklar döndürülür.
Uyarı
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, book öğesi doğrulandıktan sonra, book geçerli öğe bağlamıdır.
GetExpectedParticles yöntemi, XmlSchemaElement öğesini temsil eden tek bir title 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 title öğesi doğrulandıktan sonra ancak description öğesi doğrulanmadan önce çağrılırsa, XmlSchemaElement öğesini temsil eden bir tek description 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.
Dim reader As XmlReader = XmlReader.Create("input.xml")
Dim schemaSet As New XmlSchemaSet()
schemaSet.Add(Nothing, "schema.xsd")
Dim manager As New XmlNamespaceManager(reader.NameTable)
Dim validator As New XmlSchemaValidator(reader.NameTable,schemaSet,manager,XmlSchemaValidationFlags.None)
validator.Initialize()
validator.ValidateElement("book", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
For Each element As XmlSchemaElement In validator.GetExpectedParticles()
Console.WriteLine(element.Name)
Next
validator.ValidateElement("title", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
For Each element As XmlSchemaElement In validator.GetExpectedParticles()
Console.WriteLine(element.Name)
Next
validator.ValidateEndElement(Nothing)
For Each element As XmlSchemaElement In validator.GetExpectedParticles()
Console.WriteLine(element.Name)
Next
validator.ValidateElement("description", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
validator.ValidateEndElement(Nothing)
For Each particle As XmlSchemaParticle In validator.GetExpectedParticles()
Console.WriteLine(particle.GetType())
Next
validator.ValidateElement("namespace", "", Nothing)
validator.ValidateEndOfAttributes(Nothing)
validator.ValidateEndElement(Nothing)
validator.ValidateEndElement(Nothing)
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:
<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:
<book>
<title>My Book</title>
<description>My Book's Description</description>
<namespace>System.Xml.Schema</namespace>
</book>
Uyarı
GetExpectedParticles, GetExpectedAttributes ve AddSchema yöntemlerinin XmlSchemaValidator sınıfındaki sonuçları, doğ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. GetExpectedParticles yöntemi hakkında daha fazla bilgi için, sınıfın başvuru 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, GetExpectedAttributes yöntemi, book öğesinin tüm özniteliklerini 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, GetExpectedAttributes yöntemine bir veya daha fazla kez ValidateAttribute yöntemini çağırdıktan sonra çağrı yaparsanız, geçerli öğe için henüz doğrulanmamış öznitelikler döndürülür.
Uyarı
GetExpectedParticles, GetExpectedAttributes ve AddSchema yöntemlerinin XmlSchemaValidator sınıfındaki sonuçları, doğ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. GetExpectedAttributes yöntemi hakkında daha fazla bilgi için, sınıfın başvuru belgelerine XmlSchemaValidator bakın.
Belirtilmeyen Varsayılan Öznitelikleri Alma
GetUnspecifiedDefaultAttributes yöntemi, ArrayList için, öğe bağlamında XmlSchemaAttribute yöntemi kullanılarak daha önce doğrulanmamış varsayılan değerlere sahip tüm öznitelikleri ValidateAttribute nesneleriyle 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.
GetUnspecifiedDefaultAttributes yöntemi hakkında daha fazla bilgi için, sınıfın başvuru 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 ValidationEventHandlerXmlSchemaValidator olayı tarafından işlenir.
Şema doğrulama uyarılarının değeri XmlSeverityTypeWarning, ve şema doğrulama hatalarının değeri XmlSeverityTypeError. AtanmamışsaValidationEventHandler, XmlSchemaValidationException değeri XmlSeverityTypeolan tüm şema doğrulama hataları için bir Error oluşturulur. Ancak, değeri XmlSchemaValidationExceptionolan şema doğrulama uyarıları için bir XmlSeverityTypeWarning 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.
Shared Sub SchemaValidationEventHandler(sender As Object, e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine(vbCrLf & "Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine(vbCrLf & "Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
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 ValidationEventHandler örneği için girişteki örneğe 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.
| Devlet | Geçiş |
|---|---|
| Doğrulama | Initialize (ValidateAttribute | TopLevel*) EndValidation |
| Üst Düzey | ValidateWhitespace | ValidateText | Öğe |
| Öğe |
ValidateElement
ValidateAttribute* (ValidateEndOfAttributes İçerik*)? ValidateEndElement | ValidateElement ValidateAttribute * SkipToEndElement | ValidateElement ValidateAttribute * ValidateEndOfAttributes İçerik* SkipToEndElement | |
| İçerik | ValidateWhitespace | ValidateText | Öğe |
Uyarı
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.
| Sembol | Açıklama |
|---|---|
| | | Çubuk öncesindeki veya sonrasındaki yöntem veya durum ç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 XmlSchemaValidator nesneyi üst öğenin bağlamındaki içeriği doğrulamak için hazırlar; bu, geçerli öğenin tüm alt öğeleri için doğrulamayı atlayıp ardından ValidateEndElement yöntemini çağırmaya eşdeğerdir.
GetExpectedParticles, GetExpectedAttributes ve AddSchema yöntemlerinin XmlSchemaValidator sınıfındaki sonuçları, doğ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.
| Yöntem | BeklenenParçacıklarıAl | BeklenenÖznitelikleriAl | Şema Ekle |
|---|---|---|---|
| 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 bir Initialize parametresi alan aşırı yüklenmiş XmlSchemaObject yöntemi çağrıldığında, GetExpectedParticles yalnızca XmlSchemaValidator nesnesinin başlatıldığı öğeyi 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ı başlatmak için bir Initialize parametresi alan XmlSchemaObject yöntemini aşırı yüklediğinizde, GetExpectedAttributes sadece XmlSchemaValidator nesnesinin başlatıldığı özniteliği döndürür. |
Ön işleme hatası yoksa şemayı XmlSchemaSetXmlSchemaValidator 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, GetExpectedParticles boş bir dizi döndürür. Aksi halde yöntemin GetExpectedParticles davranışı ValidateText içinde aynıdır. |
Bağlam boşluğu en üst düzey boşluksa, GetExpectedAttributes boş bir dizi döndürür. Aksi halde yöntemin GetExpectedAttributes davranışı ValidateText içinde aynı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 ebeveyni yoksa, GetExpectedAttributes boş bir liste döndürür (bağlam öğesi, ValidateEndElement öğesi çağrılan geçerli öğenin ebeveynidir). |
Yukarıdakiyle aynıdır. |
| SkipToEndElement | ValidateEndElementile aynıdır. | ValidateEndElementile aynıdır. | 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. |
Uyarı
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.