ID do artigo: 317611 - Última revisão: segunda-feira, 12 de fevereiro de 2007 - Revisão: 6.4

Erro: Digite "###" não está declarado em referência ao tipo de local de um arquivo de esquema XSD incluído

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

A implementação atual do suporte a validação de esquema XSD no .NET Framework from VPE não converte targerNamespace o tipo de referência local de um XSD incluído (ele não oferece suporte a "chameleon" incluir). Por exemplo, o seguinte arquivo a.xsd inclui os arquivos b.xsd e c.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 	targetNamespace="test">

	<xsd:include schemaLocation="b.xsd" />
	<xsd:include schemaLocation="c.xsd" />
</xsd:schema>
				
interna b.xsd, um tipo testType é definido:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:simpleType name="testType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="test"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>
				
interna c.xsd, teste é declarada com tipo testType:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="test" type="testType"/>             <!-- this fails, but it should not fail -->
</xsd:schema>
				
a seguinte mensagem de erro é retornada com o arquivo de esquema a.xsd:
"Tipo 'testType' não é declarado." em c.xsd

Resolução

Para contornar este problema, adicione um xmlns = "teste" declaração de namespace para o arquivo c.xsd, por exemplo:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="test">
	<xsd:element name="test" type="testType" xmlns="test"/>              
</xsd:schema>
				

Situação

A Microsoft confirmou que este é um bug no Microsoft produtos que estão listados no início deste artigo.

Mais Informações

Etapas para reproduzir o problema

  1. Salve o arquivo a.xsd anterior na pasta c:\temp. Salve os arquivos b.xsd e c.xsd na mesma pasta como a.xsd.
  2. Crie um console translation from VPE for Csharp Project.
  3. Substitua o código o está contido no arquivo Class1.cs com o seguinte código:
    using System;
    using System.IO;
    using System.Xml;
    using System.Xml.Schema;
    
    namespace ValidationTest
    {
    	class Sample
    	{
    		public static void Main()
    		{
    			try
    			{
    				XmlSchemaCollection sc = new XmlSchemaCollection();
    				sc.Add("test", "c:\\temp\\a.xsd");
                                    Console.WriteLine("No Schema error.");			
    			}
    			catch(XmlSchemaException ex)
    			{
    				Console.WriteLine("XSD schema Error: {0}", ex.Message);
    			}
    			
    			Console.Read();
    		}
    	}
    }
    					
  4. Compile e, em seguida, execute o projeto. Na janela do console, a seguinte mensagem de erro é retornada:
    Erro de esquema XSD: Type 'teste' não está declarado. Ocorreu um erro no file:///c:/temp/c.xsd(2, 3).
  5. Abra o arquivo c.xsd e, em seguida, adicione xmlns = "teste" para xsd: Element, por exemplo:
    <xsd:element name="test" type="test" xmlns="test"/>
    					
  6. Compile e, em seguida, execute o projeto. Na janela do console, será retornado o seguinte resultado:
    Nenhum erro de esquema.

A informação contida neste artigo aplica-se a:
  • Bibliotecas de Classes do Microsoft .NET Framework 1.0
  • Bibliotecas de Classes do Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
Palavras-chave: 
kbmt kbvs2002sp1sweep kbbug kbenv KB317611 KbMtpt
Tradução automáticaTraduçã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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 317611  (http://support.microsoft.com/kb/317611/en-us/ )