- PCDATA là văn bản sẽ được phân tích bởi trình phân tích cú pháp. Các thẻ bên trong văn bản sẽ được coi là đánh dấu và các thực thể sẽ được mở rộng.
- CDATA là văn bản sẽ không được phân tích bởi trình phân tích cú pháp. Các thẻ bên trong văn bản sẽ không được coi là đánh dấu và thực thể sẽ không được mở rộng.
Theo mặc định, mọi thứ đều là PCDATA. Trong ví dụ sau, bỏ qua thư mục gốc, sẽ được phân tích cú pháp, và nó sẽ không có nội dung, nhưng một đứa trẻ.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
Khi chúng ta muốn xác định rằng một phần tử sẽ chỉ chứa văn bản, và không có phần tử con, chúng tôi sử dụng PCDATA từ khóa, bởi vì từ khóa này xác định rằng nguyên tố này phải chứa dữ liệu nhân vật được phân tách - có nghĩa là, bất kỳ văn bản trừ các ký tự ít hơn (<), lớn hơn (>), dấu và (&), trích dẫn (') và dấu ngoặc kép (").
Trong ví dụ tiếp theo, thanh là CDATA và không được phân tích cú pháp và có nội dung "nội dung!".
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
Có một số mô hình nội dung trong SGML. Mô hình nội dung #PCDATA nói rằng một phần tử có thể chứa văn bản thuần túy. Phần "được phân tích cú pháp" của nó có nghĩa là đánh dấu (bao gồm PI, nhận xét và chỉ thị SGML) trong đó được phân tích cú pháp thay vì hiển thị dưới dạng văn bản thô. Nó cũng có nghĩa là các tham chiếu thực thể được thay thế.
Một loại mô hình nội dung khác cho phép nội dung văn bản thuần tuý là CDATA. Trong XML, mô hình nội dung phần tử có thể không ngầm được đặt thành CDATA, nhưng trong SGML, nó có nghĩa là các tham chiếu đánh dấu và thực thể được bỏ qua trong nội dung của phần tử. Tuy nhiên, trong các thuộc tính của kiểu CDATA, các tham chiếu thực thể được thay thế.
Trong XML #PCDATA là mô hình nội dung văn bản thuần túy duy nhất. Bạn sử dụng nó nếu bạn muốn cho phép nội dung văn bản trong phần tử. Mô hình nội dung CDATA có thể được sử dụng rõ ràng thông qua đánh dấu khối CDATA trong #PCDATA, nhưng nội dung phần tử có thể không được định nghĩa là CDATA theo mặc định.
Trong DTD, loại thuộc tính chứa văn bản phải là CDATA. Từ khóa CDATA trong một khai báo thuộc tính có một ý nghĩa khác với phần CDATA trong một tài liệu XML. Trong phần CDATA, tất cả các ký tự đều hợp pháp (bao gồm <,>, &, 'và' ký tự) ngoại trừ thẻ kết thúc “]]>”.
#PCDATA không phù hợp với loại thuộc tính. Nó được sử dụng cho loại văn bản "lá".
#PCDATA được thêm bởi thẻ bắt đầu bằng # chỉ đơn giản vì lý do lịch sử.
Sự nhầm lẫn có thể được gây ra bởi thực tế là CDATA có thể được phân tích cú pháp, nhưng bằng một trình phân tích cú pháp khác. Ví dụ, nội dung của phần tử 'script', là CDATA trong HTML, được phân tích bởi trình thông dịch Javascript. –