CDATA

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 23. april 2020; checks kræver 8 redigeringer .

CDATA (  /ˈsi.deɪ.tə/ ) er en forkortelse for "karakterdata   " . Bruges til forskellige men relaterede formål i SGML og XML markup sprogene . CDATA angiver, at en bestemt del af dokumentet er karakterdata, i modsætning til ikke-karakter- eller karakterdata, der er specielt struktureret.

CDATA til XML

I XML-dokumenter er et fragment placeret inde i en CDATA en del af elementets indhold, der er markeret for parseren som kun at indeholde tegndata, ikke markup. CDATA er blot en alternativ syntaks til visning af tegndata, der er ingen semantisk forskel mellem tegndata, der er erklæret som CDATA og tegndata, der er erklæret i den normale syntaks, hvor " <" og " >" ville blive repræsenteret som " &lt;" og " &gt;" , henholdsvis.

Syntaks og fortolkning

CDATA-sektionen begynder med følgende sekvens af tegn :

<![CDATA[

og slutter med den første forekomst af sekvensen:

]]>

Alle tegn mellem disse to sekvenser fortolkes som tegn, ikke markup eller objektreferencer. For eksempel i denne linje:

<sender>John Smith</sender>

de åbne og afsluttende "sender"-tags vil blive fortolket som markup. Men hvis du skriver det sådan her:

<![CDATA[<sender>John Smith</sender>]]>

så vil denne kode blive fortolket på samme måde, som hvis den var skrevet:

&lt;sender&gt;John Smith&lt;/sender&gt;

På denne måde vil afsendertags blive behandlet på samme måde som "John Smith", dvs. tekst.

Ligeledes, hvis den numeriske sekvens vises i elementets indhold &#240;, vil den blive fortolket som det almindelige Unicode-tegn 00F0. Men hvis denne sekvens vises i en CDATA-sektion, vil den blive opdelt i 6 tegn: og -tegn , octotorpetegn , ciffer 2 , ciffer 4, ciffer 0 og semikolon .

Brug af CDATA

Nybegyndere til XML misforstår ofte formålet med en CDATA-sektion som at "beskytte" data mod at blive behandlet i den sektion. Nogle API'er til at manipulere XML-dokumenter giver uafhængig adgang til CDATA-sektionen, men disse muligheder eksisterer oven i og uden for de normale krav i et XML-behandlingssystem og ændrer ikke betydningen af ​​dataene. Tegndata er tegndata, uanset om det er skrevet i en CDATA-sektion eller i almindelig markup.

CDATA-sektionen er nyttig, når du vil skrive XML-kode som tekstdata inde i et XML-dokument. Hvis du for eksempel skal skrive en bog om XML til XSL med eksempler på brug af XML-applikationer, så vil de eksempler, du støder på, være indeholdt i CDATA. CDATA kan dog ikke indeholde strengen "]]>", og det er derfor ikke muligt at oprette indlejrede CDATA-sektioner. Hvis teksten indeholder "]]>", kan du vise den ved at bruge f.eks. flere CDATA-sektioner, og afslutte en af ​​dem før tegnet ">". Eksempel:

<![CDATA[]]]]><![CDATA[>]]>

For at indkode ]]>i en CDATA-sektion skal du derfor erstatte alle forekomster af dette tegnsæt med følgende:

]]]]><![CDATA[>

CDATA i DTD

CDATA-attributværdier

I DTD -filer, i både SGML og XML, kan en attribut tildeles typen CDATA - vilkårlige tegndata. Tegnmarkører og entitetsreferencer er tilladt i en CDATA-typeattribut og vil blive behandlet, når dokumentet læses.

For eksempel, hvis XML DTD'en indeholder

<!ATTLIST foo en CDATA #IMPLIED>

dette betyder, at elementerne med navnet foo har en valgfri " a "-attribut af typen CDATA. I et XML-dokument, der er i overensstemmelse med denne DTD, kan følgende element forekomme:

<foo a="1 & 2 er < 3 ">

og XML - parseren fortolker " a "-attributten, da tegndataene " 1 & 2 er <3 ".

Enheder af CDATA-typen

SGML- og XML - DTD'er kan også omfatte enhedserklæringer , hvor en CDATA-markør bruges til at angive, at en enhed er karakterdata. Tegndataene kan forekomme i selve beskrivelsen, eller de kan være tilgængelige som en ekstern ressource via en URI- reference . På den ene eller anden måde er det tilladt at pege på et symbol og henvisninger til en enhed i denne enhed, som vil blive behandlet, når dokumentet læses.

Indholdet af et element af typen CDATA

En SGML DTD kan erklære indholdet af et element af typen CDATA. Ingen opmærkning analyseres i et element af typen CDATA. Du kan tegne en analogi med CDATA-sektionen i XML , men i dette tilfælde er der ingen speciel markup, CDATA-typen virker umiddelbart på hele indholdet af elementet.

Se også