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
- Inicie o Visual Studio NET..
- Crie um novo ficheiro XML no computador local.
- Adicionar os seguintes dados ao documento XML para representar um produto num catálogo:
<Product ProductID="123">
<ProductName>Rugby jersey</ProductName>
</Product>
- Guarde o ficheiro como Product.xml numa nova pasta o nome c:\PastaPessoal.
Utilizar o DTD
Criar o DTD e ligar ao documento XML
- No Visual Studio. NET, crie um ficheiro de texto vazia.
- 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)>
- Guarde o ficheiro como Product.dtd in a c:\PastaPessoal directório.
- Abra Product.xml no Visual Studio. NET.
- 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">
- Guarde o documento XML modificado como ProductWithDTD.xml.
Utilize o DTD para validar o documento XML
- No Visual Studio. NET, criar um novo Visual C# consola de projecto de aplicação com o nome ValidateXml.
- 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)
- 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. - 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);
- 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;
- 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);
- 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");
- 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);
}
- Criar e executar a aplicação. A aplicação deverá comunicar que o documento XML é válido.
- No Visual Studio. NET, modificar ProductWithDTD.xml invalidar-(por exemplo, elimine o "<productname> Rugby jersey </productname>" elemento).
- 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
- No Visual Studio. NET, crie um ficheiro de texto vazia.
- 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>
- Guarde o ficheiro como Product.xdr in a c:\PastaPessoal directório.
- 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>
- Guarde o documento XML modificado como ProductWithXDR.xml.
Utilizar o esquema XDR para validar o documento XML
- Modificar a aplicação de modo a que XmlTextReader carrega ProductWithXDR.xml da seguinte forma:
XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXDR.xml");
- Definir ValidationType para XDR para que o leitor validar efectua uma validação XDR:
v.ValidationType = ValidationType.XDR;
- Criar e executar a aplicação. A aplicação deverá comunicar que o documento XML é válido.
- Modificar ProductWithXDR.xml invalidá-lo.
- 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
- No Visual Studio. NET, crie um ficheiro de texto vazia.
- 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>
- Guarde o ficheiro como Product.xsd in a c:\PastaPessoal directório.
- 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>
- Guarde o documento XML modificado como ProductWithXSD.xml.
Utilizar o esquema XSD para validar o documento XML
- Modificar a aplicação de modo a que XmlTextReader carrega ProductWithXSD.xml da seguinte forma:
XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXSD.xml");
- Definir ValidationType ao esquema , para que o leitor validar executa a validação de esquemas XSD:
v.ValidationType = ValidationType.Schema;
- Criar e executar a aplicação para utilizar o esquema XSD valide o documento XML.
Utilizar espaços de nomes no esquema XSD
- No Visual Studio. NET, abra ProductWithXSD.xml.
- 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>
- Guarde as alterações ProductWithXSD.xml.
- 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">
- Guarde as alterações Product.xsd.
- Criar e executar a aplicação para utilizar o esquema XSD valide o documento XML.
Espaços de nomes da cache
- 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();
- 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");
- 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:
Verificar se funciona
- Compilar e executar a aplicação.
- Certifique-se que o documento XML ainda é validado contra o esquema XSD.
- Modificar ProductWithXSD.xml invalidá-lo.
- Verificar se a aplicação detecta esses erros de validação.
Artigo: 307379 - Última revisão: segunda-feira, 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
| kbmt kbhowtomaster KB307379 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:
307379
(http://support.microsoft.com/kb/307379/en-us/
)