Este artigo passo a passo descreve como utilizar objectos
XmlValidatingReader e
XMLSchemaCollection para validar um fragmento de XML (Extensible Markup Language) com um esquema XML.
XmlValidatingReader implementa a classe
XmlReader e fornece suporte para validação de dados XML. A propriedade de
esquemas de
XmlValidatingReader liga o leitor os ficheiros de esquema em cache num
XmlSchemaCollection . A propriedade
ValidationType XmlValidatingReader Especifica o tipo de validação que deve executar o leitor. Se definir a propriedade para
ValidationType.None , pode criar um leitor nonvalidating.
Só pode adicionar esquemas de idiomas de definição de esquema de XML (XSD) e (XML-data REDUCED) esquemas
XmlSchemaCollection . Utilize o método
Add com um URI de espaço de nomes para carregar esquemas. Para esquemas XML, o espaço de nomes normal URI é a propriedade
targetNamespace do esquema.
Requisitos
A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs, terá de:
- Microsoft Visual Studio .NET instalado num sistema operativo Microsoft Windows compatível
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
- Visual Basic .NET
- Padrões de XML básicos
- Esquemas XSD
Criar um esquema XSD
Cole o seguinte código num novo ficheiro de texto denominado C:\Books.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bookstore-schema" elementFormDefault="qualified" targetNamespace="urn:bookstore-schema">
<xsd:element name="bookstore" type="bookstoreType" />
<xsd:element name="comment" type="xsd:string" />
<xsd:element name="author" type="authorName"/>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string" />
<xsd:element name="last-name" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType" />
<xsd:element ref="comment" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string" />
<xsd:element ref="author" />
<xsd:element name="price" type="xsd:decimal" />
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
Criar uma aplicação do Visual Basic .NET
- Criar um novo Visual Basic .NET Windows aplicação.
- Arraste Button1 ao Form1. Cole o seguinte código para adicionar uma variável de membro privado à Classe Form1 :
- Cole o seguinte procedimento para criar um ValidationEventHandler que desencadeia erros de validação no objecto XMLValidatingReader sub:
Public Sub ValidationEventHandle(ByVal sender As Object, ByVal args As ValidationEventArgs)
m_success = False
Console.WriteLine((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))
End Sub 'ValidationEventHandle
Nota : tem de incluir um processador de eventos para receber informações sobre erros de validação no dados DTD (Type Definition), os dados XML (REDUCED) esquema e o esquema XML do esquema definição de idioma (XSD). O processador de eventos recebe um argumento do tipo ValidationEventArgs que contém dados relacionados com este evento.
O processador de chamada de retorno pode utilizar a propriedade ValidationEventArgs.Severity para garantir que um documento de instância XML é validado contra um esquema. A propriedade gravidade permite-lhe distinguir entre um erro de validação ( gravidade é igual a XmlSeverityType.Error ) que indica um erro fatal e validação de uma aviso ( gravidade é igual a XmlSeverityType.Warning ) que indica que não existem informações de esquema estão disponíveis. - Cole o seguinte código no procedimento de evento Button1_Click :
Dim reader As XmlValidatingReader = Nothing
Dim myschema As New XmlSchemaCollection()
Try
'Create the XML fragment to be parsed.
Dim xmlFrag As String = "<author xmlns='urn:bookstore-schema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" & _
"<first-name>Herman</first-name>" & _
"<last-name>Melville</last-name>" & _
"</author>"
'Create the XmlParserContext.
Dim context As New XmlParserContext(Nothing, Nothing, "", XmlSpace.None)
'Implement the reader.
reader = New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
'Add the schema.
myschema.Add("urn:bookstore-schema", "Books.xsd")
'Set the schema type and add the schema to the reader.
reader.ValidationType = ValidationType.Schema
reader.Schemas.Add(myschema)
'Add the handler to raise the validation event.
AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle
While reader.Read
End While
Console.WriteLine("Completed validating xmlfragment")
Catch XmlExp As XmlException
Console.WriteLine(XmlExp.Message)
Catch XmlSchExp As XmlSchemaException
Console.WriteLine(XmlSchExp.Message)
Catch GenExp As Exception
Console.WriteLine(GenExp.Message)
End Try
End Sub
- Quando é apresentada a seguinte mensagem na janela de resultados, o fragmento de XML é um elemento válido:
Completed validating xmlfragment
Nota : O objecto
XMLValidatingReader valida apenas as declarações de tipo e os elementos de nível superior no esquema XML. Fragmentos XML, tais como elementos sub, são considerados locais. Não é possível passar fragmentos XML para
XmlValidatingReader directa validação a menos que declare os fragmentos XML como elementos de nível superior e definir a referência ao nível do necessário.
Para obter informações adicionais, clique nos números de artigo existentes abaixo para visualizar os artigos na Microsoft Knowledge Base:
307379
(http://support.microsoft.com/kb/307379/EN-US/
)
COMO: Validar um documento XML utilizando o DTD, XDR ou XSD no Visual C# .NET
313826
(http://support.microsoft.com/kb/313826/EN-US/
)
INFO: Guia para esquemas XML no .NET Framework
313651
(http://support.microsoft.com/kb/313651/EN-US/
)
INFO: Guia para XML no .NET Framework
Para mais informações, consulte a MSDN seguinte Web sites:
Artigo: 317463 - Última revisão: quarta-feira, 3 de Setembro de 2003 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
- Microsoft Visual Basic .NET 2003 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
- Microsoft .NET Framework 1.1
- Microsoft .NET Framework 1.0
| kbmt kbhowtomaster KB317463 KbMtpt |
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo:
317463
(http://support.microsoft.com/kb/317463/en-us/
)