Perbedaan antara PCDATA dan CDATA di DTD

88

Apa perbedaan antara #PCDATAdan #CDATAdi DTD ?

Jakub Arnold
sumber
1
kemungkinan duplikat dari apa sebenarnya PCDATA dan CDATA?
Joshua Drake
Nama-nama kata kunci yang digunakan dalam XML DTD adalah #PCDATAdan CDATA. Tidak ada PCDATAkata kunci dan tidak ada #CDATA.
mzjn
1
Selain jawaban yang diterima, Anda harus membaca stackoverflow.com/a/918462/2013911 karena ini menjelaskan perbedaan antara tipe atribut CDATA dan bagian bertanda <! [CDATA []]>.
Niklas Peter

Jawaban:

77

PCDATA - Data Karakter yang Diurai

Pengurai XML biasanya mengurai semua teks dalam dokumen XML.

CDATA - Data Karakter (Tidak Terurai)

Istilah CDATA digunakan tentang data teks yang tidak boleh diurai oleh parser XML.

Karakter seperti "<" dan "&" ilegal dalam elemen XML.

Matthew Vines
sumber
78
  • PCDATAadalah teks yang akan diurai oleh parser. Tag di dalam teks akan diperlakukan sebagai markup dan entitas akan diperluas.
  • CDATAadalah teks yang tidak akan diurai oleh parser. Tag di dalam teks tidak akan diperlakukan sebagai markup dan entitas tidak akan diperluas.

Secara default, semuanya PCDATA. Dalam contoh berikut, mengabaikan root, <bar>akan diurai, dan tidak akan memiliki konten, kecuali satu anak.

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

Ketika kami ingin menentukan bahwa sebuah elemen hanya akan berisi teks, dan tidak ada elemen turunan, kami menggunakan kata kunci PCDATA, karena kata kunci ini menetapkan bahwa elemen harus berisi data karakter yang dapat diuraikan - yaitu, teks apa pun kecuali karakter kurang dari ( <), lebih besar dari ( >), ampersand ( &), quote ( ') dan double quote ( ").

Dalam contoh berikutnya, <bar>berisi CDATA. Isinya tidak akan diurai dan karenanya <test>content!</test>.

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

Ada beberapa model konten di SGML. Model #PCDATAkonten mengatakan bahwa sebuah elemen mungkin berisi teks biasa. Bagian "parsed" artinya markup (termasuk PI, komentar, dan arahan SGML) di dalamnya diurai, bukan ditampilkan sebagai teks mentah. Ini juga berarti bahwa referensi entitas diganti.

Jenis model konten lain yang memungkinkan konten teks biasa adalah CDATA. Dalam XML, model konten elemen mungkin tidak secara implisit diatur ke CDATA, tetapi dalam SGML, itu berarti bahwa referensi markup dan entitas diabaikan dalam konten elemen. Namun dalam atribut CDATAtipe, referensi entitas diganti.

Dalam XML, #PCDATAadalah satu-satunya model konten teks biasa. Anda menggunakannya jika Anda sama sekali ingin mengizinkan konten teks dalam elemen. Model CDATAkonten dapat digunakan secara eksplisit melalui CDATAmarkup blok di #PCDATA, tetapi konten elemen tidak dapat didefinisikan sebagai CDATAdefault.

Dalam DTD, jenis atribut yang berisi teks harus CDATA. Kata CDATAkunci dalam deklarasi atribut memiliki arti yang berbeda dengan CDATAbagian dalam dokumen XML. Dalam CDATAbagian semua karakter hukum (termasuk <, >, &, 'dan "karakter), kecuali ]]>tag akhir.

#PCDATAtidak sesuai untuk jenis atribut. Ini digunakan untuk jenis teks "daun".

#PCDATAdiawali dengan hash dalam model konten untuk membedakan kata kunci ini dari elemen bernama PCDATA(yang akan sangat legal).

Rose Perrone
sumber
6
Jawaban bagus, kecuali kalimat terakhir. #bukan hashtag. Hanya tag yang diawali dengan simbol ini yang merupakan hashtag. Simbol itu sendiri memiliki banyak nama , termasuk "tanda nomor", "tanda pagar" (kebanyakan Kanada & AS), atau hanya "tanda pagar" (karena itu dinamai 'tanda pagar').
6
#justhadtogetthatoffmychest
3
Saya tidak setuju bahwa # di depan #PCDATAada karena alasan historis. Itu ada karena dalam DTD, sebuah elemen juga bisa berisi elemen bernama PCDATA, yang harus memungkinkan, dan seperti apa <!ELEMENT foo (PCDATA)>.
Mathias Müller
Kutipan dan kutip ganda legal dalam konten PCDATA. Dan ampersand mungkin muncul, tetapi (dalam XML) hanya sebagai pengenal entitas.
Toby Speight
13

PCDATA - data karakter yang diurai. Ini mem-parsing semua data dalam dokumen XML.

Contoh:

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

Di sini, <family>elemen berisi 2 elemen lagi: <mother>dan <father>. Jadi mengurai lebih jauh untuk mendapatkan teks ibu dan ayah memberikan nilai teks keluarga sebagai "ibu ayah"

CDATA - Data karakter yang tidak diurai. Ini adalah data yang tidak boleh diurai lebih jauh dalam dokumen xml.

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

Di sini, nilai teks keluarga akan menjadi <mother>mom</mother><father>dad</father>.

sidik jari
sumber
12

Dari sini ( Google adalah teman Anda ):

Dalam DTD, PCDATA dan CDATA digunakan untuk menegaskan sesuatu tentang konten yang diizinkan dari elemen dan atribut. Dalam model konten elemen, #PCDATA mengatakan bahwa elemen tersebut berisi (mungkin berisi) "teks lama apa pun". (Dengan pengecualian seperti yang disebutkan di bawah ini.) Dalam deklarasi atribut, CDATA adalah salah satu jenis batasan yang dapat Anda tempatkan pada nilai atribut yang diizinkan (jenis lainnya, semuanya eksklusif, termasuk ID, IDREF, dan NMTOKEN). Atribut dengan nilai yang diizinkan adalah CDATA dapat (seperti PCDATA dalam elemen) berisi "teks lama apa pun".

Masalah yang berpotensi sangat membingungkan adalah bahwa ada "CDATA" lain , juga disebut sebagai bagian yang ditandai. Bagian yang ditandai adalah bagian dari konten elemen (#PCDATA) yang dipisahkan dengan string khusus: untuk menutupnya. Jika Anda ingat bahwa PCDATA adalah "data karakter yang diuraikan", bagian CDATA secara harfiah adalah hal yang sama, tanpa "diuraikan". Parser mengirimkan konten bagian yang ditandai ke aplikasi hilir tanpa tersendat setiap kali mereka menemukan karakter khusus seperti <dan &. Ini berguna saat Anda membuat kode dokumen yang berisi banyak karakter khusus tersebut (seperti skrip dan fragmen kode); lebih mudah dalam entri data, dan lebih mudah dibaca, daripada referensi entitas yang sesuai.

Jadi Anda dapat menyimpulkan bahwa pengecualian untuk aturan "teks lama apa pun" adalah bahwa PCDATA tidak dapat menyertakan salah satu karakter khusus yang tidak dapat di-escape ini, KECUALI mereka termasuk dalam cakupan bagian bertanda CDATA.

Oli
sumber
3

Perbedaan utama antara PCDATA dan CDATA adalah

PCDATA - Pada dasarnya digunakan untuk ELEMEN sementara

CDATA - Digunakan untuk Atribut XML yaitu ATTLIST

Rachana K
sumber
0

CDATA ( C haracter DATA ): Ini mirip dengan komentar tetapi merupakan bagian dari dokumen. yaitu CDATA adalah data, itu adalah bagian dari dokumen tetapi data tidak dapat diuraikan dalam XML.
Catatan: Komentar XML dihilangkan saat mengurai XML tetapi CDATA ditampilkan apa adanya.

PCDATA ( P arsed C haracter DATA ): Secara default, semuanya PCDATA. PCDATA adalah data, dapat diurai dalam XML.

Premraj
sumber