Document Type Definition – Định nghĩa kiểu tài liệu
- 16-06-2023
- Toanngo92
- 0 Comments
Mục lục
Định nghĩa DTD
Định nghĩa loại tài liệu (DTD) là một tài liệu không phải XML được tạo thành từ các khai báo phần tử, thuộc tính và thực thể. Các phần tử, thuộc tính và thực thể được xác định thuộc về (các) tài liệu XML mà DTD được xác định.
DTD giúp các trình phân tích cú pháp XML xác thực tài liệu XML. Nó cũng giúp tác giả đặt giá trị mặc định cho thuộc tính phần tử. Cấu trúc cây của tài liệu có thể được xác định dựa trên DTD.
Ghi chú:
Cấu trúc cây
Biểu diễn phân cấp của một tài liệu XML, phần tử gốc của nó, các phần tử khác, các thực thể, v.v.
Cấu trúc này được hiểu theo khái niệm là cấu trúc cây của tài liệu.XML Parsers – Trình phân tích cú pháp XML
Trình phân tích cú pháp XML là một chương trình phần mềm hoặc tập hợp các chương trình phân tích cú pháp các tài liệu XML cho cấu trúc của nó. Trình phân tích cú pháp XML cũng có khả năng xác thực các tệp XML tùy thuộc vào DTD.
Vai trò của DTD
Việc XML cho phép người dùng xác định thẻ của riêng họ là một trong những lợi thế lớn nhất của nó. Tuy nhiên, nó cũng dẫn đến một vấn đề thực sự. Những người làm việc trên các phần của cùng một tài liệu XML đôi khi sử dụng các thẻ giống nhau cho các mục đích khác nhau và vào những thời điểm khác, sử dụng các thẻ khác nhau cho cùng một mục đích. Đôi khi, cùng một yếu tố sở hữu hoặc thể hiện các thuộc tính khác nhau. Một số loại tiêu chuẩn hóa các yếu tố và thuộc tính là cần thiết.
Vì lí do đó nên cần DTD. Một DTD có thể xác định tất cả các kết hợp và trình tự có thể có cho các phần tử được sử dụng trong tài liệu XML cùng với các thuộc tính và giá trị được chấp nhận của chúng.
DTD so với DOCTYPE
Sự khác biệt giữa Định nghĩa loại tài liệu (DTD) và khai báo loại tài liệu (DOCTYPE) có thể được lấy từ bảng dưới:
Thuộc tính | Document Type Definition | Document Type Declaration |
Định nghĩa | Danh sách các phần tử hợp lệ, thuộc tính và khai báo thực thể cho một tài liệu XML | Khai báo về DTD mà tài liệu XML tuân thủ. |
Viết tắt | DTD | DOCTYPE |
Vị trí | Trong khai báo DOCTYPE hoặc một tệp bên ngoài | Bên trong prolog tài liệu XML |
Cú pháp | <!ELEMENT element-name (element-content)> … <!ENTITY entity-name “entity-value”> … <!DOCTYPE name_of_root_document SYSTEM “URL of the external DTD subset”> | <!ATTLIST element-name attribute-name attribute-type default- value> Hoặc <!DOCTYPE name_of_root_element [internal DTD subset ]> |
Kiểu ngôn ngữ | Non XML | XML |
Biến thể | Trình bày trong DOCTYPE (DTD nội bộ) hoặc trong tài liệu bên ngoài (DTD bên ngoài) | Khai báo DTD bên trong hoặc bên ngoài |
Phụ thuộc | Chỉ hữu ích nếu được khai báo bằng khai báo DOCTYPE | Chỉ hữu ích nếu nó có DTD để xác định |
Sự khác biệt giữa hai là rõ ràng trên. Khai báo DOCTYPE rất quan trọng để DTD hoạt động và nếu không có DTD, khai báo DOCTYPE sẽ trở nên vô hiệu,
Các khai báo DOCTYPE có thể khai báo các DTD trong chính chúng hoặc tham chiếu các DTD có trong các tài liệu bên ngoài. Tùy thuộc vào một trong hai, DTD có thể được gọi là bên trong hoặc bên ngoài tương ứng.
Ví dụ sau cho thấy cách khai báo một DTD trong một khai báo DOCTYPE.
Ngoài ra, ví dụ sau hiển thị cùng một DTD được hiển thị trong ví dụ trước nhưng ở dạng DTD bên ngoài.
DTD được khai báo trong một tệp riêng Mobile.dtd. Khai báo DOCTYPE trong tệp XML đề cập đến nó bằng cách sử dụng từ khóa SYSTEM
Hạn chế của DTD
Mục đích của DTD là tạo thuận lợi cho việc xác thực. Thực tế này làm cho DTD trở nên phổ biến và thiết yếu. Tuy nhiên, DTD có những hạn chế của riêng mình. Đó là:
- Các DTD xác thực tài liệu XML nhưng bản thân chúng không phải là tài liệu XML. Một trong những ưu điểm lớn nhất của XML là khả năng mở rộng của nó. Tuy nhiên, khả năng mở rộng của DTD không tốt.
- Các DTD có thể ở bên ngoài hoặc bên trong khác tùy thuộc vào khai báo DOCTYPE của chúng. Bất chấp những điều khoản như vậy, mọi tài liệu XML chỉ có thể có một DTD để tuân theo. Điều này hạn chế lợi thế của việc có cả DTD bên trong và bên ngoài.
- DTD không tuân theo các xu hướng mới nhất như hướng đối tượng, kế thừa, v.v. Điều này đặt chúng ở phía sau các ngôn ngữ lập trình được sử dụng rộng rãi và sở thích của lập trình viên.
- Tài liệu XML có thể sử dụng nhiều namespace. Để sử dụng một namespace, các tài liệu XML yêu cầu namespace được khai báo trong DTD của nó. Tuy nhiên, DTD không hỗ trợ nhiều namespace. Điều này đánh bại lợi thế của việc có thể khai báo nhiều namespace.
- DTD chỉ hỗ trợ một loại dữ liệu, chuỗi văn bản. Đây là một trong những nhược điểm lớn nhất của nó tùy thuộc vào số lượng ứng dụng mà XML đang được sử dụng ngày nay.
- Khả năng xác định các DTD để chuẩn hóa các tài liệu XML chắc chắn là một trong những nguyên lý lớn nhất của DTD.
- Tuy nhiên, điều này đang tỏ ra bất lực với việc các DTD bên trong có thể ghi đè lên các DTD bên ngoài. Hàng giờ nỗ lực tạo ra các DTD hiệu quả có thể bị hủy hoại bởi các DTD nội bộ độc hại. Do đó, khía cạnh bảo mật của DTD rất đáng nghi ngờ
Làm việc với DTD
Cấu trúc của DTD
Một cấu trúc DTD điển hình bao gồm ba khối sau:
- Khai báo phần tử
- Khai báo thuộc tính
- Khai báo thực thể
Mỗi khai báo phần tử chỉ định tên của phần tử và nội dung mà phần tử đó có thể chứa. Mỗi khai báo thuộc tính chỉ định phần tử sở hữu thuộc tính, tên thuộc tính, loại và giá trị mặc định của nó (nếu có). Mỗi khai báo thực thể chỉ định tên của thực thể và giá trị hoặc vị trí giá trị của thực thể đó.
Các nhóm khai báo phần tử, thuộc tính và thực thể này tạo thành ba khối của DTD tương ứng có thể được khai báo theo bất kỳ trình tự nào.
Tạo DTD nội bộ
Tạo DTD là một quá trình sáu bước đơn giản. Các bước này có thể được liệt kê như sau:
- Khai báo tất cả các phần tử có thể
- Chỉ định phần tử con được phép nếu có
- Đặt thứ tự các phần tử phải xuất hiện
- Khai báo tất cả các thuộc tính phần tử có thể có
- Đặt kiểu và giá trị dữ liệu thuộc tính
- Khai báo tất cả các thực thể có thể
Bước 1 đến 3 xử lý khai báo phần tử, bước 4 và 5 với khai báo thuộc tính và bước 6 với khai báo thực thể. Điều này rõ ràng phù hợp với cấu trúc của một DTD.
Cú pháp:
<!ELEMENT element-name (element-content)>
...
<!ATTLIST element-name attribute-name attribute-type default-value>
...
<!ENTITY entity-name "entity-value">
Ví dụ đoạn code mô tả internal DTD
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE Mobile [
<!ELEMENT Mobile (Company, Model, Price, Accessories)>
<!ELEMENT Company (#PCDATA)>
<!ELEMENT Model (#PCDATA)>
<!ATTLIST Model Type CDATA "Camera">
<!ATTLIST Model SKU CDATA "ABC">
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Accessories (Accessory+)>
<!ELEMENT Accessory (#PCDATA)>
<!ENTITY CH "Charger">
<!ENTITY HP "Headphone">
<!ENTITY USB "USB Cable">
]>
<Mobile>
<Company>Apple</Company>
<Model Type="Camera">iPhone 6</Model>
<Price>60000</Price>
<Accessories>
<Accessory>&CH;</Accessory>
<Accessory>&HP;</Accessory>
<Accessory>&USB;</Accessory>
</Accessories>
</Mobile>
Khai báo DOCTYPE
Khai báo loại tài liệu tuyên bố rằng tệp XML chứa nó tuân theo một DTD nhất định.
Khai báo cũng chỉ định tên của DTD đó và nội dung hoặc vị trí của nó.
Được đặt trong phần mở đầu của tài liệu XML, một khai báo DOCTYPE bắt đầu bằng <!DOCTYPE và kết thúc bằng dấu >. Ở giữa là tên của phần tử gốc, theo sau là một cặp dấu ngoặc vuông chứa chính DTD hoặc bởi từ khóa SYSTEM và một URL chỉ định nơi có thể tìm thấy DTD.
Nếu không có khai báo loại tài liệu, DTD không khác gì văn bản thuần túy.
Cú pháp:
<!DOCTYPE name_of_root_element [ internal DTD subset ]>
Hoặc
<!DOCTYPE name_of_root_element SYSTEM "URL of the external DTD subset" >
Các loại DTD
Các khai báo DOCTYPE có hai dạng cú pháp cơ bản. Tùy thuộc vào cú pháp khai báo loại tài liệu được sử dụng, DTD có thể được phân loại thành DTD nội bộ hoặc DTD bên ngoài.
DTD nội bộ
Các DTD bên trong được xác định đặc tính bởi sự hiện diện của DTD trong chính khai báo loại tài liệu. Khai báo loại tài liệu bao gồm tên DTD theo sau là DTD được đặt trong dấu ngoặc vuông.
DTD bên ngoài
Các DTD bên ngoài được xác định đặc tính bởi sự hiện diện của đường dẫn địa chỉ DTD trong khai báo loại tài liệu. Khai báo loại tài liệu bao gồm tên DTD theo sau là từ khóa SYSTEM, sau đó là địa chỉ của tài liệu DTD.
Tài liệu XML hợp lệ
Tài liệu XML chuẩn định dạng
Để một tài liệu XML thực thi đúng cách, nó phải được định dạng tốt. Một tài liệu XML được định dạng tốt tuân thủ các quy tắc cú pháp XML cơ bản. World Wide Web Consortium trong thông số kỹ thuật của mình, tuyên bố rằng các tài liệu XML có lỗi không được xử lý bởi bất kỳ chương trình nào. Các quy tắc cú pháp XML cơ bản như sau:
- Các phần tử bổ sung phải được bao quanh bởi phần tử gốc
- Các phần tử phải có thẻ đóng
- Alltags phải phân biệt chữ hoa chữ thường
- Các nguyên tố phải được lồng đúng cách
- Các giá trị thuộc tính phải luôn được trích dẫn
Tài liệu XML hợp lệ là một tài liệu XML được định dạng tốt tuân theo DTD của nó. Tính hợp lệ của một tài liệu XML được xác định bằng cách kiểm tra nó với DTD của nó. Sau khi đã xác nhận rằng các thành phần Được sử dụng trong tài liệu XML tuân thủ các khai báo trong DTD, tài liệu XML được định dạng tốt có thể được gọi là tài liệu XML hợp lệ.
Tính hợp lệ của tài liệu XML đóng một vai trò quan trọng trong tất cả các ứng dụng XML. Có thể là tạo các phần mô-đun của mã hoặc trao đổi dữ liệu hoặc xử lý dữ liệu được truyền hoặc truy cập cơ sở dữ liệu, v.v., tính hợp lệ của tài liệu XML là một tính năng được đề xuất. Mã sau minh họa một tài liệu XML hợp lệ:
Kiểm tra tính hợp lệ của XML
Tính hợp lệ là một đặc điểm mong muốn, cần thiết để có thể xác thực các tài liệu XML sau khi chúng được tạo. Tính hợp lệ của tài liệu XML có thể được xác định bằng cách sử dụng trình phân tích cú pháp xác thực chẳng hạn như Trình phân tích cú pháp MSXML 6.0.
MSXML cho phép trình duyệt Internet Explorer (IE) xác thực mã. Khi mã được hiển thị trong IE, nhấp chuột phải vào mã để hiển thị menu ngữ cảnh. Menu cung cấp tùy chọn xác thực mã. Khi lựa chọn, IE sẽ xác thực nội bộ mã dựa trên DTD của mã.
Hình ảnh đầu tiên của hình hiển thị kết quả xác thực của tệp mobile.xml hợp lệ
Hình ảnh thứ hai của hình hiển thị kết quả xác thực sau khi xóa phần tử chữ ký khỏi DTD của tài liệu.
Khai báo
Khai báo 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ử. Một khai báo phần tử có cú pháp như 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ỉ có dữ liệu ký tự được phân tích cú pháp. Bất kỳ Nội dung nào, Trẻ em, Chỉ một lần xuất hiện, Một lần xuất hiện tối thiểu, Không có hoặc nhiều lần xuất hiện, Không hoặc một lần xuất hiện, Một trong hai/hoặc Nội dung hoặc Nội dung hỗn hợp.
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:
Giá trị | Mô tả | Cú pháp | Ví dụ |
Không có nội dung | Các phần tử này trống và không có 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ỳ 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> |
Con (children) | Các phần tử có một hoặc nhiều phần tử con được định nghĩa với tên của các phần tử con bên trong dấu ngoặc đơn theo sau là các khai báo của chúng theo cùng một thứ tự | <!ELEMENT element-name (child-element-name)> hoặc <!ELEMENT element-name (child-element-name,child-element-name,child-element-name,…)> | <!ELEMENT Mail (To,From,Date,Time,Cc,Bcc,Subject,Message,Signature)> <!ELEMENT To (#PCDATA)> … … |
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 trình bày trong bảng:
Giá trị | Mô tả | Cú pháp | Ví dụ |
Chỉ một lần xuất hiện | Các phần tử con chỉ được khai báo một lần trong 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)> |
Xuất hiện tối thiểu một lần | Tên phần tử con xuất hiện 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)> |
Xuất hiện không hoặc nhiều lần | Tên phần tử con xuất hiện kèm theo dấu “*” bên trong dấu ngoặc đơn có thể 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 | Tên phần tử con xuất hiện kèm theo ‘?’ bên trong dấu ngoặc đơn có thể 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?)> |
Nội dung Hoặc/Hoặc | 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-element-name|child-element-name),child-element-name,…)> | <!ELEMENT Mail (To*,From+,Date+,Time+,(Cc|Bcc),Subject+,Message+,Signature?)> |
Nội dung trộn lẫn | 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 con, v.v. | <!ELEMENT element-name (type|child-name|…)> | <!ELEMENT Mail (To|From|Date|Time|Cc|Bcc|Subject|Message|Signature)> |
Khai báo thuộc tính
Cú pháp:
<!ATTLIST element-name attribute-name attribute-type default-value>
Trong đó:
- element-name: phần tử mà thuộc tính thuộc về.
- attribute-name: tên của thuộc tính,
- attribute-type: loại dữ liệu mà thuộc tính có thể chấp nhận,
- default-value: giá trị mặc định cho thuộc tính.
Loại thuộc tính có thể có các giá trị như trong bảng:
Xác định giá trị thuộc tính
Thuộc tính-giá trị trong khai báo DTD có thể có các giá trị như trong bảng:
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ê (Enumerated Attribute Values)
<!ATTLIST element-name attribute-name (en1|en2|..) default-value>
<!ATTLIST payment type (check|cash) "cash">
Ví dụ:
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 trong toàn bộ tài liệu thay cho giá trị của nó.
Các thực thể có thể được phân loại thành các thực thể tham số và các thực thể chung. Các thực thể tham số đã được thảo luận trước đó.
Các thực thể chung (general entities) được phân loại thêm như sau:
- Character (Ký tự)
- Mixed Content (Nội dung hỗn hợp)
- Unparsed (Chưa phân tích cú pháp)
Các thực thể ký tự là các 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ể ký tự được phân loại thêm như sau:
- Predefined (Được xác định trước)
- Numbered (Đánh số)
- Name (Tên)
XML có một tập hợp các thực thể được xác định trước để tạo thuận lợi cho việc sử dụng các ký tự như <, >, &”,’, vì các ký tự này được XML sử dụng trong các thẻ của nó.
Các thực thể được xác định trước (Predefined entities) và tham chiếu của chúng được hiển thị trong bảng:
Các thực thể được đánh số (Numbered) là các thực thể sử dụng 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. 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 như thế này: õ. Các số cũng có thể được chỉ định ở dạng thập lục phân, nếu cần, sử dụng cú pháp sau:
&#x(reference number in hexadecimal) ;
Thực thể tên (Name) giống như thực thể được đánh số, ngoại trừ các số được thay thế bằng tên mô tả cho ký tự.
Thực thể nội dung hỗn hợp (mixed content) là 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ế. Ví dụ: thử nghiệm thực thể cũng có thể có giá trị thay thế là “trial” hoặc “<trial>Hi!</trial>”. Văn bản “Hi!” sẽ được thay thế bằng tham chiếu thực thể và sẽ đóng vai trò là phần tử trial.
Các thực thể chưa được phân tích cú pháp (Unparsed) 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 tệp hình ảnh ora 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 sẽ duyệt 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ể đó. Trình phân tích cú pháp sau đó tiếp tục phân tích cú pháp từ văn bản đã thay thế. Thực thể tham chiếu trong văn bản 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;
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 các khai báo thực thể Bên trong và Bên ngoài, hai loại khai báo thực thể cơ bản được sử dụng trong XML.
Khai báo thực thể nội bộ
Trong khai báo thực thể nội bộ, giá trị thực thể được đề cập rõ ràng trong khai báo thực thể.
Cú pháp:
<!ENTITY entity-name "entity-value">
Ví dụ:
Khai báo thực thể bên ngoài
Trong khai báo thực thể Extemal, 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.
<!ENTITY entity-name SYSTEM "URI/URL">
Ví dụ:
Bài tập
Yêu cầu:
Bài 1: Hãy tạo một tệp tin XML sử dụng DTD để định nghĩa cấu trúc danh sách 5 sản phẩm. Mỗi sản phẩm cần chứa 5 đặc tả bên trong, bao gồm tên sản phẩm, mô tả, giá, số lượng, và ngày sản xuất.
Bài 2: (Nâng cao) Tạo tệp PHP để tương tác với CSDL, trong CSDL lưu trữ bảng product gồm các cột mô tả đặc tả sản phẩm, sau đó từ tệp PHP generate ra nội dung XML dựa theo danh sách sản phẩm trên CSDL
Bài 3:
Dựa vào cấu trúc XML sau , định nghĩa cấu trúc DTD tương ứng:
<?xml version="1.0"?>
<!DOCTYPE DOCUMENT SYSTEM "mydtd.dtd">
<DOCUMENT>
<CUSTOMER TYPE = "Good">
<NAME>
<LAST_NAME> aaa </LAST_NAME>
<FIRST_NAME> bbb </FIRST_NAME>
</NAME>
<DATE> 1/1/03 </DATE>
<ORDERS class="SanPham">
<ITEM>
<PRODUCT>
<PRODUCT_ID>12</PRODUCT_ID>
</PRODUCT>
<NUMBER>25</NUMBER>
<PRICE>20</PRICE>
</ITEM>
<ITEM>
<PRODUCT>Tomatoes</PRODUCT>
<NUMBER>25</NUMBER>
<PRICE>3</PRICE>
</ITEM>
</ORDERS>
</CUSTOMER>
</DOCUMENT>
Bài 4:
Dựa vào cấu trúc XML sau , định nghĩa cấu trúc DTD tương ứng:
<?xml version="1.0"?> <!DOCTYPE DOCUMENT SYSTEM "document_2.dtd"> <DOCUMENT> <CUSTOMER TYPE = "Good"> <NAME> <LAST_NAME> aaa </LAST_NAME> <FIRST_NAME> bbb </FIRST_NAME> </NAME> <DATE> 31-01-2021 </DATE> <ORDERS class="SanPham" discount=”yes”> <ITEM> <PRODUCT id=”12”>Oranges</PRODUCT> <NUMBER>2</NUMBER> <PRICE>15</PRICE> </ITEM> <ITEM> <PRODUCT id=”23”>Tomatoes</PRODUCT> <NUMBER>5</NUMBER> <PRICE>3</PRICE> </ITEM> </ORDERS> </CUSTOMER> </DOCUMENT>
Bài 5:
Cho phiếu điểm của một học sinh gồm các thông tin sau: - Thông tin của học sinh: Họ và tên, Lớp, Địa chỉ, Giới tính, Ngày sinh - Bảng điểm gồm nhiều bản ghi, mỗi bản ghi của bảng có các thông tin: Tên môn, Điểm học kỳ 1, Điểm học kỳ 2, Điểm TB cả năm. Hãy đặc tả nội dung và cấu trúc (theo DTD) của tài liệu XML tương ứng với phiếu điểm này.