XML: Bài 3.4. Khai báo

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Trong bài học cuối cùng này, Khai báo, bạn sẽ học cách:

  • Giải thích cách khai báo các phần tử.
  • Giải thích cách khai báo thuộc tính.
  • Mô tả khai báo thực thể trong DTD.

3.4.1. Khai báo các phần tử

Trong DTD, các phần tử XML được khai báo bằng một khai báo phần tử. Khai báo phần tử có cú pháp sau:

Cú pháp:

<!ELEMENT element-name element-rule>

trong đó,

ELEMENT là từ khóa,

element-name là tên của phần tử,

element-rule có thể là một trong những điều sau: Không có nội dung, chỉ dữ liệu ký tự được phân tích cú pháp. Bất kỳ nội dung nào, phần tử con, chỉ một lần xuất hiện, tối thiểu một lần xuất hiện, không hoặc nhiều lần xuất hiện, không hoặc một lần, nội dung hoặc nội dung hỗn hợp.

Hình 3.6 mô tả một ví dụ về khai báo phần tử.

Ví dụ về khai báo phần tử

Hình 3.6: Khai báo phần tử

Một số cú pháp và khai báo cho các tùy chọn quy tắc phần tử được hiển thị trong bảng 3.2.

Giá trị

Mô tả

Cú pháp

Thí dụ

Không có nội dung

Các phần tử này trống và không chấp nhận dữ liệu.

<!ELEMENT

element-name EMPTY>

<!ELEMENT

Signature EMPTY>

Chỉ dữ liệu ký tự được phân tích cú pháp

Các phần tử chứa dữ liệu ký tự cần được phân tích cú pháp.

<!ELEMENT

element-name (#PCDATA)>

<!ELEMENT

Signature (#PCDATA)>

Mọi nội dung Các phần tử có thể chứa bất kỳ kết hợp dữ liệu nào có thể được phân tích cú pháp.

<!ELEMENT

element-name ANY>

<!ELEMENT

Signature ANY>

Phần tử con Các phần tử có một hoặc nhiều phần tử con được xác định với tên của các phần tử con bên trong dấu ngoặc đơn, theo sau là khai báo của chúng theo thứ tự.

<!ELEMENT

element-name (child-element- name)>

hoặc

<!ELEMENT element- name (child- element-name, child-element- name,.     )>

<!ELEMENT Mail

(To, From, Date, Time, Cc, Bcc, Subject, Message, Signature)>

<!ELEMENT To (#PCDATA)>

Bảng 3.2: Các tùy chọn quy tắc phần tử

Các khai báo khác và cú pháp có thể được cung cấp cho các tùy chọn quy tắc phần tử được thể hiện trong bảng 3.3.

Giá trị

Mô tả

Cú pháp

Thí dụ

Chỉ một lần xuất hiện

Các phần tử có con được khai báo chỉ một lần trong dấu ngoặc đơn chỉ xuất hiện một lần trong tài liệu XML.

<!ELEMENT

element-name (child-name)>

<!ELEMENT Mail

(To, From, Date, Time, Cc, Bcc, Subject, Message, Signature)>

Tối thiểu một lần xuất hiện

Tên phần tử con kèm theo dấu '+' bên trong dấu ngoặc đơn phải xuất hiện ít nhất một lần trong tài liệu XML.

<!ELEMENT

element-name (child-name+)>

<!ELEMENT

Mail (To+, From+, Date+, Time+, Cc, Bcc, Subject+, Message+, Signature)>

Không có hoặc nhiều lần xuất hiện

Các phần tử có tên con kèm theo dấu '*' bên trong dấu ngoặc đơn có thể xuất hiện hoặc không thể xuất hiện trong tài liệu XML.

<!ELEMENT

element-name (child-name*)>

<!ELEMENT

Mail (To*, From+, Date+, Time+, Cc, Bcc, Subject+, Message+, Signature)>

Không hoặc một lần xuất hiện Các phần tử có tên con kèm theo dấu '?' dấu bên trong dấu ngoặc đơn có thể bị bỏ qua hoặc chỉ xuất hiện một lần trong tài liệu XML.

<!ELEMENT

element-name (child-name?)>

<!ELEMENT

Mail (To*, From+, Date+, Time+, Cc, Bcc, Subject+, Message+, Signature?)>

Hoặc / Hoặc Nội dung Các phần tử có thể có một trong hai hoặc nhiều phần tử con bằng cách chỉ định chúng trong dấu ngoặc đơn được phân tách bằng '|'. <!ELEMENT element- name (child-name, (child-name|child- name)…)>

<!ELEMENT Mail

(To, From, Date, Time, (Cc|Bcc), Subject, Message, Signature)>

Nội dung hỗn hợp Các phần tử có thể được khai báo để chấp nhận nội dung hỗn hợp, kiểu dữ liệu hoặc phần tử con, v.v. <!ELEMENT element- name (type|child- name|…)>

<!ELEMENT Mail

(To|From|Date|T ime|Cc|Bcc|Subj ect|Message|Sig nature)>

Bảng 3.3: Các tùy chọn quy tắc phần tử khác

3.4.2 Khai báo các thuộc tính

Một khai báo thuộc tính có cú pháp sau:

Cú pháp:

<!ATTLIST element-name attribute-name attribute-type default-value>

trong đó,

element-name là phần tử mà thuộc tính đó thuộc về,

attribute-name là tên của thuộc tính,

attribute-type là loại dữ liệu mà thuộc tính có thể chấp nhận

default-value là giá trị mặc định cho thuộc tính.

Kiểu thuộc tính có thể có các giá trị như trong bảng 3.4.

Giá trị

Mô tả

PCDATA

Dữ liệu ký tự được phân tích cú pháp

CDATA

Dữ liệu ký tự

(en1 | en2 | ...)

Danh sách liệt kê

ID

Một id duy nhất

IDREF

Id của một phần tử khác

IDREFS

Danh sách các id khác

NMTOKEN

Tên XML hợp lệ

NMTOKENS

Danh sách các tên XML hợp lệ

ENTITY

Một thực thể

ENTITIES

Danh sách các thực thể

NOTATION

Tên của một ký hiệu

xml:

Giá trị xml được xác định trước

Bảng 3.4: Loại thuộc tính

3.4.3. Chỉ định các giá trị thuộc tính

attribute-value trong khai báo DTD có thể có các giá trị như trong bảng 3.5.

Giá trị

Mô tả

value

Giá trị mặc định

#REQUIRED

Giá trị phải được bao gồm

#IMPLIED

Giá trị không phải được bao gồm

#FIXED

Giá trị là cố định

en1 | en2 | ...

Các giá trị enum được liệt kê

Bảng 3.5: attribute-value

Cú pháp :

Ø ​#IMPLIED

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

Ø #REQUIRED

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

Ø   #FIXED

<!ATTLIST element-name attribute-name attribute-type #FIXED "value">

Ø Giá trị thuộc tính được liệt kê

<!ATTLIST element-name attribute-name (en1|en2|..) default-value>

<!ATTLIST payment type (check|cash) "cash">

Mỗi đoạn mã sau đây thể hiện các giá trị thuộc tính.

Đoạn mã:

Ø Giá trị mặc định

<!ATTLIST Model Type CDATA "Camera">

Ø #IMPLIED

<!ATTLIST Model Type CDATA "Camera" #IMPLIED>

Ø #REQUIRED

<!ATTLIST Model Type CDATA #REQUIRED>

Ø #FIXED

<!ATTLIST Model Type CDATA #FIXED "Camera">

Ø Giá trị thuộc tính được liệt kê

<!ATTLIST Model Type (Camera|Bluetooth) "Camera">

3.4.4. Các thực thể trong DTD

Một thực thể trong XML là một trình giữ chỗ bao gồm tên và giá trị. Nó được khai báo một lần và sau đó được sử dụng nhiều lần thông qua tài liệu thay cho giá trị của nó.

Thực thể có thể được phân loại thành thực thể tham số và thực thể chung. Các thực thể tham số đã được thảo luận ở phần trước.

Các thực thể chung còn được phân loại thành:

  • Character
  • Mixed Content
  • Unparsed

Thực thể Character là thực thể có một ký tự duy nhất làm giá trị thay thế của chúng. Các thực thể này được phân loại thêm thành:

  • Xác định trước
  • Được đánh số
  • Tên

XML có một tập hợp các thực thể được xác định trước để tạo điều kiện thuận lợi cho việc sử dụng các ký tự như <,>, &, ", ', vì chúng được XML sử dụng trong các thẻ của nó.

Các thực thể xác định trước và các tham chiếu của chúng được trình bày trong bảng 3.6.

Tên thực thể

Giá trị

amp

&

apos

'

gt

lt

quot

"

Bảng 3.6: Các thực thể được xác định trước

Các thực thể được đánh số là các thực thể sử dụng một số tham chiếu ký tự, cho một ký tự từ bộ ký tự Unicode, thay cho chính ký tự đó. Các tham chiếu thực thể này có một cú pháp đặc biệt. Thay vì "&", "& #" được sử dụng thì số tham chiếu được sử dụng làm tên, theo sau là dấu chấm phẩy. Do đó, một tham chiếu thực thể được đánh số sẽ trông giống như sau: &#245;. Các số cũng có thể được chỉ định ở dạng thập lục phân nếu được yêu cầu bằng cách sử dụng cú pháp sau:

&#x (số tham chiếu trong hệ thập lục phân);

Các thực thể tên cũng giống như các thực thể được đánh số, ngoại trừ các số được thay thế bằng tên mô tả cho ký tự.

Các thực thể nội dung hỗn hợp là các thực thể chứa văn bản hoặc văn bản ngôn ngữ đánh dấu làm giá trị thay thế của chúng. Ví dụ: kiểm tra thực thể cũng có thể có "trial" hoặc "<trial>Xin chào!</trial>" làm giá trị thay thế của nó. Văn bản "<trial>Xin chào!</trial>" sẽ được thay thế bằng tham chiếu thực thể và sẽ hoạt động như một thử nghiệm phần tử.

Các thực thể chưa được phân tích cú pháp là các thực thể có dữ liệu không được phân tích cú pháp. Giá trị thay thế có thể là một hình ảnh hoặc một tệp hoặc một cái gì đó khác. Cú pháp cho một thực thể chưa được phân tích cú pháp như sau:

<!DOCTYPE name [
  <!ENTITY entity-name SYSTEM "entity-location" NDATA Notation Identifier>
]>
Từ khóa NDATA là viết tắt của dữ liệu ký hiệu và mã định danh ký hiệu chỉ định định dạng của tệp hoặc đối tượng.

Tại thời điểm xử lý, trình phân tích cú pháp XML đi qua các khai báo tài liệu. Sau đó, trình phân tích cú pháp sẽ quét tài liệu để tìm tất cả các tham chiếu thực thể. Khi trình phân tích cú pháp gặp một tham chiếu thực thể, nó sẽ thay thế tham chiếu thực thể bằng giá trị thực thể được liên kết với thực thể đó. Sau đó, trình phân tích cú pháp tiếp tục phân tích cú pháp từ văn bản được thay thế. Các tham chiếu thực thể trong văn bản được thay thế cũng được thay thế bằng cách làm như vậy.

Cú pháp:

Ø Khai báo thực thể:

<!ENTITY entity-name "entity-value">

Ø Tham chiếu thực thể:

&entity-name;

Hình 3.7 mô tả các thực thể trong DTD.

Các thực thể trong DTD

Hình 3.7: Các thực thể trong DTD

3.4.5. Các loại khai báo thực thể

Tham chiếu thực thể được sử dụng rộng rãi trong XML. Điều đó dẫn đến khai báo thực thể Bên trong và Bên ngoài, đây là hai loại khai báo thực thể cơ bản được sử dụng trong XML.

Ø Khai báo thực thể bên trong

Trong khai báo đối tượng bên trong, giá trị đối tượng được đề cập rõ ràng trong khai báo đối tượng.

Cú pháp:

<!ENTITY entity-name "entity-value">

Đoạn mã sau minh họa các thuộc tính của khai báo thực thể bên trong.

Đoạn mã:

<!DOCTYPE Mobile [
  <!ELEMENT Mobile (Company, Model, Price, Accessories)>
<!ELEMENT Company (#PCDATA)>
<!ELEMENT Model (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Accessories (#PCDATA)>
<!ATTLIST Model Type CDATA "Camera">
<!ENTITY HP "Head Phones">
<!ENTITY CH "Charger">
<!ENTITY SK "Starters Kit">
]>
<Mobile>
  <Company> Nokia </Company>
  <Model Type="Camera"> 6600 </Model>
  <Price> 9999 </Price>
  <Accessories> &HP;, &CH; and a &SK; </Accessories>
</Mobile>

Ø Khai báo thực thể bên ngoài

Trong phần Khai báo thực thể bên ngoài, một liên kết hoặc đường dẫn đến giá trị thực thể được đề cập thay cho giá trị thực thể với sự trợ giúp của từ khóa SYSTEM. Khai báo thực thể bên ngoài theo cách tương tự như khai báo DTD bên ngoài.

Cú pháp:

<!ENTITY entity-name SYSTEM "URI/URL">

Đoạn mã sau minh họa các thuộc tính của khai báo thực thể bên ngoài.

Đoạn mã:

<!DOCTYPE Mobile [
  <!ELEMENT Mobile (Company, Model, Price, Accessories)>
<!ELEMENT Company (#PCDATA)>
<!ELEMENT Model (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Accessories (#PCDATA)>
<!ATTLIST Model Type CDATA "Camera">
<!ENTITY HP SYSTEM "hp.txt">
<!ENTITY CH SYSTEM "ch.txt">
<!ENTITY SK SYSTEM "sk.txt">
]>
<Mobile>
  <Company> Nokia </Company>
  <Model Type="Camera"> 6600 </Model>
  <Price> 9999 </Price>
  <Accessories> &HP;, &CH; and a &SK; </Accessories>
</Mobile>

hp.txt
Head Phones

ch.txt Charger

sk.txt Starters Kit

Kiểm tra kiến thức 4

1. Bạn có thể khớp các mô tả khai báo phần tử với các cú pháp chính xác của chúng không?

Mô tả

Cú pháp

(A)

Phần tử có thể chứa dữ liệu ký tự nhưng để được phân tích cú pháp, trong trường hợp nó chứa các tham chiếu thực thể.

(1)

<! ELEMENT element-name (type | child-name |…)>

(B)

Phần tử có một số phần tử con chỉ xuất hiện một lần trong tài liệu XML.

(2)

<! ELEMENT element-name (child-name +)>

(C)

Phần tử có thể chấp nhận kiểu dữ liệu hoặc con, v.v.

(3)

<! ELEMENT element-name (child-name, (child- name | child-name)…)>

(D)

Phần tử con xuất hiện ít nhất một lần trong tài liệu XML.

(4)

<!ELEMENT element-name (#PCDATA)>

(E)

Phần tử có thể có một trong hai hoặc nhiều phần tử con.

(5)

<! ELEMENT element-name (child-element-name)>

2. Bạn có thể khớp các mô tả thuộc tính với giá trị chính xác của chúng không?

Mô tả

Giá trị

(A)

Tên của một ký hiệu

(1)

NMTOKEN

(B)

Giá trị xml được xác định trước

(2)

NOTATION

(C)

id của một phần tử khác

(3)

(en1 | en2 | ...)

(D)

tên XML hợp lệ

(4)

xml:

(E)

danh sách liệt kê

(5)

IDREF

3. Mã XML nào sau đây là đúng?

(A)

<!DOCTYPE Mobile [

<!ELEMENT Mobile (Company, Model, Price, Accessories)>

<!ELEMENT Company (#PCDATA)>

<!ELEMENT Model (#PCDATA)>

<!ELEMENT Price (#PCDATA)>

<!ELEMENT Accessories (#PCDATA)>

<!ATTLIST Model Type CDATA "Camera">

<!ENTITY HP "Head Phones">

<!ENTITY SK "Starters Kit">

]>

<Mobile>

<Company> Nokia </Company>

<Model Type="Camera"> 6600 </Model>

<Price> 9999 </Price>

<Accessories> &HP;, &CH; and a &SK; </Accessories>

</Mobile>

 

 

 

 

 

 

 

 

(B)

<!DOCTYPE Mobile [

<!ELEMENT Mobile (Company, Model, Price, Accessories)>

<!ELEMENT Company (#PCDATA)>

<!ELEMENT Model (#PCDATA)>

<!ELEMENT Price (#PCDATA)>

<!ELEMENT Accessories (#PCDATA)>

<!ATTLIST Model Type CDATA "Camera">

<!ENTITY HP "Head Phones">

<!ENTITY CH "Charger">

<!ENTITY SK "Starters Kit">

]>

<Mobile>

<Company> Nokia </Company>

<Model Type="Camera"> 6600 </Model>

<Price> 9999 </Price>

<Accessories> HP, CH and a SK </Accessories>

</Mobile>

(C)

<!DOCTYPE Mobile [

<!ELEMENT Mobile (Company, Model, Price, Accessories)>

<!ELEMENT Company (#PCDATA)>

<!ELEMENT Model (#PCDATA)>

<!ELEMENT Price (#PCDATA)>

<!ELEMENT Accessories (#PCDATA)>

<!ATTLIST Model Type CDATA "Camera">

<!ENTITY HP "hp.txt">

<!ENTITY CH "ch.txt">

<!ENTITY SK "sk.txt">

]>

<Mobile>

<Company> Nokia </Company>

<Model Type="Camera"> 6600 </Model>

<Price> 9999 </Price>

<Accessories> &HP;, &CH; and a &SK; </accessories>

</Mobile>
(D)

<!DOCTYPE Mobile [

<!ELEMENT Mobile (Company, Model, Price, Accessories)>

<!ELEMENT Company (#PCDATA)>

<!ELEMENT Model (#PCDATA)>

<!ELEMENT Price (#PCDATA)>

<!ELEMENT Accessories (#PCDATA)>

<!ATTLIST Model Type CDATA "Camera">

<!ENTITY HP "Head Phones">

<!ENTITY CH "Charger">

<!ENTITY SK "Starters Kit">

]>

<Mobile>

<Company> Nokia </Company>

<Model Type="Camera"> 6600 </Model>

<Price> 9999 </Price>

<Accessories> &HP;, &CH; and a &SK; </Accessories>

</Mobile>

Tóm tắt mô-đun

Trong mô-đun này, Định nghĩa Loại Tài liệu (DTD), bạn đã học về:

  1. Định nghĩa loại tài liệu: Bài học này định nghĩa các DTD và xác định sự cần thiết của các DTD.
  2. Làm việc với DTD: Bài học này nói về cấu trúc của DTD, các bước tạo DTD, khai báo DOCTYPE và loại DTD.
  3. Tài liệu XML hợp lệ: Bài học này nói về các tài liệu hợp lệ được định dạng tốt và các bước để xác định tính hợp lệ của tài liệu XML.
  4. Khai báo: Bài học này đề cập đến việc khai báo các phần tử, thuộc tính và thực thể trong DTD.
» Tiếp: Bài 4.1. Lược đồ XML
« Trước: Bài 3.3. Tài liệu XML hợp lệ
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!