DTD में PCDATA और CDATA के बीच अंतर


86

DTD में #PCDATAऔर क्या अंतर है ?#CDATA



XML DTDs में प्रयुक्त खोजशब्दों के नाम हैं #PCDATAऔर CDATA। कोई PCDATAकीवर्ड और नहीं है #CDATA
mzjn

1
स्वीकृत उत्तर के अलावा आपको stackoverflow.com/a/918462/2013911 को पढ़ना चाहिए क्योंकि यह CDATA विशेषता प्रकार और <! [CDATA []]> चिह्नित वर्गों के बीच का अंतर बताता है।
निकोलस पीटर

जवाबों:


75

PCDATA - पार्स कैरेक्टर डेटा

XML पार्सर सामान्य रूप से XML दस्तावेज़ के सभी पाठ को पार्स करते हैं।

CDATA - (अनपार्स्ड) कैरेक्टर डेटा

CDATA शब्द का उपयोग टेक्स्ट डेटा के बारे में किया जाता है जिसे XML पार्सर द्वारा पार्स नहीं किया जाना चाहिए।

XML तत्वों में "<" और "&" जैसे वर्ण अवैध हैं।


77
  • PCDATAवह पाठ है जिसे पार्सर द्वारा पार्स किया जाएगा। पाठ के अंदर टैग को मार्कअप माना जाएगा और संस्थाओं का विस्तार किया जाएगा।
  • CDATAवह पाठ है जिसे पार्सर द्वारा पार्स नहीं किया जाएगा । पाठ के अंदर टैग को मार्कअप नहीं माना जाएगा और संस्थाओं का विस्तार नहीं किया जाएगा।

डिफ़ॉल्ट रूप से, सब कुछ है PCDATA। निम्नलिखित उदाहरण में, रूट को अनदेखा करते हुए, <bar>पार्स किया जाएगा, और इसमें कोई सामग्री नहीं होगी, लेकिन एक बच्चा होगा।

<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>

जब हम यह निर्दिष्ट करना चाहते हैं कि एक तत्व में केवल पाठ होगा, और कोई बाल तत्व नहीं है, तो हम कीवर्ड का उपयोग करते हैं PCDATA, क्योंकि यह कीवर्ड निर्दिष्ट करता है कि तत्व में पार्सबल वर्ण डेटा शामिल होना चाहिए - अर्थात, किसी भी पाठ को छोड़कर वर्णों से कम ( <), अधिक से अधिक ( >), एम्परसेंड ( &), उद्धरण ( ') और डबल उद्धरण ( ")।

अगले उदाहरण में <bar>समाहित है CDATA। इसकी सामग्री को पार्स नहीं किया जाएगा और इस प्रकार है <test>content!</test>

<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>

SGML में कई सामग्री मॉडल हैं। #PCDATAसामग्री मॉडल का कहना है कि एक तत्व सादा पाठ हो सकती है कि। इसके "पार्स" भाग का अर्थ है कि इसमें मार्कअप (पीआई, टिप्पणियां और एसजीएमएल निर्देश सहित) को कच्चे पाठ के रूप में प्रदर्शित करने के बजाय पार्स किया गया है। इसका अर्थ यह भी है कि इकाई संदर्भों को प्रतिस्थापित किया जाता है।

सादे पाठ सामग्री की अनुमति देने वाला एक अन्य प्रकार का सामग्री मॉडल है CDATA। XML में, तत्व सामग्री मॉडल को स्पष्ट रूप से सेट नहीं किया जा सकता है CDATA, लेकिन SGML में, इसका मतलब है कि तत्व की सामग्री में मार्कअप और इकाई संदर्भों को अनदेखा किया गया है। CDATAहालांकि प्रकार की विशेषताओं में , इकाई संदर्भों को प्रतिस्थापित किया जाता है।

XML में, #PCDATAकेवल सादा पाठ सामग्री मॉडल है। आप इसका उपयोग करते हैं यदि आप तत्व में पाठ सामग्री को अनुमति देना चाहते हैं। CDATAसामग्री मॉडल के माध्यम से स्पष्ट रूप से इस्तेमाल किया जा सकता CDATAमें ब्लॉक मार्कअप #PCDATA, लेकिन तत्व सामग्री के रूप में परिभाषित नहीं किया जा सकता CDATAडिफ़ॉल्ट प्रति।

DTD में, एक विशेषता का प्रकार जिसमें पाठ होता है, होना चाहिए CDATACDATAएक विशेषता घोषणा में कीवर्ड से एक अलग अर्थ है CDATAएक XML दस्तावेज में खंड। एक में CDATAखंड सभी वर्णों (सहित कानूनी रहे हैं <, >, &, 'और "को छोड़कर, अक्षर) ]]>समाप्ति टैग।

#PCDATAविशेषता के प्रकार के लिए उपयुक्त नहीं है। इसका उपयोग "पत्ती" पाठ के प्रकार के लिए किया जाता है।

#PCDATAइस कीवर्ड को उस तत्व से अलग करने के लिए सामग्री मॉडल में एक हैश द्वारा प्रस्तुत किया गया है PCDATA(जो पूरी तरह से कानूनी होगा)।


6
आखिरी वाक्य को छोड़कर, शानदार जवाब। #हैशटैग नहीं है। इस प्रतीक से पहले केवल एक टैग एक हैशटैग है। प्रतीक में खुद के कई नाम हैं , जिनमें "नंबर साइन", "पाउंड साइन" (ज्यादातर कनाडा और यूएस) या सिर्फ "हैश" (इसलिए नाम 'हैशटैग') शामिल हैं।

6
#justhadtogetthatoffmychest

3
मैं इस बात से सहमत नहीं हूँ कि #PCDATAऐतिहासिक कारणों से # सामने है। यह वहाँ है क्योंकि एक DTD में, एक तत्व नाम का एक तत्व भी हो PCDATAसकता है, जो संभव होना चाहिए, और जो दिखता है <!ELEMENT foo (PCDATA)>
मथियास मुलर

PCDATA सामग्री में उद्धरण और दोहरे उद्धरण पूरी तरह से कानूनी हैं। और एम्परसैंड दिखाई दे सकता है, लेकिन (एक्सएमएल में) केवल एक इकाई परिचयकर्ता के रूप में।
टॉबी स्पाइट

12

PCDATA - पार्स चरित्र वर्ण। यह एक XML दस्तावेज़ में सभी डेटा को पार्स करता है।

उदाहरण:

<family>
    <mother>mom</mother>
    <father>dad</father>
</family>

यहां, <family>तत्व में 2 और तत्व हैं: <mother>और <father>। इसलिए यह आगे बढ़कर माँ और पिता के पाठ को "मॉम डैड" के रूप में परिवार का पाठ मूल्य देने के लिए तैयार करता है।

सीडीएटीए - अप्रकाशित चरित्र डेटा। यह वह डेटा है जिसे एक xml दस्तावेज़ में आगे पार्स नहीं किया जाना चाहिए।

<family>
    <![CDATA[ 
       <mother>mom</mother>
       <father>dad</father>
    ]]>
</family>

यहां, परिवार का पाठ मूल्य होगा <mother>mom</mother><father>dad</father>


11

यहां से ( Google आपका मित्र है ):

एक DTD में, PCDATA और CDATA का उपयोग क्रमशः तत्वों और विशेषताओं की स्वीकार्य सामग्री के बारे में कुछ करने के लिए किया जाता है। किसी तत्व के सामग्री मॉडल में, #PCDATA कहता है कि तत्व में (कोई भी पुराना पाठ हो सकता है) शामिल हैं। (नीचे दिए गए अपवादों के साथ।) एक विशेषता की घोषणा में, सीडीएटीए एक प्रकार की बाधा है जिसे आप विशेषता के स्वीकार्य मूल्यों (अन्य प्रकार, सभी परस्पर अनन्य, आईडी, आईडीआरईएफ, और एनएमटीकेएन शामिल कर सकते हैं) पर डाल सकते हैं। एक विशेषता जिसका स्वीकार्य मूल्य CDATA है (जैसे किसी तत्व में PCDATA) में "कोई भी पुराना पाठ" हो सकता है।

संभावित रूप से भ्रमित करने वाला मुद्दा यह है कि एक और है "सीडीएटीए" है, जिसे चिह्नित वर्गों के रूप में भी जाना जाता है। एक चिह्नित अनुभाग विशेष स्ट्रिंग्स के साथ सीमांकित तत्व (#PCDATA) सामग्री का एक हिस्सा है: इसे बंद करने के लिए। यदि आपको याद है कि PCDATA "पार्स किया गया वर्ण डेटा है," एक CDATA अनुभाग का शाब्दिक अर्थ है "पार्स किए बिना"। पार्सर्स एक चिह्नित अनुभाग की सामग्री को हर बार हिचकोले के बिना बहाव के अनुप्रयोगों तक पहुंचाते हैं, जिससे वे <और & जैसे विशेष पात्रों का सामना करते हैं। यह तब उपयोगी होता है जब आप एक दस्तावेज़ को कोड कर रहे होते हैं जिसमें बहुत सारे विशेष अक्षर होते हैं (जैसे स्क्रिप्ट और कोड टुकड़े); यह डेटा एंट्री पर आसान है, और संबंधित इकाई संदर्भ की तुलना में पढ़ने में आसान है।

तो आप अनुमान लगा सकते हैं कि "किसी भी पुराने पाठ" नियम का अपवाद यह है कि PCDATA इनमें से किसी भी विशेषीकृत वर्ण को शामिल नहीं कर सकता, UNLESS वे एक CDATA चिह्नित खंड के दायरे में आते हैं।


3

PCDATA और CDATA के बीच बहुत मुख्य अंतर है

PCDATA - जबकि मूल रूप से उपयोग किया जाता है

CDATA - XML ​​के गुणों के लिए प्रयुक्त अर्थात ATTLIST


0

CDATA ( C haracter DATA ): यह एक टिप्पणी के समान है लेकिन यह दस्तावेज़ का हिस्सा है। यानी CDATA एक ​​डेटा है, यह दस्तावेज़ का हिस्सा है लेकिन डेटा XML में पार्स नहीं किया जा सकता है।
ध्यान दें: एक्सएमएल टिप्पणी एक्सएमएल को पार्स करते समय चूक जाती है लेकिन सीडीएटीए जैसा कि दिखाता है।

PCDATA ( P arsed C haracter DATA ): डिफ़ॉल्ट रूप से, सब कुछ PCDATA है। PCDATA एक ​​डेटा है, इसे XML में पार्स किया जा सकता है।

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