Nenhuma restrição gramatical (esquema DTD ou XML) detectada para o documento


202

Eu tenho este dtd: http://fast-code.sourceforge.net/template.dtd Mas quando incluo em um xml, recebo o aviso: Nenhuma restrição gramatical (esquema DTD ou XML) detectada para o documento. O xml é:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE templates PUBLIC "//UNKNOWN/" "http://fast-code.sourceforge.net/template.dtd">

<templates>
<template type="INSTANCE_OF_CLASS">
    <description>Used to Create instance of class</description>
    <variation>asasa</variation>
    <variation-field>asasa</variation-field>
    <class-pattern>asasa</class-pattern>
    <getter-setter>setter</getter-setter>
    <allowed-file-extensions>java</allowed-file-extensions>
    <number-required-classes>1</number-required-classes>
    <allow-multiple-variation>false</allow-multiple-variation>
    <template-body>
        <![CDATA[
            // Creating new instance of ${class_name}
            final ${class_name} ${instance} = new ${class_name}();
            #foreach ($field in ${fields})
                ${instance}.${field.setter}(${field.value});
            #end
        ]]>
    </template-body>
</template>
</templates>

Edição : Eu alterei o xml, estou recebendo este erro agora:

O conteúdo do tipo de elemento "modelo" deve corresponder "(descrição, variação?, Campo de variação?, Permitir variação múltipla?, Padrão de classe?, Getter-setter?, Extensões de arquivo permitidas?, Número necessário- classes?, modelo-corpo) ".


@ John - Sim, isso é eclipse.
precisa


8
Eu não faria isso Preferências | XML Arquivos XML | A validação no Eclipse, pois apenas mascara / oculta o erro, não resolve o erro. Se você usar o Eclipse apenas para criar aplicativos Android, essa "solução" será aceitável. Mas se você usar o Eclipse para construir outros projetos Java - JSF, etc -, esses projetos serão interrompidos se a validação XML estiver "desativada". Por isso tem cuidado. A solução real é que Oracle, Google e IBM atualizem seus softwares com DTDs e esquemas atualizados.
precisa saber é o seguinte

Acho o eclipse muito mais rápido e menos propenso a falhas se eu manter uma instalação para trabalhar em aplicativos Android e outra para fazer o trabalho de desenvolvimento web em java. Então, eu ficaria feliz em usar a solução acima apenas para a instalação do eclipse no ADT para Android.
Damon Smith

Respostas:


409

No meu caso, resolvi esse aviso irritante simplesmente adicionando o <!DOCTYPE xml>depois da <?xml ... >tag.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

10
Aceita. Essa deve ser a resposta aceita. "Ocultar" o aviso não é exatamente "resolvê-lo".
prat

31
Na segunda linha, "<! DOCTYPE xml>", "xml" deve corresponder ao nome do elemento raiz do documento .
Pup

Downvote: a questão era como fazer o eclipse executar a validação no dtd que o solicitante tinha, não como eliminar o aviso.
Periata Breatta

Não funciona Eclipse 4.10, data 2019-05-31. Às vezes, o aviso desaparece - mas volta novamente quando você reinicia o Eclipse.
Mike roedor #:

Duas coisas: 1. sua declaração doctype deve corresponder ao nome do nó raiz do documento xml. 2. O aviso pode persistir até você executar a validação explícita com o botão direito do mouse / Validar no menu do explorador de projetos.
mvreijn 19/06

162

Isso funcionou para mim no Eclipse 3.7.1: Vá para a janela Preferências e, em seguida, XML -> Arquivos XML -> Validação. Em seguida, na seção Validando arquivos do painel de preferências à direita, escolha Ignorar na caixa suspensa da preferência "Nenhuma gramática especificada". Pode ser necessário fechar o arquivo e reabri-lo para fazer o aviso desaparecer.

(Sei que esta pergunta é antiga, mas foi a primeira que encontrei ao pesquisar no aviso, por isso estou postando a resposta aqui para outros pesquisadores.)


1
Eu tinha que ter certeza de que a caixa "manual" e a caixa "build" estavam marcadas e, em seguida, fiz uma validação manual clicando com o botão direito do mouse no projeto e selecionando "Validate" para que os avisos desaparecessem. Parece que há um bug no eclipse no qual o validador fica confuso. Você deve conseguir pelo menos que a validação manual funcione, mesmo que não queira que isso aconteça no momento da criação. E então, você poderá limpar facilmente os avisos após fazer a validação manual. Até então, esta é a solução.
crowmagnumb

1
O aviso quebra o senso comum e passei muito tempo imaginando o que era a razão. Este resolvido it :)
Shekhar

Você também pode fazer isso projeto por projeto, que faz a alteração no seu arquivo .project, que pode verificar no controle de origem e ajudar seus colegas! Em vez de ir para a janela Preferências, clique com o botão direito do mouse no seu projeto, vá para Propriedades e siga as instruções acima.
Stuart Leyland-Cole

2
Voto negativo. A pergunta não é como esconder o aviso, mas como resolvê-lo (ou seja, fazer eclipse validar corretamente o documento) ..
Periata Breatta

34

Responda:

Comentários sobre cada parte do seu DTD abaixo. Consulte as especificações oficiais para obter mais informações.

  <!
  DOCTYPE ----------------------------------------- correct
  templates --------------------------------------- correct  Name matches root element.
  PUBLIC ------------------------------------------ correct  Accessing external subset via URL.
  "//UNKNOWN/" ------------------------------------ invalid? Seems useless, wrong, out-of-place.
                                                             Safely replaceable by DTD URL in next line.
  "http://fast-code.sourceforge.net/template.dtd" - invalid  URL is currently broken.
  >

Explicação simples:

Um DTD extremamente básico será semelhante à segunda linha aqui:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE nameOfYourRootElement>
<nameOfYourRootElement>
</nameOfYourRootElement>

Explicação detalhada:

As DTDs servem para estabelecer formatos de dados acordados e validar o recebimento de tais dados. Eles definem a estrutura de um documento XML, incluindo:

  • uma lista de elementos legais
  • caracteres especiais
  • cadeias de caracteres
  • e muito mais

Por exemplo

<!DOCTYPE nameOfYourRootElement
[
<!ELEMENT nameOfYourRootElement (nameOfChildElement1,nameOfChildElement2)>
<!ELEMENT nameOfChildElement1 (#PCDATA)>
<!ELEMENT nameOfChildElement2 (#PCDATA)>
<!ENTITY nbsp "&#xA0;"> 
<!ENTITY author "Your Author Name">
]>

Significado das linhas acima ...
Linha 1) Elemento raiz definido como "nameOfYourRootElement"
Linha 2) Início das definições de elemento
Linha 3) Filhos do elemento raiz definidos como "nameOfYourRootElement1" e "nameOfYourRootElement2"
Linha 4) Elemento filho, definido como dados tipo #PCDATA
Linha 5) Elemento filho, que é definido como tipo de dados #PCDATA
Linha 6) Expanda instâncias de &nbsp;até &#xA0;quando o documento é analisado pelo analisador XML
Linha 7) Expanda instâncias de &author;até Your Author Namequando o documento é analisado por analisador XML
Linha 8) Fim das definições


21

A solução real:

adicionar <!DOCTYPE something> ao início de cada XML problemático,

após a tag xml <?xml version="1.0" encoding="utf-8"?>

você pode escrever qualquer coisa para doctype, mas basicamente deve ser manifesto, atividade etc. do que eu entendo


Não funciona Eclipse 4.10, data 2019-05-31. Às vezes, o aviso desaparece - mas volta novamente quando você reinicia o Eclipse.
mike roedor

@mikerodent O aviso pode persistir até você executar a validação explícita com o botão direito do mouse / Validar no menu do explorador de projeto
mvreijn

11

Você tentou adicionar um esquema ao catálogo xml?

no eclipse para evitar "nenhuma restrição gramatical (esquema dtd ou xml) detectada para o documento". eu uso para adicionar um arquivo de esquema xsd ao catálogo xml em

"Janela \ preferências \ xml \ catálogo de xml \ Entradas especificadas pelo usuário".

Clique no botão "Adicionar" à direita.


Exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<HolidayRequest xmlns="http://mycompany.com/hr/schemas">
    <Holiday>
        <StartDate>2006-07-03</StartDate>
        <EndDate>2006-07-07</EndDate>
    </Holiday>
    <Employee>
        <Number>42</Number>
        <FirstName>Arjen</FirstName>
        <LastName>Poutsma</LastName>
    </Employee>
</HolidayRequest>

A partir deste xml, eu criei e salvei um xsd em: /home/my_user/xsd/my_xsd.xsd

Como local: /home/my_user/xsd/my_xsd.xsd

Como tipo de chave: nome do espaço para nome

Como chave: http://mycompany.com/hr/schemas


Feche e reabra o arquivo xml e faça algumas alterações para violar o esquema. Você deve ser notificado


Isso funcionou para mim, mas com essa mudança. Eu estava editando um arquivo .wadl (consulte w3.org/Submission/wadl ) e os exemplos que ele usa. Eu só consegui fazer isso funcionar usando apenas xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 "e não xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd ", como mostram os exemplos desse envio. Adicionei
djb

10

Adicionar tag DOCTYPE ...

Nesse caso:

<!DOCTYPE xml>

Adicionar depois:

<?xml version="1.0" encoding="UTF-8"?>

Assim:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

Trabalhou para mim no Eclipse JEE v. 2018-12. O aviso desapareceu quando adicionei duas dessas linhas ao build.xml do ant
Eugene Gr. Philippov

7

Uma nova maneira limpa pode ser escrever seu xml da seguinte maneira:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rootElement>

<rootElement>
 ....
</rootElement>

O acima funciona no Eclipse Juno +


O aviso pode persistir até você executar a validação explícita com o botão direito do mouse / Validar no menu do explorador de projetos.
mvreijn 19/06

6

Para mim, foi um problema com a codificação de caracteres e o modo de arquivo unix executando o eclipse no Windows:

Acabei de marcar o código completo, cortá- lo e colá-lo de volta (resumindo: CtrlA-CtrlX-CtrlV ) e tudo estava bem - não havia mais avisos de "Sem restrições gramaticais ..."


6

Tente entender a sugestão dada nas mensagens de aviso; isso ajuda em algum momento.

Eu também tive os mesmos problemas, depois de fazer algumas pesquisas, encontrei a solução e corrigi-a adicionando a linha abaixo no início

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

o que levou a alguma outra questão no meu caso. O que resolvi lendo as sugestões, que novamente se transformaram em outro problema, que foi resolvido no entendimento da causa original, de que o primeiro link estava quebrado (não encontrado). Abaixo estão as imagens passo a passo que explicam o que foi feito para resolver o problema completamente.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui


3

Eu realmente não sei dizer por que você recebe o aviso "Sem restrições gramaticais ...", mas posso provocá-lo no Eclipse removendo completamente a declaração DOCTYPE. Quando coloco a declaração de volta e valido novamente, recebo esta mensagem de erro:

O conteúdo do tipo de elemento "modelo" deve corresponder "(descrição +, variação?, Campo de variação?, Permitir-variação múltipla?, Padrão de classe?, Getter-setter?, Extensões de arquivo permitidas?, Modelo-corpo +) .

E isso está correto, acredito (o elemento "número de classes necessárias" não é permitido).


Os parênteses indicam que a ordem é importante. Seu documento possui um elemento permitir variação múltipla após um elemento de padrão de classe inválido. Você realmente deve alterar a pergunta ou aceitar uma resposta existente antes de fazer outra.
nitind 14/10

3

Eu sei que isso é antigo, mas estou passando pelo mesmo problema e encontrei a solução na documentação da primavera, a seguinte configuração xml foi resolvida para mim.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx 

<!-- THIS IS THE LINE THAT SOLVE MY PROBLEM -->
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 

http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

antes de colocar a linha acima, conforme sugerido neste tópico do fórum, tenho a mesma mensagem de aviso e colocando isso ...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

e me dá a seguinte mensagem de aviso ...

The content of element type "template" must match "
(description,variation?,variation-field?,allow- multiple-variation?,class-
pattern?,getter-setter?,allowed-file-extensions?,number-required- 
classes?,template-body)".

então tente usar as linhas sugeridas da minha configuração xml.


2

Isso pode ocorrer devido ao desligamento da validação no eclipse.


1

Resolvido esse problema no Eclipse 3.5.2. Dois layouts completamente idênticos dos quais um recebeu o aviso. Fechou todas as guias e, ao reabrir, o aviso desapareceu.


1
  1. copie seu código inteiro no bloco de notas.
  2. salve temporariamente o arquivo com qualquer nome [ao salvar o arquivo, use "codificação" = UTF-8 (ou superior, mas UTF)].
  3. feche o arquivo
  4. abra-o novamente.
  5. copie e cole de volta no seu código.

erro deve ter desaparecido.


1

Usei um caminho relativo no xsi: noNamespaceSchemaLocation para fornecer o arquivo xsd local (porque não consegui usar um espaço para nome no xml da instância).

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="../project/schema.xsd">
</root>

A validação funciona e o aviso é corrigido (não ignorado).

https://www.w3schools.com/xml/schema_example.asp


1

Eu também tive o mesmo problema no eclipse usando o arquivo web.xml,
ele me mostrou isso "nenhuma restrição gramatical referenciada no documento"

mas isso pode ser resolvido adicionando tag
após a tag xml, ou seja<?xml version = "1.0" encoding = "UTF-8"?>


Funcionou bem para mim (Eclipse Luna) Obrigado
Mathias Zaja

0

Aqui está a solução para esse problema:


Etapa 1: Clique com o botão direito do mouse no projeto e vá para Propriedades

Etapa 2: vá para 'bibliotecas' e remova a 'biblioteca do sistema JRE' do projeto

Etapa 3: clique em 'Adicionar biblioteca' -> 'Biblioteca do sistema JRE' -> selecione 'JRE padrão da área de trabalho'

Etapa 3: vá para 'Solicitar e exportar' e marque a 'biblioteca do sistema JRE' recém-adicionada

Etapa 4: atualizar e limpar o projeto

Eureka! Está funcionando :)


Eu tentei usar sua solução. Infelizmente, quando atualizo e limpo meu projeto, a 'Biblioteca do sistema JRE' recém-adicionada desaparece da seção 'Bibliotecas' e também da seção 'Ordem e exportação'. Por favor ajude.
VikramV

A maior parte dessa resposta não tem relação com a pergunta, exceto a Etapa 4 "limpar o projeto", que pode (ou não) ajudar.
Aaron Digulla 29/08/16

0

O que eu achei ser a solução foi algo muito, muito simples, que acho que você deveria tentar antes de mexer nas preferências. No meu caso, eu tive esse problema em um arquivo de strings que tinha como tag base "recursos" ... tudo o que fiz foi excluir a tag da parte superior e inferior, limpar o projeto, salvar o arquivo e reinserir a tag. O problema desapareceu e nunca me deu nenhum aviso. Pode parecer simples demais para ser verdade, mas, às vezes, são as coisas mais simples que resolvem os problemas. Felicidades


-1

Eu apaguei o aviso na exibição de problemas. Não voltou até agora.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.