Sử dụng XML với namespace – Sử dụng kết hợp những tài liệu XML với nhau từ nhiều người định nghĩa khác nhau

Mục đích:

Chủ đề của bài này giới thiệu về namespace trong XML – một phương pháp để sử dụng XML kết hợp và validation từ nhiều thành phần định nghĩa XML khác nhau trong quá trình giao tiếp để trao đổi và truy xuất dữ liệu trên XML. Nội dung đề cập đến sự cần thiết có namespace trong XML, cách viết và sử dụng namespace trong xml phù hợp và đúng ngữ nghĩa. Qua nội dung tổng quát của lý thuyết, chúng tôi sẽ thực hiện một số ví dụ liên quan nhằm hiểu rõ nội dung của lý thuyết đã đề ra.

Yêu cầu về kiến thức cơ bản cho các khái niệm về namespace trong XML

Tổng quan về namespace trong tài liệu XML

  • Sự cần thiết phải sử dụng namespace trong tài liệu XML
    • XML hướng tới việc tổ chức dữ liệu theo dạng cấu trúc để chia sẻ, khai thác và trao đổi lẫn nhau giữa các ứng dụng, giữa người sử dụng và tổ chức (gọi tắt là ứng dụng)
    • Do vậy, một ứng dụng muốn tích hợp, kết hợp để truy xuất dữ liệu từ nhiều nguồn XML khác nhau thì việc cho phép định nghĩa các tag theo tùy ý của người dùng dẫn đến các tag name có thể trùng nhau về tên nhưng ngữ nghĩa lại khác nhau, người dùng hay ứng dụng không thể phân biệt được và truy xuất dữ liệu theo đúng như giá trị yêu cầu của ứng dụng
    • Để tránh được điều đó, một cơ chế cần được đưa ra để nhằm phân biệt các tag name trùng nhau nhưng của các đối tượng cung cấp dữ liệu khác nhau để tránh sự nhầm lẫn trong việc truy xuất dữ liệu
  • Namespace trong tài liệu XML
    • Là một tên dùng để kết hợp với các tag name và attribute của các tag name này với mục đích tạo ra tên là duy nhất để phân biệt với tag nội dung tài liệu XML khác.
    • Nội dung trên thể hiện theo nghĩa tên tag có thể trùng nhau nhưng gắn dưới namespace khác nhau của một người viết tài liệu XML thì sẽ tạo nên tên là duy nhất, định nghĩa trong XML gọi là qualified name
    • Nhìn nhận về góc độ lập trình java thì namespace có thể xem như là package và tên tag name giống như tên method được định nghĩa trong package đó. Tên method có thể trùng tên nhau nhưng nằm trong các package khác nhau nghĩa là tên method đó là khác nhau
    • Định nghĩa qualified name được sử dụng đó là prefix:tên_tag_name
    • Mỗi prefix được gắn hay được tham chiếu đến một namespace uri cụ thể. Prefix là một tên được đặt theo luật của tên tag name nhưng không được phép tên là xmlns hay xml
  • Cú pháp định nghĩa và sử dụng namespace trong tài liệu XML
    • Khai báo namespace từ root của tài liệu XML
    • Định nghĩa namespace trực tiếp hay còn gọi là local namespace
    • Sử dụng namespace sau khi định nghĩa
    • Đối với attribute:
  • Một số định nghĩa liên quan đến namespace trong tài liệu XML
    • Default namespace
      • Là một namespace được định nghĩa mà không cần prefix
      • Sau khi định nghĩa default namespace thì những tag name trong tài liệu XML bên dưới sử dụng mà không có prefix nghĩa là tag name hay attribute của nó đang tham chiếu đến default namespace
      • Tầm vực hiệu lực của default namespace được tính từ vị trí bắt đầu được định nghĩa và tất cả con bên trong của tag được định nghĩa
    • Override default namespace
      •  Là một default namespace được định nghĩa sau default namespace được định nghĩa trước đó hay tầm vực nhỏ hơn thì được gọi là override cho định nghĩa default namespace trước đó
      • Khái niệm override namespace cũng được áp dụng tương tự khi một namespace được định nghĩa và tag name sử dụng có namespace cũng có thể nói là override default namespace
    • Local namespace
      • Là namespace không được định nghĩa tại root của tài liệu XML mà được định nghĩa tại một tag name bất kỳ trong tài liệu xml
      • Sau khi namespace này được định nghĩa thì tầm vực hoạt động của nó là từ vị trí được định nghĩa đến tất cả con của nó

 

Vận dụng các kiến thức về namespace ở trên để áp dụng vào tài liệu XML trong một số ví dụ bên dưới

  • Yêu cầu
    • Nắm vững các khái niệm về XML (tham khảo lại bài Giới thiệu về XML – định nghĩa, cách viết XML đúng cú pháp (XML well-formed))
    • Nắm vững các khái niệm về namespace đã nêu ở trên
    • Tools sử dụng ở đây là Netbeans 6.9.1
    • JDK 6 update 22
  • Các bước thực hiện
    • Tạo Java Application hay Web Application, sau đó tạo tập tin XML để gõ nội dung tương tự như bài Giới thiệu về XML – định nghĩa, cách viết XML đúng cú pháp (XML well-formed)
    • Ở đây chúng ta sẽ vẫn sử dụng cách check well-formed để kiểm tra tài liệu XML phù hợp và trong nội dung ví dụ chúng ta không validation cho nên tính ràng buộc của các tag này chưa được tính tới
    • Các bài ví dụ hướng tới là sử dụng định nghĩa về namespace trong tài liệu XML sao cho đúng cú pháp
    • Việc trình bày các ví dụ tương tự như bài Giới thiệu về XML – định nghĩa, cách viết XML đúng cú pháp (XML well-formed)
  • Các ví dụ
    • Ví dụ 1

  • View

  • Ví dụ 2

  • Tài liệu xml không well-formed vì tài liệu định nghĩa 02 namespace uri khác nhau nhưng prefix trùng nhau

 

  • Ví dụ 3

  • Tài liệu xml này không well-formed bởi vì tài liệu XML sử dụng một prefix của một namespace mà chưa được định nghĩa

 

  • Ví dụ 4

  • Ví dụ này đang thể hiện khái niệm về override default namespace
  • Default namespace trong tag price override default namespace định nghĩa trong root và tầm vực của nó từ lúc định nghĩa đến các con bên trong nó, nghĩa là tầm vực default namespace này đến tag </price>
  • Nếu có tồn tại các book khác, book thứ 3 thì default namespace được định nghĩa từ root
  • View

  • Ví dụ 5

  • Ví dụ này đang thể hiện khái niệm là local namespace, namespace không được định nghĩa tại root
  • Tương tự như ví dụ 4 về tầm vực của local namespace và namespace này override default namespace
  • View

  • Ví dụ 6

  • Ví dụ này thể hiện việc hữu dụng của namespace để tránh sự trùng lắp về tên thuộc tính, cụ thể ở đây là id, 02 id có 02 ý nghĩa khác nhau
  • View

  • Ví dụ 7

  • Đây là ví dụ đặc biệt về sự cho phép định nghĩa default namespace với namespace uri là rỗng và chỉ duy nhất áp dụng được với default namespace, các namespace khác default sẽ không được định nghĩa như vậy
  • Nếu namespace khác default cố tình định nghĩa với namespace uri là rỗng thì tài liệu không đạt được well-formed

 

  • Ví dụ 8

  • Tài liệu này không well-formed vì định nghĩa tài liệu XML với namespace khác default có giá trị là rỗng

Chúc mừng các bạn đã hoàn tất và nắm các khái niệm về sử dụng namespace trong tài liệu XML. Chúng ta sẽ áp dụng nó trong các nội dung tiếp theo của chủ đề liên quan đến khái niệm và sử dụng XML

Chúng tôi hy vọng nội dung của bài này giúp ích các bạn trong việc sử dụng kết hợp nhiều tài liệu XML hiệu quả và tận dụng những gì đã có sẵn trong việc chia sẻ và xây dựng ứng dụng.

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở các chủ đề liên quan đến XML từ khai báo DTD, khai báo Schema, sử dụng Schema đến áp dụng các API của Java xử lý XML trong ứng dụng.

Nguồn : Kieutrongkhanh.net

Rate this post