XmlReaderSettings.ValidationFlags Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Şema doğrulama ayarlarını gösteren bir değer alır veya ayarlar. Bu ayar şemaları doğrulayan nesneler için XmlReader geçerlidir (ValidationType özelliği olarak ValidationType.Schema
ayarlanır).
public:
property System::Xml::Schema::XmlSchemaValidationFlags ValidationFlags { System::Xml::Schema::XmlSchemaValidationFlags get(); void set(System::Xml::Schema::XmlSchemaValidationFlags value); };
public System.Xml.Schema.XmlSchemaValidationFlags ValidationFlags { get; set; }
member this.ValidationFlags : System.Xml.Schema.XmlSchemaValidationFlags with get, set
Public Property ValidationFlags As XmlSchemaValidationFlags
Özellik Değeri
Doğrulama seçeneklerini belirten sabit listesi değerlerinin bit düzeyinde birleşimi. ProcessIdentityConstraints ve AllowXmlAttributes varsayılan olarak etkindir. ProcessInlineSchema, ProcessSchemaLocationve ReportValidationWarnings varsayılan olarak devre dışıdır.
Örnekler
Aşağıdaki örnek, ayarı etkinleştirerek bir XML dosyasını satır içi XML Şemasına ProcessInlineSchema göre doğrular. XML okuyucu, doğrulama uyarılarını görüntüleyecek şekilde yapılandırıldığından, kök öğesinde beklenen uyarıyı da görürsünüz.
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class ValidXSD {
public static void Main() {
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);
// Parse the file.
while (reader.Read());
}
// Display any warnings or errors.
private static void ValidationCallBack (object sender, ValidationEventArgs args) {
if (args.Severity==XmlSeverityType.Warning)
Console.WriteLine("\tWarning: Matching schema not found. No validation occurred." + args.Message);
else
Console.WriteLine("\tValidation error: " + args.Message);
}
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
public class ValidXSD
public shared sub Main()
' Set the validation settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.ValidationFlags = settings.ValidationFlags Or XmlSchemaValidationFlags.ProcessInlineSchema
settings.ValidationFlags = settings.ValidationFlags Or XmlSchemaValidationFlags.ReportValidationWarnings
AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("inlineSchema.xml", settings)
' Parse the file.
while (reader.Read())
end while
end sub
' Display any warnings or errors.
private shared sub ValidationCallBack (sender as object, args as ValidationEventArgs)
if (args.Severity=XmlSeverityType.Warning)
Console.WriteLine(" Warning: Matching schema not found. No validation occurred." + args.Message)
else
Console.WriteLine(" Validation error: " + args.Message)
end if
end sub
end class
Örnekte giriş olarak inlineSchema.xml dosyası kullanılır.
<root>
<!--Start of schema-->
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns='xsdHeadCount'
targetNamespace='xsdHeadCount'>
<xs:element name='HeadCount'>
<xs:complexType>
<xs:sequence>
<xs:element name='ID' type='xs:unsignedShort' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='division' type='xs:string' use='optional' default='QA'/>
</xs:complexType>
</xs:element>
</xs:schema>
<!--End of schema-->
<hc:HeadCount xmlns:hc='xsdHeadCount'>
<ID>12365</ID>
<ID>43295</ID>
<division>Accounting</division>
</hc:HeadCount>
</root>
Çıktı aşağıdaki şekilde olacaktır:
Uyarı: Eşleşen şema bulunamadı. Doğrulama gerçekleşmedi. 'root' öğesinin şema bilgileri bulunamadı.
Doğrulama hatası: 'xsdHeadCount:HeadCount' öğesinde geçersiz 'division' alt öğesi var. 'Id' bekleniyor.
Açıklamalar
Önemli
Bir XmlReaderSettings nesnenin ProcessInlineSchema ve ProcessSchemaLocation doğrulama bayrakları varsayılan olarak ayarlanmaz. Bu bayraklar ayarlandığında, XmlResolver nesnesinin XmlReaderSettings nesnesi içindeki örnek belgesinde XmlReaderkarşılaşılan şema konumlarını çözümlemek için kullanılır.
XmlResolver nesnesi ise null
ve ProcessSchemaLocation doğrulama bayrakları ayarlanmış olsa ProcessInlineSchema bile şema konumları çözümlenmez.
Doğrulama sırasında eklenen şemalar yeni türler ekler ve doğrulanan belgenin doğrulama sonucunu değiştirebilir. Sonuç olarak, dış şemalar yalnızca güvenilir kaynaklardan çözümlenmelidir.
Belgenin ProcessIdentityConstraints büyük bir bölümü üzerinde kimlik kısıtlamaları olan bir şemada yüksek kullanılabilirlik senaryolarında büyük XML belgeleri doğrulanırken bayrağın devre dışı bırakılması (varsayılan olarak etkindir) önerilir.