Для документа не обнаружены грамматические ограничения (DTD или XML-схема)


202

У меня есть это dtd: http://fast-code.sourceforge.net/template.dtd Но когда я включаю в xml, я получаю предупреждение: никаких грамматических ограничений (DTD или XML-схема) для документа не обнаружено. 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>

РЕДАКТИРОВАТЬ : я изменил XML, я получаю эту ошибку сейчас:

Содержимое типа элемента «шаблон» должно совпадать с «(описание, вариант?, Поле вариации?», «Разрешить многократное изменение», шаблон класса?, Метод получения-установки ?, допустимые расширения файла? классы? шаблон тело)».


@ Джон - Да, это затмение.
fastcodejava


8
Я бы не сделать это Preferences | XML | XML-файлы | Проверка в Eclipse , так как это только маска / скрыть ошибку, она не решает эту ошибку. Если вы используете Eclipse только для сборки приложений Android, тогда это «решение» приемлемо. Но если вы используете Eclipse для создания других Java-проектов - JSF и т. Д. - он разрушит эти проекты, если проверка XML «отключена». Так что будьте осторожны. Реальное решение для Oracle, Google и IBM - обновить свои программы с помощью обновленных DTD и схем.
ChuongPham

Я считаю, что затмение намного быстрее и менее подвержено сбоям, если я оставлю одну установку для работы над приложениями для Android и другую для выполнения веб-разработки на Java. Так что я был бы рад использовать решение выше только для моей установки ADT затмения для Android.
Дэймон Смит,

Ответы:


409

В моем случае я решил это досадное предупреждение, просто добавив <!DOCTYPE xml>после <?xml ... >тега.

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

10
Согласен. Это должен быть принятый ответ. «Скрывать» предупреждение не совсем «решить» его.
серебро

31
Во второй строке «<! DOCTYPE xml>», «xml» должно соответствовать имени корневого элемента документа .
щенок

Downvote: вопрос заключался в том, как заставить затмение выполнить проверку на dtd, которую имел спрашивающий, а не как устранить предупреждение.
Периата Breatta

Не работает Затмение 4.10, дата 2019-05-31. Иногда предупреждение исчезает - но оно возвращается снова, когда вы снова запускаете Eclipse.
Майк Грызун

Две вещи: 1. Ваша декларация типа документа должна соответствовать имени корневого узла документа XML. 2. Предупреждение может сохраняться до тех пор, пока вы не выполните явную проверку с помощью щелчка правой кнопкой мыши / Проверить в меню проводника проекта.
Мврейн

162

Это сработало для меня в Eclipse 3.7.1: перейдите в окно настроек, затем XML -> XML Files -> Validation. Затем в разделе «Проверка файлов» панели предпочтений справа выберите «Пропустить» в раскрывающемся списке для параметра «Без указания грамматики». Возможно, вам придется закрыть файл, а затем снова открыть его, чтобы предупреждение исчезло.

(Я знаю, что этот вопрос старый, но это был первый вопрос, который я нашел при поиске в предупреждении, поэтому я публикую ответ здесь для других участников поиска.)


1
Я должен был убедиться, что флажок «manual», а также «build» был отмечен, а затем выполнить ручную проверку, щелкнув правой кнопкой мыши по проекту и выбрав «Validate», чтобы предупреждения исчезли. Кажется, что в Eclipse есть ошибка, из-за которой валидатор испортился. Вы должны иметь возможность, по крайней мере, выполнить ручную проверку, даже если вы не хотите, чтобы это происходило во время сборки. И тогда вы сможете легко удалить предупреждения после выполнения ручной проверки. До тех пор это решение.
crowmagnumb

1
Предупреждение нарушает интеллигентность, и я потратил довольно много времени на выяснение причины. Это решило это :)
Шехар

Вы также можете сделать это на индивидуальной основе, чтобы внести изменения в ваш файл .project, который вы можете проверить в системе контроля версий и помочь своим коллегам! Вместо того, чтобы идти в окно настроек, щелкните правой кнопкой мыши свой проект и перейдите в Свойства и следуйте инструкциям выше оттуда.
Стюарт Лейланд-Коул

2
Downvote. Вопрос не в том, как скрыть предупреждение, а в том, как его разрешить (то есть сделать так, чтобы затмение правильно проверило документ) ..
Periata Breatta

34

Ответ:

Комментарии к каждому фрагменту вашего DTD ниже. Обратитесь к официальной спецификации для получения дополнительной информации.

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

Простое объяснение:

Очень простой DTD будет выглядеть здесь как вторая строка :

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

Детальное объяснение:

DTD служат для установления согласованных форматов данных и проверки правильности получения таких данных. Они определяют структуру XML-документа, в том числе:

  • список юридических элементов
  • специальные символы
  • строки символов
  • и многое другое

Например

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

Значение вышеуказанных строк ...
Строка 1) Корневой элемент, определенный как «nameOfYourRootElement»
Строка 2) Начало определения элемента
Строка 3) Корневой элемент, определенный как «nameOfYourRootElement1» и «nameOfYourRootElement2»
Строка 4) Дочерний элемент, который определяется как данные типа #PCDATA
строка 5) дочерний элемента, который определен как тип данных , #PCDATA
строка 6) Expand экземпляров , &nbsp;чтобы , &#xA0;когда документ XML анализируется анализатор
линия 7) расширение экземпляров , &author;чтобы , Your Author Nameкогда документ анализируется XML - анализатор ,
строка 8) Концом определений


21

Реальное решение:

добавить <!DOCTYPE something>в начало каждого проблемного XML,

после тега xml <?xml version="1.0" encoding="utf-8"?>

Вы можете написать что-нибудь для doctype, но в основном это должно быть манифест, активность и т. д. из того, что я понимаю


Не работает Затмение 4.10, дата 2019-05-31. Иногда предупреждение исчезает - но оно возвращается снова, когда вы снова запускаете Eclipse.
Майк Грызун

@mikerodent Предупреждение может сохраняться до тех пор, пока вы не выполните явную проверку посредством щелчка правой кнопкой мыши /
Проверить в

11

Вы пытались добавить схему в каталог XML?

в eclipse, чтобы избежать «никаких грамматических ограничений (схема dtd или xml), обнаруженных для документа». я использую, чтобы добавить файл схемы XSD в каталог XML в

Msgstr "Окно \ предпочтения \ xml \ xml каталог \ указанные пользователем записи".

Нажмите кнопку «Добавить» справа.


Пример:

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

Из этого xml я сгенерировал и сохранил xsd в: /home/my_user/xsd/my_xsd.xsd

Как местоположение: /home/my_user/xsd/my_xsd.xsd

Как тип ключа: имя пространства имен

В качестве ключа: http://mycompany.com/hr/schemas


Закройте и снова откройте файл XML и внесите некоторые изменения, чтобы нарушить схему, вы должны быть уведомлены


Это сработало для меня, но с этим изменением. Я редактировал файл .wadl (см. W3.org/Submission/wadl ) и используемые там примеры. Я смог заставить это работать, используя только xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 ", а не xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd ", как показывают примеры в этом представлении. Я добавил запись каталога для имени пространства имен с wadl.dev.java.net/2009/02
djb

10

Добавить тег DOCTYPE ...

В таком случае:

<!DOCTYPE xml>

Добавить после:

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

Так:

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

Работал для меня в Eclipse JEE v. 2018-12. Предупреждение исчезло, когда я добавил две эти строки в build.xml муравья
Eugene Gr. Филиппов

7

Новым чистым способом было бы написать ваш xml следующим образом:

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

<rootElement>
 ....
</rootElement>

Вышеуказанные работы в Eclipse Juno +


Предупреждение может сохраняться до тех пор, пока вы не выполните явную проверку с помощью щелчка правой кнопкой мыши / Проверить в меню проводника проекта.
Мврейн

6

Для меня это была проблема с кодировкой символов и файловым режимом Unix запуском Eclipse в Windows:

Просто пометил полный код, вырезал и вставил его обратно (короче: CtrlA-CtrlX-CtrlV ) и все было в порядке - больше не было предупреждений «Нет грамматических ограничений ...»


6

Попытайтесь понять предложение, данное в предупреждающих сообщениях, это поможет когда-нибудь.

У меня также были те же проблемы, после некоторых исследований я нашел решение и исправил его, добавив строку в начале

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

которые приводят к некоторой другой проблеме в моем случае. Что я решил, прочитав предложения, которые снова превратились в другую проблему, которая была решена с пониманием первоначальной причины, что первая ссылка была сломана (не найдена). Ниже приведены пошаговые изображения, которые объясняют, что было сделано для полного решения проблемы.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь


3

Я не могу точно сказать, почему вы получаете предупреждение «Нет грамматических ограничений ...», но я могу спровоцировать его в Eclipse, полностью удалив объявление DOCTYPE. Когда я помещаю декларацию обратно и снова подтверждаю, я получаю это сообщение об ошибке:

Содержимое типа элемента «шаблон» должно совпадать с «(описание +, вариант?, Поле вариации?», «Разрешить множественное изменение», шаблон класса «, метод получения-установки», «разрешенные расширения-файла», тело шаблона +) ,

И это правильно, я считаю (элемент "number-required-classes" недопустим).


Скобки указывают, что порядок важен. В вашем документе есть элемент allow-множественный вариант после элемента class-pattern, который недопустим. Вы действительно должны изменить вопрос или принять существующий ответ, прежде чем задать другой.
Nindind

3

я знаю, что это старая проблема, но я решил эту проблему и нашел решение в весенней документации, следующая конфигурация xml решила проблему для меня.

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

прежде чем поставить строку выше, как sugested в этой теме форума, у меня есть то же предупреждение и размещение этого ...

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

и это дает мне следующее предупреждающее сообщение ...

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

так что просто попробуйте использовать предложенные строки моей конфигурации xml.


2

Это может быть связано с отключением проверки в затмении.


1

Решил эту проблему в Eclipse 3.5.2. Две полностью идентичные схемы, одна из которых имела предупреждение. Закрыл все вкладки и при повторном открытии предупреждение исчезло.


1
  1. Скопируйте весь код в блокноте.
  2. временно сохранить файл под любым именем [при сохранении файла используйте «encoding» = UTF-8 (или выше, но UTF)].
  3. закройте файл.
  4. открой его снова.
  5. скопируйте и вставьте его обратно в свой код.

ошибка должна исчезнуть


1

Я использовал относительный путь в xsi: noNamespaceSchemaLocation для предоставления локального файла xsd (потому что я не мог использовать пространство имен в экземпляре xml).

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

Проверка работает и предупреждение исправлено (не игнорируется).

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


1

У меня тоже была такая же проблема в eclipse с использованием файла web.xml,
он показал мне это "нет грамматических ограничений, на которые есть ссылки в документе"

но это может быть решено путем добавления тега
после тега XML, т.е.<?xml version = "1.0" encoding = "UTF-8"?>



0

Вот рабочее решение этой проблемы:


Шаг 1: Щелкните правой кнопкой мыши на проекте и перейдите в свойства

Шаг 2: Перейдите в «библиотеки» и удалите «Системную библиотеку JRE» проекта

Шаг 3: Нажмите «Добавить библиотеку» -> «Системная библиотека JRE» -> выберите «JRE рабочей области по умолчанию»

Шаг 3: Перейдите к «Заказ и экспорт» и отметьте вновь добавленную «Системную библиотеку JRE».

Шаг 4: Обновить и очистить проект

Эврика! Это работает :)


Я пытался использовать ваше решение. Но, к сожалению, когда я обновляю и очищаю свой проект, недавно добавленная «Системная библиотека JRE» исчезает из моего раздела «Библиотеки», а также из моего раздела «Заказ и экспорт». Пожалуйста помоги.
VikramV

Большая часть этого ответа не связана с вопросом, за исключением шага 4 «Очистить проект», который может (или не может) помочь.
Аарон Дигулла

0

То, что я нашел решением, было очень простым делом, которое, я думаю, вы должны попробовать, прежде чем возиться с предпочтениями. В моем случае у меня была эта проблема в строковом файле, который имел в качестве базового тега «ресурсы» ... все, что я сделал, это удалил тег сверху и снизу, очистил проект, сохранил файл и заново вставил тег. С тех пор проблема исчезла и никогда не давала мне никаких предупреждений. Это может показаться простым, чтобы быть правдой, но эй, иногда это самые простые вещи, которые решают проблемы. ура


-1

Я удалил предупреждение в окне проблем. Это не вернулось до сих пор.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.