Nazwy słów kluczowych używanych w DTD XML to #PCDATAi CDATA. Nie ma PCDATAsłowa kluczowego i nie #CDATA.
mzjn
1
Oprócz zaakceptowanej odpowiedzi przeczytaj również stackoverflow.com/a/918462/2013911, ponieważ wyjaśnia on różnicę między typem atrybutu CDATA a sekcjami oznaczonymi <! [CDATA []]>.
Niklas Peter
Odpowiedzi:
75
PCDATA - przeanalizowane dane znaków
Parsery XML zwykle analizują cały tekst w dokumencie XML.
CDATA - (Unparsed) Character Data
Termin CDATA jest używany w odniesieniu do danych tekstowych, które nie powinny być analizowane przez parser XML.
Znaki takie jak „<” i „&” są niedozwolone w elementach XML.
PCDATAjest tekstem, który zostanie przeanalizowany przez parser. Tagi wewnątrz tekstu będą traktowane jako znaczniki, a encje zostaną rozwinięte.
CDATAto tekst, który nie zostanie przeanalizowany przez parser. Tagi wewnątrz tekstu
nie będą traktowane jako znaczniki, a encje nie będą rozwijane.
Domyślnie wszystko jest PCDATA. W poniższym przykładzie zignorowanie katalogu głównego <bar>zostanie przeanalizowane i nie będzie zawierało treści, ale jedno dziecko.
Kiedy chcemy określić, że element będzie zawierał tylko tekst i żadnych elementów podrzędnych, używamy słowa kluczowego PCDATA, ponieważ to słowo kluczowe określa, że element musi zawierać analizowalne dane znakowe - czyli dowolny tekst z wyjątkiem znaków mniejszych niż (< ), większe niż ( >), ampersand ( &), quote ( ') i podwójny cudzysłów ( ").
W następnym przykładzie <bar>zawieraCDATA . Jego zawartość nie zostanie przeanalizowana i dlatego jest <test>content!</test>.
W SGML istnieje kilka modeli zawartości. Model #PCDATAtreści mówi, że element może zawierać zwykły tekst. Część „przeanalizowana” oznacza, że znaczniki (w tym PI, komentarze i dyrektywy SGML) są analizowane, a nie wyświetlane jako surowy tekst. Oznacza to również, że odniesienia do jednostek są zastępowane.
Innym typem modelu treści, który pozwala na zwykły tekst, jest CDATA . W XML, model zawartości elementu nie może być domyślnie ustawiony na CDATA, ale w SGML oznacza to, że znaczniki i odniesienia do encji są ignorowane w zawartości elementu. Jednak w atrybutach CDATAtypu zastępowane są odniesienia do encji.
W XML #PCDATAto jedyny model zawartości zwykłego tekstu. Używasz go, jeśli w ogóle chcesz zezwolić na zawartość tekstową w elemencie. Model CDATAzawartości może być używany jawnie za pośrednictwem CDATAznaczników blokowych w#PCDATA , ale zawartość elementu nie może być definiowana CDATAdomyślnie.
W DTD atrybut zawierający tekst musi mieć taki typ CDATA. Słowo CDATAkluczowe w deklaracji atrybutu ma inne znaczenie niż CDATAsekcja w dokumencie XML. W CDATAsekcji wszystkie znaki są zgodne z prawem (w tym <, >, &,' oraz "znaków), z wyjątkiem ]]>znacznika końcowego.
#PCDATAnie jest odpowiedni dla typu atrybutu. Jest używany jako tekst typu „liść”.
#PCDATAjest poprzedzony hashem w modelu treści, aby odróżnić to słowo kluczowe od elementu o nazwie PCDATA(co byłoby całkowicie legalne).
Świetna odpowiedź, poza ostatnim zdaniem. #nie jest hashtagiem. Tylko tag poprzedzony tym symbolem jest hashtagiem. Sam symbol ma wiele nazw , w tym „znak cyfry”, „znak funta” (głównie Kanada i USA) lub po prostu „krzyżyk” (stąd nazwa „hashtag”).
6
#justhadtogetthatoffmychest
3
Nie zgadzam się, że # przed nim #PCDATAjest z powodów historycznych. Dzieje się tak, ponieważ w DTD element może również zawierać element o nazwie PCDATA, który musi być możliwy i który będzie wyglądał <!ELEMENT foo (PCDATA)>.
Mathias Müller
Cytowanie i podwójne cudzysłowy są całkowicie legalne w zawartości PCDATA. Znak ampersand może pojawić się, ale (w XML) tylko jako element wprowadzający encję.
Toby Speight
12
PCDATA - przeanalizowane dane znakowe.Analizuje wszystkie dane w dokumencie XML.
Tutaj <family>element zawiera jeszcze 2 elementy: <mother>i <father>. Dlatego analizuje się dalej, aby tekst matki i ojca podawał wartość tekstową rodziny jako „mama tato”
CDATA - nieprzetworzone dane znakowe. To są dane, które nie powinny być dalej analizowane w dokumencie xml.
W DTD, PCDATA i CDATA są używane do stwierdzenia, odpowiednio, dopuszczalnej zawartości elementów i atrybutów. W modelu zawartości elementu #PCDATA mówi, że element zawiera (może zawierać) „dowolny stary tekst”. (Z wyjątkami wymienionymi poniżej.) W deklaracji atrybutu CDATA jest jednym z rodzajów ograniczeń, które można nałożyć na dopuszczalne wartości atrybutu (inne rodzaje, wszystkie wzajemnie się wykluczające, obejmują ID, IDREF i NMTOKEN). Atrybut, którego dopuszczalne wartości to CDATA, może (podobnie jak PCDATA w elemencie) zawierać „dowolny stary tekst”.
Potencjalnie naprawdę zagmatwanym problemem jest to, że istnieje inny „CDATA”, nazywany również zaznaczonymi sekcjami. Zaznaczona sekcja to część treści elementu (#PCDATA) oddzielona specjalnymi ciągami znaków: do jej zamknięcia. Jeśli pamiętasz, że PCDATA to „przeanalizowane dane znakowe”, sekcja CDATA jest dosłownie tym samym, bez „przeanalizowanej”. Parsery przesyłają zawartość zaznaczonej sekcji do podrzędnych aplikacji bez czkawki za każdym razem, gdy napotkają znaki specjalne, takie jak <i &. Jest to przydatne, gdy kodujesz dokument zawierający wiele tych znaków specjalnych (takich jak skrypty i fragmenty kodu); jest łatwiejszy do wprowadzania danych i łatwiejszy do odczytania niż odpowiednie odniesienie do encji.
Możesz więc wywnioskować, że wyjątkiem od reguły „dowolny stary tekst” jest to, że PCDATA nie może zawierać żadnego z tych znaków specjalnych bez zmiany znaczenia, chyba że wchodzą one w zakres sekcji oznaczonej przez CDATA.
CDATA ( C haracter DATA ): Jest podobny do komentarza, ale jest częścią dokumentu. tj. CDATA jest danymi, jest częścią dokumentu, ale dane nie mogą być analizowane w XML. Uwaga: komentarz XML jest pomijany podczas analizowania XML, ale CDATA pokazuje, jak jest.
PCDATA ( P arsed C haracter DATA ): Domyślnie wszystko to PCDATA. PCDATA to dane, które można analizować w formacie XML.
#PCDATA
iCDATA
. Nie maPCDATA
słowa kluczowego i nie#CDATA
.Odpowiedzi:
PCDATA - przeanalizowane dane znaków
Parsery XML zwykle analizują cały tekst w dokumencie XML.
CDATA - (Unparsed) Character Data
Termin CDATA jest używany w odniesieniu do danych tekstowych, które nie powinny być analizowane przez parser XML.
Znaki takie jak „<” i „&” są niedozwolone w elementach XML.
źródło
PCDATA
jest tekstem, który zostanie przeanalizowany przez parser. Tagi wewnątrz tekstu będą traktowane jako znaczniki, a encje zostaną rozwinięte.CDATA
to tekst, który nie zostanie przeanalizowany przez parser. Tagi wewnątrz tekstu nie będą traktowane jako znaczniki, a encje nie będą rozwijane.Domyślnie wszystko jest
PCDATA
. W poniższym przykładzie zignorowanie katalogu głównego<bar>
zostanie przeanalizowane i nie będzie zawierało treści, ale jedno dziecko.<?xml version="1.0"?> <foo> <bar><test>content!</test></bar> </foo>
Kiedy chcemy określić, że element będzie zawierał tylko tekst i żadnych elementów podrzędnych, używamy słowa kluczowego
PCDATA
, ponieważ to słowo kluczowe określa, że element musi zawierać analizowalne dane znakowe - czyli dowolny tekst z wyjątkiem znaków mniejszych niż (<
), większe niż (>
), ampersand (&
), quote ('
) i podwójny cudzysłów ("
).W następnym przykładzie
<bar>
zawieraCDATA
. Jego zawartość nie zostanie przeanalizowana i dlatego jest<test>content!</test>
.<?xml version="1.0"?> <foo> <bar><![CDATA[<test>content!</test>]]></bar> </foo>
W SGML istnieje kilka modeli zawartości. Model
#PCDATA
treści mówi, że element może zawierać zwykły tekst. Część „przeanalizowana” oznacza, że znaczniki (w tym PI, komentarze i dyrektywy SGML) są analizowane, a nie wyświetlane jako surowy tekst. Oznacza to również, że odniesienia do jednostek są zastępowane.Innym typem modelu treści, który pozwala na zwykły tekst, jest
CDATA
. W XML, model zawartości elementu nie może być domyślnie ustawiony naCDATA
, ale w SGML oznacza to, że znaczniki i odniesienia do encji są ignorowane w zawartości elementu. Jednak w atrybutachCDATA
typu zastępowane są odniesienia do encji.W XML
#PCDATA
to jedyny model zawartości zwykłego tekstu. Używasz go, jeśli w ogóle chcesz zezwolić na zawartość tekstową w elemencie. ModelCDATA
zawartości może być używany jawnie za pośrednictwemCDATA
znaczników blokowych w#PCDATA
, ale zawartość elementu nie może być definiowanaCDATA
domyślnie.W DTD atrybut zawierający tekst musi mieć taki typ
CDATA
. SłowoCDATA
kluczowe w deklaracji atrybutu ma inne znaczenie niżCDATA
sekcja w dokumencie XML. WCDATA
sekcji wszystkie znaki są zgodne z prawem (w tym<
,>
,&
,'
oraz"
znaków), z wyjątkiem]]>
znacznika końcowego.#PCDATA
nie jest odpowiedni dla typu atrybutu. Jest używany jako tekst typu „liść”.#PCDATA
jest poprzedzony hashem w modelu treści, aby odróżnić to słowo kluczowe od elementu o nazwiePCDATA
(co byłoby całkowicie legalne).źródło
#
nie jest hashtagiem. Tylko tag poprzedzony tym symbolem jest hashtagiem. Sam symbol ma wiele nazw , w tym „znak cyfry”, „znak funta” (głównie Kanada i USA) lub po prostu „krzyżyk” (stąd nazwa „hashtag”).#PCDATA
jest z powodów historycznych. Dzieje się tak, ponieważ w DTD element może również zawierać element o nazwiePCDATA
, który musi być możliwy i który będzie wyglądał<!ELEMENT foo (PCDATA)>
.PCDATA - przeanalizowane dane znakowe.Analizuje wszystkie dane w dokumencie XML.
Przykład:
<family> <mother>mom</mother> <father>dad</father> </family>
Tutaj
<family>
element zawiera jeszcze 2 elementy:<mother>
i<father>
. Dlatego analizuje się dalej, aby tekst matki i ojca podawał wartość tekstową rodziny jako „mama tato”CDATA - nieprzetworzone dane znakowe. To są dane, które nie powinny być dalej analizowane w dokumencie xml.
<family> <![CDATA[ <mother>mom</mother> <father>dad</father> ]]> </family>
Tutaj wartość tekstowa rodziny będzie
<mother>mom</mother><father>dad</father>
.źródło
Stąd ( Google to twój przyjaciel ):
źródło
Podstawowa różnica między PCDATA i CDATA to
PCDATA - zasadniczo używane dla ELEMENTS while
CDATA - używane dla atrybutów XML, np. ATTLIST
źródło
CDATA ( C haracter DATA ): Jest podobny do komentarza, ale jest częścią dokumentu. tj. CDATA jest danymi, jest częścią dokumentu, ale dane nie mogą być analizowane w XML.
Uwaga: komentarz XML jest pomijany podczas analizowania XML, ale CDATA pokazuje, jak jest.
PCDATA ( P arsed C haracter DATA ): Domyślnie wszystko to PCDATA. PCDATA to dane, które można analizować w formacie XML.
źródło