A CDATA (/ˈsi.deɪ.tə/) a "karakteradatok " rövidítése . Különböző, de kapcsolódó célokra használják az SGML és XML jelölőnyelvekben . A CDATA azt jelzi, hogy a dokumentum egy bizonyos része karakteradat, szemben a nem karakteres vagy karakteres adatokkal, amelyek speciálisan strukturáltak.
Az XML dokumentumokban a CDATA-ban elhelyezett töredék az elem tartalmának egy része, amelyet az elemző úgy jelöl meg, hogy csak karakteradatokat tartalmaz, jelölést nem. A CDATA csak egy alternatív szintaxis a karakteradatok megjelenítéséhez, nincs szemantikai különbség a CDATA-ként deklarált karakteradatok és a normál szintaxisban deklarált karakteradatok között, ahol a " <" és a " >" a következőképpen jelenne meg: " <" és " >" , ill.
A CDATA szakasz a következő karaktersorozattal kezdődik :
<![CDATA[
és a sorozat első előfordulásával ér véget:
]]>
A két sorozat közötti összes karakter karakterként értelmeződik, nem jelölésként vagy objektumhivatkozásként. Például ebben a sorban:
<sender>John Smith</sender>
a nyitó és záró "küldő" címkék jelölésként lesznek értelmezve. Viszont ha így írod:
<![CDATA[<sender>John Smith</sender>]]>
akkor ez a kód ugyanúgy lesz értelmezve, mintha azt írták volna:
<sender>John Smith</sender>
Így a feladó címkéit ugyanúgy kezeli a rendszer, mint a "John Smith"-et, azaz a szöveget.
Hasonlóképpen, ha a numerikus sorozat megjelenik az elem tartalmában ð, akkor a rendszer a 00F0 egyszerű Unicode karakterként értelmezi. De ha ez a sorozat megjelenik egy CDATA szakaszban, akkor 6 karakterre lesz felosztva: és jel , okthorpe jel , 2 számjegy , 4 számjegy, 0 számjegy és pontosvessző .
Az XML-ben újoncok gyakran félreértik a CDATA-szakasz célját, mint az adatok „védelmét” az adott szakaszon belüli feldolgozástól. Egyes XML-dokumentumok manipulálására szolgáló API-k független hozzáférést biztosítanak a CDATA szakaszhoz, de ezek a képességek az XML-feldolgozó rendszer normál követelményein felül és kívül is léteznek, és nem változtatják meg az adatok jelentését. A karakteradatok karakteradatok, függetlenül attól, hogy CDATA szakaszban vagy sima jelölésben vannak-e írva.
A CDATA szakasz akkor hasznos, ha XML-kódot szeretne szöveges adatként írni egy XML dokumentumba. Ha például egy XML-ről XSL -re írt könyvet kell XML-alkalmazások használatára vonatkozó példákkal, akkor a talált példákat a CDATA tartalmazza. A CDATA azonban nem tartalmazhatja a "]]>" karakterláncot, ezért nem lehet beágyazott CDATA szakaszokat létrehozni. Ha a szöveg tartalmazza a „]]>” kifejezést, akkor azt például több CDATA-szakasz használatával is megjelenítheti, amelyek közül az egyiket a „>” karakter elé zárja. Példa:
<![CDATA[]]]]><![CDATA[>]]>
Ezért ]]>a CDATA szakaszban való kódoláshoz cserélje ki a karakterkészlet összes előfordulását a következőre:
]]]]><![CDATA[>
A DTD - fájlokban, mind az SGML-ben, mind az XML-ben, CDATA típusú attribútumhoz rendelhető - tetszőleges karakteradat. A karaktermutatók és az entitáshivatkozások megengedettek a CDATA típusú attribútumokon belül, és a dokumentum olvasásakor kerülnek feldolgozásra .
Például, ha az XML DTD tartalmaz
<!ATTLIST foo a CDATA #IMPLIED>
ez azt jelenti, hogy a foo nevű elemeknek van egy CDATA típusú opcionális " a " attribútuma. Egy XML-dokumentumban, amely megfelel ennek a DTD-nek, a következő elem jelenhet meg:
<foo a="1 és 2 < 3 ">
és az XML elemző úgy értelmezi az " a " attribútumot, hogy az " 1 és 2 " karakteradatok < 3 ".
Az SGML és XML DTD -k tartalmazhatnak entitásdeklarációkat is , amelyekben egy CDATA-jelölőt használnak annak jelzésére, hogy az entitás karakteradat. A karakteradatok megjelenhetnek magában a leírásban, vagy elérhetőek külső forrásként egy URI hivatkozáson keresztül . Így vagy úgy, a szimbólumra mutató mutatók és az entitásra való hivatkozások megengedettek ebben az entitásban, amely a dokumentum olvasása során kerül feldolgozásra.
Az SGML DTD deklarálhatja egy CDATA típusú elem tartalmát. A CDATA típusú elemen belül nincs jelölés elemezni. Hasonlatot vonhatunk az XML CDATA szakaszával , de ebben az esetben nincs speciális jelölés, a CDATA típus azonnal hat az elem teljes tartalmára.