III.1. Cấu trúc XML
Nh đã trình bày ở trên,u điểm của XML là nó có tạo ra các tài liệu có cấu trúc. Mỗi tài liệu XML có hai cấu trúc là: cấu trúc vật lí và cấu trúc logic. Ví dụ ở hình vẽ d- ới đây:
Hình 16 Cấu trúc của XML
III.1.1. Cấu trúc logic
Cấu trúc logic của XML đợc xem nh là một bản mẫu thể hiện các thành tố trong một tài liệu theo một thứ tự nhất định. Cấu trúc logic mô tả cách xây dựng một tài liệu chứ không phải mô tả tài liệu đó chứa cái gì.
Thành phần đầu tiên của tài liệu là tùy chọn ‘prolog’. ’Prolog’ bao gồm hai phần chính là khai báo XML và khai báo kiểu tài liệu.
Khai báo XML: khai báo XML xác định phiên bản của đặc tả XML mà tài liệu tuân theo. Ngoài ra khai báo XML còn có thể chứa khai báo mã hoá xác định cách mã hoá các kí tự trong tài liệu và khai báo tài liệu tách biệt (stand-alone declaration) xác định các khai báo ‘đánh dấu’ có nằm ngoài tài liệu hay không.Ví dụ :
<?xml version=”1.0” encoding=”UTF-8” standardalone=”yes” ?>
Khai báo kiểu tài liệu: khai báo kiểu tài liệu chứa các code ‘đánh dấu’ xác định các quy tắc ngữ pháp hay còn gọi là DTD ( Document Type Definition) cho một lớp đặc biệt nào đó trong tài liệu. Khai báo này còn có trỏ tới các file khác chứa các DTD. Khai báo này phải đi sau khai báo kiểu XML và đứng trớc các thành phần của tài liệu.Ví dụ nh khai báo sau: <!DOCTYPE Detail SYSTEM “Dtl.dtd”>
Khai báo này báo cho trình xử lí XML biết đợc tài liệu này thuộc lớp Detail và nó phải tuân theo các quy định đợc định nghĩa trong file ‘Dtl.dtd’.
Tiếp theo là các thành phần của tài liệu, phần chính của một tài liệu XML, nơi chứa các nội dung chính. Các thành phần tài liệu này còn có thể bao gồm các thành phần tài liệu con và cả các thực thể ngoài. XML có cấu trúc cây, nó bao gồm một thành phần gốc và các thành phần con sau đó là các thành phần kế tiếp (có thể rỗng). Mỗi thành phần có tên và có thể có các thuộc tính. Ví dụ:
Hình 17 Khai báo thành phần trong XML
III.1.2. Cấu trúc vật lí
Cấu trúc vật lí của XML chứa dữ liệu thực đợc sử dụng trong tài liệu XML. Các dữ liệu này có thể là văn bản chứa trong bộ nhớ máy tính, file hình ảnh trên World Wide Web... Nếu nh cấu trúc logic là bản thiết kế ngôi nhà thì cấu trúc vật lí chính là không gian thật chứa ngôi nhà đó. Ngôi nhà có chứa các đồ đạc hay gọi là các thực thể. Mỗi một thực thể có tên riêng và có nội dung riêng, nội dung này có thể nằm trong tài liệu hoặc là một file ngoài tài liệu. Các thực thể đợc khai báo trong phần ‘prolog’ và đ- ợc tham chiếu trong các thành phần của tài liệu. Thực thể chia làm hai loại là thực thể phân tách và thực thể không phân tách.
Thực thể phân tách hay còn đợc gọi là thực thể văn bản ,chứa các dữ liệu văn bản ,trờ thành một phần của tài liệu XML .Khi một trình xử lí XML phân tách các thực thể này ,nội dung của chúng xuất hiện nh một phần của tài liệu tại nơi tham chiếu thực thể .Ví dụ nh ta có khai báo nh sau : <!ENTITY E “Hello”>.
Mỗi khi thực thể đợc tham chiếu trong tài liệu thì nội dung của nó sẽ đợc đặt vào nơi tham chiếu đó. Nếu muốn thay đổi nội dung của thực thể thì ta chỉ cần thay đổi ở khai báo, sau đó thay đổi này đợc ánh xạ tới những nơi mà tham chiếu tới thực thể.
Thực thể không phân tách đợc coi nh là một thùng chứa mà nội dung của nó có thể có hay không có văn bản .Thực thể không phân tách đợc đôi khi
còn có tên là thực thể nhị phân bởi vì nội dung của nó thờng là file nhị phân(ví dụ nh file ảnh) và trình xử lí XML không trực tiếp thông dịch đ- ợc .Khai báo một thực thể không phân tách đợc cần một chú thích để xác định kiểu định dạng hay kiểu hay nguồn của thực thể .Ví dụ nh khai báo sau :
<!ENTITY Myimage SYSTEM “Imagine1.gif” NDATA GIF> .
Ngoài ra các chú thích cũng cần đợc khai báo. Các khai báo chú thích giúp cho trình xử lí XML thao tác trên các file nhị phân. Ví dụ nh ta có thể khai báo chú thích cho ví dụ trên :<!NOTATION GIF SYSTEM “/Utilities/Gifview.exe”>.
Thực thể tiền định nghĩa:Trong XML một số kí tự nào đó đợc sử dụng để ‘đánh dấu’ tài liệu.Trong ví dụ sau thành phần Person đợc xem nh là một ‘đánh dấu’ và không đợc coi là dữ liệu kí tự : <Person> Bill</Person>. Theo W3C tất cả các trình xử lí XML đều nhận biết các tham chiếu thực thể tiền định nghĩa mặc dù các thực thể này không đợc khai báo. Vì vậy chỉ có các thực thể đợc khai báo trong DTD của tài liệu mới đợc xem là hợp lệ.
Nội thực thể trong và ngoại thực thể: Thực thể trong là các thực thể mà nội dung của nó xuất hiện trong phần khai báo (ví dụ trên E là nội thực thể ) tức là không tồn tại một đơn vị vật lí tách biệt nào chứa nó. Thực thể ngoài là nói đến một đơn vị chứa trong khai báo của nó bằng cách sử dụng các định danh hệ thống hoặc định danh công cộng. Ví dụ nh khai báo sau:
<!ENTITY MyImage SYSTEM “http://www.myname.com/Images/I1.gif NDATA GIF>
Trong ví dụ này trình xử lí XML phải đọc file I1.gif để lấy nội dung. Ngoài ra các định danh công cộng đợc sử dụng nếu nh trình ứng dụng đợc kết nối với một th viện tài liệu công cộng. Ví dụ khai báo sau:
<!ENTITY MyImage
PUBLIC “-//Image//TEXT Standard images//EN” “http://www.myname.com/Images/I1.gif
NDATA GIF>
III.2. Cú pháp XML
Trong phần này chúng ta tìm hiểu cú pháp cơ bản của tài liệu XML. Vì HTML và XML đều là các ứng dụng từ SGML nên đối với những ai đã từng làm việc với HTML sẽ thấy một số điểm tơng đồng về cú pháp giữa chúng tuy là chúng không hoàn toàn có cùng ý nghĩa.
III.2.1. Các thẻ gán và phần tử
Trong HTML, các thành phần thờng sử dụng các thẻ đóng và thẻ mở ví dụ nh “<P> và “</P>”. Do HTML đợc giản lợc bớt nên ở một số chỗ mặc dù không có thẻ đóng nhng trình xử lí vẫn hiểu đợc. Tuy nhiên XML không cho phép điều đó, mỗi một thẻ mở trong XML phải luôn tồn tại một thẻ đóng tơng ứng. Điều này làm cho cú pháp của XML chặt chẽ và sáng sủa hơn so với HTML.
<name sex=”male”> <fist>John</first> <last>Bill</last> </name>
Hình 18 Minh họa cấu trúc cây của ví dụ
Trong XML các kí tự giữa < và > đợc gọi là thẻ gán XML. Các thẻ gán phải đi cặp với nhau là thẻ gán đầu và thẻ gán cuối. Các thẻ gán cuối giống nh thẻ gán đầu nh- ng có thêm một dấu ‘/’ nằm sau kí tự mở ‘<’. Ví dụ trên ta có các thẻ gán đầu <name> và thẻ gán cuối </name>. Trong XML không cho phép các thẻ gán đợc lồng nhau.
Toàn bộ thông tin nằm từ đầu của thẻ gán đầu đến cuối của thẻ gán cuối gọi là một phần tử . Văn bản giữa thẻ đầu và thẻ cuối gọi là nội dung thành phần. Ví dụ nh <first>John</first> là một thành phần.
Các thẻ thành phần rỗng không chứa nội dung và có cấu trúc nh sau :<TAG></TAG> . XML cho phép viết rút gọn lại thàng :<TAG/>
Toàn bộ t liệu bắt đầu tại <name> và kết thúc tại </name> cũng là một thành phần, có thể bao gồm các thành phần khác. Trong trờng hợp này nó đợc gọi là thành phần gốc. Mỗi t liệu XML đều phải có một thành phần gốc. Tất cả các thành phần khác đều là thành phần hậu duệ của thành phần gốc này.
XML cho phép ngời sử dụng đặt tên các thành phần rất thoải mái vì XML không có các từ khoá cần phải tránh nh trong các ngôn ngữ lập trình. Tuy nhiên ta cần tuân theo các qui tắc sau :
Các tên bắt đầu bằng các kí tự hoặc dấu ‘_’ nhng không đợc là các con số.
Các tên không đợc chứa khoảng cách ,kí tự ‘;’... và không đợc bắt đầu bằng xml
Không thể có dấu cách ngay sau kí tự ‘<’ tuy nhiên có thể có dấu cách tr- ớc kí tự đóng ‘>’
Trong XML phân biệt chữ hoa và chữ thờng.
Ví dụ đặt tên không hợp lệ :<123> , <a=b> , <na me>...
III.2.2. Các thuộc tính và chú giải
Các thuộc tính cung cấp phơng pháp gắn giá trị vào các thành phần mà không cần coi nó là một phần của nội dung thành phần .Các thuộc tính tách biệt dữ liệu mà hầu hết các ứng dụng cần ra khỏi dữ liệu mà các ứng dụng không cần .Ví dụ nh:
<Name Age=22>Bill</Name>
XML không cho phép viết chú giải trong một thẻ gán.
Có một vài kí tự mà XML không cho phép chúng xuất hiện trực tiếp trong thành phần dữ liệu ví dụ nh ‘&’,’>’...Muốn sử dụng chúng ta có hai cách:
Dùng tham chiếu thực thể :& thay cho kí tự & ,> thay cho kí tự >...
Dùng các đoạn CDATA(Character DATA) .Đây là một đặc điểm XML kế thừa từ SGML.Mọi nội dung xuất hiện giữa <![CDATA[ và ]]> đều đợc các trình xử lí XML bỏ qua .Ví dụ : <![CDATA[ 6>=6 & 7<9 ]]>.