Belge için dilbilgisi kısıtlaması (DTD veya XML şeması) algılanmadı


203

Bu dtd var: http://fast-code.sourceforge.net/template.dtd Ama bir xml içerdiğinde uyarı olsun: Belge için hiçbir dilbilgisi kısıtlaması (DTD veya XML şeması) tespit edildi. XML şu şekildedir:

<?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 değiştirdim, şimdi bu hatayı alıyorum:

"Şablon" öğe türünün içeriği eşleşmelidir "(açıklama, varyasyon?, Varyasyon alanı?, İzin ver - çoklu varyasyon?, Sınıf modeli?, Alıcı-ayarlayıcı?, İzin verilen dosya uzantıları?, Sayı-gerekli- sınıflar?, şablon-beden)".


@John - Evet, bu tutulma.
fastcodejava


8
Bunu tercih etmem Tercihler | XML | XML Dosyaları | Eclipse içinde doğrulama bu sadece hatayı maskeler / gizler, hatayı çözmez . Eclipse uygulamasını yalnızca Android uygulamaları oluşturmak için kullanıyorsanız, bu "çözüm" kabul edilebilir. Ancak diğer Java projeleri - JSF, vb. - oluşturmak için Eclipse kullanırsanız, XML doğrulaması "kapalı" ise bu projeleri bozar. Yani dikkatli ol. Gerçek çözüm, Oracle, Google ve IBM'in yazılımlarını güncellenmiş DTD'ler ve şemalarla güncellemesidir.
ChuongPham

Android uygulamalarında çalışmak için bir kurulum ve java web geliştirme işi yapmak için başka bir kurulum tutmaya devam edersek, tutulmayı çok daha hızlı ve daha az çökmeye eğilimli buluyorum. Bu nedenle, sadece android ADT eclipse kurulumum için yukarıdaki çözümü kullanmaktan memnuniyet duyarım.
Damon Smith

Yanıtlar:


411

Benim durumumda ben sadece ekleyerek bu can sıkıcı uyarıyı çözdük <!DOCTYPE xml>sonra <?xml ... >etiketi.

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

10
Katılıyorum. Bu kabul edilen cevap olmalı. Uyarıyı "gizlemek" tam olarak "çözmemek" değildir.
gümüş

31
İkinci satırda "<! DOCTYPE xml>", "xml", belgenin kök öğesinin adıyla eşleşmelidir .
Pup

Downvote: soru, askerin sahip olduğu dtd üzerinde doğrulama yapmak için tutulmanın nasıl elde edileceği, uyarının nasıl ortadan kaldırılacağı değil.
Periata Breatta

Çalışmıyor. Eclipse 4.10, tarih 2019-05-31. Bazen uyarı kaybolur - ancak Eclipse'i yeniden başlattığınızda tekrar gelir.
mike kemirgen

İki şey: 1. doctype bildiriminiz xml belgesinin kök düğümü adıyla eşleşmelidir. 2. Uyarı, proje gezgini menüsünde sağ tıklama / Doğrulama yoluyla açık doğrulama gerçekleştirene kadar devam edebilir.
mvreijn

162

Bu benim için Eclipse 3.7.1'de çalıştı: Tercihler penceresine, ardından XML -> XML Dosyaları -> Doğrulama'ya gidin. Ardından, sağdaki tercihler panelinin Dosyaları doğrulama bölümünde, "Gramer belirtilmedi" tercihi için açılır kutudan Yoksay'ı seçin. Uyarının kaldırılması için dosyayı kapatıp yeniden açmanız gerekebilir.

(Bu sorunun eski olduğunu biliyorum, ancak uyarıyı ararken bulduğum ilk soru oldu, bu yüzden cevabı buraya diğer araştırmacılar için gönderiyorum.)


1
Ben "manuel" kutusunun yanı sıra "inşa" kutusunun işaretlenmiş olduğundan emin olmak ve daha sonra projeye sağ tıklayarak ve uyarıları gidermek için "Doğrula" seçerek bir manuel doğrulama yapmak zorunda kaldı. Tutulmada doğrulayıcının dağıldığı bir hata var gibi görünüyor. Sen olmalıdır en azından elle doğrulama çalışmaları için bunu yapı anda gerçekleşmesi istemiyorum bile mümkün. Ve sonra manuel doğrulamayı yaptıktan sonra uyarıları kolayca temizleyebilmelisiniz. O zamana kadar çözüm bu.
crowmagnumb

1
Uyarı zekayı bozuyor ve sebebinin ne olduğunu anlamak için epey zaman harcadım. Bu çözüldü :)
Shekhar

Bunu proje bazında da yapabilirsiniz, bu da .project dosyanızdaki değişikliği kontrol ederek kaynak kontrolünü kontrol edebilir ve iş arkadaşlarınıza yardımcı olabilirsiniz! Tercihler penceresine gitmek yerine, projenize sağ tıklayın ve Özellikler'e gidin ve oradan yukarıdaki talimatları izleyin.
Stuart Leyland-Cole

2
Downvote. Sorulan soru, uyarının nasıl gizleneceği değil, nasıl çözüleceğidir (yani, tutulmanın belgeyi doğru bir şekilde doğrulamasını sağlamak) ..
Periata Breatta

34

Cevap:

DTD'nizin her bir parçası için yorumlar aşağıda. Daha fazla bilgi için resmi teknik özelliklere bakı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.
  >

Basit Açıklama:

Son derece basit bir DTD burada ikinci satır gibi görünecek :

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

Detaylı açıklama:

DTD'ler veri formatları üzerinde anlaşmaya varmaya ve bu verilerin alındığını doğrulamaya hizmet eder. Aşağıdakiler dahil olmak üzere bir XML belgesinin yapısını tanımlarlar:

Örneğin

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

Yukarıdaki satırların anlamı ...
Satır 1) "nameOfYourRootElement" olarak tanımlanan kök eleman
Satır 2) Öğe tanımlarının başlangıcı
Satır 3) "nameOfYourRootElement1" ve "nameOfYourRootElement2" olarak tanımlanan kök eleman alt öğeleri
Satır 4) Veri olarak tanımlanan alt eleman tip #PCDATA
veri türü olarak tanımlanan satır 5) bir alt öğe, #PCDATA
satır 6) örneklerini Expand &nbsp;için &#xA0;belge XML çözümleyici ile ayrıştırıldığında
hat 7) örneklerini Expand &author;için Your Author Namebelge XML ayrıştırıcı ile ayrıştırıldığında
tanımların satır 8) End


21

Gerçek Çözüm:

<!DOCTYPE something>her sorunlu XML'nin başlangıcına ekleyin ,

xml etiketinden sonra <?xml version="1.0" encoding="utf-8"?>

doktrin için her şeyi yazabilirsin, ama temelde anladığım kadarıyla tezahür, etkinlik vb.


Çalışmıyor. Eclipse 4.10, tarih 2019-05-31. Bazen uyarı kaybolur - ancak Eclipse'i yeniden başlattığınızda tekrar gelir.
mike kemirgen

@mikerodent Proje gezgini menüsünde sağ tıklama / Doğrulama yoluyla açık doğrulama gerçekleştirene kadar uyarı devam edebilir
mvreijn

11

Xml kataloğuna şema eklemeye çalıştınız mı?

tutulması için "belge için hiçbir dilbilgisi kısıtlaması (dtd veya xml şeması) algılanmadı." altında xml kataloğuna bir xsd şema dosyası eklemek için kullanın

Msgstr "Pencere \ tercihler \ xml \ xml kataloğu \ Kullanıcı tanımlı girişler".

Sağ taraftaki "Ekle" düğmesini tıklayın.


Misal:

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

Bu xml'den / xsd/my_xsd.xsd altında bir xsd oluşturup kaydettim.

Konum Olarak: /home/my_user/xsd/my_xsd.xsd

Anahtar türü olarak: Ad alanı adı

Anahtar olarak: http://mycompany.com/hr/schemas


Xml dosyasını kapatıp yeniden açın ve şemayı ihlal etmek için bazı değişiklikler yapın, size bildirilmelidir.


Bu benim için çalıştı, ama bu değişiklikle. Bir .wadl dosyasını düzenledim (bkz. W3.org/Submission/wadl ) ve oradaki örnekleri kullanıyorum. Bunu sadece xmlns kullanarak çalıştırabildim: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 "ve xsi değil: schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd "ifadesini bu Gönderim şovundaki örnekler olarak görebilirsiniz. Ad alanı adı için wadl.dev.java.net/2009/02
djb

10

DOCTYPE etiketi ekle ...

Bu durumda:

<!DOCTYPE xml>

Sonra Ekle:

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

Yani:

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

Eclipse JEE / 2018-12'de çalıştı. Ant'in build.xml dosyasına bu satırlardan ikisini eklediğimde uyarı kayboldu
Eugene Gr. Philippov

7

Yeni bir temiz yol xml'inizi şöyle yazmak olabilir:

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

<rootElement>
 ....
</rootElement>

Yukarıdaki Eclipse Juno + çalışır


Proje gezgini menüsünde sağ tıklama / Doğrulama yoluyla açık doğrulama gerçekleştirene kadar uyarı devam edebilir.
mvreijn

6

Benim için Windows'da tutulma çalışan karakter kodlaması ve unix filemode ile ilgili bir Sorun vardı :

Kodun tamamını işaretledim, kesip yapıştırdım (kısaca CtrlA-CtrlX-CtrlV ) ve her şey yolundaydı - artık "Dilbilgisi kısıtlaması yok ..." uyarıları


6

Uyarı mesajlarında verilen öneriyi anlamaya çalışın, bazen yardımcı olur.

Ben de aynı sorunları vardı, bazı araştırma yaptıktan sonra çözümü buldum ve başlangıçta aşağıdaki satırı ekleyerek düzeltildi

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

bu da benim durumumda başka bir soruna yol açıyor. Hangi orijinal nedeni anlamak çözüldü, yine başka bir soruna dönüştü önerileri okuyarak çözüldü, ilk bağlantı kırık (bulunamadı). Aşağıda, sorunu tamamen çözmek için neler yapıldığını açıklayan adım adım resimler bulunmaktadır.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


3

Neden "Dilbilgisi kısıtlaması yok ..." uyarısı aldığınızı gerçekten söyleyemem, ancak DOCTYPE bildirimini tamamen kaldırarak Eclipse'de bunu kışkırtabilirim. Bildirimi geri koyduğumda ve tekrar doğruladığımda şu hata iletisini alıyorum:

"Şablon" öğe türünün içeriği eşleşmelidir "(açıklama +, varyasyon?, Varyasyon alanı?, İzin-çoklu varyasyon?, Sınıf modeli?, Alıcı-ayarlayıcı?, İzin verilen dosya uzantıları?, Şablon-gövde +) .

Ve bu doğru, inanıyorum ("sayı-gerekli-sınıflar" elemanına izin verilmez).


Parantez, düzenin önemli olduğunu gösterir. Belgeniz, bir sınıf kalıbı öğesinden sonra geçersiz olan birden fazla varyasyona sahip bir öğeye sahip. Farklı bir soru sormadan önce soruyu gerçekten değiştirmeli veya mevcut bir yanıtı kabul etmelisiniz.
nitind

3

Bu eski olduğunu biliyorum ama aynı sorunu düşündüm geçen ve bahar belgelerinde çözüm bulundu, aşağıdaki xml yapılandırma benim için sorunu çözüldü.

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

yukarıdaki satırı bu forum başlığında belirtildiği gibi koymadan önce, aynı uyarı mesajına sahibim ve bunu yerleştiriyorum ...

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

ve bana şu uyarı mesajını veriyor ...

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

bu yüzden sadece benim xml yapılandırmasının şekerli satırlarını kullanmaya çalışın.


2

Bunun nedeni, tutulmada validasyonun kapatılması olabilir.


1

Eclipse 3.5.2'de bu sorunu çözdü. İkisi tamamen aynı olan iki uyarı. Tüm sekmeler kapatıldı ve yeniden açıldığında uyarı kayboldu.


1
  1. tüm kodunuzu not defterine kopyalayın.
  2. dosyayı herhangi bir adla geçici olarak kaydedin [dosyayı kaydederken "encoding" = UTF-8 (veya UTF hariç daha yüksek) kullanın].
  3. dosyayı kapatın.
  4. tekrar aç.
  5. kopyasını tekrar kodunuza yapıştırın.

hata gitmiş olmalı.


1

Yerel xsd dosyasını sağlamak için xsi: noNamespaceSchemaLocation içinde göreli bir yol kullandım (çünkü xml örneğinde bir ad alanı kullanamadım).

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

Doğrulama çalışır ve uyarı sabittir (yoksayılmaz).

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


1

Ben de web.xml dosyasını kullanarak eclipse aynı sorunu vardı
bana bu "belgede belirtilen dilbilgisi kısıtlamaları yok" gösterdi

ancak
xml etiketinden sonra etiket eklenerek çözülebilir.<?xml version = "1.0" encoding = "UTF-8"?>


Benim için iyi çalıştı (Eclipse Luna) Teşekkürler
Mathias Zaja

0

İşte bu sorunun çalışma çözümü:


Adım 1: Projeye sağ tıklayın ve özelliklere gidin

Adım 2: 'Kütüphaneler'e gidin ve projenin' JRE sistem kütüphanesini 'kaldırın

Adım 3: 'Kitaplık ekle'yi tıklayın ->' JRE Sistem Kütüphanesi '->' Çalışma alanı varsayılanı JRE'yi seçin

3. Adım: 'Sipariş Ver ve Ver'e gidin ve yeni eklenen' JRE sistem kütüphanesini 'işaretleyin

4. Adım: Projeyi Yenileyin ve Temizleyin

Eureka! İşe yarıyor :)


Çözümünüzü kullanmayı denedim. Ancak maalesef, projemi yenilediğimde ve temizlediğimde, yeni eklenen 'JRE Sistem Kütüphanesi', 'Kütüphaneler' bölümümden ve ayrıca 'Sipariş Ver ve Ver' bölümümden kayboluyor. Lütfen yardım et.
VikramV

Bu cevabın çoğu, Adım 4'ün yardımcı olabilecek (veya olmayacak) "projeyi temizle" dışında soru ile ilgisizdir.
Aaron Digulla

0

Çözüm olarak bulduğum şey, tercihlerle uğraşmadan önce denemeniz gerektiğini düşündüğüm çok basit bir şeydi. Benim durumumda bir temel etiketi "kaynakları" olan bir dizeleri dosyasında bu sorunu vardı ... tüm yaptığım üst ve alt etiketi silmek, projeyi temizlemek, dosyayı kaydetmek ve etiketi yeniden yerleştirin. O zamandan beri sorun ortadan kalktı ve bana hiçbir zaman uyarı yapmadı. Gerçek olmak basit gibi gelebilir ama hey, bazen problemleri çözen en basit şeyler. Şerefe


-1

Sorunlar görünümünde uyarıyı sildim. Şimdiye kadar geri dönmedi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.