Namespace trong xml (Bài 3)

Namespace trong xml là một phương pháp để phân biệt các phần tử trùng tên nhưng khác nhau về ý nghĩa hoặc số lượng hoặc tên phần tử con.

Trong XML, tên phần tử được xác định bởi các nhà phát triển. Điều này thường dẫn đến một cuộc xung đột khi kết hợp các tài liệu XML từ các ứng dụng XML khác nhau.

<?xml version="1.0" encoding="UTF-8"?>
<doc> 
  <!-- information about a table (furniture) -->
  <table>
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
  </table>
  <!-- HTML table information -->
  <table>
   <tr>
    <td>Apples</td>
    <td>Bananas</td>
   </tr>
  </table> 
</doc>

Trong ví dụ trên, chúng ta có 2 cặp thẻ <table> được gộp từ 2 ứng dụng khác nhau và dẫn đến sự xung đột về tên. Cụ thể chúng trùng tên nhưng mang ý nghĩa và số lượng/tên phần tử con khác nhau.

Namespace trong xml

Giải quyết xung đột bằng cách sử dụng tiếp đầu ngữ (Prefix), giúp xác định những dữ liệu khác nhau của cùng một phần tử trong cùng một tài liệu.

Cú pháp khai báo: xmlns:prefix=”URI”

URI là một chuỗi ký tự giúp xác định một tài nguyên Internet. URI phổ biến nhất là Uniform Resource Locator (URL) trong đó xác định một địa chỉ miền trên Internet.

Namespace trong xml – Ví dụ

<?xml version="1.0" encoding="UTF-8"?>
<doc
   xmlns:h="http://localhost/html"
   xmlns:f="http://localhost/furniture"> 
  <f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table> 
  <h:table>
    <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
    </h:tr>
  </h:table>
</doc>

namespace trong xml

Trong ví dụ trên, việc khai báo namespace được thực hiện ở phần tử gốc (root) là <doc>

xmlns:h="http://localhost/html"
xmlns:f="http://localhost/furniture"> 

Ngoài ra, chúng ta có thể khai báo tại phần tử thành viên

<?xml version="1.0" encoding="UTF-8"?>
<doc> 
 <f:table xmlns:f="http://localhost/furniture">
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
 </f:table> 
 <h:table xmlns:h="http://localhost/html">
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
   </h:tr>
 </h:table>
</doc>

Namespace trong xml – Bài tập thực hành

Tạo tài liệu xml với tên “Order.xml” sử dụng tên cho các phần tử như sau

Invoice

Order (Có một thuộc tính là OrderNumber) và các phần tử con

  • Customer name
  • Address
  • Order id
  • Total Price

Cod

  • Shipping Address
  • Shipping Method (Air hoặc Ground)
  • Shipping total

Account (Có một thuộc tính là State với giá trị là active hoặc no. Giá trị mặc định là active)

  • Customer ID
  • Invoice period

Shipping info

  • Ship date
  • Billing Address (Phần tử này tuỳ vào chi nhánh mà có thể có hoặc không)

Description (Miêu tả về sản phẩm)

Giả sử chúng ta có 5 chi nhánh, mỗi chi nhánh sẽ có một Invoice. Vào cuối mỗi tháng ở trụ sở chính sẽ nhận về 5 tài liệu xml từ 5 chi nhánh và tiến hành gộp chung vào một tài liệu xml duy nhất. Hãy phân tích yêu cầu và nhận định xem có xung đột về tên khi tiến hành gộp 5 tài liệu xml với cấu trúc như trên hay không? Nếu có hay cho biết cách giải quyết?

Trả lời