Aucune contrainte de grammaire (schéma DTD ou XML) détectée pour le document

202

J'ai ce dtd: http://fast-code.sourceforge.net/template.dtd Mais quand j'inclus dans un xml j'obtiens l'avertissement: Aucune contrainte de grammaire (schéma DTD ou XML) détectée pour le document. Le xml est:

<?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 : j'ai changé le xml, je reçois cette erreur maintenant:

Le contenu du type d'élément "modèle" doit correspondre "(description, variation?, Champ de variation?, Autoriser-plusieurs variations?, Modèle de classe?, Getter-setter?, Extensions-de-fichier autorisées?, Nombre-requis- classes?, template-body) ".

fastcodejava
la source
@John - Ouais c'est l'éclipse.
fastcodejava
8
Je ne ferais PAS cela Préférences | XML | Fichiers XML | La validation dans Eclipse car cela masque / masque uniquement l'erreur, elle ne résout pas l'erreur. Si vous utilisez uniquement Eclipse pour créer des applications Android, cette "solution" est acceptable. Mais si vous utilisez Eclipse pour créer d'autres projets Java - JSF, etc. - cela interrompra ces projets si la validation XML est "désactivée". Donc sois prudent. La vraie solution est pour Oracle, Google et IBM de mettre à jour leurs logiciels avec des DTD et des schémas mis à jour.
ChuongPham
Je trouve qu'eclipse est beaucoup plus rapide et moins sujet aux plantages si je garde une installation pour travailler sur des applications Android et une autre pour faire du travail de développement Web Java. Je serais donc heureux d'utiliser la solution ci-dessus juste pour mon installation Android ADT d'Eclipse.
Damon Smith

Réponses:

409

Dans mon cas, j'ai résolu cet avertissement ennuyeux en ajoutant simplement <!DOCTYPE xml>le <?xml ... >tag après .

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Sabuj Hassan
la source
10
Se mettre d'accord. Cela devrait être la réponse acceptée. "Cacher" l'avertissement n'est pas exactement "le résoudre".
argent
31
Dans la deuxième ligne, "<! DOCTYPE xml>", "xml" doit correspondre au nom de l' élément racine du document .
Pup
Downvote: la question était de savoir comment obtenir l'éclipse pour effectuer la validation sur le dtd que le demandeur avait, pas comment éliminer l'avertissement.
Periata Breatta du
Ça ne marche pas. Eclipse 4.10, date 2019-05-31. Parfois, l'avertissement disparaît - mais il revient à nouveau lorsque vous relancez Eclipse.
mike rodent
Deux choses: 1. votre déclaration doctype doit correspondre au nom du nœud racine du document xml. 2. L'avertissement peut persister jusqu'à ce que vous effectuiez une validation explicite via un clic droit / Valider dans le menu de l'explorateur de projet.
mvreijn
162

Cela a fonctionné pour moi dans Eclipse 3.7.1: Allez dans la fenêtre Préférences, puis XML -> Fichiers XML -> Validation. Ensuite, dans la section Validation des fichiers du panneau des préférences à droite, choisissez Ignorer dans la liste déroulante pour la préférence "Aucune grammaire spécifiée". Vous devrez peut-être fermer le fichier, puis le rouvrir pour faire disparaître l'avertissement.

(Je sais que cette question est ancienne mais c'était la première que j'ai trouvée lors de la recherche sur l'avertissement, donc je poste la réponse ici pour d'autres chercheurs.)

Marc Bernstein
la source
1
Je devais m'assurer que la case "manuel" ainsi que la case "build" étaient cochées puis faire une validation manuelle en cliquant avec le bouton droit sur le projet et en sélectionnant "Valider" pour que les avertissements disparaissent. Il semble qu'il y ait un bug dans eclipse dans lequel le validateur est foiré. Vous devriez être en mesure d'avoir au moins le travail de validation manuelle même si vous ne voulez pas que cela se produise au moment de la construction. Et puis vous devriez pouvoir effacer facilement les avertissements après avoir effectué la validation manuelle. Jusque-là, c'est la solution.
crowmagnumb
1
L'avertissement brise l'intelligence et j'ai passé beaucoup de temps à comprendre quelle était la raison. Cela l'a résolu :)
Shekhar
Vous pouvez également le faire projet par projet, ce qui modifie votre fichier .project que vous pouvez intégrer dans le contrôle de code source et aider vos collègues! Au lieu d'aller dans la fenêtre Préférences, faites un clic droit sur votre projet et allez dans Propriétés et suivez les instructions ci-dessus à partir de là.
Stuart Leyland-Cole
2
Downvote. La question posée n'est pas de savoir comment cacher l'avertissement, mais comment le résoudre (c'est-à-dire faire éclipse correctement valider le document) ..
Periata Breatta
34

Répondre:

Commentaires sur chaque élément de votre DTD ci-dessous. Référez-vous aux spécifications officielles pour plus d'informations.

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

Explication simple:

Une DTD extrêmement basique ressemblera à la deuxième ligne ici:

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

Explication détaillée:

Les DTD servent à établir des formats de données convenus et à valider la réception de ces données. Ils définissent la structure d'un document XML, notamment:

  • une liste d'éléments juridiques
  • caractères spéciaux
  • chaînes de caractères
  • et bien plus

Par exemple

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

Signification des lignes ci-dessus ...
Ligne 1) Élément racine défini comme "nameOfYourRootElement"
Ligne 2) Début des définitions des éléments
Ligne 3) Éléments racine définis comme "nameOfYourRootElement1" et "nameOfYourRootElement2"
Ligne 4) Élément enfant, défini comme données tapez #PCDATA
Ligne 5) Élément enfant, qui est défini comme type de données #PCDATA
Ligne 6) Développez les instances de &nbsp;jusqu'à &#xA0;lorsque le document est analysé par l'analyseur XML
Ligne 7) Développez les instances de &author;jusqu'à Your Author Namelorsque le document est analysé par l'analyseur XML
Ligne 8) Fin des définitions

Chiot
la source
21

La vraie solution:

ajouter <!DOCTYPE something> au début de chaque XML problématique,

après la balise xml <?xml version="1.0" encoding="utf-8"?>

vous pouvez écrire n'importe quoi pour doctype, mais en gros c'est censé être manifeste, activité, etc. d'après ce que je comprends

Amir.F
la source
Ça ne marche pas. Eclipse 4.10, date 2019-05-31. Parfois, l'avertissement disparaît - mais il revient à nouveau lorsque vous relancez Eclipse.
mike rodent
@mikerodent L'avertissement peut persister jusqu'à ce que vous effectuiez une validation explicite via un clic droit / Valider dans le menu de l'explorateur de projet
mvreijn
11

Avez-vous essayé d'ajouter un schéma au catalogue xml?

dans eclipse pour éviter "aucune contrainte de grammaire (schéma dtd ou xml) détectée pour le document". j'utilise pour ajouter un fichier de schéma xsd au catalogue xml sous

"Fenêtre \ préférences \ xml \ catalogue xml \ Entrées spécifiées par l'utilisateur".

Cliquez sur le bouton "Ajouter" à droite.


Exemple:

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

À partir de ce xml, j'ai généré et enregistré un xsd sous: /home/my_user/xsd/my_xsd.xsd

Comme emplacement: /home/my_user/xsd/my_xsd.xsd

Comme type de clé: nom d'espace de noms

Comme clé: http://mycompany.com/hr/schemas


Fermez et rouvrez le fichier xml et faites quelques changements pour violer le schéma, vous devriez être averti

user1374968
la source
Cela a fonctionné pour moi, mais avec ce changement. J'étais en train de modifier un fichier .wadl (voir w3.org/Submission/wadl ) et les exemples qu'il utilise. Je n'ai pu faire fonctionner cela qu'en utilisant seulement xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 "et non xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd "comme le montrent les exemples de cette soumission. J'ai ajouté une entrée de catalogue pour le nom de l'espace de noms avec wadl.dev.java.net/2009/02
djb
10

Ajouter une balise DOCTYPE ...

Dans ce cas:

<!DOCTYPE xml>

Ajouter après:

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

Alors:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Jorge Bastida Cano
la source
A travaillé pour moi à Eclipse JEE v.2018-12. L'avertissement a disparu lorsque j'ai ajouté deux de ces lignes au build.xml de fourmi
Eugene Gr. Philippov
7

Une nouvelle façon propre pourrait être d'écrire votre xml comme ceci:

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

<rootElement>
 ....
</rootElement>

Les travaux ci-dessus dans Eclipse Juno +

Damilola
la source
L'avertissement peut persister jusqu'à ce que vous effectuiez une validation explicite via un clic droit / Valider dans le menu de l'explorateur de projet.
mvreijn
6

Pour moi, c'était un problème avec l' encodage des caractères et le mode de fichier Unix exécutant eclipse sur Windows:

Je viens de marquer le code complet, de le couper et de le coller (en bref: CtrlA-CtrlX-CtrlV ) et tout allait bien - plus d'avertissement "Aucune contrainte de grammaire ..."

user3022856
la source
6

Essayez de comprendre la suggestion donnée dans les messages d'avertissement, cela aide parfois.

J'ai également eu les mêmes problèmes, après avoir fait des recherches, j'ai trouvé la solution et corrigé en ajoutant la ligne ci-dessous au début

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

qui a conduit à un autre problème dans mon cas. Ce que j'ai résolu en lisant les suggestions, qui se sont à nouveau transformées en un autre problème, qui a été résolu en comprenant la cause d'origine, que le premier lien a été rompu (introuvable). Voici les images étape par étape qui expliquent ce qui a été fait pour résoudre complètement le problème.

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Bhupendra Kumar
la source
3

Je ne peux pas vraiment dire pourquoi vous obtenez l'avertissement "Pas de contraintes de grammaire ...", mais je peux le provoquer dans Eclipse en supprimant complètement la déclaration DOCTYPE. Lorsque je remets la déclaration et valide à nouveau, je reçois ce message d'erreur:

Le contenu du type d'élément "modèle" doit correspondre "(description +, variation?, Champ-variation?, Autoriser-plusieurs-variations?, Modèle de classe?, Getter-setter?, Extensions-de-fichier autorisées?, Corps-modèle +) .

Et c'est exact, je crois (l'élément "nombre-classes-requises" n'est pas autorisé).

mzjn
la source
Les parenthèses indiquent que l'ordre est important. Votre document comporte un élément allow-multiple-variation après un élément class-pattern, qui n'est pas valide. Vous devez vraiment modifier la question ou accepter une réponse existante avant d'en poser une autre.
nitind
3

je sais que c'est vieux mais je suis passé par le même problème et j'ai trouvé la solution dans la documentation du printemps, la configuration xml suivante a été résolue le problème pour moi.

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

avant de mettre la ligne ci-dessus comme suggéré dans ce sujet de forum, j'ai le même message d'avertissement, et en plaçant ceci ...

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

et cela me donne le message d'avertissement suivant ...

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

essayez donc d'utiliser les lignes suggérées de ma configuration xml.

José Oliveira
la source
2

Cela peut être dû à la désactivation de la validation dans Eclipse.

Chotka
la source
1

Résolution de ce problème dans Eclipse 3.5.2. Deux dispositions totalement identiques dont l'une avait l'avertissement. Fermé tous les onglets et lors de la réouverture, l'avertissement avait disparu.

delformo
la source
1
  1. copiez l'intégralité de votre code dans le bloc-notes.
  2. enregistrer temporairement le fichier avec n'importe quel nom [lors de l'enregistrement du fichier, utilisez "encoding" = UTF-8 (ou supérieur mais UTF)].
  3. fermez le fichier.
  4. ouvrez-le à nouveau.
  5. copiez, collez-le sur votre code.

l'erreur doit avoir disparu.

sifr_dot_in
la source
1

J'ai utilisé un chemin relatif dans le xsi: noNamespaceSchemaLocation pour fournir le fichier xsd local (car je ne pouvais pas utiliser un espace de noms dans l'instance 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 validation fonctionne et l'avertissement est corrigé (non ignoré).

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

Max Hohenegger
la source
1

Moi aussi, j'ai eu le même problème dans Eclipse en utilisant le fichier web.xml
cela m'a montré "aucune contrainte grammaticale référencée dans le document"

mais il peut être résolu en ajoutant une balise
après la balise xml ie<?xml version = "1.0" encoding = "UTF-8"?>

Syed Peera Saheb
la source
A bien fonctionné pour moi (Eclipse Luna) Merci
Mathias Zaja
0

Voici la solution de travail pour ce problème:


Étape 1: Faites un clic droit sur le projet et accédez aux propriétés

Étape 2: Allez dans «bibliothèques» et supprimez la «bibliothèque système JRE» du projet

Étape 3: cliquez sur «Ajouter une bibliothèque» -> «Bibliothèque système JRE» -> sélectionnez «JRE par défaut de l'espace de travail»

Étape 3: Accédez à «Commander et exporter» et marquez la «bibliothèque système JRE» nouvellement ajoutée.

Étape 4: Actualisez et nettoyez le projet

Eureka! Ça marche :)

user2372633
la source
J'ai essayé d'utiliser votre solution. Mais malheureusement, lorsque je rafraîchis et nettoie mon projet, la «bibliothèque système JRE» nouvellement ajoutée disparaît de ma section «Bibliothèques» et également de ma section «Commande et exportation». Veuillez aider.
VikramV
La plupart de cette réponse n'est pas liée à la question, à l'exception de l'étape 4 «nettoyer le projet» qui pourrait (ou non) aider.
Aaron Digulla
0

J'ai trouvé que la solution était quelque chose de très très simple que je pense que vous devriez essayer avant de bricoler les préférences. Dans mon cas, j'ai eu ce problème dans un fichier de chaînes qui avait comme balise de base "ressources" ... tout ce que j'ai fait était de supprimer la balise en haut et en bas, nettoyer le projet, enregistrer le fichier et réinsérer la balise. Le problème a depuis disparu et ne m'a jamais averti. Cela peut sembler trop simple pour être vrai, mais bon, parfois, ce sont les choses les plus simples qui résolvent les problèmes. À votre santé

Francesco DM
la source
-1

J'ai supprimé l'avertissement dans la vue des problèmes. Il n'est pas revenu jusqu'à maintenant.

jantje
la source