Cấu trúc tài liệu XML

I. Khái niệm về cấu trúc tài liệu XML và đặc tả cấu trúc tài liệu XML:

Về cấu trúc tài liệu XML":

– Chỉ tương ứng cấu trúc của nội dung chính.

– Cách thức tổ chức, sắp xếp của các thẻ (có hay không có nội dung) trong nội dung chính.

Về đặc tả cấu trúc tài liệu XML:

– Mô tả ngắn gọn, chính xác cấu trúc tài liệu XML.

– Mô tả ngắn gọn, chính xác cách thức tổ chức, sắp xếp của các thẻ.

II. Ngôn ngữ đặc tả cấu trúc:

Có rất nhiều ngôn ngữ được đề xuất để mô tả tài liệu XML như DTD, XML Schema, XML-Data, Schematron, RELAX NG,… Trong số đó có 2 ngôn ngữ thông dụng là DTD và XML Schema.

Đặc điếm của DTD:

– Ra đời rất sớm.

– Cho phép mô tả văn bản có cấu trúc bất kì.

– Đơn giản, dễ học và sử dụng.

– Chỉ cho phép đặc tả một số “kiểu dữ liệu đơn giản” trong nội dung chính của tài liệu XML.

Đặc điểm của XML Schema:

– Được đề xuất bởi W3C.

– Chỉ áp dụng cho tài liệu XML.

– Khó học và khó sử dụng hơn DTD.

– Cho phép đặc tả chi tiết về các “kiểu dữ liệu” được sử dụng trong nội dung chính của tài liệu XML.

Hãy xét qua ví dụ sau:

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

<PHAN_SO>

      <Tu_so>4</Tu_so>

      <Mau_so>3</Mau_so>

</PHAN_SO>

Đặc tả tài liệu trên với DTD:

<!DOCTYPE PHAN_SO [

<!ELEMENT PHAN_SO (Tu_so, Mau_so) >

<!ELEMENT Tu_so #PCDATA >

      <!– Tu_so : Số nguyên // > 0 –>

<!ELEMENT Mau_so #PCDATA>

      <!– Mau_so : Số nguyên // > 0 –>

]>

Đặc tả với XML Schema:

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

<xs:schema id=“PHAN_SO” targetNamespace=“http://tempuri.org/PHAN_SO.xsd”

                                            xmlns:xs=“http://www.w3.org/2001/XMLSchema”>

      <xs:elementname=“PHAN_SO” type=“PHAN_SO” />

      <xs:complexType name=“PHAN_SO”>

            <xs:sequence>

                  <xs:elementname=“Tu_so” type=“SO_NGUYEN_DUONG”

                                                            minOccurs=“1” maxOccurs=“1” />

                  <xs:elementname=“Mau_so” type=“SO_NGUYEN_DUONG”

                                                            minOccurs=“1” maxOccurs=“1” />

          </xs:sequence>

      </xs:complexType>

      <xs:simpleTye name=“SO_NGUYEN_DUONG”>

            <xs;restriction base=“xs:int”>

                  <xs:minExclusive value=“0” />

            </xs:restriction>

      </xs:simpleType>

</xs:schema>

III. Sử dụng đặc tả cấu trúc:

Có 2 trường hợp chính cần thiết sử dụng các tài liệu đặc tả cấn trúc:

– Trường hợp 1: sử dụng cho việc trao đổi thông tin giữa người – người.

– Trường hợp 2: sử dụng cho việc trao đổi thông tin giữa người – hệ thống xử lý.

Trường hợp 1 là trường hợp phổ biến nhất, với trường hợp này, tài liệu đặc tả cấu trúc

+ được sử dụng như phương tiện giao tiếp giữa chuyên viên tin học có liên quan đến tài liệu XML tương ứng.

+ có thể được lưu trữ theo bất kì định dạng nào thích hợp cho việc sử dụng (trình bày, xem, báo cáo,…)

Trường hợp 2 chỉ được sử dụng khi

+ có hệ thống xử lý (phần mềm, hàm, đối tượng thư viện) “hiểu” và thực hiện các xử lý tương ứng nào đó với tài liệu đặc tả cấu trúc (xứ lý thông dụng nhất là kiểm tra một tài liệu XML có theo đúng cấu trúc được mô tả trong tài liệu đặc tả cấu trúc hay không).

+ thật sự có nhu cầu cần đến các xử lý của hệ thống xử lý nói trên.

IV. Một số kĩ thuật đặc tả nội dung:

1. Sử dụng thẻ thực thể:

Ý nghĩa chung của các thẻ thực thể là cho phép tài liệu XML tham chiếu đến một tập hợp các giá trị đã chuẩn bị trước dưới dạng một tên gợi nhớ (tên thực thể).

Mỗi cách thức tham chiếu và “loại” của tập hợp giá trị được tham chiếu tương ứng với một ý nghĩa/mục tiêu (dạng sử dụng) riêng và sẽ yêu cầu dạng thẻ khai báo thực thể thích hợp.

Có 4 dạng sử dụng chính của các thực thể:

– Tham chiếu đến một chuỗi giá trị bên trong tài liệu XML đang xét.

– Tham chiếu đến các kí tự đặc biệt được định nghĩa trước.

– Tham chiếu đến một tập hợp các giá trị bên ngoài tài liệu.

– Tham chiếu đến một tài liệu XML khác.

*Cách thức khai báo và sử dụng chung các thẻ khai báo thực thể (cho cả 4 dạng trên) như sau:

Khai báo:

<!DOCTYPE Ten_goc [

      Khai báo thực thể X

      Khai báo thực thể Y

]>

Sử dụng

&X; <– Sử dụng tham chiếu của X –>

&Y; <– Sử dụng tham chiếu của Y –>

Dạng 1: ý nghĩa

      + tăng cường tính dễ đọc của tài liệu XML.

      + tăng cường tính dễ bảo trì của tài liệu XML.

Dạng khai báo và sử dụng:

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

<!DOCTYPE Goc [

      <!ENTITY Ten_1 “Chuoi_1”>

      <!ENTITY Ten_2 “Chuoi_2”>

]>

<Goc>

      <A X=“&Ten_1;”>

            <B>

                  &Ten_2;

            </B>

      </A>

      <C Y=“&Ten_1;”>&Ten_2</C>

      <D Y>&Ten_2;</D>

</Goc>

Tài liệu XML trên khai báo và sử dụng 2 thực thể:

Thực thể thứ nhất: Tên là Ten_1 và được sử dụng trong thuộc tính của 2 thẻ A, C.

Thực thể thứ hai: Tên là Ten_2 và được sử dụng trong nội dung của 3 thẻ B, C, D.

Dạng 2: ý nghĩa là cho phép sử dụng một số kí tự đặc biệt.

Sử dụng kí tự đặc biệt được định nghĩa trước

&lt; kí tự <

&gt; kí tự >

&quot; kí tự “

&apos; kí tự ‘

&amp; kí tự &

Sử dụng các kí tự thông qua mã số trong cách mã hóa.

+ Nếu dùng hệ thập phân:

&#So_thap_phan; kí tự có mã số là số thập phân

Ví dụ: 0 kí số 0

          a kí tự a

+ Nếu dùng hệ thập lục phân:

&#xSo_thap_luc_phan; kí tự có mã số là số thập lục phân

Ví dụ: 0 kí số 0

          A kí tự a

Dạng 3: ý nghĩa là cho phép tham chiếu đến tập tin chưa giá trị cần sử dụng nào đó. Các giá trị này không nhất thiết phải theo định chuẩn XML. Cách sử dụng này của thực thể thông thường để bổ sung vào nội dung các hình ảnh, âm thanh,…

Dạng khai báo thông dụng: <!ENTITY Ten_thuc_the SYSTEM Ten_tap_tin >

Thực thể Ten_thuc_the tham chiếu đến tập tin có vị trí được cho bởi Ten_tap_tin.

Ghi chú: + Ten_tap_tin bao hàm cả đường dẫn.

             + Có thể dùng địa chỉ URL như Ten_tap_tin.

Ví dụ: Giả sử đã có tập tin hinh.jpg lưu trữ hình ảnh của một nhân viên trong thư mục hiện hành 

<!DOCTYPE NHAN_VIEN [

      <!ENTITY Hinh_nhan_vien SYSTEM “hinh.jpg” >

]>

<NHAN_VIEN Hinh=“&Hinh_nhan_vien;” … >

      …

</NHAN_VIEN>

Dạng 4: ý nghĩa là cho phép phân rã tài liệu XML thành các tài liệu con được lưu trữ trong các tập tin độc lập.

Dạng khai báo thông dụng: <!ENTITY Ten_thuc_the SYSTEM Ten_tap_tin >

Ví dụ: Giả sử đã có các tập tin Thu_tien_1.xml, Thu_tien_2.xml,… Thu_tien_12.xml lưu trữ thông tin về các phiếu thu tiền trong tháng 1, 2,… 12 của năm đang xét.

Tập tin Thu_tien.xml lưu trữ thông tin về các phiếu thu trong năm đang xét như sau

<!DOCTYPE THU_TIEN [

      <!ENTITY Thu_tien_1 SYSTEM “Thu_tien_1.xml” >

      <!ENTITY Thu_tien_2 SYSTEM “Thu_tien_2.xml” >

      …

      <!ENTITY Thu_tien_12 SYSTEM “Thu_tien_12.xml” >

]>

<THU_TIEN>

      &Thu_tien_1;

      &Thu_tien_2;

      …

      &Thu_tien_12;

</THU_TIEN>

2. Sử dụng tên:

Tên thẻ, tên các thuộc tính trong tài liệu XML thuộc về 1 trong 2 loại sau:

– Tên không có tiền tố: mô tả đầy đủ các quy tắc đặt tên cho các tên thẻ, thuộc tính là công việc không đơn giản và đặc biệt là cũng không cần thiết. Chẳng hạn, tên là chuỗi bao gồm các kí tự a-z, A-Z, kí số 0-9, một số kí tự như “-”, “_”, “.”,…

– Tên có tiền tố: có dạng 2 chuỗi kí tự cách nhau bởi kí tự “:” Chuoi_tien_to : Chuoi_ten

Ví dụ:

<A:MAT_HANG … />

<B:MAT_HANG … />

Nếu chỉ sử dụng tài liệu XML đơn lẻ, riêng cho các ứng dụng cục bộ thì không cần thiết dùng tiền tố trong tên. Tuy nhiên, nếu cần thiết tiếp nhận. kết xuất toàn bộ/một phần tài liệu XML từ/đến một ứng dụng khác thì việc tên với tiền tố là rất cần thiết. Tiền tố của tên sẽ dùng để phân biệt được nguồn gốc của một thẻ trong tài liệu XML được tạo thành từ nhiều tài liệu XML khác có các thẻ trùng phần tên không tiền tố.

Xét tài liệu XML với việc sử dụng các tiền tố A tương ứng tên công ty A trong giao dịch thương mại điện tử.

<A:The_goc>

      <A:The_1 … />

      <A:The_2 … >

            Nội dung

      </A:The_2>

      …

      <A:The_2>

            Nội dung

      </A:The_2>

      …

      <A:The_3 … />

</A:The_goc>

Việc sử dụng thuộc tính xmlns cho phép đơn giản hóa tài liệu XML trên

<The_goc xmlns=“A”>

      <The_1 … />

      <The_2>

            Nội dung

      </The_2>

      …

      <The_2>

             Nội dung

      </The_2>

      <The_3 …/>

</The_goc>

Cú pháp khai báo của thuộc tính xmlns như sau:

+ Dạng 1: <Ten_the xmlns=“Chuoi_tien_to” … >

                      …

                </Ten_the>

Khai báo trên có ý nghĩa rằng, tất cả các tên trong thẻ đang xét (bao hàm chính thẻ này) nếu không có tiền tố thì tiền tố chính là Chuoi_tien_to.

+ Dạng 2: <Ten_the xmlns:Chuoi_tien_to_1=“Chuoi_tien_to_2” … >

                       …

                 </Ten_the>

Khai báo trên có ý nghĩa rằng tất cả các tên bên trong thẻ đang xét (bao hàm chính thẻ này) nếu có tiền tố  là Chuoi_tien_to_1 thì tiền tố thực sự là Chuoi_tien_to_2. Khai bào này thường được dùng khi trong tài liệu XML có sử dụng đồng thời nhiều tiền tố khác nhau và khai báo dạng 1 chỉ có thể áp dụng được với một trong số các tiền tố đó và các tiền tố còn lại thì quá dài.

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