2.2. phát triển ứng dụng với xML
2.2.2. Không gian tên XML
Dữ liệu hay tài liệu XML đ−ợc truy lục bằng các nút riêng lẻ trong tài liệu. Thực hiện đ−ợc công việc này là do cấu trúc đồng bộ của tài liệu XML và các qui tắc kiểm tra, chuẩn hoá tài liệu XML tạo ra đảm bảo rằng mỗi nút trong tài liệu là duy nhất. Và đảm bảo rằng mỗi nút chỉ tồn tại duy nhất một tham chiếu. Một vấn đề nảy sinh là khi ta sử dụng tài liệu XML trong môi tr−ờng cộng tác, ví dụ nh− hai hoặc ba tài liệu có thể chứa các thành phần cùng tên nh−ng khác về ngữ nghĩa (và thậm chí các tài liệu có thể có cùng cấu trúc nh− nhau). Nếu thực sự cần thiết sử dụng cả hai tài liệu trong một môi tr−ờng thì điều đó sẽ trở nên lộn xộn về tính nạp chồng của các thành phần. Ví dụ chúng ta xét đoạn m sau: <AUTOMOBILE> <ID>232-HDF</ID> </AUTOMOBILE> <DOG> <ID>Rover</ID> </DOG>
Ta thấy hai thành phần AUTOMOBILE và DOG đều có thành phần ID, nh−ng thành phần ID này là khác nhau về nội dung. Khi đó thành phần ID trở nên vô nghĩa và giải pháp cho vấn đề trên là không gian tên (namespace). Không gian tên là tập hợp tên thành phần liên quan, đ−ợc nhận diện qua tên không gian tên.
Cú pháp sử dụng thuộc tính không gian tên của một thành phần: xmlns:namespace-prefix="namespaceURI"
Khi một không gian tên đ đ−ợc định nghĩa trong tag mở đầu của một thành phần thì tất cả các thành phần con có cùng tiền tố có cùng một không gian tên.
a. Tạo các tên định danh thông qua không gian tên XML
Trong các ngôn ngữ lập trình truyền thống, không gian tên giới hạn là tập các tên nh−ng không đ−ợc tồn tại hai tên trùng nhau. Đối với XML, XML cho phép ta có thể tạo ra tập hợp các tag riêng, trong đó có thể có tên trùng nhau trong tài liệu XML. Không gian tên trong tài liệu XML là ph−ơng pháp tạo ra các tên định danh phổ biến trong tài liệu XML bằng cách xác định tên thành phần với một định danh tài nguyên mở rộng. Do vậy một không gian tên trong XML là tập hợp các tên đ−ợc xác định bởi các URI (Uniform Resource Identifies). Không gian tên có thể hạn chế hoặc không hạn chế.
a1. Tên hạn chế
Một tên hạn chế trong XML bao gồm 2 phần: tên không gian tên và vị trí. Tên không gian tên chính là URI lựa chọn không gian tên. Vị trí chính là thành phần tài liệu hay tên thuộc tính. Là vì URI luôn luôn là duy nhất, tên không gian tên kết hợp với vị trí tạo thành tên thành phần định danh phổ biến. Để có thể sử dụng không gian tên trong tài liệu XML, chúng ta chèn khai báo không gian tên trong phần mở đầu của tài liệu. Tiền tố không gian tên có thể đ−a vào trong phần khai báo.
Ví dụ khai báo không gian tên và sử dụng không gian tên trong tài liệu <?xml version="1.0"?>
<?xml:namespace ns="http://inventory/schema/ns" prefix="inv"?> <?xml:namespace ns="http://wildflowers/schema/ns" prefix="wf"?> <PRODUCT> <PNAME>Test1</PNAME> <inv:quantity>1</inv:quantity> <wf:price>323</wf:price> <DATE>6/1</DATE> </PRODUCT>
Luận văn tốt nghiệp thạc sỹ Luận văn tốt nghiệp thạc sỹ Luận văn tốt nghiệp thạc sỹ
Luận văn tốt nghiệp thạc sỹ Nguyễn Thanh Thảo Nguyễn Thanh Thảo Nguyễn Thanh Thảo Nguyễn Thanh Thảo
ứ ứứ
ứng dụng công nghệ h−ớng đối t−ợng và XML để phát triển hệ thống trên nền Webng dụng công nghệ h−ớng đối t−ợng và XML để phát triển hệ thống trên nền Webng dụng công nghệ h−ớng đối t−ợng và XML để phát triển hệ thống trên nền Webng dụng công nghệ h−ớng đối t−ợng và XML để phát triển hệ thống trên nền Web
41
Trong đoạn m trên, các tiền tố đ−ợc sử dụng để định danh các thành phần là các phần của không gian tên đ lựa chọn. Các thành phần inv:quantity và wf:price bây giờ đầy đủ các tên hạn chế sẽ trở thành duy nhất. Tiền tố là một phần của tên thành phần và phải kết hợp để chỉ ra thành phần theo sau là một không gian tên. a.2. Tên không hạn chế
Tất cả các tên không hạn chế không thể kết hợp với không gian tên. Tên các thành phần XML là không hạn chế từ đó không thể xác định đ−ợc không gian tên. a3. Phạm vi không gian tên
Phần mở đầu không phải là lựa chọn duy nhất cho vị trí khai báo không gian tên. Do vậy ta có thể đ−a vào khai báo không gian tên trực tiếp trong một thành phần nh− là một phần của không gian tên. Ví dụ:
<PRODUCT> <PNAME>Test1</PNAME> <inv:quantity>1</inv:quantity> <wf:price xmlns:wf="urn:schemas-wildflowers-com:xml- prices"> 323 </wf:price> <DATE>6/1</DATE> </PRODUCT>
Không gian tên có thể thay đổi trong ngữ cảnh của các thành phần. Trong tr−ờng hợp nào đó một thành phần và các thành phần con của nó có thể sử dụng không gian tên. Nếu không gian tên đ−ợc khai báo trong thành phần tài liệu, không gian tên đó có thể đ−ợc sử dụng thông qua các thực thể tài liệu.
a4. Không gian tên mặc định
Bạn có thể khai báo một không gian tên mặc định bằng cách khai báo không gian tên không có phần tiền tố prefix theo sau. Nếu khai báo không gian tên mặc định cho thành phần gốc thì mọi thành phần trong tài liệu đ−ợc xem là xuất phát từ không gian tên đó. Không gian tên khai báo cho toàn bộ tài liệu mang tên là không gian tên mặc định vì nó áp dụng cho mọi thành phần trong tài liệu. Ta cũng có thể dành quyền không gian tên mặc định bằng cách qui định không gian tên tiền tố cho thành phần riêng lẻ. Ví dụ:
<PRODUCT xmlns:wf="urn:schemas-wildflowers-com"> <NAME>Cà rót đỏ</NAME>
<QUANTITY>10</QUANTITY> <PRICE>244</PRICE>
</PRODUCT>
Thành phần PRODUCT trong đoạn m trên có khai báo không gian tên, không có khai báo tiền tố không gian tên. Trong tr−ờng hợp này, không gian tên sẽ bỏ qua thành phần PRODUCT và các thành phần con của nó nh−ng không cho bất cứ một thành phần nào nằm ngoài thành phần PRODUCT, tr−ờng hợp ngoại lệ xảy ra khi một thành phần con chứa không gian tên, trong tr−ờng hợp đó nó sẽ đè lên khai báo không gian tên mặc định. Ví dụ khai báo một không gian tên tiền tố cho thành phần NAME trong PRODUCT.
<NAME>Cà rốt đỏ </NAME>
<inv:quantity xmlns:wf="urn:schemas – wildflowers - com: xml-inventory"> 10 </inv:quantity>
a5. Thuộc tính không gian tên
Ta có thể liên kết thuộc tính với không gian tên cụ thể bằng cách mở đầu nó bằng tiền tố thích hợp, nh−ng hầu nh− không cần thiết vì thành phần chứa đ làm cho thuộc tính không trùng lặp rồi.