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

169

У меня есть этот 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>

EDIT: я изменил xml, теперь получаю эту ошибку:

Содержимое типа элемента "шаблон" должно соответствовать "(описание, изменение?, поле изменения?",  множественное изменение?, класс-шаблон?, геттер-сеттер? разрешенный файл-расширение?, номер-required-  классы? шаблон тела)".

  • 0
    Это в Затмении?
  • 0
    @ Джон - Да, это затмение.
Показать ещё 3 комментария
Теги:
validation
dtd

18 ответов

331

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
  • 33
    Это правильный ответ на мой взгляд. Это лучше, чем советовать всем приходящим сюда просто установить предупреждение, чтобы ignore ... Это должен быть принятый ответ
  • 9
    Согласен. Это должен быть принятый ответ. «Скрывать» предупреждение не совсем «решить» его.
Показать ещё 2 комментария
150

Это сработало для меня в Eclipse 3.7.1: перейдите в окно настроек, затем XML → Файлы XML → Проверка. Затем в разделе "Проверяющие файлы" панели предпочтений справа выберите "Игнорировать" в раскрывающемся списке "Нет заданной грамматики". Возможно, вам придется закрыть файл, а затем снова открыть его, чтобы предупредить об этом.

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

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

Ответ:

Комментарии к каждой части вашего 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) Разверните экземпляры &nbsp; до &#xA0;, когда документ обрабатывается парсером XML
Строка 7) Разверните экземпляры &author; до Your Author Name, когда документ анализируется парсером XML
Строка 8) Конец определений

19

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

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

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

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

11

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

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

"Окно\предпочтения\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 и выполните некоторые изменения, чтобы нарушить схему, вы должны быть уведомлены

  • 0
    Это сработало для меня, но с этим изменением. Я редактировал файл .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
  • 0
    Голосовали за то, что пытались решить проблему, а не скрывать ее.
6

Новый чистый способ может заключаться в том, чтобы написать xml так:

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

<rootElement>
 ....
</rootElement>

Вышеупомянутые работы в Eclipse Juno +

5

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

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

<!DOCTYPE xml>

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

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

Итак:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
  • 0
    Работал для меня в Eclipse JEE v. 2018-12. Предупреждение исчезло, когда я добавил две эти строки в build.xml муравья
5

Для меня это была проблема с кодировкой символов и unix filemode запускать eclipse в Windows:

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

3

Я знаю, что это старо, но я передаю ту же проблему и нашел решение в документации spring, следующая 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">

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

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

3

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

Содержимое типа элемента "шаблон" должен соответствовать "(Описание +, изменение?, Изменение поле?, Позволяет-множественный вариант?, Класс-шаблон?, Геттер-сеттер?, Позволивший файл-расширение?, Шаблон тело +).

И это правильно, я считаю (элемент "число-обязательные классы" недопустим).

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

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

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

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

1

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

0

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

но его можно решить, добавив тег после тега xml, т.е. ""

0

Я удалил предупреждение в представлении проблем. Он до сих пор не вернулся.

0

Я использовал относительный путь в 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

0

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

0

Здесь рабочее решение для этой задачи:


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

Шаг 2. Перейдите в "библиотеки" и удалите проект "Системная библиотека JRE"

Шаг 3: Нажмите "Добавить библиотеку" → "Библиотека JRE" → выберите "Рабочая область по умолчанию JRE"

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню