web-dev-qa-db-fra.com

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

J'ai ce dtd: http://fast-code.sourceforge.net/template.dtd Mais quand j'inclus dans un fichier xml, je reçois 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 code XML, je reçois cette erreur maintenant:

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

186
fastcodejava

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

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

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 de préférences de droite, choisissez Ignorer dans le menu déroulant de la préférence "Aucune grammaire spécifiée". Vous devrez peut-être fermer le fichier, puis le rouvrir pour que l'avertissement disparaisse.

(Je sais que cette question est ancienne, mais que c’est la première que j’ai trouvée lors de la recherche de l’avertissement, je publie ici la réponse pour les autres chercheurs.)

162
Marc Bernstein

Réponse:

Des commentaires sur chaque morceau de votre DTD ci-dessous. Reportez-vous à 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 les 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 beaucoup 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) Elément racine défini comme "nameOfYourRootElement"
Ligne 2) Début de la définition des éléments
Ligne 3) Enfants d'élément racine définis comme "nameOfYourRootElement1" et "nameOfYourRootElement2"
Ligne 4) Élément enfant, défini comme type de données #PCDATA
Ligne 5) Élément enfant, défini comme type de données #PCDATA
Ligne 6) Développez les instances de &nbsp; en &#xA0; lorsque le document est analysé par un analyseur XML.
Ligne 7) Développez les instances de &author; en Your Author Name lorsque le document est analysé par un analyseur XML.
Ligne 8) Fin des définitions

31
Pup

La vraie solution:

ajoutez <!DOCTYPE something> au début de chaque problème XML,

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

vous pouvez écrire n'importe quoi pour doctype, mais au fond c'est supposé être manifeste, activité, etc. d'après ce que j'ai compris

20
Amir.F

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

dans Eclipse pour éviter les "pas de contraintes de grammaire (schéma dtd ou xml) détectées 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

En tant qu'emplacement: /home/my_user/xsd/my_xsd.xsd

Comme type de clé: Nom de l'espace de noms

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


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

11
user1374968

Ajouter un tag 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>
8
Jorge Bastida Cano

Une nouvelle méthode peut consister à écrire votre fichier XML comme suit:

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

<rootElement>
 ....
</rootElement>

Ce qui précède fonctionne dans Eclipse Juno +

6
Damilola

Pour moi, c'était un problème avec encodage de caractères et nix filemode sous Eclipse sous Windows:

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

6
user3022856

Je ne peux pas vraiment dire pourquoi vous obtenez l'avertissement "Aucune contrainte 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 le message d'erreur suivant:

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

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

3
mzjn

je sais que c’est vieux, mais j’ai surmonté le même problème et trouvé la solution dans la documentation de printemps. La configuration XML suivante a été résolue 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 indiqué 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 il 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.

3
Wesley Silva

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

2
Chotka
  1. copier votre code entier dans le bloc-notes.
  2. enregistrer temporairement le fichier sous n’importe quel nom [lors de l’enregistrement, utilisez "encoding" = UTF-8 (ou supérieur, mais UTF)].
  3. fermez le fichier.
  4. l'ouvrir à nouveau.
  5. copier le coller à nouveau sur votre code.

l'erreur doit être partie.

1
sifr_dot_in

J'ai utilisé un chemin relatif dans xsi: noNamespaceSchemaLocation pour fournir le fichier xsd local (car je ne pouvais pas utiliser un espace de nom 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é (pas ignoré).

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

1
Max Hohenegger

Moi aussi j'ai eu le même problème dans Eclipse en utilisant le fichier web.xml
m'a montré ceci "pas de contraintes de grammaire référencées dans le document"

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

1
Syed Peera Saheb

Résolu ce problème dans Eclipse 3.5.2. Deux schémas complètement identiques dont l'un avait l'avertissement. Fermez tous les onglets et à la réouverture, l'avertissement avait disparu.

1
delformo

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: Accédez à "bibliothèques" et supprimez la "bibliothèque système JRE" du projet.

Étape 3: Cliquez sur 'Ajouter une bibliothèque' -> 'JRE System Library' -> sélectionnez 'Workspace default JRE'.

Étape 3: Allez à "Commander et exporter" et marquez la "bibliothèque système JRE" nouvellement ajoutée

Étape 4: actualiser et nettoyer le projet

Eureka! Ça marche :)

0
user2372633

Ce que j’ai trouvé être la solution, c’est quelque chose de très très simple que je pense que vous devriez essayer avant de modifier vos préférences. Dans mon cas, je rencontrais ce problème dans un fichier de chaînes qui avait pour balise de base "ressources" ... je ne faisais que 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é

0
Francesco D.M.

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

0
jantje