दस्तावेज़ के लिए कोई व्याकरण की कमी (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 बदल दिया है, मुझे अब यह त्रुटि मिल रही है:

तत्व प्रकार की सामग्री "टेम्पलेट" से मेल खाना चाहिए (विवरण, भिन्नता ?,, भिन्नता-क्षेत्र?, अनुमति- एकाधिक-विविधता और वर्ग-प्रतिमान, क्लास-पैटर्न, गेट्टर-सेटर?, अनुमति-फ़ाइल-एक्सटेंशन?, संख्या-आवश्यक- कक्षाएं?, टेम्पलेट शरीर) "।


@ जॉन - हाँ यह ग्रहण है।
फास्टकोडजवा


8
मैं यह नहीं करूंगा प्राथमिकताएं | XML | XML फ़ाइलें | मान्यता ग्रहण के रूप में यह केवल मुखौटा / त्रुटि छुपाने के लिए, यह नहीं है हल त्रुटि। यदि आप केवल एंड्रॉइड एप्लिकेशन बनाने के लिए एक्लिप्स का उपयोग करते हैं, तो यह "समाधान" स्वीकार्य है। लेकिन अगर आप अन्य जावा प्रोजेक्ट्स - जेएसएफ, इत्यादि के निर्माण के लिए एक्लिप्स का उपयोग करते हैं, तो यह एक्सएमएल सत्यापन "बंद" होने पर इन परियोजनाओं को तोड़ देगा। तो सावधान रहें। असली समाधान ओरेकल, Google और आईबीएम के लिए अपने सॉफ्टवेयर्स को अपडेटेड डीटीडी और स्कीमा के साथ अपडेट करने के लिए है।
चुआनपहम

अगर मुझे एंड्रॉइड ऐप पर काम करने के लिए एक इंस्टॉल और जावा डेवेलपमेंट डेवलपमेंट का काम करने के लिए एक और एक है तो मुझे ग्रहण बहुत तेज़ी से और कम क्रैश-प्रोन लगता है। इसलिए मैं अपने एंड्रॉइड एडीटी के लिए केवल ऊपर दिए गए समाधान का उपयोग करके खुश होऊंगा।
डेमन स्मिथ

जवाबों:


408

मेरे मामले में मैंने इस कष्टप्रद चेतावनी को केवल टैग के <!DOCTYPE xml>बाद जोड़कर हल किया है <?xml ... >

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

10
इस बात से सहमत। यह स्वीकृत उत्तर होना चाहिए। "छिपाना" चेतावनी वास्तव में इसे "हल करना" नहीं है।
चांदी

31
दूसरी पंक्ति में, "<! DOCTYPE xml>", "xml" को दस्तावेज़ के मूल तत्व के नाम से मेल खाना चाहिए ।
पुप

डाउनवोट: सवाल यह था कि डीडीटी पर सत्यापन करने के लिए कैसे ग्रहण किया जाए कि पूछने वाले के पास चेतावनी को खत्म करने का तरीका नहीं था।
पेरीटा ब्रीटा

काम नहीं करता है। ग्रहण 4.10, तिथि 2019-05-31। कभी-कभी चेतावनी दूर हो जाती है - लेकिन जब आप ग्रहण छोड़ते हैं तो यह फिर से वापस आ जाता है।
माईक कृंतक

दो बातें: 1. आपका सिद्धांत घोषणा xml दस्तावेज़ के रूट नोड नाम से मेल खाना चाहिए। 2. चेतावनी तब तक बनी रह सकती है जब तक आप प्रोजेक्ट एक्सप्लोरर मेनू में राइट-क्लिक / वैलिडेट के माध्यम से स्पष्ट सत्यापन नहीं करते हैं।
mvreijn

162

इसने मेरे लिए ग्रहण 3.7.1 में काम किया: प्राथमिकताएं विंडो पर जाएं, फिर XML -> XML फ़ाइलें -> सत्यापन। फिर दाईं ओर वरीयताओं के पैनल के मान्यकरण अनुभाग में, "कोई व्याकरण निर्दिष्ट" वरीयता के लिए ड्रॉप डाउन बॉक्स में उपेक्षा न करें। आपको फ़ाइल को बंद करने की आवश्यकता हो सकती है और फिर चेतावनी को दूर करने के लिए इसे फिर से खोलना होगा।

(मुझे पता है कि यह सवाल पुराना है, लेकिन यह पहला था जिसे मैंने चेतावनी पर खोजते समय पाया था, इसलिए मैं यहां उत्तर अन्य मतदाताओं के लिए पोस्ट कर रहा हूं।)


1
मुझे यह सुनिश्चित करना था कि "मैनुअल" बॉक्स के साथ-साथ "बिल्ड" बॉक्स को चेक किया गया था और फिर परियोजना पर राइट-क्लिक करके और दूर जाने के लिए चेतावनी के लिए "वैलिडेट" का चयन करके एक मैनुअल को सत्यापित करें। ऐसा लगता है कि ग्रहण में एक बग है जिसमें सत्यापनकर्ता गड़बड़ हो जाता है। आपको कम से कम मैनुअल सत्यापन कार्य करने में सक्षम होना चाहिए , भले ही आप इसे बिल्ड समय पर नहीं करना चाहते हों। और फिर आपको मैन्युअल सत्यापन करने के बाद चेतावनी को आसानी से साफ़ करने में सक्षम होना चाहिए। तब तक यही उपाय है।
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>

विस्तृत विवरण:

DTDs डेटा स्वरूपों पर सहमति स्थापित करने और ऐसे डेटा की प्राप्ति को मान्य करने के लिए कार्य करते हैं। वे 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) परिभाषाओं का अंत


21

असली समाधान:

जोड़ना <!DOCTYPE something>प्रत्येक समस्याग्रस्त XML की भीख को लिए,

xml टैग के बाद <?xml version="1.0" encoding="utf-8"?>

आप doctype के लिए कुछ भी लिख सकते हैं, लेकिन मूल रूप से मुझे जो कुछ भी समझ में आता है, उससे प्रकट, गतिविधि आदि होना चाहिए


काम नहीं करता है। ग्रहण 4.10, तिथि 2019-05-31। कभी-कभी चेतावनी दूर हो जाती है - लेकिन जब आप ग्रहण छोड़ते हैं तो यह फिर से वापस आ जाता है।
माइक कृंतक

@ माइकरोडेंट चेतावनी तब तक बनी रह सकती है जब तक आप प्रोजेक्ट एक्सप्लोरर मेनू में राइट-क्लिक /
वैलिडेट के

11

क्या आपने xml कैटलॉग में स्कीमा जोड़ने की कोशिश की है?

"कोई व्याकरण की कमी (डीडीटी या xml स्कीमा) दस्तावेज़ के लिए पता लगाने से बचने के लिए ग्रहण में।" मैं xml कैटलॉग में एक xsd स्कीमा फ़ाइल जोड़ने के लिए उपयोग करता हूँ

"विंडो \ वरीयताएँ \ 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>

ग्रहण JEE v। 2018-12 में मेरे लिए काम किया। चेतावनी गायब हो गई जब मैंने इन दो लाइनों को चींटी के build.xml में जोड़ा
यूजीन जीआर। फिलिपोव

7

एक नया साफ तरीका हो सकता है कि आप अपने xml को ऐसे लिखें:

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

<rootElement>
 ....
</rootElement>

उपरोक्त कार्य जूनो + में काम करता है


चेतावनी तब तक बनी रह सकती है जब तक आप प्रोजेक्ट एक्सप्लोरर मेनू में राइट-क्लिक / वैलिडेट के माध्यम से स्पष्ट सत्यापन नहीं करते हैं।
mvreijn

6

मेरे लिए यह चरित्र एन्कोडिंग और यूनिक्स फिल्मोड के साथ एक समस्या थी विंडोज पर ग्रहण चल रहा था:

बस पूरा कोड चिह्नित किया गया, उसे काट दिया गया और उसे वापस चिपका दिया गया (संक्षेप में: CtrlA-CtrlX-CtrlV ) और सब कुछ ठीक था - कोई और अधिक "कोई व्याकरण की कमी नहीं ..." चेतावनी


6

चेतावनी संदेशों में दिए गए सुझाव को समझने की कोशिश करें, यह कुछ समय में मदद करता है।

मेरे पास भी यही मुद्दे थे, कुछ शोध करने के बाद मैंने इसका हल खोजा और शुरुआत में नीचे की पंक्ति को जोड़कर तय किया

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

जो मेरे मामले में कुछ अन्य मुद्दे को जन्म देता है। जिसे मैंने सुझावों को पढ़कर हल किया, जो फिर से एक और समस्या में बदल गया, जिसे मूल कारण को समझते हुए हल किया गया है, कि पहला लिंक टूट गया था (नहीं मिला)। नीचे चरण चित्र हैं जो बताता है कि समस्या को पूरी तरह से हल करने के लिए क्या किया गया है।

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


3

मैं वास्तव में यह नहीं कह सकता कि आपको "नो व्याकरण बाधाओं ..." चेतावनी क्यों मिलती है, लेकिन मैं इसे DOCTYPE घोषणा को पूरी तरह से हटाकर ग्रहण में उत्तेजित कर सकता हूं। जब मैं घोषणा वापस लेता हूं और फिर से सत्यापन करता हूं, मुझे यह त्रुटि संदेश मिलता है:

तत्व प्रकार की सामग्री "टेम्पलेट" से मेल खाना चाहिए (विवरण +, भिन्नता ?,, भिन्नता-क्षेत्र?, अनुमति-एकाधिक-भिन्नता?, वर्ग-प्रतिमान; गेट्टर-सेटर?, अनुमति-फ़ाइल-एक्सटेंशन?, टेम्पलेट-निकाय +? ।

और यह सही है, मेरा मानना ​​है कि ("संख्या-आवश्यक-वर्ग" तत्व की अनुमति नहीं है)।


कोष्ठक इंगित करता है कि आदेश महत्वपूर्ण है। आपके दस्तावेज़ में क्लास-पैटर्न तत्व के बाद एक अनुमति-एकाधिक-भिन्नता तत्व है, जो अमान्य है। आपको वास्तव में प्रश्न को बदलना चाहिए या किसी अलग से पूछने से पहले मौजूदा उत्तर को स्वीकार करना चाहिए।
नाइटिंड

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 विन्यास की sugested लाइनों का उपयोग करने की कोशिश करो।


2

यह ग्रहण में मान्यता को बंद करने के कारण हो सकता है।


1

ग्रहण 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: 'लाइब्रेरी' पर जाएं और प्रोजेक्ट की 'जेआरई सिस्टम लाइब्रेरी' को हटा दें।

चरण 3: 'लाइब्रेरी जोड़ें' -> 'जेआरई सिस्टम लाइब्रेरी' पर क्लिक करें -> 'कार्यक्षेत्र डिफ़ॉल्ट JRE' चुनें

चरण 3: 'ऑर्डर और एक्सपोर्ट' पर जाएं और नए जोड़े गए 'JRE सिस्टम लाइब्रेरी' को चिह्नित करें

चरण 4: परियोजना को ताज़ा करें और साफ़ करें

यूरेका! यह काम कर रहा है :)


मैंने आपके समाधान का उपयोग करने की कोशिश की। लेकिन दुर्भाग्यवश, जब मैं अपने प्रोजेक्ट को रीफ्रेश और क्लीन करता हूं तो नई जोड़ी गई 'जेआरई सिस्टम लाइब्रेरी' मेरे 'लाइब्रेरीज़' सेक्शन से गायब हो जाती है और मेरे 'ऑर्डर एंड एक्सपोर्ट' सेक्शन से भी। कृपया मदद कीजिए।
विक्रम वि।

इस उत्तर के अधिकांश चरण 4 "परियोजना को साफ करें" (जो या नहीं हो सकता है) की मदद को छोड़कर प्रश्न से संबंधित नहीं है।
आरोन दिगुल्ला

0

मुझे जो समाधान मिला वह बहुत सरल था कि मुझे लगता है कि आपको वरीयताओं के साथ छेड़छाड़ करने से पहले प्रयास करना चाहिए। मेरे मामले में मुझे एक स्ट्रिंग्स फाइल में यह समस्या थी जिसका आधार टैग "संसाधन" था ... मैंने जो भी किया था, वह ऊपर और नीचे से टैग हटा दिया गया था, प्रोजेक्ट को साफ़ करें, फ़ाइल को सहेजें और टैग को पुन: स्थापित करें। समस्या तब से गायब है और मुझे कभी कोई चेतावनी नहीं दी गई। यह सच होने के लिए सरल लग सकता है लेकिन हे, कभी-कभी यह सबसे सरल चीजें हैं जो समस्याओं को हल करती हैं। चियर्स


-1

मैंने समस्याओं के दृश्य में चेतावनी को हटा दिया। यह अब तक वापस नहीं आया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.