Dla dokumentu nie wykryto żadnych ograniczeń gramatycznych (DTD lub schematu XML)


202

Mam to dtd: http://fast-code.sourceforge.net/template.dtd Ale kiedy dołączę do pliku XML, otrzymuję ostrzeżenie: Nie wykryto żadnych ograniczeń gramatycznych (DTD lub schematu XML) dla dokumentu. Plik XML to:

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

EDYCJA : Zmieniłem xml, otrzymuję teraz ten błąd:

Treść elementu typu „szablon” musi się zgadzać ”(opis, odmiana?, Zmienna-pole?, Zezwól na wiele wariantów?, Wzorzec klasy?, Getter-setter?, Dozwolone rozszerzenia plików?, Wymagana liczba? klasy?, szablon-ciało) ”.


@John - Tak, to jest zaćmienie.
fastcodejava,


8
NIE zrobiłbym tego Preferencje | XML | Pliki XML | Sprawdzanie poprawności w środowisku Eclipse, ponieważ tylko maskuje / ukrywa błąd, nie rozwiązuje błędu. Jeśli używasz Eclipse tylko do tworzenia aplikacji na Androida, to „rozwiązanie” jest dopuszczalne. Ale jeśli użyjesz Eclipse do budowy innych projektów Java - JSF itp. - spowoduje to uszkodzenie tych projektów, jeśli sprawdzanie poprawności XML zostanie „wyłączone”. Więc uważaj. Prawdziwym rozwiązaniem jest dla Oracle, Google i IBM aktualizowanie oprogramowania za pomocą zaktualizowanych DTD i schematów.
ChuongPham

Uważam, że zaćmienie jest znacznie szybsze i mniej podatne na awarie, jeśli utrzymuję jedną instalację do pracy z aplikacjami na Androida, a drugą do pracy nad tworzeniem stron Java. Z chęcią skorzystam z powyższego rozwiązania tylko dla mojej instalacji Android ADT w środowisku eclipse.
Damon Smith,

Odpowiedzi:


408

W moim przypadku rozwiązałem to irytujące ostrzeżenie, po prostu dodając tag <!DOCTYPE xml>po <?xml ... >.

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

10
Zgodzić się. To powinna być zaakceptowana odpowiedź. „Ukrywanie” ostrzeżenia nie oznacza „rozwiązania” go.
srebrny

31
W drugim wierszu „<! DOCTYPE xml>”, „xml” powinno pasować do nazwy elementu głównego dokumentu .
Pup

Downvote: pytanie brzmiało, jak uzyskać zaćmienie, aby przeprowadzić sprawdzanie poprawności na dtd, które miał pytający, a nie jak wyeliminować ostrzeżenie.
Periata Breatta

Nie działa Zaćmienie 4.10, data 31.05.2019. Czasami ostrzeżenie znika - ale wraca ponownie po ponownym uruchomieniu Eclipse.
Mike gryzoni

Dwie rzeczy: 1. twoja deklaracja doctype musi pasować do nazwy węzła głównego dokumentu xml. 2. Ostrzeżenie może trwać do momentu wykonania jawnej weryfikacji poprzez kliknięcie prawym przyciskiem myszy / Zatwierdź w menu eksploratora projektu.
mvreijn

162

Działa to dla mnie w Eclipse 3.7.1: Przejdź do okna Preferencje, a następnie XML -> Pliki XML -> Walidacja. Następnie w sekcji Sprawdzanie poprawności plików w panelu preferencji po prawej stronie wybierz Ignoruj ​​w rozwijanym polu dla preferencji „Nie określono gramatyki”. Może być konieczne zamknięcie pliku, a następnie jego ponowne otwarcie, aby ostrzeżenie zniknęło.

(Wiem, że to pytanie jest stare, ale było to pierwsze, które znalazłem podczas wyszukiwania ostrzeżenia, więc zamieszczam tutaj odpowiedź dla innych osób szukających).


1
Musiałem się upewnić, że pole „ręczne”, jak również „kompilacja” zostało zaznaczone, a następnie wykonać ręczne sprawdzenie poprawności, klikając projekt prawym przyciskiem myszy i wybierając „Zatwierdź”, aby ostrzeżenia zniknęły. Wygląda na to, że w zaćmieniu występuje błąd, w wyniku którego walidator zostaje pomieszany. Państwo powinno być w stanie przynajmniej mają pracy ręcznej weryfikacji, nawet jeśli nie ma się zdarzyć w czasie kompilacji. A potem powinieneś być w stanie łatwo usunąć ostrzeżenia po ręcznej weryfikacji. Do tego czasu jest to rozwiązanie.
crowmagnumb

1
Ostrzeżenie przełamuje inteligencję i spędziłem sporo czasu zastanawiając się, jaki jest tego powód. To rozwiązało :)
Shekhar

Możesz to również zrobić dla każdego projektu, co powoduje zmianę w pliku .project, który możesz sprawdzić w kontroli źródła i pomóc swoim kolegom! Zamiast przejść do okna Preferencje, kliknij prawym przyciskiem myszy swój projekt, przejdź do Właściwości i stamtąd postępuj zgodnie z instrukcjami powyżej.
Stuart Leyland-Cole,

2
Głosuj
Zadane

34

Odpowiedź:

Komentarze do każdego elementu DTD poniżej. Więcej informacji znajduje się w oficjalnej specyfikacji .

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

Proste objaśnienie:

Niezwykle podstawowy DTD będzie wyglądał jak druga linia tutaj:

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

Szczegółowe wyjaśnienie:

DTD służą do ustalania uzgodnionych formatów danych i potwierdzania odbioru takich danych. Definiują strukturę dokumentu XML, w tym:

  • lista elementów prawnych
  • znaki specjalne
  • ciągi znaków
  • i wiele więcej

Na przykład

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

Znaczenie powyższych linii ...
Linia 1) Element główny zdefiniowany jako „nameOfYourRootElement”
Linia 2) Początek definicji elementów
Linia 3) Elementy potomne elementu zdefiniowane jako „nameOfYourRootElement1” i „nameOfYourRootElement2”
Linia 4) Element potomny , który jest zdefiniowany jako dane wpisz #PCDATA
linia 5) element podrzędny, który jest zdefiniowany jako typ danych #PCDATA
linia 6) rozwiń wystąpień &nbsp;do &#xA0;kiedy dokument jest analizowany przez parsera XML
linia 7) rozwiń wystąpień &author;do Your Author Namekiedy dokument jest przetwarzany przez parser XML
linii 8) Koniec definicji


21

Prawdziwe rozwiązanie:

dodać <!DOCTYPE something>na początku każdego problematycznego kodu XML,

po znaczniku xml <?xml version="1.0" encoding="utf-8"?>

możesz napisać wszystko dla doctype, ale w gruncie rzeczy powinno to być manifestem, aktywnością itp. z tego co rozumiem


Nie działa Zaćmienie 4.10, data 31.05.2019. Czasami ostrzeżenie znika - ale wraca ponownie po ponownym uruchomieniu Eclipse.
Mike gryzoni

@mikerodent Ostrzeżenie może się utrzymywać aż do wykonywania wyraźny walidacji poprzez kliknięcie prawym przyciskiem myszy / Zatwierdź w menu Project Explorer
mvreijn

11

Czy próbowałeś dodać schemat do katalogu XML?

w zaćmieniu, aby uniknąć „wykrycia dla dokumentu żadnych ograniczeń gramatycznych (schematu dtd lub xml)”. używam, aby dodać plik schematu xsd do katalogu XML pod

„Okno \ preferencje \ xml \ xml katalog \ Wpisy określone przez użytkownika”.

Kliknij przycisk „Dodaj” po prawej stronie.


Przykład:

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

Z tego xml wygenerowałem i zapisałem xsd pod: /home/my_user/xsd/my_xsd.xsd

Jako lokalizacja: /home/my_user/xsd/my_xsd.xsd

Jako typ klucza: nazwa przestrzeni nazw

Jako klucz: http://mojafirma.com/hr/schemas


Zamknij i ponownie otwórz plik xml i dokonaj pewnych zmian w celu naruszenia schematu, powinieneś zostać powiadomiony


To działało dla mnie, ale z tą zmianą. Edytowałem plik .wadl (patrz w3.org/Submission/wadl ) i przykłady, które tam wykorzystują. Udało mi się to uruchomić tylko za pomocą xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 ", a nie xsi: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd "jako przykłady w tym zgłoszeniu. Dodałem pozycję katalogu dla nazwy przestrzeni nazw za pomocą wadl.dev.java.net/2009/02
djb

10

Dodaj tag DOCTYPE ...

W tym przypadku:

<!DOCTYPE xml>

Dodaj po:

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

Więc:

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

Pracował dla mnie w Eclipse JEE v. 2018-12. Ostrzeżenie zniknęło, gdy dodałem dwie te linie do build.xml mrówki
Eugene Gr. Philippov

7

Nowym czystym sposobem może być napisanie xml w następujący sposób:

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

<rootElement>
 ....
</rootElement>

Powyższe działa w Eclipse Juno +


Ostrzeżenie może trwać do momentu wykonania jawnej weryfikacji za pomocą kliknięcia prawym przyciskiem myszy / Sprawdź poprawność w menu eksploratora projektu.
mvreijn

6

Dla mnie był to problem z kodowaniem znaków i trybem plików Unix uruchomionym w środowisku Eclipse w systemie Windows:

Właśnie zaznaczyłem cały kod, wyciąłem i wkleiłem go z powrotem (w skrócie: CtrlA-CtrlX-CtrlV ) i wszystko było w porządku - żadnych ostrzeżeń „Brak ograniczeń gramatycznych ...”


6

Spróbuj zrozumieć sugestię podaną w komunikatach ostrzegawczych, to kiedyś pomoże.

Miałem te same problemy, po przeprowadzeniu badań znalazłem rozwiązanie i naprawiłem, dodając na początku poniższą linię

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

co w moim przypadku prowadzi do innych problemów. Które rozwiązałem, czytając sugestie, które ponownie przekształciły się w inny problem, który został rozwiązany, rozumiejąc pierwotną przyczynę, że pierwsze łącze zostało zerwane (nie znaleziono). Poniżej znajdują się zdjęcia krok po kroku, które wyjaśniają, co zostało zrobione, aby całkowicie rozwiązać problem.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


3

Naprawdę nie mogę powiedzieć, dlaczego pojawia się ostrzeżenie „Brak ograniczeń gramatycznych ...”, ale mogę sprowokować to w środowisku Eclipse, całkowicie usuwając deklarację DOCTYPE. Kiedy odkładam deklarację z powrotem i sprawdzam ponownie, pojawia się następujący komunikat o błędzie:

Treść elementu typu „szablon” musi się zgadzać ”(opis +, odmiana?, Zmienna-pole?, Zezwolenie na wielokrotną zmianę?, Wzorzec klasy?, Getter-setter?, Dozwolone rozszerzenia plików?, Szablon-ciało +) .

I to jest poprawne, jak sądzę (element „liczba-wymaganych klas” nie jest dozwolony).


Nawiasy wskazują, że kolejność jest ważna. Twój dokument ma element dopuszczający wielokrotną odmianę po elemencie wzorca klasy, który jest nieprawidłowy. Naprawdę powinieneś zmienić pytanie lub zaakceptować istniejącą odpowiedź przed zadaniem innego.
nitind

3

Wiem, że to jest stare, ale przechodzę przez ten sam problem i znalazłem rozwiązanie w dokumentacji wiosennej, następująca konfiguracja xml została dla mnie rozwiązana.

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

zanim wstawię powyższą linię zgodnie z sugestiami w tym temacie forum, mam ten sam komunikat ostrzegawczy i umieszczam to ...

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

i daje mi następujący komunikat ostrzegawczy ...

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

więc po prostu spróbuj użyć sugerowanych wierszy mojej konfiguracji xml.


2

Może to wynikać z wyłączenia sprawdzania poprawności w zaćmieniu.


1

Rozwiązano ten problem w Eclipse 3.5.2. Dwa całkowicie identyczne układy, z których jeden miał ostrzeżenie. Zamknąłem wszystkie zakładki i po ponownym otwarciu ostrzeżenie zniknęło.


1
  1. skopiuj cały kod do notatnika.
  2. tymczasowo zapisz plik pod dowolną nazwą [podczas zapisywania pliku użyj „kodowania” = UTF-8 (lub wyższej, ale UTF)].
  3. zamknij plik.
  4. otwórz to ponownie.
  5. skopiuj wklej go z powrotem do swojego kodu.

błąd musi zniknąć.


1

Użyłem ścieżki względnej w xsi: noNamespaceSchemaLocation, aby dostarczyć lokalny plik xsd (ponieważ nie mogłem użyć przestrzeni nazw w instancji xml).

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

Sprawdzanie poprawności działa, a ostrzeżenie jest naprawione (nie ignorowane).

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


1

Ja również miałem ten sam problem z zaćmieniem przy użyciu pliku web.xml,
który pokazał mi to „brak ograniczeń gramatycznych przywoływanych w dokumencie”

ale można to rozwiązać, dodając znacznik
po znaczniku xml, tj<?xml version = "1.0" encoding = "UTF-8"?>


Działa dobrze dla mnie (Eclipse Luna) Dzięki
Mathias Zaja

0

Oto działające rozwiązanie tego problemu:


Krok 1: Kliknij prawym przyciskiem myszy projekt i przejdź do właściwości

Krok 2: Przejdź do „bibliotek” i usuń „bibliotekę systemową JRE projektu”

Krok 3: Kliknij „Dodaj bibliotekę” -> „JRE System Library” -> wybierz „Workspace default JRE”

Krok 3: Przejdź do „Zamów i eksportuj” i zaznacz nowo dodaną „bibliotekę systemową JRE”

Krok 4: Odśwież i wyczyść projekt

Eureka! To działa :)


Próbowałem użyć twojego rozwiązania. Ale niestety, kiedy odświeżam i czyszczę mój projekt, nowo dodana „Biblioteka systemu JRE” znika z mojej sekcji „Biblioteki”, a także z mojej sekcji „Zamów i eksportuj”. Proszę pomóż.
VikramV

Większość tej odpowiedzi nie ma związku z pytaniem, z wyjątkiem kroku 4 „wyczyść projekt”, który może (ale nie musi) pomóc.
Aaron Digulla,

0

To, co znalazłem jako rozwiązanie, było czymś bardzo bardzo prostym, co myślę, że powinieneś spróbować przed majstrowaniem przy preferencjach. W moim przypadku miałem ten problem w pliku ciągów, który jako znacznik podstawowy miał „zasoby” ... wszystko, co zrobiłem, to usunąć znacznik z góry i dołu, wyczyścić projekt, zapisać plik i ponownie wstawić znacznik. Problem zniknął i nigdy nie dał mi żadnych ostrzeżeń. Być może prawda może wydawać się prosta, ale hej, czasem są to najprostsze rzeczy, które rozwiązują problemy. Twoje zdrowie


-1

Usunąłem ostrzeżenie w widoku problemów. Do tej pory nie wrócił.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.