Validar um documento XML usando DTD, XDR ou XSD no Visual Basic
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 por meio de esquemas de cache.
Versão original do produto: Visual Basic
Número de KB original: 315533
Resumo
Documentos de XML (Linguagem de Marcação Extensível) 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 um 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).
Esquemas XSD são a maneira preferida de especificar gramáticas XML no .NET Framework, mas DTDs e esquemas XDR também têm suporte.
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 na 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, software, infraestrutura de rede e service packs recomendados que você precisa: Microsoft Visual Basic 2005 ou Microsoft Visual Basic .NET
Este artigo refere-se aos seguintes namespaces da Biblioteca de Classes da 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 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 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 assumem 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 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 que seu 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 linha), da
?xml version="1.0"
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 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 principal), declare uma variável booliana chamada isValid, da seguinte maneira:
'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 Principal, 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 ocorrerem erros de validação, o leitor validador gerará um evento de validação. Adicione o código a seguir 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 ocorrerem erros de validação, MyValidationEventHandler será chamado para lidar com o erro. Essa sub-rotina será definida
isValid
como False (confira a etapa 8 desta seção). Você pode marcar 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 Principal, 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
Crie e execute o aplicativo.
O aplicativo deve informar 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:
O elemento de evento de validação 'Product' tem conteúdo incompleto. Esperado 'ProductName'. 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 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 seu documento XML.
Reabra o Product.xmloriginal 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 validação usando um esquema XDR
Modifique seu aplicativo para que o XmlTextReader carregueProductWithXDR.xml, da seguinte maneira:
Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
Defina o
ValidationType
como XDR para que o leitor validador execute a validação XDR da seguinte maneira:v.ValidationType = ValidationType.XDR
Crie e execute o aplicativo.
O aplicativo deve informar 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 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 seu documento XML.
Reabra o Product.xmloriginal 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 validação usando um esquema XSD
Modifique seu aplicativo para que o
XmlTextReader
carregamentoProductWithXSD.xml, da seguinte maneira:Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
Defina o
ValidationType
como Esquema para que o leitor validador execute a validação do esquema XSD, da seguinte maneira:v.ValidationType = ValidationType.Schema
Crie e execute o aplicativo para validar o documento XML usando o esquema XSD.
O aplicativo deve informar 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 neste 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 de início xsd:schema 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 principal, crie um
XmlSchemaCollection
objeto da seguinte maneira:Dim cache As New XmlSchemaCollection()
O
XmlSchemaCollection
objeto permite armazenar esquemas em cache na memória para melhorar o desempenho. Cada esquema está associado a um namespace diferente. Adicione o seguinte código para armazenar em cache Product.xsd:cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
Depois do código que cria o
XmlValidatingReader
objeto, adicione a instrução a seguir. Isso adiciona o cache de esquema ao , paraXmlValidatingReader
que o leitor possa usar os esquemas na memória.v.Schemas.Add(cache)
Verificação
- Crie e execute o aplicativo.
- Verifique se o documento XML ainda está sendo validado no 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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários