Como validar um documento XML utilizando o DTD, XDR ou XSD no Visual C# .NET

Traduções de Artigos Traduções de Artigos
Artigo: 307379 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo demonstra como aplicar uma DTD (Document Type Definition), um esquema de Microsoft XML-data (REDUCED) ou um esquema de idioma de definição de esquema de XML (XSD) para um XML (Extensible Markup Language) documento. Este artigo também descreve como utilizar a classe XmlValidatingReader para validar um documento XML contra a gramática especificado, bem como utilizar a classe XmlSchemaCollection para esquemas de cache na memória para optimizar XML validação.

Documentos XML contêm elementos e atributos. Estes fornecem uma forma flexível e poderosa para trocar dados entre aplicações e organizações. Para especificar a estrutura permitida e o conteúdo de um XML documento, pode escrever uma DTD, um esquema XDR ou um esquema XSD. Os esquemas XSD são o método preferencial para especificar gramáticas XML no Microsoft .NET Framework, mas as DTDs e também são suportados esquemas XDR.

Requisitos

Este artigo pressupõe que lhe familiarizado com os seguintes tópicos:
  • Sintaxe de C# .NET ou Microsoft Visual Basic .NET Visual no Microsoft
  • Conceitos XML, incluindo problemas de validação

Criar um documento XML

  1. Inicie o Visual Studio NET..
  2. Crie um novo ficheiro XML no computador local.
  3. Adicionar os seguintes dados ao documento XML para representar um produto num catálogo:
    <Product ProductID="123">
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  4. Guarde o ficheiro como Product.xml numa nova pasta o nome c:\PastaPessoal.

Utilizar o DTD

Criar o DTD e ligar ao documento XML

  1. No Visual Studio. NET, crie um ficheiro de texto vazia.
  2. Adicionar as declarações de DTD seguintes ao ficheiro para descrever a gramática do documento XML:
    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    					
  3. Guarde o ficheiro como Product.dtd in a c:\PastaPessoal directório.
  4. Abra Product.xml no Visual Studio. NET.
  5. Adicione a seguinte instrução de DOCTYPE na parte superior do Product.xml ligar o documento XML ao ficheiro DTD:
    <?xml version="1.0"?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    					
  6. Guarde o documento XML modificado como ProductWithDTD.xml.

Utilize o DTD para validar o documento XML

  1. No Visual Studio. NET, criar um novo Visual C# consola de projecto de aplicação com o nome ValidateXml.
  2. Adicionar duas instruções de utilização para o início da Class1.cs da seguinte forma:
    using System.Xml;        // for XmlTextReader and XmlValidatingReader
    using System.Xml.Schema; // for XmlSchemaCollection (which is used later)
    					
  3. Em Class1.cs, declarar uma variável booleana denominada isValid antes do início do método principal da seguinte forma:
    private static bool isValid = true;      // If a validation error occurs,
                                             // set this flag to false in the
                                             // validation event handler. 
  4. Criar um objecto XmlTextReader ler um documento XML a partir de um ficheiro de texto no método principal e crie um XmlValidatingReader para validar dados XML da seguinte forma:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");
    XmlValidatingReader v = new XmlValidatingReader(r);
    					
  5. A propriedade ValidationType do objecto XmlValidatingReader indica o tipo de validação é necessária ( DTD , XDR ou esquema ). Definir esta propriedade para DTD da seguinte forma:
    v.ValidationType = ValidationType.DTD;
    					
  6. Se ocorrerem erros de validação, o leitor validar gera um evento de validação. Adicione o seguinte código para registar um processador de eventos validação (irão implementar o método MyValidationEventHandler no passo 8):
    v.ValidationEventHandler += 
       new ValidationEventHandler(MyValidationEventHandler);
    					
  7. Adicione o seguinte código para ler e validar o XML documento. Se ocorrerem erros de validação, MyValidationEventHandler denomina-se para resolver o erro. Este método define isValid para false (consulte o passo 8). Pode verificar o estado de isValid após a validação para verificar se o documento é válido ou inválido.
    while (v.Read())
    {
       // Can add code here to process the content.
    }
    v.Close();
    
    // Check whether the document is valid or invalid.
    if (isValid)
       Console.WriteLine("Document is valid");
    else
       Console.WriteLine("Document is invalid");
    					
  8. Escrever o método MyValidationEventHandler depois do método principal da seguinte forma:
    public static void MyValidationEventHandler(object sender, 
                                                ValidationEventArgs args) 
    {
       isValid = false;
       Console.WriteLine("Validation event\n" + args.Message);
    }
    					
  9. Criar e executar a aplicação. A aplicação deverá comunicar que o documento XML é válido.
  10. No Visual Studio. NET, modificar ProductWithDTD.xml invalidar-(por exemplo, elimine o "<productname> Rugby jersey </productname>" elemento).
  11. Execute novamente a aplicação. Deverá receber a seguinte mensagem de erro:
    Eventos de validação
    Elemento 'Produto' tem conteúdo inválido. Era esperado 'ProductName'.
    Ocorreu um erro na file:///C:/MyFolder/ProductWithDTD.xml(4, 5).
    Documento é inválido

Utilizando o esquema XDR

Criar o esquema XDR e ligar ao documento XML

  1. No Visual Studio. NET, crie um ficheiro de texto vazia.
  2. Adicione as seguintes definições de esquema XDR ao ficheiro 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">
    
       <ElementType name="Product" content="eltOnly">
          <attribute type="ProductID" required="yes"/>
          <element type="ProductName"/>
       </ElementType>
    
       <AttributeType name="ProductID" dt:type="int"/>
       <ElementType name="ProductName" dt:type="string"/>
    </Schema>
    					
  3. Guarde o ficheiro como Product.xdr in a c:\PastaPessoal directório.
  4. Abrir o ficheiro Product.xml original e ligue-o a XDR esquema da seguinte forma:
    <?xml version="1.0"?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  5. Guarde o documento XML modificado como ProductWithXDR.xml.

Utilizar o esquema XDR para validar o documento XML

  1. Modificar a aplicação de modo a que XmlTextReader carrega ProductWithXDR.xml da seguinte forma:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXDR.xml");
    					
  2. Definir ValidationType para XDR para que o leitor validar efectua uma validação XDR:
    v.ValidationType = ValidationType.XDR;
    					
  3. Criar e executar a aplicação. A aplicação deverá comunicar que o documento XML é válido.
  4. Modificar ProductWithXDR.xml invalidá-lo.
  5. Criar e executar a aplicação novamente. Deverá receber um erro de validação.

Utilizando o esquema XSD

Criar o esquema XSD e ligar ao documento XML

  1. No Visual Studio. NET, crie um ficheiro de texto vazia.
  2. Adicione as seguintes definições de esquema XSD ao ficheiro 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>
    					
  3. Guarde o ficheiro como Product.xsd in a c:\PastaPessoal directório.
  4. Abrir Product.xml original e ligá-lo ao XSD esquema da seguinte forma:
    <?xml version="1.0"?>
    <Product ProductID="123" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="Product.xsd">
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  5. Guarde o documento XML modificado como ProductWithXSD.xml.

Utilizar o esquema XSD para validar o documento XML

  1. Modificar a aplicação de modo a que XmlTextReader carrega ProductWithXSD.xml da seguinte forma:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXSD.xml");
    					
  2. Definir ValidationType ao esquema , para que o leitor validar executa a validação de esquemas XSD:
    v.ValidationType = ValidationType.Schema;
    					
  3. Criar e executar a aplicação para utilizar o esquema XSD valide o documento XML.

Utilizar espaços de nomes no esquema XSD

  1. No Visual Studio. NET, abra ProductWithXSD.xml.
  2. Declare um espaço de nomes da predefinição urn: MyNamespace no documento. Modificar para além disso, a ligação XSD para que especifica o esquema para validar o conteúdo deste espaço de nomes XSD:
    <?xml version="1.0"?>
    <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>
    					
  3. Guarde as alterações ProductWithXSD.xml.
  4. Abra Product.xsd. Modifique a tag de início <xsd:schema> da seguinte forma para que aplique o esquema para o espaço de nomes urn: MyNamespace :
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                targetNamespace="urn:MyNamespace"
                elementFormDefault="qualified">
    					
  5. Guarde as alterações Product.xsd.
  6. Criar e executar a aplicação para utilizar o esquema XSD valide o documento XML.

Espaços de nomes da cache

  1. No Visual Studio. NET, abra Class1.cs. Criar um objecto XmlSchemaCollection no início do método principal da seguinte forma:
    XmlSchemaCollection cache = new XmlSchemaCollection();
    					
  2. O objecto XmlSchemaCollection permite esquemas de cache na memória para um melhor desempenho. Cada esquema está associada um espaço de nomes diferente. Adicione o seguinte código ao cache Product.xsd:
    cache.Add("urn:MyNamespace", "C:\\MyFolder\\Product.xsd");
    					
  3. Adicione a seguinte instrução após o código que cria o objecto XmlValidatingReader para adicionar a cache do esquema XmlValidatingReader para que o leitor pode utilizar os esquemas na memória:
    v.Schemas.Add(cache);
    					

Verificar se funciona

  1. Compilar e executar a aplicação.
  2. Certifique-se que o documento XML ainda é validado contra o esquema XSD.
  3. Modificar ProductWithXSD.xml invalidá-lo.
  4. Verificar se a aplicação detecta esses erros de validação.

Propriedades

Artigo: 307379 - Última revisão: 5 de dezembro de 2005 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbmt kbhowtomaster KB307379 KbMtpt
Tradução automática
IMPORTANTE: 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: 307379

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com