Artigo: 317611 - Última revisão: segunda-feira, 12 de Fevereiro de 2007 - Revisão: 6.4

Tipo de erro: "###" não está declarado na referência a tipo local de um ficheiro 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 | Reduzir tudo

Sintomas

A implementação actual do suporte de validação de esquemas XSD no .NET framework não converte targerNamespace do tipo referência local de um incluído XSD (não suporta "chameleon" incluir). Por exemplo, o seguinte ficheiro a.xsd inclui os ficheiros 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>
				
interior b.xsd, é definido um tipo de testType:
<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>
				
interior c.xsd, teste é declarada com o tipo de 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 é devolvida com o ficheiro de esquema a.xsd:
"Tipo 'testType' não está declarado." no c.xsd

Resolução

Para contornar este problema, adicione um xmlns = "teste" declaração de espaço de nomes para o ficheiro 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>
				

Ponto Da Situação

A Microsoft confirmou que este é um erro no Microsoft produtos listados no início deste artigo.

Mais Informação

Passos para reproduzir o problema

  1. Guarde o ficheiro a.xsd anterior na pasta c:\temp. Guarde os ficheiros b.xsd e c.xsd na mesma pasta como a.xsd.
  2. Crie uma consola do C# Project.
  3. Substitua o código de está dentro do ficheiro 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. Compilar e, em seguida, execute o projecto. Na janela da consola, a seguinte mensagem de erro é devolvida:
    Erro de esquema XSD: tipo de 'teste' não está declarado. Ocorreu um erro na file:///c:/temp/c.xsd(2, 3).
  5. Abra o ficheiro c.xsd e, em seguida, adicione xmlns = "teste" para XSD, por exemplo:
    <xsd:element name="test" type="test" xmlns="test"/>
    					
  6. Compilar e, em seguida, execute o projecto. Na janela da consola, é devolvido o seguinte resultado:
    Sem erros de esquema.

A informação contida neste artigo aplica-se a:
  • Bibliotecas de classe do Microsoft .NET Framework 1.0
  • Bibliotecas de classe 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 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: 317611  (http://support.microsoft.com/kb/317611/en-us/ )