Jaka jest różnica między #PCDATA
i #CDATA
w DTD ?
#PCDATA
i CDATA
. Nie ma PCDATA
słowa kluczowego i nie #CDATA
.
Jaka jest różnica między #PCDATA
i #CDATA
w DTD ?
#PCDATA
i CDATA
. Nie ma PCDATA
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.
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 na CDATA
, ale w SGML oznacza to, że znaczniki i odniesienia do encji są ignorowane w zawartości elementu. Jednak w atrybutach CDATA
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. Model CDATA
zawartości może być używany jawnie za pośrednictwem CDATA
znaczników blokowych w#PCDATA
, ale zawartość elementu nie może być definiowana CDATA
domyślnie.
W DTD atrybut zawierający tekst musi mieć taki typ CDATA
. Słowo CDATA
kluczowe w deklaracji atrybutu ma inne znaczenie niż CDATA
sekcja w dokumencie XML. W CDATA
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 nazwie PCDATA
(co byłoby całkowicie legalne).
#
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 nazwie PCDATA
, 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>
.
Stąd ( Google to twój przyjaciel ):
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.