XmlReaderSettings.ValidationFlags Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe ou define um valor que indica as definições de validação do esquema. Esta definição aplica-se a XmlReader objetos que validam esquemas (ValidationType propriedade definida para ValidationType.Schema).
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
Valor de Propriedade
Uma combinação bit a bit de valores de enumeração que especifica opções de validação. ProcessIdentityConstraints e AllowXmlAttributes estão ativados por defeito. ProcessInlineSchema, ProcessSchemaLocation, e ReportValidationWarnings são desativados por defeito.
Exemplos
O exemplo seguinte valida um ficheiro XML contra um Esquema XML inline ao ativar a ProcessInlineSchema definição. O leitor XML está configurado para mostrar avisos de validação, por isso também vê o aviso esperado no elemento raiz.
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
O exemplo usa o ficheiro inlineSchema.xml como entrada.
<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>
O resultado é o seguinte:
Aviso: Esquema correspondente não encontrado. Não houve validação. Não consegui encontrar informação de esquema para o elemento 'root'.
Erro de validação: O elemento 'xsdHeadCount:HeadCount' tem o elemento filho inválido 'division'. 'ID' esperado.
Observações
Importante
Os sinalizadores de validação ProcessInlineSchema e ProcessSchemaLocation de um objeto XmlReaderSettings, não são definidos por padrão. Quando esses flags estão ativados, o XmlResolver do objeto XmlReaderSettings é utilizado para resolver localizações de esquema encontradas no documento de instância no XmlReader. Se o XmlResolver objeto for null, os locais do esquema não serão resolvidos, mesmo que os sinalizadores de validação ProcessInlineSchema e ProcessSchemaLocation estejam definidos.
Os esquemas adicionados durante a validação adicionam novos tipos e podem alterar o resultado da validação do documento que está sendo validado. Como resultado, os esquemas externos só devem ser resolvidos a partir de fontes confiáveis.
A desativação da flag ProcessIdentityConstraints (habilitado por padrão) é recomendada ao validar documentos XML grandes e não confiáveis em cenários de alta disponibilidade contra um esquema com restrições de identidade sobre uma grande parte do documento.