Đặc tả cấu trúc XML với DTD

Có nhiều dạng khác nhau cho phép khai báo (đặc tả) cấu trúc tài liệu XML.

– Dạng 1: Khai báo tài liệu XML được lưu trữ ngay bên trong chính tài liệu đó.

<!DOCTYPE Ten_the_goc [

      Đặc tả cấu trúc nội dung các thẻ

      Đặc tả thuộc tính các thẻ

]>

– Dạng 2: Khai báo cấu trúc tài liệu XML được lưu trữ bên ngoài dưới dạng một tập tin chức đặc tả cấu trúc nội dung các thẻ, đặc tả thuộc tính các thẻ

<!DOCTYPE Ten_the_goc SYSTEM Ten_tap_tin>

Ví dụ: <!DOCTYPE DUONG_TRON SYSTEM “DUONG_TRON.dtd”>

– Dạng 3: Khai báo cấu trúc tài liệu XML đã được chuẩn hóa, có phạm vi sử dụng rộng rãi, dạng này thường được dùng với các ngôn ngữ XML chung có phạm vi áp dụng toàn cầu như MathML, VML, XHTML,…

<!DOCTYPE Ten_The_goc PUBLIC Chuoi_nhan_dang>

1. Đặc tả cấu trúc nội dung các thẻ:

Cú pháp chung đặc tả cấu trúc nội dung của một thẻ như sau

<!ELEMENT Ten_the Bieu_thuc_dac_ta_cau_truc_noi_dung >

Bieu_thuc_dac_ta_cau_truc_noi_dung có thể chỉ là một từ khóa, hoặc có thể bao gồm nhiều từ khóa khác mô tả cách bố trí, sắp xếp các thành phần con bên trong thẻ.

Với A, B là 2 thẻ con của thẻ X

      A, B –> A, B sắp xếp theo tuần tự A đến B

      A* –> A có thể lặp lại ít nhất 0 lần

      B+ –> B có thể lặp lại ít nhất 1 lần

      A? –> A có thể có hoặc không

      A|B –> có thể chọn sử dụng A hoặc B

– Dạng 1:

+ Từ khóa ANY: Thẻ có nội dung bất kì theo định chuẩn XML.

Ví dụ <!ELEMENT X ANY >

X có thể chứa nội dung bất kì. Thông thường cách khai báo này chỉ để mô tả sự tồn tại của X bên trong một thẻ khác.

+ Từ khóa EMPTY: thẻ không có nội dung

Ví dụ: <!ELEMENT PHAN_SO EMPTY >

PHAN_SO không thể có nội dung mà chỉ có thể có các thuộc tính

+ Từ khóa #PCDATA: thẻ với nội dung là chuỗi văn bản

Ví dụ: <!ELEMENT Ho_ten (#PCDATA) >

Ho_ten có nội dung là chuỗi và không thể chứa thẻ khác. Với DTD, muốn mô tả chi tiết hơn có thể dùng thẻ ghi chú.

Ví dụ: <!ELEMENT He_so (#PCDATA) >

                 <!- – He_so : A_float – ->

– Dạng 2:

+ Tuần tự: các thẻ con chỉ có thể xuất hiện 1 lần duy nhất và phải theo đúng thứ tự xuất hiện trong biểu thức. Cú pháp: <!ELEMENT Ten_the (Ten_the_1, Ten_the_2, …) >

Ý nghĩa: The_1, The_2, … phải xuất hiện một lần duy nhất theo đúng thứ tự trên

Ví dụ: <!ELEMENT DON_THUC (He_so, So_mu) >

Các thẻ bên trong có thể trùng nhau.

Ví dụ: <!ELEMENT TAM_GIAC (DIEM, DIEM, DIEM) >

Có thể sử dụng từ khóa #PCDATA trong biểu thức tuần tự (và các loại biểu thức khác)

Ví dụ: <!ELEMENT X (#PCDATA, A, #PCDATA) >

Thẻ X bao gồm 3 thành phần: thành phần thứ 1 là chuỗi văn bản, thành phần thứ 2 là thẻ có tên A, thành phần thứ 3 là chuỗi văn bản.

+ Tùy chọn: thẻ con có thể được sử dụng hay không

Cú pháp (dạng đơn giản): <!ELEMENT Ten_the (Ten_the_con ?) >

Thẻ đang xét có thể chứa 1 hay 0 lần xuất hiện của thẻ có tên là Ten_the_con.

Ví dụ: <!ELEMENT DON_THUC (Ten ?) >

Thẻ DON_THUC có thể chứa hay không thẻ Ten.

Có thể kết hợp với biểu thức tuần tự

Ví dụ: <!ELEMENT X (A, B?, C) >

Có thể cho phép tùy chọn một tập hợp các thẻ

Ví dụ: <!ELEMENT X (A, B, C)? >

X có thể bao hàm bên trong các thẻ A, B, C (theo thứ tự trên) hay cũng có thể không chứa bất kì thẻ nào.

+ Dạng chọn: bắt buộc chọn một thẻ con để sử dụng trong tập hợp thẻ cho trước. Cú pháp (dạng đơn giản: <!ELEMENT Ten_the (Ten_the_1|Ten_the_2|…|Ten_the_k) >

Có thể kết hợp với biểu thức tuần tự

<!ELEMENT X (A, B|C, D) >

Thành phần đầu tiên của thẻ X là thẻ A, kế đến là thẻ B hoặc C, thành phần cuối cùng là thẻ C.

Có thể cho phép chọn một tập hợp các thẻ

<!ELEMENT X ((A, B)|(C, D)) >

+ Dạng lặp:

Dạng lặp ít nhất 0 lần: <!ELEMENT Ten_the (Ten_the_con*) >

Ví dụ: <!ELEMENT LOP (HOC_SINH*) >

The LOP có thể chứa nhiều thẻ HOC_SINH hay không có thẻ HOC_SINH nào.

Có thể mô tả lặp đồng thời nhiều thẻ con

<!ELEMENT X (A, B, C)* >

Các thẻ A, B, C theo thứ tự trên có thể lặp lại ít nhất 0 lần trong thẻ X.

Có thể kết hợp với biểu thức tuần tự

<!ELEMENT X (A, B*, C) >

Có thể kết hợp với biểu thức tùy chọn

<!ELEMENT X (A, B*, C?, D) >

Có thể kết hợp với biểu thức chọn

<!ELEMENT X (A|B, C*, D) >

Dạng lập ít nhất 1 lần: <!ELEMENT Ten_the (Ten_the_con+) >

Ý nghĩa: Thẻ đang xét có thể bao hàm bên trong ít nhất một thẻ có tên là Ten_the_con.

Ví dụ: <!ELEMENT DA_THUC (DON_THUC+) >

Thẻ DA_THUC phải bao hàm bên trong ít nhất một thẻ DON_THUC.

Có thể mô tả lặp đồng thời nhiều thẻ con

<!ELEMENT CT_HOA_DON (Mat_hang, So_luong, Don_gia)+ >

Có thể kết hợp với biểu thức tuần tự

<!ELEMENT DA_GIAC (DIEM, DIEM, DIEM+) >

Có thể kết hợp với biểu thức tùy chọn

<!ELEMENT BIEU_THUC (Ten?, PHAN_SO+) >

Thẻ BIEU_THUC có thể chứa hay không thành phần đầu là thẻ Ten, kế đến phải có ít nhất một thẻ PHAN_SO.

Có thể kết hợp với biểu thức chọn

<!ELEMENT X (A|B, C+, D) >

2. Đặc tả thuộc tính của thẻ:

Cú pháp khai báo chung:

<ATTLIST Ten_the

              Ten_thuoc_tinh_1 Kieu_1 Tham_so_1

              …

>

Ví dụ: đặc tả cấu trúc tài liệu XML biểu diễn thông tin về biểu thức phân số P = 4/5 + 6/7*1/3 – 10/3 + 11/2*2/3

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE BIEU_THUC [

<!ELEMENT BIEU_THUC (PHAN_SO | TICH_SO)+ >

<ATTLIST BIEU_THUC

      Ten CDATA #IMPLIED

            <!- – Ten : A_String – ->

>

<!ELEMENT PHAN_SO EMPTY >

<ATTLIST PHAN_SO

      Tu_so CDATA #REQUIRED

            <!- – Tu_so : A_Int – ->

      Mau_so CDATA #REQUIRED

            <!- -  Mau_so : A_Int // > 0 – ->

>

<!ELEMENT TICH_SO (PHAN_SO)+ >

]>

– Cách 1:

<ATTLIST Ten_the

      …

      Ten_thuoc_tinh CDATA

      …

>

Ý nghĩa: tập hợp các giá trị thuộc tính với khai báo CDATA chính là tập hợp các chuỗi. Đây là trương hợp thông dụng nhất và đây cũng là môt trong những giới hạn của DTD vì không cho phép mô tả chi tiết hơn về kiểu thuộc tính. Để mô tả thêm thông tin cần sử dụng các ghi chú.

Ví dụ: Đặc tả cấu trúc tài liệu XML biểu diễn phương trình đường thẳng trong mặt phẳng.

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE DUONG_THANG [

<!ELEMENT DUONG_THANG EMPTY>

      <!- – phương trình ax + by +c = 0 – ->

<ATTLIST DUONG_THANG

      Ten CDATA #INPLIED

            <!- – Ten : A_String – ->

      a CDATA #REQUIRED

            <!- – a : A_Float – ->

      b CDATA #REQUIRED

            <!- – b : A_Float – ->

      c CDATA #REQUIRED

            <!- – c : A_Float – ->

>

      <!- – a, b không đồng thời bằng 0 – ->

]>

– Cách 2: dùng biểu thức liệt kê

<ATTLIST Ten_the

      …

      Ten_thuoc_tinh (Gia_tri_1, Gia_tri_2, …)

      …

>

Ý nghĩa: tập hợp các giá trị có thể có của thuộc tính đang xét chính là tập hợp các giá trị được liệt kê.

Ví dụ: Đặc tả cấu trúc tài liệu XML biểu diễn thông tin về phiếu điểm của một học sinh

<?xml version=“1.0” encoding=“utf-8” ?>

<!DOCTYPE PHIEU_DIEM (HOC_SINH, DIEM_SO+) >

<!ELEMENT HOC_SINH EMPTY>

<ATTLIST HOC_SINH

      Ho_ten CDATA #REQUIRED

            <!- – Ho_ten : A_String – ->

      Ngay_sinh CDATA #REQUIRED

            <!- – Ngay_sinh : A_Date – ->

      Xep_loai (“Giỏi” | “Khá” | “Trung bình” | “Yếu”) #IMPLIED

>

<!ELEMENT DIEM_SO EMPTY >

<ATTLIST DIEM

     Ten_mon CDATA #REQUIRED

            <!- – Ten_mon : A_String – ->

      Gia_tri CDATA REQUIRED

            <!- – Gia_tri : A_Float // từ 0 đến 10 – ->

>

]>

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s