PROBLEMA: Prefixos de Namespace são declarados como fixos atributos em um DTD de XML

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: 296492
Sintomas
O analisador Microsoft XML (MSXML) não interpretará prefixos de namespace que são declarados como atributos fixos em um DTD (XML Document Type Definition). Se você usar um atributo de valor fixo em um DTD para declarar um prefixo de namespace, e se você usar o prefixo de namespace para qualificar nomes de elemento ou atributo sem declarar explicitamente o prefixo em um documento XML que referencia o DTD, você receberá a seguinte mensagem de erro quando o analisador MSXML tenta carregar o XML:
Referência para o prefixo do namespace não declarado: < prefixo de espaço para Nome >
Este erro ocorre se você o DOM (MSXML Document Object Model) por meio de código de programa ou abrir o documento XML no Microsoft Internet Explorer.
Causa
Esse problema ocorre porque as especificações de linguagem XML e Namespace não definem como os DTDs e espaços para nome devem interagir entre si.
Resolução
Para contornar esse problema, declare explicitamente o prefixo de espaço para nome no documento XML antes de usá-lo para qualificar nomes de elemento e/ou atributo. Para obter mais informações e código de exemplo, consulte a seção "Mais informação".
Mais Informações
Alguns analisadores XML de terceiros poderá interpretar e carregar documentos XML que usam prefixos de namespace são definidos em um DTD referenciado como um atributo de valor fixo sem declará-los explicitamente. No entanto, isso não significa que o comportamento de tais analisadores de sempre é correto. O comportamento correto de um analisador XML é definido pelas especificações de XML do World Wide Web Consortium (W3C). Atualmente, as especificações de linguagem XML e Namespace não definem como os DTDs e espaços para nome devem interagir entre si.

Etapas para reproduzir o problema

Para criar um documento XML com um DTD in-line e reproduzir esse comportamento, execute essas etapas:
  1. No bloco de notas, abra um novo arquivo de texto.
  2. Copie e cole o seguinte código XML:
    <?xml version="1.0"?><!DOCTYPE Books [<!ELEMENT Books (Book+)><!ATTLIST Books          xmlns:Bookns  CDATA    #FIXED "http://myserver/books"   ><!ELEMENT Book EMPTY><!ATTLIST Book                                                      Bookns:ISBN   CDATA    #REQUIRED               Bookns:TITLE  CDATA    #REQUIRED>]><Books>  <Book Bookns:ISBN="031-789-098" Bookns:TITLE="ADO 2.6 Programmers Reference"/>  <Book Bookns:ISBN="098-876-654" Bookns:TITLE="Professional VB6 XML"/></Books>					
  3. Salve este arquivo como Books.XML.
  4. No Internet Explorer, abra Books.XML. O analisador MSXML gera a seguinte mensagem de erro:
    Referência para o prefixo do namespace não declarado: 'Bookns'. Linha 14, posição 81
  5. Programe o DOM MSXML para carregar Books.XML. Observe que você recebe a mesma mensagem de erro. Para acessar a mensagem de erro, use a propriedade motivo da propriedade de objeto parseError do objeto MSXML DOMDocument .

Solução alternativa

Este erro ocorre porque o prefixo de namespace Bookns é usado para prefixar os atributos ISBN e TITLE do elemento catálogo e não está explicitamente declarado na parte do documento XML. Documento de exemplo que você criou na etapa 2 contém um DTD que define o prefixo de namespace Bookns como um atributo do elemento livros fixo in-line. No entanto, essa declaração sozinha não é suficiente para o analisador MSXML para interpretar corretamente e carregar o XML. Você deve explicitamente declarar o prefixo de espaço para nome no documento XML antes de poder usá-lo para qualificar nomes de elemento e/ou atributo.

Para contornar esse comportamento, substitua a abertura <books> elemento no XML com a seguinte linha de código para declarar explicitamente o atributo de prefixo de namespace Bookns conforme especificado no DTD:
<Books xmlns:Bookns="http://myserver/books">				
salvar a alteração Books.XML e, em seguida, abra Books.XML no Internet Explorer. Observe que o navegador carrega e exibe o XML corretamente.

Observação Esse comportamento também ocorre em um documento XML que faz referência a um DTD externo.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 296492 - Última Revisão: 10/12/2001 10:40:00 - Revisão: 1.1

Microsoft XML Parser 3.0, Microsoft XML Parser 3.0 Service Pack 1, Microsoft XML Core Services 4.0

  • kbmt kbprb KB296492 KbMtpt
Comentários