Khai báo và định nghĩa kiểu dữ liệu DTD

Một phần của tài liệu Luận văn tìm hiểu WINDOWS SHAREPOINT SERVICES 3 0 (Trang 39 - 44)

Ta dùng thẻ khai báo <!DOCTYPE> để bắt đầu kiểu định nghĩa tư liệu cho các phần tử XML. Có nhiều mẫu khai báo mà chúng ta có thể sử dụng :

<!DOCTYPE rootname[DTD]> <!DOCTYPE rootname SYSTEM URL>

<!DOCTYPE rootname PUBLIC identifier URL>

<!DOCTYPE rootname PUBLIC identifier URL [DTD]>

Phần khai báo định nghĩa kiểu tư liệu thường đặt ở phần khởi đầu của tài liệu XML. Ví dụ chúng ta khai báo kiểu tư liệu trong hello.xml như sau

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

]>

<Documen>

</Document>

Tiếp đến ta định nghĩa kiểu tư liệu cho phần tử thẻ bên trong cặp dấu vuông [] ở đây các phần tửđược định nghĩa đều nằm trọn vẹn bên trong tài liệu, cho nên chúng được gọi là là các phần tửđược định nghĩa nội (internal). Lưu ý là chỉ thị standalone=”yes” cho biết tài liệu XML của ta không phụ thuộc vào các tài liệu khác.

<?xmlversion="1.0"encoding="utf-8"standalone="yes" ?> <?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

<!ELEMENTDocument(Greeting,Message)> <!ELEMENTGreeting(#PCDATA)>

<!ELEMENTMessage(#PCDATA)> ]>

1.Khai báo <!ELEMENT>

Khai báo <!ELEMENT> được dùng để bắt đầu định nghĩa kiểu tư liệu DTD cho một phần tử. Cú pháp khai báo:

<!ELEMENT Name Content_Model>

Trong đó Name là tên của phần tử muốn định nghĩa; Content_Model có thể là EMPTY hay ANY hoặc trộn lẫn cả hai nội dung.

Ví dụ sau cho ta thấy cách sử dụng định nghĩa DTD cho các phần tử thẻ. Các biểu thức diễn đạt dưới đây còn gọi là tham chiếu thực thể theo tham số.

<!ELEMENTDocument(Greeting,Message)>

<!ELEMENTGreeting(#PCDATA)>

<!ELEMENTMessage(#PCDATA)>

<!ELEMENTHR EMPTY>

<!ELEMENTDocuments ANY>

Ở ví dụ này chúng ta khai báo phần tử Document theo mô hình nội dung (Content_Model) lưu trữ là ANY vậy ANY là gì?

2. Any

Khi khai báo một phần tử mang mô hình nội dung ANY có nghĩa là phần tử

khai báo có thể chứa bất kỳ nội dung nào bạn định nghĩa kể cả mọi phần tử khác. Nếu một phần tử được khai báo là ANY thì trình phân tích sẽ không kiểm tra cú pháp xác định tính hợp lệ của nội dung phần tử. Lý do là phần tử có thể chứa mọi kiểu cho phép,không cần kiểm tra chi tiết nội dung bên trong của phần tử. Để cụ

thể hơn một phần tử có thể giới hạn nội dung mà nó thể hiện thay vì ANY. Chúng ta có thể cụ thể hóa nội dung của phần tử thông qua khai báo danh sách các phần tử con.

3. Danh sách các phần tử con

Chúng ta khai báo các phần tử con trong cặp ngoặc đơn của tư liệu DTD. Ví dụ:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

<!ELEMENTDocument(Student)*> ]>

<Document> </Document>

Dấu * cho biết Document có thể chứa số phần tử Student không giới hạn. Tài liệu khi đó có thể thêm vào phần tử thẻ <Student> như sau:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

<!ELEMENTDocument(Student)*> ]>

<Document> <Student> </Student> </Document>

Như ví dụ trên ta thấy tài liệu vẫn chưa hợp lệ do ta chưa khai báo phần tử Student. Chúng ta cần khai báo phần tử Student sẽ chứa kiểu dữ liệu gì.

Ví dụ:

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

<!ELEMENTDocument(Student)*> <!ELEMENTStudent(#PCDATA)> ]>

<Document>

<Student></Student> </Document>

4. Làm việc với nhiều phần tử con

Khi muốn khai báo một phần tử con có khả năng chứa nhiều phần tử con khác, thông thường ta phải lặp lại khai báo <!ELEMENT>. Ví dụ trong tài liệu của ta thẻ gốc <Document> chứa hai phần tử Student trong khi khai báo <!DOCTYPE> chỉ định nghĩa có một trình phần tích sẽ báo lỗi.

Ví dụ:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

<!ELEMENTDocument(Student)> <!ELEMENTStudent(#PCDATA)> ]>

<Document>

<Student> Lý Như Ý</Student> <Student>Hồ Thạnh Trung</Student>

</Document>

Vậy để khắc phục vấn đề này chúng ta làm như thế nào ?

Chúng ta sử dụng các ký tựđại diện cho phép làm việc khai báo và sử dụng nhiều phần tử con. Như chúng ta thấy ở ví dụ trên ta có sử dụng dấu * yêu cầu cho phép Document chứa được mọi phần tử Student.

<!ELEMENTDocument(Student)*>

Dưới đây là một số nguyên tắc sử dụng ký tựđại diện có thể áp dụng khi khai báo và định nghĩa DTD.

Giả sử a và b là hai phần tử con muốn khai báo và định nghĩa ta có cú pháp như

bảng 3-1 sau:

a* Không có hoặc có nhiều phần tử con giống nhau a+ Có một hoặc nhiều phần tử con giống nhau a? Phần tử a hoặc không có phần tử nào cả

a,b Phần tử a tiếp đến là phần tử b a|b Phần tử a hoặc b nhưng không được cả hai

(expression) Tập các phần tử expression trong cặp ngoặc sẽ ảnh hưởng bởi ký tựđại diện *,+ hoặc ?

Bảng 3-1 Những ký tựđại diện có thể áp dụng

Một phần của tài liệu Luận văn tìm hiểu WINDOWS SHAREPOINT SERVICES 3 0 (Trang 39 - 44)