Für das Dokument wurden keine Grammatikbeschränkungen (DTD- oder XML-Schema) festgestellt

202

Ich habe dieses dtd: http://fast-code.sourceforge.net/template.dtd Aber wenn ich es in eine XML einbinde, erhalte ich die Warnung: Für das Dokument wurden keine Grammatikbeschränkungen (DTD- oder XML-Schema) festgestellt. Die XML ist:

<?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 : Ich habe die XML geändert, ich erhalte jetzt diesen Fehler:

Der Inhalt des Elementtyps "Vorlage" muss übereinstimmen "(Beschreibung, Variation ?, Variationsfeld ?, Zulassen-Mehrfachvariation ?, Klassenmuster ?, Getter-Setter ?, Zulässige-Dateierweiterungen ?, Anzahl erforderlich. Klassen ?, Template-Body) ".

fastcodejava
quelle
@ John - Ja, das ist eine Sonnenfinsternis.
Fastcodejava
8
Ich würde diese Einstellungen NICHT tun XML | XML-Dateien | Validierung in Eclipse, da dies nur den Fehler maskiert / verbirgt und den Fehler nicht löst . Wenn Sie Eclipse nur zum Erstellen von Android-Anwendungen verwenden, ist diese "Lösung" akzeptabel. Wenn Sie jedoch Eclipse zum Erstellen anderer Java-Projekte verwenden - JSF usw. - werden diese Projekte unterbrochen, wenn die XML-Validierung "deaktiviert" ist. Also sei vorsichtig. Die eigentliche Lösung besteht darin, dass Oracle, Google und IBM ihre Software mit aktualisierten DTDs und Schemas aktualisieren.
ChuongPham
Ich finde Eclipse viel schneller und weniger absturzgefährdet, wenn ich eine Installation für die Arbeit an Android-Apps und eine andere für die Java-Webentwicklung behalte. Daher würde ich die obige Lösung gerne nur für meine Android ADT-Installation von Eclipse verwenden.
Damon Smith

Antworten:

408

In meinem Fall habe ich diese nervige Warnung durch einfaches Hinzufügen des <!DOCTYPE xml>Nach- <?xml ... >Tags gelöst .

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Sabuj Hassan
quelle
10
Zustimmen. Dies sollte die akzeptierte Antwort sein. Das "Verstecken" der Warnung "löst" sie nicht genau.
Silber
31
In der zweiten Zeile „<! DOCTYPE xml>“, „xml“ sollte den Namen des des Dokuments übereinstimmen Wurzelelement .
Welpe
Downvote: Die Frage war, wie Eclipse dazu gebracht werden kann, eine Validierung für das dtd durchzuführen, das der Fragesteller hatte, und nicht, wie die Warnung beseitigt werden kann.
Periata Breatta
Funktioniert nicht Eclipse 4.10, Datum 2019-05-31. Manchmal verschwindet die Warnung - aber sie kommt wieder, wenn Sie Eclipse neu starten.
Mike Nagetier
Zwei Dinge: 1. Ihre Doctype-Deklaration muss mit dem Stammknotennamen des XML-Dokuments übereinstimmen. 2. Die Warnung kann bestehen bleiben, bis Sie eine explizite Validierung durch Klicken mit der rechten Maustaste / Validieren im Projekt-Explorer-Menü durchführen.
mvreijn
162

Dies funktionierte bei mir in Eclipse 3.7.1: Gehen Sie zum Fenster "Einstellungen" und dann zu XML -> XML-Dateien -> Validierung. Wählen Sie dann im Abschnitt "Dateien validieren" des Einstellungsfensters auf der rechten Seite im Dropdown-Feld "Ignorieren" die Option "Keine Grammatik angegeben". Möglicherweise müssen Sie die Datei schließen und dann erneut öffnen, damit die Warnung verschwindet.

(Ich weiß, dass diese Frage alt ist, aber es war die erste, die ich bei der Suche in der Warnung gefunden habe. Deshalb poste ich die Antwort hier für andere Suchende.)

Marc Bernstein
quelle
1
Ich musste sicherstellen, dass sowohl das Kontrollkästchen "manuell" als auch das Kontrollkästchen "erstellen" aktiviert waren, und dann eine manuelle Validierung durchführen, indem ich mit der rechten Maustaste auf das Projekt klickte und "Validieren" auswählte, damit die Warnungen verschwinden. Es scheint, dass es einen Fehler in Eclipse gibt, bei dem der Validator durcheinander gerät. Sie sollten zumindest in der Lage sein, die manuelle Validierung durchzuführen, auch wenn Sie nicht möchten, dass dies zum Zeitpunkt der Erstellung geschieht. Und dann sollten Sie in der Lage sein, die Warnungen nach der manuellen Validierung leicht zu löschen. Bis dahin ist dies die Lösung.
Crowmagnumb
1
Die Warnung bricht Intellisense und ich habe ziemlich viel Zeit damit verbracht, herauszufinden, was der Grund war. Dies löste es :)
Shekhar
Sie können dies auch projektweise tun, um die Änderung in Ihrer .project-Datei vorzunehmen, die Sie in der Quellcodeverwaltung einchecken und Ihren Kollegen helfen können! Anstatt zum Fenster "Einstellungen" zu wechseln, klicken Sie mit der rechten Maustaste auf Ihr Projekt, gehen Sie zu "Eigenschaften" und befolgen Sie von dort aus die obigen Anweisungen.
Stuart Leyland-Cole
2
Downvote. Die gestellte Frage ist nicht, wie man die Warnung verbirgt, sondern wie man sie
löst
33

Antworten:

Kommentare zu jedem Teil Ihrer DTD unten. Weitere Informationen finden Sie in der offiziellen Spezifikation .

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

Einfache Erklärung:

Eine extrem einfache DTD sieht hier wie die zweite Zeile aus:

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

Ausführliche Erklärung:

DTDs dienen dazu, vereinbarte Datenformate festzulegen und den Empfang solcher Daten zu validieren. Sie definieren die Struktur eines XML-Dokuments, einschließlich:

  • eine Liste der rechtlichen Elemente
  • spezielle Charaktere
  • Zeichenketten
  • und vieles mehr

Z.B

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

Bedeutung der obigen Zeilen ...
Zeile 1) Stammelement definiert als "nameOfYourRootElement"
Zeile 2) Beginn der Elementdefinitionen
Zeile 3) Stammelementkinder, definiert als "nameOfYourRootElement1" und "nameOfYourRootElement2"
Zeile 4) Untergeordnetes Element, das als Daten definiert ist Typ #PCDATA
Zeile 5) Untergeordnetes Element, das als Datentyp definiert ist #PCDATA
Zeile 6) Erweitern Sie Instanzen von &nbsp;bis, &#xA0;wenn das Dokument vom XML-Parser analysiert wird.
Zeile 7) Erweitern Sie Instanzen von &author;bis, Your Author Namewenn das Dokument vom XML-Parser analysiert wird.
Zeile 8) Ende der Definitionen

Welpe
quelle
21

Die wahre Lösung:

<!DOCTYPE something>am Anfang jedes problematischen XML hinzufügen ,

nach dem xml tag <?xml version="1.0" encoding="utf-8"?>

Sie können alles für doctype schreiben, aber im Grunde soll es Manifest, Aktivität usw. sein, soweit ich weiß

Amir.F
quelle
Funktioniert nicht Eclipse 4.10, Datum 2019-05-31. Manchmal verschwindet die Warnung - aber sie kommt wieder, wenn Sie Eclipse neu starten.
Mike Nagetier
@mikerodent Die Warnung kann bestehen bleiben, bis Sie eine explizite Validierung per Rechtsklick / Validieren im Projekt-Explorer-Menü durchführen
mvreijn
11

Haben Sie versucht, dem XML-Katalog ein Schema hinzuzufügen?

in Eclipse, um zu vermeiden, dass "keine Grammatikbeschränkungen (dtd- oder xml-Schema) für das Dokument erkannt wurden". Ich benutze, um eine XML-Schemadatei zum XML-Katalog unter hinzuzufügen

"Fenster \ Einstellungen \ xml \ xml Katalog \ Benutzerdefinierte Einträge".

Klicken Sie rechts auf die Schaltfläche "Hinzufügen".


Beispiel:

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

Aus dieser XML habe ich eine xsd generiert und gespeichert unter: /home/my_user/xsd/my_xsd.xsd

Als Speicherort: /home/my_user/xsd/my_xsd.xsd

Als Schlüsseltyp: Namespace-Name

Als Schlüssel: http://mycompany.com/hr/schemas


Schließen Sie die XML-Datei, öffnen Sie sie erneut und nehmen Sie einige Änderungen vor, um das Schema zu verletzen. Sie sollten benachrichtigt werden

user1374968
quelle
Das hat bei mir funktioniert, aber mit dieser Änderung. Ich habe eine .wadl-Datei bearbeitet (siehe w3.org/Submission/wadl ) und die dort verwendeten Beispiele. Ich konnte dies nur mit xmlns zum Laufen bringen : xsi = " w3.org/2001/XMLSchema-instance " xmlns : xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 "und nicht xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd ", wie die Beispiele in dieser Einreichung zeigen. Ich habe einen Katalogeintrag für den Namespace-Namen mit wadl.dev.java.net/2009/02
djb
10

DOCTYPE-Tag hinzufügen ...

In diesem Fall:

<!DOCTYPE xml>

Füge danach hinzu:

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

So:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Jorge Bastida Cano
quelle
Arbeitete für mich bei Eclipse JEE v. 2018-12. Die Warnung verschwand, als ich zwei dieser Zeilen zu ant's build.xml hinzufügte
Eugene Gr. Philippov
7

Eine neue saubere Möglichkeit könnte darin bestehen, Ihre XML-Datei wie folgt zu schreiben:

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

<rootElement>
 ....
</rootElement>

Das obige funktioniert in Eclipse Juno +

Damilola
quelle
Die Warnung bleibt möglicherweise bestehen, bis Sie eine explizite Validierung durch Klicken mit der rechten Maustaste / Validieren im Projektexplorer-Menü durchführen.
mvreijn
6

Für mich war es ein Problem mit der Zeichenkodierung und dem Unix-Dateimodus , auf dem Eclipse unter Windows ausgeführt wird:

Markierte einfach den vollständigen Code, schnitt ihn aus und fügte ihn zurück (kurz: CtrlA-CtrlX-CtrlV ) und alles war in Ordnung - keine Warnungen mehr "Keine Grammatikbeschränkungen ..."

user3022856
quelle
6

Versuchen Sie, den Vorschlag in den Warnmeldungen zu verstehen. Es hilft manchmal.

Ich hatte auch die gleichen Probleme, nachdem ich einige Nachforschungen angestellt hatte, fand ich die Lösung und behebte sie, indem ich am Anfang die folgende Zeile hinzufügte

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

was in meinem Fall zu einem anderen Problem führte. Was ich durch Lesen der Vorschläge gelöst habe, was wiederum zu einem anderen Problem wurde, das gelöst wurde, indem man die ursprüngliche Ursache verstand, dass der erste Link unterbrochen wurde (nicht gefunden). Im Folgenden finden Sie schrittweise Bilder, in denen erläutert wird, wie das Problem vollständig behoben wurde.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Bhupendra Kumar
quelle
3

Ich kann nicht wirklich sagen, warum Sie die Warnung "Keine Grammatikbeschränkungen ..." erhalten, aber ich kann sie in Eclipse provozieren, indem ich die DOCTYPE-Deklaration vollständig entferne. Wenn ich die Deklaration zurücklege und erneut validiere, wird folgende Fehlermeldung angezeigt:

Der Inhalt des Elementtyps "Vorlage" muss übereinstimmen "(Beschreibung +, Variation ?, Variationsfeld ?, Zulassen-Mehrfachvariation ?, Klassenmuster ?, Getter-Setter? .

Und das ist richtig, glaube ich (das Element "Anzahl der erforderlichen Klassen" ist nicht erlaubt).

mzjn
quelle
Die Klammern geben an, dass die Reihenfolge wichtig ist. Ihr Dokument verfügt über ein Element zum Zulassen mehrerer Variationen nach einem Klassenmusterelement, das ungültig ist. Sie sollten die Frage wirklich ändern oder eine vorhandene Antwort akzeptieren, bevor Sie eine andere stellen.
Nitind
3

Ich weiß, dass dies alt ist, aber ich bin durch das gleiche Problem gegangen und habe die Lösung in der Frühjahrsdokumentation gefunden. Die folgende XML-Konfiguration hat das Problem für mich gelöst.

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

Bevor ich die obige Zeile wie in diesem Forenthema vorgeschlagen einfüge, habe ich dieselbe Warnmeldung und platziere diese ...

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

und es gibt mir die folgende Warnmeldung ...

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

Versuchen Sie einfach, die vorgeschlagenen Zeilen meiner XML-Konfiguration zu verwenden.

José Oliveira
quelle
2

Dies kann daran liegen, dass die Validierung in Eclipse deaktiviert ist.

Chotka
quelle
1

Dieses Problem wurde in Eclipse 3.5.2 behoben. Zwei völlig identische Layouts, von denen eines die Warnung hatte. Alle Registerkarten geschlossen und beim erneuten Öffnen war die Warnung verschwunden.

delformo
quelle
1
  1. Kopieren Sie Ihren gesamten Code in den Editor.
  2. Speichern Sie die Datei vorübergehend unter einem beliebigen Namen [während Sie die Datei speichern, verwenden Sie "encoding" = UTF-8 (oder höher, aber UTF)].
  3. Schließen Sie die Datei.
  4. öffne es wieder.
  5. Kopieren Fügen Sie es wieder in Ihren Code ein.

Fehler muss weg sein.

sifr_dot_in
quelle
1

Ich habe einen relativen Pfad in xsi: noNamespaceSchemaLocation verwendet , um die lokale xsd-Datei bereitzustellen (da ich keinen Namespace in der Instanz-XML verwenden konnte).

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

Die Validierung funktioniert und die Warnung wurde behoben (nicht ignoriert).

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

Max Hohenegger
quelle
1

Ich hatte auch das gleiche Problem in Eclipse mit der Datei web.xml
, das mir zeigte, dass "keine Grammatikbeschränkungen im Dokument angegeben sind".

Sie kann jedoch durch Hinzufügen eines Tags
nach dem XML-Tag behoben werden<?xml version = "1.0" encoding = "UTF-8"?>

Syed Peera Saheb
quelle
Hat gut funktioniert für mich (Eclipse Luna) Danke
Mathias Zaja
0

Hier ist die funktionierende Lösung für dieses Problem:


Schritt 1: Klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu Eigenschaften

Schritt 2: Gehen Sie zu 'Bibliotheken' und entfernen Sie die 'JRE-Systembibliothek' des Projekts.

Schritt 3: Klicken Sie auf "Bibliothek hinzufügen" -> "JRE-Systembibliothek" -> wählen Sie "Arbeitsbereich-Standard-JRE".

Schritt 3: Gehen Sie zu 'Bestellen und Exportieren' und markieren Sie die neu hinzugefügte 'JRE-Systembibliothek'.

Schritt 4: Aktualisieren und bereinigen Sie das Projekt

Eureka! Es funktioniert :)

user2372633
quelle
Ich habe versucht, Ihre Lösung zu verwenden. Wenn ich mein Projekt aktualisiere und bereinige, verschwindet die neu hinzugefügte "JRE-Systembibliothek" leider aus meinem Abschnitt "Bibliotheken" und auch aus meinem Abschnitt "Bestellen und Exportieren". Bitte helfen Sie.
VikramV
Der größte Teil dieser Antwort hat nichts mit der Frage zu tun, mit Ausnahme von Schritt 4 "Projekt bereinigen", der möglicherweise hilft (oder auch nicht).
Aaron Digulla
0

Was ich als Lösung empfand, war etwas sehr sehr Einfaches, das Sie meiner Meinung nach ausprobieren sollten, bevor Sie an den Einstellungen basteln. In meinem Fall hatte ich dieses Problem in einer Zeichenfolgendatei, die als Basis-Tag "Ressourcen" hatte. Ich habe lediglich das Tag von oben und unten gelöscht, das Projekt bereinigt, die Datei gespeichert und das Tag erneut eingefügt. Das Problem ist seitdem verschwunden und hat mich nie gewarnt. Es mag zu einfach klingen, um wahr zu sein, aber hey, manchmal sind es die einfachsten Dinge, die die Probleme lösen. Prost

Francesco DM
quelle
-1

Ich habe die Warnung in der Problemansicht gelöscht. Es ist bis jetzt nicht zurückgekommen.

jantje
quelle