Nessun vincolo grammaticale (schema DTD o XML) rilevato per il documento


202

Ho questo dtd: http://fast-code.sourceforge.net/template.dtd Ma quando includo in un XML ricevo l'avvertimento: nessun vincolo grammaticale (schema DTD o XML) rilevato per il documento. L'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>

EDIT : ho cambiato l'xml, sto ricevendo questo errore ora:

Il contenuto del tipo di elemento "modello" deve corrispondere "(descrizione, variazione?, Campo di variazione?, Consentire-variazione multipla?, Modello di classe?, Setter getter?, Estensioni di file consentite?, Numero richiesto- classi?, modello-corpo)".


@John - Sì, questa è un'eclissi.
fastcodejava


8
NON vorrei fare queste preferenze | XML | File XML | Convalida in Eclipse poiché questa maschera solo / nasconde l'errore, non risolve l'errore. Se usi Eclipse solo per creare applicazioni Android, questa "soluzione" è accettabile. Ma se usi Eclipse per costruire altri progetti Java - JSF, ecc., Questi progetti verranno interrotti se la convalida XML è "disattivata". Perciò stai attento. La vera soluzione è che Oracle, Google e IBM aggiornino i loro software con DTD e schemi aggiornati.
ChuongPham,

Trovo eclissi molto più veloce e meno soggetto a crash se mantengo un'installazione per lavorare su app Android e un'altra per fare il lavoro di sviluppo web Java. Quindi sarei felice di usare la soluzione sopra solo per la mia installazione ADT Android di eclipse.
Damon Smith,

Risposte:


409

Nel mio caso ho risolto questo fastidioso avvertimento semplicemente aggiungendo <!DOCTYPE xml>il <?xml ... >tag after .

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

10
Essere d'accordo. Questa dovrebbe essere la risposta accettata. "Nascondere" l'avviso non è esattamente "risolverlo".
argento,

31
Nella seconda riga, "<! DOCTYPE xml>", "xml" deve corrispondere al nome dell'elemento radice del documento .
Cucciolo

Downvote: la domanda era come ottenere l'eclissi per eseguire la validazione sul dtd che aveva il richiedente, non come eliminare l'avvertimento.
Periata Breatta,

Non funziona Eclipse 4.10, data 2019-05-31. A volte l'avviso scompare, ma ritorna di nuovo quando si riavvia Eclipse.
mike rodent,

Due cose: 1. la tua dichiarazione doctype deve corrispondere al nome del nodo radice del documento XML. 2. L'avviso può persistere fino a quando non si esegue la convalida esplicita facendo clic con il pulsante destro del mouse / Convalida nel menu Esplora progetti.
mvreijn,

162

Questo ha funzionato per me in Eclipse 3.7.1: vai alla finestra Preferenze, quindi XML -> File XML -> Convalida. Quindi, nella sezione Convalida dei file del pannello delle preferenze sulla destra, seleziona Ignora nella casella a discesa per la preferenza "Nessuna grammatica specificata". Potrebbe essere necessario chiudere il file e quindi riaprirlo per far scomparire l'avviso.

(So ​​che questa domanda è vecchia ma è stata la prima che ho trovato durante la ricerca dell'avviso, quindi sto postando la risposta qui per altri utenti.)


1
Ho dovuto assicurarmi che la casella "manuale" così come la casella "build" fosse selezionata e quindi fare una validazione manuale facendo clic con il tasto destro del mouse sul progetto e selezionando "Convalida" per far sparire gli avvisi. Sembra che ci sia un bug nell'eclissi in cui il validatore viene incasinato. Si dovrebbe essere in grado di avere almeno il lavoro di validazione manuale, anche se non si vuole che accada al momento della compilazione. E quindi dovresti essere in grado di cancellare facilmente gli avvisi dopo aver effettuato la convalida manuale. Fino ad allora questa è la soluzione.
crowmagnumb,

1
L'avvertimento rompe l'intellisense e ho trascorso parecchio tempo a capire quale fosse la ragione. Questo l'ha risolto :)
Shekhar,

Puoi anche farlo progetto per progetto che apporta le modifiche al tuo file .project che puoi controllare nel controllo del codice sorgente e aiutare i tuoi colleghi! Invece di andare alla finestra Preferenze, fai clic con il pulsante destro del mouse sul progetto, vai su Proprietà e segui le istruzioni sopra da lì.
Stuart Leyland-Cole,

2
Downvote. La domanda che si pone non è come nascondere l'avvertimento, ma come risolverlo (ovvero fare in modo che l'eclissi convalidi correttamente il documento) ..
Periata Breatta,

34

Risposta:

Commenti su ogni pezzo del tuo DTD di seguito. Fare riferimento alle specifiche ufficiali per ulteriori informazioni.

  <!
  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.
  >

Spiegazione semplice:

Un DTD estremamente semplice sembrerà la seconda riga qui:

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

Spiegazione dettagliata:

I DTD servono a stabilire formati di dati concordati e convalidare la ricezione di tali dati. Definiscono la struttura di un documento XML, tra cui:

  • un elenco di elementi legali
  • personaggi speciali
  • stringhe di caratteri
  • e molto altro ancora

Per esempio

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

Significato delle righe precedenti ...
Riga 1) Elemento radice definito come "nameOfYourRootElement"
Riga 2) Inizio delle definizioni degli elementi
Riga 3) Elementi secondari dell'elemento radice definiti come "nameOfYourRootElement1" e "nameOfYourRootElement2"
Riga 4) Elemento child, definito come dati digitare #PCDATA
linea 5) elemento del bambino, che è definito come tipo di dati #PCDATA
linea 6) Espandi istanze di &nbsp;a &#xA0;quando il documento viene analizzato dal parser XML
linea 7) Espandi istanze di &author;a Your Author Namequando il documento viene analizzato dal parser XML
linea 8) Fine delle definizioni


21

La vera soluzione:

Inserisci <!DOCTYPE something> all'inizio di ogni XML problematico,

dopo il tag xml <?xml version="1.0" encoding="utf-8"?>

puoi scrivere qualsiasi cosa per doctype, ma fondamentalmente dovrebbe essere manifest, attività, ecc. da quello che capisco


Non funziona Eclipse 4.10, data 2019-05-31. A volte l'avviso scompare, ma ritorna di nuovo quando si riavvia Eclipse.
mike rodent,

@mikerodent L'avviso può persistere fino a quando non si esegue una convalida esplicita con il pulsante destro del mouse / Convalida nel menu Esplora progetti
mvreijn,

11

Hai provato ad aggiungere uno schema al catalogo xml?

in eclipse per evitare "nessun vincolo grammaticale (schema dtd o xml) rilevato per il documento". io uso per aggiungere un file di schema xsd al catalogo xml sotto

"Finestra \ preferenze \ xml \ catalogo xml \ Voci specificate dall'utente".

Fai clic sul pulsante "Aggiungi" sulla destra.


Esempio:

<?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>

Da questo XML ho generato e salvato un xsd in: /home/my_user/xsd/my_xsd.xsd

Come posizione: /home/my_user/xsd/my_xsd.xsd

Come tipo di chiave: nome dello spazio dei nomi

Come chiave: http://mycompany.com/hr/schemas


Chiudi e riapri il file xml e apporta alcune modifiche per violare lo schema, dovresti essere avvisato


Questo ha funzionato per me, ma con questo cambiamento. Stavo modificando un file .wadl (vedi w3.org/Submission/wadl ) e gli esempi che usano. Sono stato in grado di farlo funzionare solo usando xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 "e non xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd "come mostrano gli esempi in quella presentazione. Ho aggiunto una voce di catalogo per il nome dello spazio dei nomi con wadl.dev.java.net/2009/02
djb

10

Aggiungi tag DOCTYPE ...

In questo caso:

<!DOCTYPE xml>

Aggiungi dopo:

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

Così:

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

Ha lavorato per me presso Eclipse JEE v. 2018-12. L'avvertimento è scomparso quando ho aggiunto due di queste righe al build.xml di ant
Eugene Gr. Philippov,

7

Un nuovo modo pulito potrebbe essere quello di scrivere il tuo XML in questo modo:

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

<rootElement>
 ....
</rootElement>

Quanto sopra funziona in Eclipse Juno +


L'avviso può persistere fino a quando non si esegue la convalida esplicita tramite il tasto destro del mouse / Convalida nel menu Esplora progetti.
mvreijn,

6

Per me è stato un problema con la codifica dei caratteri e la modalità file unix eclipse su Windows:

Ho appena contrassegnato il codice completo, tagliato e incollato indietro (in breve: CtrlA-CtrlX-CtrlV ) e tutto andava bene - niente più avvisi "Nessun vincolo grammaticale ..."


6

Prova a capire il suggerimento dato nei messaggi di avviso, è utile a volte.

Ho anche avuto gli stessi problemi, dopo aver fatto qualche ricerca ho trovato la soluzione e risolto aggiungendo la riga di seguito all'inizio

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

che porta a qualche altro problema nel mio caso. Che ho risolto leggendo i suggerimenti, che si sono trasformati nuovamente in un altro problema, che è stato risolto comprendendo la causa originale, che il primo collegamento è stato interrotto (non trovato). Di seguito sono riportate le immagini dettagliate che spiegano cosa è stato fatto per risolvere completamente il problema.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


3

Non posso davvero dire perché ricevi l'avviso "Nessun vincolo grammaticale ...", ma posso provocarlo in Eclipse rimuovendo completamente la dichiarazione DOCTYPE. Quando rimetto la dichiarazione e convalido di nuovo, viene visualizzato questo messaggio di errore:

Il contenuto del tipo di elemento "modello" deve corrispondere "(descrizione +, variazione?, Campo di variazione?, Consentire-variazione multipla?, Modello di classe?, Setter getter?, Estensioni di file consentite?, Corpo-modello +) .

E questo è corretto, credo (l'elemento "numero-richiesto-classi" non è permesso).


Le parentesi indicano che l'ordine è importante. Il tuo documento ha un elemento di variazione multipla dopo un elemento del modello di classe, che non è valido. Dovresti davvero cambiare la domanda o accettare una risposta esistente prima di chiederne un'altra.
nitind

3

so che questo è vecchio ma sto passando lo stesso problema e ho trovato la soluzione nella documentazione di primavera, la seguente configurazione XML ha risolto il problema per me.

<?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">

prima di mettere la riga sopra come suggerito in questo argomento del forum, ho lo stesso messaggio di avviso e inserendo questo ...

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

e mi dà il seguente messaggio di avviso ...

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)".

quindi prova a usare le righe suggerite della mia configurazione XML.


2

Ciò può essere dovuto alla disattivazione della convalida in Eclipse.


1

Risolto questo problema in Eclipse 3.5.2. Due layout completamente identici di cui uno aveva l'avvertimento. Chiuso tutte le schede e quando è stata riaperta l'avvertenza era scomparsa.


1
  1. copia l'intero codice nel blocco note.
  2. salva temporaneamente il file con qualsiasi nome [durante il salvataggio del file usa "encoding" = UTF-8 (o superiore ma UTF)].
  3. chiudi il file.
  4. riaprilo.
  5. copia e incollalo nuovamente sul tuo codice.

l'errore deve essere sparito.


1

Ho usato un percorso relativo in xsi: noNamespaceSchemaLocation per fornire il file xsd locale (perché non ho potuto usare uno spazio dei nomi nell'istanza xml).

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

La convalida funziona e l'avviso è fisso (non ignorato).

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


1

Anch'io ho avuto lo stesso problema in eclipse utilizzando il file web.xml
che mi ha mostrato questo "nessun vincolo grammaticale a cui si fa riferimento nel documento"

ma può essere risolto aggiungendo il tag
dopo il tag xml, ad es<?xml version = "1.0" encoding = "UTF-8"?>


Ha funzionato bene per me (Eclipse Luna) Grazie
Mathias Zaja

0

Ecco la soluzione funzionante per questo problema:


Passaggio 1: fare clic con il pulsante destro del mouse sul progetto e passare a proprietà

Passaggio 2: vai su "librerie" e rimuovi la "libreria di sistema JRE" del progetto

Passaggio 3: fare clic su "Aggiungi libreria" -> "JRE System Library" -> selezionare "Workspace default JRE"

Passaggio 3: vai su "Ordina ed esporta" e contrassegna la "libreria di sistema JRE" appena aggiunta

Passaggio 4: aggiornare e pulire il progetto

Eureka! Sta funzionando :)


Ho provato a usare la tua soluzione. Ma sfortunatamente, quando aggiorno e pulisco il mio progetto, la "Libreria di sistema JRE" appena aggiunta scompare dalla mia sezione "Librerie" e anche dalla mia sezione "Ordine ed esportazione". Per favore aiuto.
VikramV,

La maggior parte di questa risposta non è correlata alla domanda ad eccezione del passaggio 4 "ripulisci il progetto" che potrebbe (o potrebbe non essere) utile.
Aaron Digulla,

0

Quello che ho trovato essere la soluzione è stato qualcosa di molto molto semplice che penso dovresti provare prima di armeggiare con le preferenze. Nel mio caso ho avuto questo problema in un file di stringhe che aveva come tag di base "risorse" ... tutto quello che ho fatto è stato eliminare il tag dall'alto e dal basso, pulire il progetto, salvare il file e reinserire il tag. Da allora il problema è scomparso e non mi ha mai avvertito. Può sembrare semplice essere vero ma ehi, a volte sono le cose più semplici a risolvere i problemi. Saluti


-1

Ho eliminato l'avviso nella vista problemi. Non è tornato fino ad ora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.