Для документа не виявлено жодних граматичних обмежень (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>

EDIT : Я змінив xml, я отримую цю помилку зараз:

Зміст типу елемента "шаблон" повинен відповідати "(опис, варіація?, Варіаційне поле?", "Дозволити" множинні варіанти ?, клас-шаблон ?, геттер-сеттер? " класи?, шаблон-тіло) ".


@John - Так це затемнення.
fastcodejava


8
Я б НЕ робив цих налаштувань | XML | XML-файли | Перевірка в Eclipse, оскільки це лише маскує / приховує помилку, вона не вирішує помилку. Якщо ви використовуєте Eclipse лише для створення додатків для Android, то це "рішення" є прийнятним. Але якщо ви використовуєте Eclipse для створення інших проектів Java - JSF тощо, вони порушать ці проекти, якщо перевірку XML буде "вимкнено". Тож будьте обережні. Справжнє рішення - для Oracle, Google та IBM оновити свої програмні засоби оновленими DTD та схемами.
ChuongPham

Я вважаю затемнення набагато швидшим і менш схильним до аварій, якщо я триматиму одну установку для роботи над додатками для Android та іншу для роботи над веб-розробкою Java. Тож я б із задоволенням скористався рішенням вище лише для моєї установки ADT eclipse.
Деймон Сміт

Відповіді:


408

У моєму випадку я вирішив це набридливе попередження, просто додавши тег <!DOCTYPE xml>after <?xml ... >.

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

10
Погодьтеся. Це має бути прийнятою відповіддю. "Приховування" попередження не є точно "вирішенням" його.
срібло

31
У другому рядку "<! DOCTYPE xml>", "xml" має відповідати імені кореневого елемента документа .
Щеня

Downvote: питання полягав у тому, як змусити затемнення виконувати перевірку на dtd, який мав запитувач, а не як усунути попередження.
Periata Breatta

Не працює. Затемнення 4.10, дата 2019-05-31. Іноді попередження проходить, але воно повертається знову, коли ви повторно запускаєте Eclipse.
гризун

Дві речі: 1. ваша декларація doctype повинна відповідати імені кореневого вузла документа xml. 2. Попередження може зберігатися, поки ви не виконаєте явну перевірку за допомогою правої кнопки миші / підтвердження в меню провідника проектів.
mvreijn

162

Це працювало для мене в Eclipse 3.7.1: Перейдіть у вікно Налаштування, потім XML -> XML-файли -> Перевірка. Потім у розділі «Валідація файлів» на панелі налаштувань праворуч виберіть «Ігнорувати» у спадному вікні для параметра «Не вказано граматику». Можливо, вам доведеться закрити файл, а потім знову відкрити його, щоб попередження пройшло.

(Я знаю, що це питання давнє, але це було перше, що я знайшов при пошуку за попередженням, тому я публікую відповідь тут для інших пошукових працівників.)


1
Я повинен був переконатися, що вікно "вручну", а також "Створити" встановлено, а потім зробити перевірку вручну, натиснувши правою кнопкою миші на проект і вибравши "Підтвердити", щоб попередження пройшли. Здається, що в затемненні виникає помилка, в якій валідатор заплутався. Ви повинні мати можливість принаймні виконати ручну перевірку, навіть якщо ви не хочете, щоб це сталося під час збирання. І тоді ви зможете легко очистити попередження, зробивши перевірку вручну. До цього часу це рішення.
Кромагнамб

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 Попередження може зберігатись, поки ви не виконаєте явну перевірку за допомогою правої кнопки / підтвердження в меню провідника проектів
mvreijn

11

Ви намагалися додати схему до каталогу xml?

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


Це працювало для мене, але з цією зміною. Я редагував файл .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
Євген Гр. Філіппов

7

Новим чистим способом може бути написання xml так:

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

<rootElement>
 ....
</rootElement>

Вищезгадане працює в Eclipse Juno +


Попередження може зберігатися, поки ви не виконаєте явну перевірку за допомогою правої кнопки миші / підтвердження в меню провідника проектів.
mvreijn

6

Для мене це була проблема кодування символів та файлового модулю Unix працює у затемненні Windows:

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


6

Спробуйте зрозуміти пропозицію, подану в попереджувальних повідомленнях, це допоможе колись.

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

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

які призводять до якогось іншого питання в моєму випадку. Що я вирішив, прочитавши пропозиції, що знову перетворилося на іншу проблему, вирішену розумінням первісної причини, що перше посилання було розірвано (не знайдено). Нижче наведені покрокові зображення, які пояснюють, що було зроблено для повного вирішення проблеми.

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

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

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

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

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


3

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

Зміст типу елемента "шаблон" повинен відповідати "(опис +, варіація?, Варіаційне поле?", "Дозволити кратну варіацію"; клас-шаблон? .

Я вважаю, що це правильно (елемент "число-обов'язкові класи" не дозволяється).


Дужки вказують, що порядок важливий. У вашому документі є елемент дозволу з декількома варіаціями після елемента класового шаблону, який недійсний. Справді слід змінити питання або прийняти відповідь, перш ніж задавати інший.
nitind

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

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

<?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. тимчасово збережіть файл із будь-яким ім’ям [при збереженні файлу використовуйте "кодування" = 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

У мене теж була така ж проблема в затемненні за допомогою файлу 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.