Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como usar a XmlValidatingReader
classe para validar um documento XML em relação a um DTD, um esquema XDR ou um esquema XSD no Visual Basic 2005 ou no Visual Basic .NET. Também descreve como otimizar a validação armazenando esquemas em cache.
Versão original do produto: Visual Basic
Número original do KB: 315533
Resumo
Os documentos XML contêm elementos e atributos e fornecem uma maneira flexível e poderosa de trocar dados entre aplicativos e organizações. Para especificar a estrutura e o conteúdo permitidos de um documento XML, você pode escrever uma DTD (Definição de Tipo de Documento), um esquema XDR (Microsoft XML Data Reduced) ou um esquema XSD (linguagem de definição de esquema XML).
Os esquemas XSD são a maneira preferencial de especificar gramáticas XML no .NET Framework, mas também há suporte para DTDs e esquemas XDR.
Neste artigo, você aprenderá a aplicar um DTD, um esquema XDR ou um esquema XSD a um documento XML no Microsoft Visual Basic 2005 ou no Microsoft Visual Basic .NET. Em seguida, você aprenderá a usar a classe XmlValidatingReader para validar um documento XML em relação à gramática especificada. Você também aprenderá a usar a classe XmlSchemaCollection para armazenar esquemas em cache na memória como uma forma de otimizar a validação XML.
Requisitos
A lista a seguir descreve o hardware, o software, a infra-estrutura de rede e os service packs recomendados de que você precisa: Microsoft Visual Basic 2005 ou Microsoft Visual Basic .NET
Este artigo refere-se aos seguintes namespaces da Biblioteca de Classes do Microsoft .NET Framework:
System.Xml
System.Xml.Schema
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
- Sintaxe do Visual Basic 2005 ou Visual Basic .NET
- Conceitos de XML, incluindo problemas de validação
Criar um documento XML
Inicie o Microsoft Visual Studio 2005 ou o Microsoft Visual Studio .NET. Em seguida, crie um novo arquivo XML (no menu Arquivo, aponte para Novo e clique em Arquivo).
Selecione o tipo de arquivo XML e clique em Abrir.
Adicione os seguintes dados ao documento XML para representar um produto em um catálogo:
<Product ProductID="123"> <ProductName>Rugby jersey</ProductName> </Product>
Salve o arquivo como Product.xml em uma pasta que você poderá acessar prontamente mais tarde (os exemplos de código neste artigo pressupõem uma pasta chamada
C:\MyFolder
).
Criar um DTD e vincular ao documento XML
No Visual Studio 2005 ou no Visual Studio .NET, aponte para Novo no menu Arquivo e clique em Arquivo.
Selecione o tipo de arquivo de texto e clique em Abrir.
Adicione as seguintes declarações DTD ao arquivo para descrever a gramática do documento XML:
<!ELEMENT Product (ProductName)> <!ATTLIST Product ProductID CDATA #REQUIRED> <!ELEMENT ProductName (#PCDATA)>
Salve o arquivo como Product.dtd na mesma pasta do documento XML.
Reabra Product.xml no Visual Studio 2005 ou no Visual Studio .NET; para fazer isso, aponte para Abrir no menu Arquivo e clique em Arquivo. Adicione uma instrução DOCTYPE (abaixo da
?xml version="1.0"
linha), da seguinte maneira. Isso vincula o documento XML ao arquivo DTD).<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE Product SYSTEM "Product.dtd">
Salve o documento XML modificado como ProductWithDTD.xml.
Executar a validação usando um DTD
No Visual Studio 2005 ou no Visual Studio .NET, crie um novo projeto de Aplicativo de Console do Visual Basic chamado ValidateXmlUsingVB.
O Visual Studio 2005 ou o Visual Studio .NET exibe um novo arquivo chamado Module1.vb. No início deste arquivo, adicione duas instruções Imports, da seguinte maneira:
Imports System.Xml ' For XmlTextReader and XmlValidatingReader Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
No Módulo1 (antes do início da sub-rotina Main), declare uma variável booleana chamada isValid, da seguinte forma:
'If a validation error occurs, ' you will set this flag to False ' in the validation event handler. Private isValid As Boolean = True
Na sub-rotina Main, crie um objeto XmlTextReader para ler um documento XML de um arquivo de texto. Em seguida, crie um
XmlValidatingReader
objeto para validar esses dados XML:Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml") Dim v As New XmlValidatingReader(r)
O objeto XmlValidatingReader tem uma propriedade ValidationType, que indica o tipo de validação necessária (DTD, XDR ou Schema). Defina essa propriedade como DTD, da seguinte maneira:
v.ValidationType = ValidationType.DTD
Se ocorrer algum erro de validação, o leitor de validação gerará um evento de validação. Adicione o seguinte código para registrar um manipulador de eventos de validação (você implementará a sub-rotina MyValidationEventHandler na etapa 8 desta seção):
AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
Adicione o código a seguir para ler e validar o documento XML. Se ocorrer algum erro de validação, MyValidationEventHandler será chamado para lidar com o erro. Essa sub-rotina será definida
isValid
como False (consulte a etapa 8 desta seção). Você pode verificar o status de isValid após a validação para ver se o documento é válido ou inválido.While v.Read()' Could add code here to process the content. End While v.Close()' Check whether the document is valid or invalid. If isValid Then Console.WriteLine("Document is valid") Else Console.WriteLine("Document is invalid") End If
Após a sub-rotina Main, escreva a sub-rotina MyValidationEventHandler, da seguinte maneira:
Public Sub MyValidationEventHandler(ByVal sender As Object, _ ByVal args As ValidationEventArgs) isValid = False Console.WriteLine("Validation event" & vbCrLf & args.Message) End Sub
Compile e execute o aplicativo.
O aplicativo deve relatar que o documento XML é válido. 10. No Visual Studio 2005 ou no Visual Studio .NET, modifique ProductWithDTD.xml para torná-lo inválido (por exemplo, exclua o elemento ProductName Rugby jersey/ ProductName ). 11. Execute o aplicativo novamente.
O aplicativo deve exibir a seguinte mensagem de erro:
Evento de validação O elemento 'Produto' tem conteúdo incompleto. 'ProductName' esperado. Ocorreu um erro em file:///C:/MyFolder/ProductWithDTD.xml(4, 3). O documento é inválido
Criar um esquema XDR e vincular ao documento XML
No Visual Studio 2005 ou no Visual Studio .NET, aponte para Novo no menu Arquivo e clique em Arquivo.
Selecione o tipo de arquivo de texto e clique em Abrir.
Adicione as seguintes definições de esquema XDR ao arquivo para descrever a gramática do documento XML:
<?xml version="1.0"?> <Schema name="ProductSchema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <AttributeType name="ProductID" dt:type="int"/> <ElementType name="ProductName" dt:type="string"/> <ElementType name="Product" content="eltOnly"> <attribute type="ProductID" required="yes"/> <element type="ProductName"/> </ElementType> </Schema>
Salve o arquivo como Product.xdr na mesma pasta que o documento XML.
Reabra o Product.xml original e vincule-o ao esquema XDR, da seguinte maneira:
<?xml version="1.0" encoding="utf-8" ?> <Product ProductID="123" xmlns="x-schema:Product.xdr"> <ProductName>Rugby jersey</ProductName> </Product>
Salve o documento XML modificado como ProductWithXDR.xml.
Executar a validação usando um esquema XDR
Modifique seu aplicativo para que o XmlTextReader seja carregado ProductWithXDR.xml, da seguinte maneira:
Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
Defina o como XDR para que o leitor de validação execute a
ValidationType
validação XDR, da seguinte maneira:v.ValidationType = ValidationType.XDR
Compile e execute o aplicativo.
O aplicativo deve relatar que o documento XML é válido.
Modifique ProductWithXDR.xml para torná-lo deliberadamente inválido.
Execute o aplicativo novamente.
O aplicativo deve relatar um erro de validação.
Criar um esquema XSD e vincular ao documento XML
No Visual Studio .NET, aponte para Novo no menu Arquivo e clique em Arquivo.
Selecione o tipo de arquivo de texto e clique em Abrir.
Adicione a seguinte definição de esquema XSD ao arquivo para descrever a gramática do documento XML:
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Product"> <xsd:complexType> <xsd:sequence> <xsd:element name="ProductName" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="ProductID" use="required" type="xsd:int"/> </xsd:complexType> </xsd:element> </xsd:schema>
Salve o arquivo como Product.xsd na mesma pasta que o documento XML.
Reabra o Product.xml original e vincule-o ao esquema XSD, da seguinte maneira:
<?xml version="1.0" encoding="utf-8" ?> <Product ProductID="123" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Product.xsd"> <ProductName>Rugby jersey</ProductName> </Product>
Salve o documento XML modificado como ProductWithXSD.xml.
Executar a validação usando um esquema XSD
Modifique seu aplicativo para que as
XmlTextReader
cargas ProductWithXSD.xml, da seguinte maneira:Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
ValidationType
Defina o como Schema para que o leitor de validação execute a validação do esquema XSD, da seguinte maneira:v.ValidationType = ValidationType.Schema
Compile e execute o aplicativo para validar o documento XML usando o esquema XSD.
O aplicativo deve relatar que o documento XML é válido.
Usar namespaces no esquema XSD
No Visual Studio 2005 ou no Visual Studio .NET, abra ProductWithXSD.xml. Declare um namespace padrão,
urn:MyNamespace
, no documento. Modifique a vinculação XSD para especificar o esquema XSD para validar o conteúdo nesse namespace, da seguinte maneira:<?xml version="1.0" encoding="utf-8"?> <Product ProductID="123" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:MyNamespace" xsi:schemaLocation="urn:MyNamespace Product.xsd"> <ProductName>Rugby jersey</ProductName> </Product>
Salve ProductWithXSD.xml.
Abra Product.xsd, clique na guia XML e modifique a marca xsd:schema start da seguinte maneira, para que o esquema se aplique ao namespace
urn:MyNamespace
:<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:MyNamespace" elementFormDefault="qualified">
Salve Product.xsd.
Execute o aplicativo para validar o documento XML usando o esquema XSD.
Namespaces de cache
No Visual Studio 2005 ou no Visual Studio .NET, abra Module1.vb. No início da sub-rotina Main, crie um
XmlSchemaCollection
objeto, da seguinte forma:Dim cache As New XmlSchemaCollection()
O
XmlSchemaCollection
objeto permite que você armazene esquemas em cache na memória para melhorar o desempenho. Cada esquema está associado a um namespace diferente. Adicione o seguinte código ao cache Product.xsd:cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
Após o código que cria o
XmlValidatingReader
objeto, adicione a instrução a seguir. Isso adiciona o cache de esquema aoXmlValidatingReader
, para que o leitor possa usar os esquemas na memória.v.Schemas.Add(cache)
Verificação
- Compile e execute o aplicativo.
- Verifique se o documento XML ainda está sendo validado em relação ao esquema XSD.
- Faça algumas alterações no ProductWithXSD.xml para torná-lo deliberadamente inválido.
- Verifique se o aplicativo detecta esses erros de validação.