Sự khác biệt giữa #PCDATA
và #CDATA
trong DTD là gì?
#PCDATA
và CDATA
. Không có PCDATA
từ khóa và không #CDATA
.
Sự khác biệt giữa #PCDATA
và #CDATA
trong DTD là gì?
#PCDATA
và CDATA
. Không có PCDATA
từ khóa và không #CDATA
.
Câu trả lời:
PCDATA - Dữ liệu ký tự được phân tích cú pháp
Trình phân tích cú pháp XML thường phân tích cú pháp tất cả văn bản trong tài liệu XML.
CDATA - Dữ liệu ký tự (Chưa phân tích)
Thuật ngữ CDATA được sử dụng về dữ liệu văn bản không được phân tích cú pháp bởi trình phân tích cú pháp XML.
Các ký tự như "<" và "&" là bất hợp pháp trong các phần tử XML.
PCDATA
là văn bản sẽ được phân tích cú pháp 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 cú pháp 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à các thực thể sẽ không được mở rộng.Theo mặc định, mọi thứ đều như vậy PCDATA
. Trong ví dụ sau, bỏ qua phần gốc, <bar>
sẽ được phân tích cú pháp và nó sẽ không có nội dung, mà chỉ có một phần tử con.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
Khi chúng tôi muốn chỉ đị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 từ khóa PCDATA
, bởi vì từ khóa này chỉ định rằng phần tử phải chứa dữ liệu ký tự có thể phân tích cú pháp - nghĩa là bất kỳ văn bản nào ngoại trừ các ký tự nhỏ hơn ( <
), lớn hơn ( >
), dấu và ( ), dấu ngoặc kép &
( '
) và dấu ngoặc kép ( "
).
Trong ví dụ tiếp theo, <bar>
chứa CDATA
. Nội dung của nó sẽ không được phân tích cú pháp và do đó <test>content!</test>
.
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
Có một số mô hình nội dung trong SGML. Các #PCDATA
mô hình nội dung nói rằng một yếu tố có thể chứa văn bản đơn giản. 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 nó đượ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 túy là CDATA
. Trong XML, mô hình nội dung phần tử có thể không được đặt thành CDATA
, nhưng trong SGML, điều đó có nghĩa là các tham chiếu đánh dấu và thực thể bị bỏ qua trong nội dung của phần tử. CDATA
Tuy nhiên, trong các thuộc tính của kiểu, 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ử. Các CDATA
mô hình nội dung có thể được sử dụng một cách rõ ràng thông qua việc CDATA
đánh dấu khối trong #PCDATA
, nhưng nội dung tố có thể không được định nghĩa là CDATA
mỗi mặc định.
Trong một DTD, loại thuộc tính có chứa văn bản phải là CDATA
. Các CDATA
từ khóa trong một tuyên bố thuộc tính có một ý nghĩa khác nhau hơn so với CDATA
phần trong một tài liệu XML. Trong một CDATA
phần tất cả các nhân vậ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 vào bởi một hàm băm trong mô hình nội dung để phân biệt từ khóa này với một phần tử được đặt tên PCDATA
(sẽ hoàn toàn hợp pháp).
#
không phải là một thẻ bắt đầu bằng #. Chỉ một thẻ đứng trước biểu tượng này là một thẻ bắt đầu bằng #. Bản thân biểu tượng có nhiều tên , bao gồm "ký hiệu số", "ký hiệu bảng Anh" (chủ yếu là Canada và Hoa Kỳ), hoặc chỉ "băm" (do đó có tên là 'thẻ bắt đầu bằng #').
#PCDATA
là có vì lý do lịch sử. Nó ở đó bởi vì trong một DTD, một phần tử cũng có thể chứa một phần tử có tên PCDATA
, phần tử này phải có thể và sẽ trông như thế nào <!ELEMENT foo (PCDATA)>
.
PCDATA - dữ liệu ký tự được phân tích cú pháp. Nó phân tích cú pháp tất cả dữ liệu trong một tài liệu XML.
Thí dụ:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
Ở đây, <family>
phần tử chứa thêm 2 phần tử: <mother>
và <father>
. Vì vậy, nó phân tích cú pháp xa hơn để lấy văn bản của mẹ và cha để cung cấp giá trị văn bản của gia đình là "bố mẹ"
CDATA - Dữ liệu ký tự chưa được phân tích. Đây là dữ liệu không nên được phân tích cú pháp thêm trong tài liệu xml.
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
Ở đây, giá trị văn bản của gia đình sẽ là <mother>mom</mother><father>dad</father>
.
Từ đây ( Google là bạn của bạn ):
Trong DTD, PCDATA và CDATA được sử dụng để khẳng định điều gì đó về nội dung được phép của các phần tử và thuộc tính, tương ứng. Trong mô hình nội dung của phần tử, #PCDATA cho biết phần tử chứa (có thể chứa) "bất kỳ văn bản cũ nào". (Với các ngoại lệ như được lưu ý bên dưới.) Trong khai báo của thuộc tính, CDATA là một loại ràng buộc bạn có thể đặt trên các giá trị cho phép của thuộc tính (các loại khác, tất cả loại trừ lẫn nhau, bao gồm ID, IDREF và NMTOKEN). Thuộc tính có giá trị cho phép là CDATA có thể (như PCDATA trong một phần tử) chứa "bất kỳ văn bản cũ nào".
Một vấn đề có thể thực sự khó hiểu là có một "CDATA" khác , còn được gọi là các phần được đánh dấu. Phần được đánh dấu là một phần của nội dung phần tử (#PCDATA) được phân tách bằng các chuỗi đặc biệt: để đóng nó. Nếu bạn nhớ rằng PCDATA là "dữ liệu ký tự được phân tích cú pháp", thì một phần CDATA cũng giống như vậy, không có "được phân tích cú pháp". Bộ phân tích cú pháp truyền nội dung của một phần được đánh dấu đến các ứng dụng hạ lưu mà không bị lỗi mỗi khi chúng gặp các ký tự đặc biệt như <và &. Điều này rất hữu ích khi bạn đang mã hóa một tài liệu có chứa nhiều ký tự đặc biệt (như tập lệnh và đoạn mã); nó dễ dàng hơn trong việc nhập dữ liệu và dễ đọc hơn so với tham chiếu thực thể tương ứng.
Vì vậy, bạn có thể suy ra rằng ngoại lệ đối với quy tắc "bất kỳ văn bản cũ nào" là PCDATA không thể bao gồm bất kỳ ký tự đặc biệt nào trong số các ký tự đặc biệt không thoát này, BẤT CHẤP chúng nằm trong phạm vi của phần được đánh dấu CDATA.
CDATA ( C haracter DATA ): Nó tương tự như một nhận xét nhưng nó là một phần của tài liệu. tức là CDATA là một dữ liệu, nó là một phần của tài liệu nhưng dữ liệu không thể phân tích cú pháp trong XML.
Lưu ý: Chú thích XML bị bỏ qua trong khi phân tích cú pháp XML nhưng CDATA hiển thị như vậy.
PCDATA ( P arsed C haracter DATA ): Theo mặc định, mọi thứ đều là PCDATA. PCDATA là một dữ liệu, nó có thể được phân tích cú pháp trong XML.