No se detectaron restricciones gramaticales (DTD o esquema XML) para el documento.

206

Tengo este dtd: http://fast-code.sourceforge.net/template.dtd Pero cuando lo incluyo en un xml, aparece la advertencia: No se detectaron restricciones gramaticales (DTD o esquema XML) para el documento. El xml es:

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

EDITAR : cambié el xml, recibo este error ahora:

El contenido del tipo de elemento "plantilla" debe coincidir "(descripción, ¿variación?, ¿Campo de variación?, ¿Permitir-variación-múltiple?, ¿Patrón-de-clase?, Getter-setter?, ¿Extensiones-de-archivo-permitidas?, Número-requerido- clases?, plantilla-cuerpo) ".

fastcodejava
fuente
@John - Sí, esto es un eclipse.
fastcodejava
8
NO haría esto Preferencias | XML | Archivos XML | Validación en Eclipse ya que esto solo enmascara / oculta el error, no resuelve el error. Si solo usa Eclipse para crear aplicaciones de Android, entonces esta "solución" es aceptable. Pero si usa Eclipse para construir otros proyectos Java - JSF, etc. - romperá estos proyectos si la validación XML está "desactivada". Así que ten cuidado. La verdadera solución es que Oracle, Google e IBM actualicen sus softwares con DTD y esquemas actualizados.
ChuongPham
Encuentro que eclipse es mucho más rápido y menos propenso a fallas si mantengo una instalación para trabajar en aplicaciones de Android y otra para realizar trabajos de desarrollo web Java. Así que estaría feliz de usar la solución anterior solo para mi instalación ADT de Android de eclipse.
Damon Smith

Respuestas:

419

En mi caso, he resuelto esta molesta advertencia simplemente agregando el <!DOCTYPE xml>después de la <?xml ... >etiqueta.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Sabuj Hassan
fuente
10
De acuerdo. Esta debería ser la respuesta aceptada. "Ocultar" la advertencia no es exactamente "resolverla".
plata
31
En la segunda línea, "<! DOCTYPE xml>", "xml" debe coincidir con el nombre del elemento raíz del documento .
Pup
Downvote: la pregunta era cómo hacer que eclipse realizara la validación en el dtd que tenía el autor de la pregunta, no cómo eliminar la advertencia.
Periata Breatta
No funciona. Eclipse 4.10, fecha 2019-05-31. A veces, la advertencia desaparece, pero vuelve cuando reinicia Eclipse.
Mike Rodent
Dos cosas: 1. su declaración de tipo de documento debe coincidir con el nombre del nodo raíz del documento xml. 2. La advertencia puede persistir hasta que realice una validación explícita haciendo clic con el botón derecho / Validar en el menú del explorador del proyecto.
mvreijn
162

Esto funcionó para mí en Eclipse 3.7.1: Vaya a la ventana Preferencias, luego XML -> Archivos XML -> Validación. Luego, en la sección Validación de archivos del panel de preferencias a la derecha, elija Ignorar en el cuadro desplegable para la preferencia "Sin gramática especificada". Es posible que deba cerrar el archivo y luego volver a abrirlo para que desaparezca la advertencia.

(Sé que esta pregunta es antigua, pero fue la primera que encontré al buscar en la advertencia, así que publico la respuesta aquí para otros buscadores).

Marc Bernstein
fuente
1
Tenía que asegurarme de que tanto la casilla "manual" como la casilla "compilar" estuvieran marcadas y luego hacer una validación manual haciendo clic derecho en el proyecto y seleccionando "Validar" para que las advertencias desaparecieran. Parece que hay un error en el eclipse en el que el validador se estropea. Usted debe ser capaz de, al menos, tener el trabajo de validación manual aunque no desea que suceda en tiempo de compilación. Y luego debería poder borrar fácilmente las advertencias después de realizar la validación manual. Hasta entonces esta es la solución.
crowmagnumb
1
La advertencia rompe intellisense y pasé bastante tiempo pensando cuál era la razón. Esto lo resolvió :)
Shekhar
¡También puede hacer esto proyecto por proyecto, lo que hace el cambio en su archivo .project que puede verificar en el control de fuente y ayudar a sus colegas! En lugar de ir a la ventana de Preferencias, haga clic derecho en su proyecto y vaya a Propiedades y siga las instrucciones anteriores desde allí.
Stuart Leyland-Cole
3
Votar en contra. La pregunta que se hace no es cómo ocultar la advertencia, sino cómo resolverla (es decir, hacer que el eclipse valide correctamente el documento) ..
Periata Breatta
34

Responder:

Comentarios sobre cada parte de su DTD a continuación. Consulte las especificaciones oficiales para obtener más información.

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

Explicación simple:

Un DTD extremadamente básico se verá como la segunda línea aquí:

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

Explicación detallada:

Los DTD sirven para establecer formatos de datos acordados y validar la recepción de dichos datos. Definen la estructura de un documento XML, que incluye:

  • una lista de elementos legales
  • caracteres especiales
  • cadenas de caracteres
  • y mucho mas

P.ej

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

Significado de las líneas anteriores ...
Línea 1) Elemento raíz definido como "nameOfYourRootElement"
Línea 2) Inicio de las definiciones del elemento
Línea 3) Elementos secundarios del elemento raíz definidos como "nameOfYourRootElement1" y "nameOfYourRootElement2"
Línea 4) Elemento secundario , que se define como datos tipo #PCDATA
Línea 5) Elemento hijo, que se define como tipo de datos #PCDATA
Línea 6) Expande las instancias de &nbsp;hasta &#xA0;cuando el analizador XML analiza el documento
Línea 7) Expande las instancias de &author;hasta Your Author Namecuando el documento es analizado por el analizador XML
Línea 8) Fin de las definiciones

Cachorro
fuente
21

La verdadera solución:

añadir <!DOCTYPE something>al principio de cada XML problemático,

después de la etiqueta xml <?xml version="1.0" encoding="utf-8"?>

puede escribir cualquier cosa para el tipo de documento, pero básicamente se supone que es manifiesto, actividad, etc. por lo que entiendo

Amir.F
fuente
No funciona. Eclipse 4.10, fecha 2019-05-31. A veces, la advertencia desaparece, pero vuelve cuando reinicia Eclipse.
Mike Rodent
@mikerodent La advertencia puede persistir hasta que realice una validación explícita haciendo clic derecho / Validar en el menú del explorador del proyecto
mvreijn
11

¿Ha intentado agregar un esquema al catálogo xml?

en eclipse para evitar las "restricciones gramaticales (dtd o esquema xml) detectadas para el documento". utilizo para agregar un archivo de esquema xsd al catálogo xml en

"Ventana \ preferencias \ xml \ xml catálogo \ Entradas especificadas por el usuario".

Haga clic en el botón "Agregar" a la derecha.


Ejemplo:

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

De este xml he generado y guardado un xsd en: /home/my_user/xsd/my_xsd.xsd

Como ubicación: /home/my_user/xsd/my_xsd.xsd

Como tipo de clave: nombre del espacio de nombres

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


Cierre y vuelva a abrir el archivo xml y realice algunos cambios para violar el esquema, debe ser notificado

usuario1374968
fuente
Esto funcionó para mí, pero con este cambio. Estaba editando un archivo .wadl (consulte w3.org/Submission/wadl ) y los ejemplos que se usan allí. Solo pude hacer que esto funcionara usando solo xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 "y no xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd "como muestran los ejemplos de esa Presentación. Agregué
djb
11

Agregar etiqueta DOCTYPE ...

En este caso:

<!DOCTYPE xml>

Agregar después:

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

Entonces:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
Jorge Bastida Cano
fuente
Trabajó para mí en Eclipse JEE v. 2018-12. La advertencia desapareció cuando agregué dos de estas líneas al build.xml de ant
Eugene Gr. Philippov
7

Una nueva forma limpia podría ser escribir su xml así:

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

<rootElement>
 ....
</rootElement>

Lo anterior funciona en Eclipse Juno +

Damilola
fuente
La advertencia puede persistir hasta que realice una validación explícita haciendo clic con el botón derecho / Validar en el menú del explorador del proyecto.
mvreijn
6

Para mí, fue un problema con la codificación de caracteres y el modo de archivo Unix ejecutando eclipse en Windows:

Simplemente marcó el código completo, lo cortó y pegó nuevamente (en resumen: CtrlA-CtrlX-CtrlV ) y todo estuvo bien, no más advertencias de "Sin restricciones gramaticales ..."

usuario3022856
fuente
6

Intente comprender la sugerencia que se da en los mensajes de advertencia, en algún momento ayuda.

También tuve los mismos problemas, después de investigar un poco, encontré la solución y la solucioné agregando la siguiente línea al principio

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

lo que llevó a algún otro problema en mi caso. Lo cual resolví leyendo las sugerencias, que nuevamente se convirtió en el otro problema, que se ha resuelto entendiendo la causa original, que el primer enlace se rompió (no se encontró). A continuación se muestran las imágenes paso a paso que explican lo que se ha hecho para resolver el problema por completo.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Bhupendra Kumar
fuente
3

Realmente no puedo decir por qué aparece la advertencia "Sin restricciones gramaticales ...", pero puedo provocarla en Eclipse eliminando por completo la declaración DOCTYPE. Cuando devuelvo la declaración y la vuelvo a validar, aparece este mensaje de error:

El contenido del tipo de elemento "plantilla" debe coincidir "(descripción +, ¿variación?, ¿Campo de variación?, ¿Permitir-variación-múltiple?, ¿Patrón de clase?, ¿Getter-setter?, ¿Extensiones de archivo permitidas?, Cuerpo de plantilla +) .

Y eso es correcto, creo (el elemento "number-required-classes" no está permitido).

mzjn
fuente
Los paréntesis indican que el orden es importante. Su documento tiene un elemento allow-multiple-variación después de un elemento de patrón de clase, que no es válido. Realmente debería cambiar la pregunta o aceptar una respuesta existente antes de preguntar una diferente.
nitind
3

Sé que esto es antiguo, pero estoy pasando por el mismo problema y encontré la solución en la documentación de primavera, la siguiente configuración xml me ha resuelto el problema.

<?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 poner la línea de arriba como se sugiere en este tema del foro, tengo el mismo mensaje de advertencia, y colocando esto ...

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

y me da el siguiente mensaje de advertencia ...

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

así que intente usar las líneas sugeridas de mi configuración xml.

José Oliveira
fuente
2

Esto puede deberse a desactivar la validación en eclipse.

Chotka
fuente
1

Resolvió este problema en Eclipse 3.5.2. Dos diseños completamente idénticos de los cuales uno tenía la advertencia. Cerró todas las pestañas y al reabrir la advertencia había desaparecido.

delformo
fuente
1
  1. copie su código completo en el bloc de notas.
  2. guarde temporalmente el archivo con cualquier nombre [mientras guarda el archivo use "codificación" = UTF-8 (o superior pero UTF)].
  3. cerrar el archivo.
  4. ábrelo de nuevo.
  5. copia, pégalo de nuevo en tu código.

el error debe desaparecer.

sifr_dot_in
fuente
1

Usé una ruta relativa en xsi: noNamespaceSchemaLocation para proporcionar el archivo xsd local (porque no pude usar un espacio de nombres en la instancia 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 validación funciona y la advertencia es fija (no ignorada).

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

Max Hohenegger
fuente
1

Yo también tuve el mismo problema en eclipse usando el archivo web.xml
, me mostró esto "sin restricciones gramaticales referenciadas en el documento"

pero se puede resolver agregando una etiqueta
después de la etiqueta xml, es decir<?xml version = "1.0" encoding = "UTF-8"?>

Syed Peera Saheb
fuente
Funcionó bien para mí (Eclipse Luna) Gracias
Mathias Zaja
0

Aquí está la solución de trabajo para este problema:


Paso 1: haga clic derecho en el proyecto y vaya a propiedades

Paso 2: Vaya a 'bibliotecas' y elimine la 'biblioteca del sistema JRE' del proyecto

Paso 3: Haga clic en 'Agregar biblioteca' -> 'Biblioteca del sistema JRE' -> seleccione 'Espacio de trabajo predeterminado JRE'

Paso 3: Vaya a 'Solicitar y exportar' y marque la 'Biblioteca del sistema JRE' recién agregada

Paso 4: Actualizar y limpiar el proyecto

¡Eureka! Esta funcionando :)

user2372633
fuente
Intenté usar tu solución. Pero desafortunadamente, cuando actualizo y limpio mi proyecto, la 'Biblioteca del sistema JRE' recién agregada desaparece de mi sección 'Bibliotecas' y también de mi sección 'Solicitar y exportar'. Por favor ayuda.
VikramV
La mayor parte de esta respuesta no está relacionada con la pregunta, excepto por el paso 4 "limpiar el proyecto", que podría (o no) ayudar.
Aaron Digulla
0

La solución que encontré fue algo muy muy simple que creo que deberías probar antes de jugar con las preferencias. En mi caso tuve este problema en un archivo de cadenas que tenía como etiqueta base "recursos" ... todo lo que hice fue borrar la etiqueta de arriba y abajo, limpiar el proyecto, guardar el archivo y volver a insertar la etiqueta. El problema ha desaparecido desde entonces y nunca me dio ninguna advertencia. Puede parecer demasiado simple para ser verdad, pero bueno, a veces son las cosas más simples las que resuelven los problemas. Salud

Francesco DM
fuente
-1

Eliminé la advertencia en la vista de problemas. No volvió hasta ahora.

jantje
fuente