XML: Thực thể tổng quát
Như ở phần CDATA và Thực thể định nghĩa sẵn đã đề cập đến thực thể nhưng đó chỉ là những thực thể đã được định nghĩa sẵn. Bây giờ chúng ta cần tìm hiểu kỹ hơn về thực thể là gì và cách định nghĩa một thực thể.
Thực thể là gì?
Thực thể thực chất là một cách định nghĩa một biến lưu trữ một khối dữ liệu, khi thực thể này được triệu gọi thì nó sẽ chèn nguyên khối dữ của nó vào vị tí triệu gọi. Khối dữ liệu của thực thể thường là ở dạng text, tuy nhiên nó cũng có thể là dữ liệu nhị phân, miễn là khối dữ liệu này không phá vỡ khuôn dạng của một tài liệu XML khi nó được gọi.
Có hai loại thực thể đó là thực thể tổng quát và thực thể tham số. Thực thể được khai báo trong phần định nghĩa DTD.
Để tham chiếu đến thực thể tổng quát chúng ta viết theo cú pháp:
&Tên_thực_thể;
Trong đó Tên_thực_thể là tên thực thể tổng quát cần tham chiếu. Lưu ý là bắt đầu bởi ký tự & và kết thúc bởi dấu chấm phẩy.
Để tham chiếu đến thực thể tham số chúng ta viết theo cú pháp:
%Tên_thực_thể;
Trong đó Tên_thực_thể là tên thực thể tham số cần tham chiếu. Lưu ý là bắt đầu bởi ký tự % và kết thúc bởi dấu chấp phẩy.
Thực thể tổng quát
Có hai loại thực thể tổng quát đó là thực thể tổng quát nội và thực thể tổng quát ngoại.
Thực thể tổng quát nội
Thực thể tổng quát nội là thực thể được định nghĩa ngay trên DTD của tài liệu XML. Chúng ta định nghĩa theo cú pháp sau:
<!ENTITY entity-name “entity-value” >
Ví dụ:
<?xml version="1.0"?>
<!DOCTYPE attributes [
<!ELEMENT attributes (#PCDATA)>
<!ATTLIST attribute aaa CDATA #REQUIRED>
<!ENTITY out-text “TT CN PM”>
]>
<attributes aaa="C" >&out-text;</attributes>
Đối với thực thể này chúng ta cũng có thể định nghĩa các thực thể tham chiếu lồng nhau.
Ví dụ:
<!ENTITY name “Open source software”>
<!ENTITY name-group “&name; Group”>
Tuy nhiên chúng ta không thể đảo ngược lại: <!ENTITY name-group “&name; Group”> <!ENTITY name “Open source software”>.
Thực thể tổng quát ngoại
Thực thể tổng quát ngoại là thực thể được định nghĩa và tham chiếu từ một nguồn bên ngoài, nó được định nghĩa theo 1 trong 2 cú pháp sau:
<!ENTITY entity-name SYSTEM "URI/URL">
Hoặc:
<!ENTITY entity-name PUBLIC FPI "URI/URL">
Trong đó:
- FPI: đã được đề cập đến trong phần trước.
- URI/URL: là địa chỉ đến nguồn dữ liệu cần gán cho entity-name.
Ví dụ:
<?xml version="1.0"?>
<!DOCTYPE author [
<!ELEMENT author (#PCDATA)>
<!ATTLIST author CR CDATA #REQUIRED>
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities/entities.xml">
<!ENTITY copyright SYSTEM "copyright.txt">
]>
<author CR="C" >& writer; ©right; </author>
Chú ý: Chúng ta không thể dùng tham chiếu thực thể tổng quát ngay trong bản thân các khai báo DTD.