Chuẩn bị thi chứng chỉ XML và các công nghệ có liên quan, Phần 5: Thử nghiệm và tinh chỉnh XML

Khám phá các công cụ và các gợi ý để làm việc với XML

Hướng dẫn này về việc thử nghiệm và tinh chỉnh XML là hướng dẫn cuối cùng trong một loạt bài giúp bạn chuẩn bị cho Bài thi lấy chứng chỉ IBM số 142, XML và các công nghệ liên quan. Hướng dẫn này cung cấp các lời khuyên và các gợi ý để chọn một công nghệ XML thích hợp và tối ưu hóa các phép biến đổi như thế nào. Nó tóm tắt với việc trình bày về các công cụ phổ biến mà bạn có thể sử dụng trong việc thử nghiệm các thiết kế XML.

Louis E Mauget, Tư vấn cao cấp, Number Six Software, Inc.

Lou Mauget là một nhà tư vấn cao cấp về Java™ 2 Enterprise Edition (Java EE Java EE - Ấn bản Java 2 doanh nghiệp) và tác giả nhiều bài viết đã xuất bản, sống gần Raleigh, North Carolina. Ông tư vấn cho nhiều doanh nghiệp và khách hàng thuộc chính phủ. Lou đã là một kỹ sư phần mềm cho IBM trước khi đảm nhiệm chức vụ hiện nay của ông với Number Six Software. Ông vẫn tiếp tục tham gia vào hoạt động sát hạch chứng chỉ cho IBM.



11 09 2009

Trước khi bắt đầu

Trong phần này, bạn sẽ tìm hiểu có thể học được những gì từ hướng dẫn này và làm thế nào để thu nhận được nhiều nhất từ nó.

Về loạt bài viết này

Loạt bài viết gồm năm hướng dẫn này giúp bạn chuẩn bị để làm Bài thi 142 lấy chứng chỉ IBM, XML và các công nghệ liên quan, để đạt chứng chỉ Nhà phát triển giải pháp có chứng nhận của IBM - XML và các công nghệ liên quan. Chứng chỉ này xác nhận một nhà phát triển trình độ mức trung cấp, người thiết kế và triển khai thực hiện các ứng dụng có sử dụng XML và các công nghệ liên quan như: Lược đồ XML, Extensible Stylesheet Language Transformation (XSLT- Chuyển đổi ngôn ngữ bảng định kiểu mở rộng) và XPath. Nhà phát triển này có một sự hiểu biết tốt về XML cơ bản, có kiến thức về các khái niệm của XML và các công nghệ liên quan; hiểu dữ liệu tương quan với XML như thế nào, đặc biệt là với các vấn đề kết hợp với việc mô hình hóa thông tin, xử lý XML, biểu hiện XML và các dịch vụ Web; có một kiến thức uyên thâm về các khuyến cáo W3C có liên quan đến XML cốt lõi; và quen thuộc với các cách làm thực hành tốt nhất, được nhiều người biết đến.

Về hướng dẫn này

Hướng dẫn này dành cho các lập trình viên, những người có một sự hiểu biết cơ sở về XML và các kỹ năng và kinh nghiệm của họ ở mức bắt đầu tới mức trung cấp. Bạn cần phải có một hiểu biết chung về việc định nghĩa, duyệt tính hợp lệ và đọc XML.

Bản chất tiêu chuẩn hóa của XML đã làm xuất hiện một số trình phân tích cú pháp phái sinh, xuyên nhiều nền tảng, xuyên nhiều ngôn ngữ và các công nghệ phái sinh. Phần 1 đến 4 của loạt bài này thảo luận các khía cạnh áp dụng của XML và các công nghệ có liên quan phổ biến của nó (xem Tài nguyên). Để tóm tắt loạt bài này, hướng dẫn này trình bày một số lý do cơ bản và các gợi ý để lựa chọn công nghệ thích hợp, giải thích các lựa chọn đơn giản ảnh hưởng đến hiệu năng như thế nào và giải thích các ví dụ đơn giản về việc sử dụng các công cụ phổ biến như thế nào để thử nghiệm các thiết kế XML.

Các mục tiêu

Sau khi hoàn thành hướng dẫn này, bạn sẽ biết làm thế nào để:

  • Chọn một công nghệ XML đúng.
  • Tối ưu hóa một phép biến đổi.
  • Thử nghiệm một ứng dụng của XML.

Các điều kiện cần có trước

Hướng dẫn này được viết cho các nhà phát triển, những người có một kiến thức nền tảng về lập trình và kịch bản lệnh và những người có một sự hiểu biết về các mô hình khoa học máy tính cơ bản và các cấu trúc dữ liệu. Bạn cần quen thuộc với các khái niệm khoa học máy tính, có liên quan đến XML sau đây: duyệt đi qua cây, phép đệ quy, và sử dụng lại dữ liệu. Bạn cũng cần quen biết với các tiêu chuẩn và các khái niệm Internet, chẳng hạn như trình duyệt Web, mô hình khách-chủ, làm cứ liệu, định dạng, thương mại điện tử, và các ứng dụng web. Kinh nghiệm thiết kế và triển khai thực hiện các ứng dụng máy tính dựa trên Java™ và làm việc với các cơ sở dữ liệu quan hệ cũng nên có.

Các yêu cầu hệ thống

Các công cụ trình bày và thử nghiệm của hướng dẫn này -- Trình duyệt Internet Explorer® 6.0, Trình duyệt Mozilla Firefox 1.5, Altova XMLSpy Home Edition (Altova XMLSpy Ấn bản gia đình) và IBM® Rational® Application Developer (Nhà phát triển ứng dụng Rational của IBM) cho WebSphere Software V6.0 -- tất cả hoặc là miễn phí được đóng gói với Microsoft® Windows®, hoặc có sẵn dưới dạng các bản dùng thử đánh giá miễn phí có thời hạn. Hãy tìm kiếm chúng trên Web từ các đường liên kết được cung cấp trong Tài nguyên.

Bạn cũng có thể tìm thấy những công cụ hữu ích sau đây:

  • FireBug: Một phần mở rộng của trình duyệt Firefox về Document Object Model (DOM- Mô hình đối tượng tài liệu) và kịch bản lệnh.
  • XMLBuddy: Một trình cắm thêm của trình soạn thảo XML cho môi trường phát triển tích hợp Eclipse (IDE).

Lựa chọn một công nghệ XML thích hợp

Các phần sau đây thảo luận các lựa chọn và các thỏa hiệp để xem xét khi lựa chọn một công nghệ XML.

W3CDOM

DOM là một biểu diễn của một tài liệu XML hoặc HTML như là một cấu trúc dữ liệu cây. Trình phân tích cú pháp DOM hiện đại bao gồm một API và tuân theo một loạt các đặc tả chuẩn kỹ thuật từ W3C. Một trình phân tích cú pháp như vậy được biết đến như một trình phân tích cú pháp W3CDOM. Nó là độc lập với ngôn ngữ và nền tảng máy tính. Các trình phân tích cú pháp DOM cũ hơn là riêng biệt của mỗi nhà cung cấp và do đó không khả chuyển như các trình phân tích cú pháp W3CDOM hiện nay. Khi hướng dẫn này đề cập đến một trình phân tích cú pháp DOM hoặc một DOM, nó đang đề cập đến một W3CDOM. Để có sự độc lập với ngôn ngữ xuyên qua nhiều nền tảng, người ta khuyến cáo rằng bạn nên sử dụng một trình phân tích cú pháp W3CDOM tiêu chuẩn khi bạn làm việc với một DOM.

CRUD

Để tạo một cây DOM, bạn có thể sử dụng một trình phân tích cú pháp để ghi nhận một luồng XML, tạo ra các nút (node) và các thuộc tính bằng mã lệnh chương trình hoặc sử dụng kết hợp mỗi cách tiếp cận. Một trình phân tích cú pháp DOM hỗ trợ đầy đủ chức năng Tạo, Đọc, Cập nhật và Xóa (CRUD) các phần tử DOM. Nếu bạn sử dụng API DOM, bạn không làm việc với các dấu ngoặc góc và cú pháp XML khi bạn tạo ra hoặc cập nhật một tài liệu XML. Việc tạo XML bằng mã lệnh chương trình từ dữ liệu chuỗi ký tự nói chung lộn xộn và dễ xảy ra lỗi. Bạn cũng có thể sử dụng XSLT để tạo ra một tài liệu XML, nhưng nó đòi hỏi một tài liệu cơ sở. Tôi khuyên bạn nên sử dụng một API của trình phân tích cú pháp DOM để tạo ra hoặc cập nhật các tài liệu XML khi không tạo ra hoặc biến đổi một tài liệu XML cơ sở thành một tài liệu mới.

Đẩy so với kéo

API đơn giản cho XML (SAX) là một trình phân tích cú pháp dòng XML tuần tự. Một ứng dụng của trình phân tích cú pháp SAX sử dụng một mô hình đẩy dữ liệu, có nghĩa là trình phân tích cú pháp gọi ứng dụng khi một phần tử hay thuộc tính mong muốn xuất hiện từ luồng dữ liệu XML đầu vào. Ứng dụng đăng ký một cuộc gọi lại cho từng sự kiện SAX mong muốn. Hãy so sánh mô hình đẩy này với mô hình kéo DOM, ở đây ứng dụng đẩy ra các nút mong muốn từ một cây DOM.

Một ứng dụng hướng SAX có thể xử lý một tài liệu XML rất lớn, chỉ bị hạn chế bởi những gì nó thực hiện với dữ liệu được đẩy đến cho nó. Ứng dụng đăng ký các hàm gọi lại chỉ đối với các nút hay thuộc tính quan tâm. Các phần tử khác bị bỏ qua trong hoạt động phân tích cú pháp, do đó chúng không làm cạn kiệt tài nguyên bộ nhớ.

Bộ nhớ chính hữu hạn sẽ hạn chế một ứng dụng hướng DOM, bởi vì trình phân tích cú pháp DOM chuyển đổi toàn bộ tài liệu thành một cây trong bộ nhớ. Mặt khác, một ứng dụng hướng DOM có thể truy cập các nút DOM XML theo bất cứ thứ tự nào. Ngoài ra, nó có thể thêm, sửa đổi hoặc xoá các nút đó, như đã đề cập ở trên. Một ứng dụng SAX không thể sửa đổi trực tiếp các nút hoặc truy cập chúng bên ngoài khuôn khổ thứ tự tài liệu tự nhiên của chúng.

Hai API

Các trình phân tích cú pháp DOM, ví dụ như những trình thuộc họ Xerces của Apache, thường tạo ra một cây DOM thông qua một trình phân tích cú pháp SAX bên trong. Các trình phân tích cú pháp ấy có thể đưa ra cả API DOM lẫn API SAX.

Bạn nên chọn một trình phân tích cú pháp SAX cho các tài liệu lớn, chỉ được đọc. Nếu bạn cần truy cập ngẫu nhiên tới các nút DOM, hãy sử dụng một trình phân tích cú pháp DOM.

Tài liệu trần thuật so với dữ liệu

XML là một siêu ngôn ngữ (metalanguage) được tiêu chuẩn hóa, dùng để tạo ra các ngữ pháp tài liệu tuỳ chỉnh. Nó có nguồn gốc từ ngôn ngữ đánh dấu tổng quát tiêu chuẩn (SGML- Standard Generalized Markup Language), một ngôn ngữ đánh dấu tài liệu phức tạp. Bảng 1 liệt kê một vài đặc điểm của các tài liệu XML dạng trần thuật.

Bảng 1. Tài liệu XML dạng trần thuật
Các đặc trưng của tài liệu XML trần thuật
Nguồn dữ liệu thô là dễ đọc đối với con người và không nhất thiết phải đẹp.
Định dạng phân cấp.
Hệ thống phân cấp nội dung là vô cùng linh hoạt.
Các tài liệu có thể lớn.
Các tài liệu biểu hiện thành văn bản dễ đọc cho con người.
Tác nhân chính là một con người thực.

Chúng tôi đang sử dụng chính XML để xuất bản loạt bài hướng dẫn XML trên developerWorks này. Tài liệu hướng dẫn này chính là tài liệu nguồn XML thô tuân thủ lược đồ XML trần thuật chặt chẽ. Bạn đang đọc các kết quả biểu hiện, được XSL chuyển đổi sang HTML để biểu hiện thành trang Web hoặc XSL Formatting Objects (XSL-FO – các đối tượng định dạng XSL) thành phiên bản PDF.

Bản chất tiêu chuẩn hóa của XML thu hút các lập trình viên, những người cần phải thao tác dữ liệu phân cấp có định dạng cứng nhắc. Hiện nay, ứng dụng XML để mô tả dữ liệu có mặt ở khắp nơi. Bảng 2 liệt kê một số các đặc tính của XML được sử dụng để mô tả dữ liệu.

Bảng 2. Tài liệu XML dữ liệu
Các đặc trưng của XML dữ liệu
Nguồn dữ liệu thô là dễ đọc đối với con người và không nhất thiết phải đẹp.
Định dạng phân cấp.
Hệ thống phân cấp nội dung là vô cùng cứng nhắc.
Các tài liệu thường nhỏ nhưng có thể lớn.
Các tài liệu có thể không biểu hiện được thành văn bản dễ đọc cho con người.
Tác nhân chính là một quá trình xử lý của máy tính.

Bảng 3 tóm tắt sự khác nhau giữa Bảng 1Bảng 2.

Bảng 3. XML trần thuật so với XML dữ liệu
Kiểu tài liệu Mô tả
Trần thuật Linh hoạt, cỡ lớn, con người xử lý
Dữ liệu Cứng nhắc, nhỏ, do quá trình máy tính xử lý

Hãy xem xét các điểm khác biệt này khi bạn thiết kế một lược đồ tài liệu XML hay DTD (Định nghĩa kiểu tài liệu). Thực tế, sự lựa chọn đầu tiên của bạn là lựa chọn liệu có ràng buộc tài liệu bằng lược đồ XML hay bằng DTD không.

Lược đồ XML so với DTD

Một lược đồ cho phép kiểm soát chi tiết mịn hơn đối với định dạng tài liệu -- một điều mà nói chung không gắn kết với dạng trần thuật, nhưng thường là quan trọng đối với tài liệu hướng dữ liệu. Giả sử một tài liệu chứa một mã số bưu điện (zip code) ràng buộc phần tử đó tất cả phải là các chữ số với một chiều dài chính xác là năm hoặc chín chữ số. Bạn có thể muốn sửa đổi lược đồ để xác nhận tính hợp lệ các mã số bưu điện của các quốc gia khác. Ví dụ, Canada chấp nhận một mã bưu điện có sáu ký tự chữ-số. Một tài liệu có chứa một đoạn sẽ không yêu cầu bất kỳ chiều dài hoặc ràng buộc về kiểu cho một phần tử đoạn.

Rõ ràng là các tài liệu trần thuật có xu hướng lỏng lẻo hơn các tài liệu kiểu như cơ sở dữ liệu. Chúng thường không cần một kỷ luật sắt có thể thực hiện thông qua một lược đồ XML. Vì vậy, các DTD chứ không phải các lược đồ, thường là lựa chọn dành cho các ngữ pháp của tài liệu trần thuật. Hơn nữa, con người thường xuyên trao đổi ẩn danh các tài liệu này, do đó một ngữ pháp tiêu chuẩn là quan trọng. Một số lượng lớn các DTD tiêu chuẩn đã có sẵn. Các DTD HTML là các ví dụ về các DTD trần thuật. Nhiều DTD được chuyên môn hóa hướng đến các lĩnh vực chuyên nghiệp.

Thật đáng ngạc nhiên, một lược đồ XML không thể định nghĩa dễ dàng các thực thể tổng quát -- các định nghĩa dữ liệu bằng ký hiệu kiểu macro có thể dùng lại. Chúng thường có ích nhất trong các tài liệu hướng trần thuật. Hãy thử tìm kiếm và kết hợp một DTD đã được thiết lập và bảng từ vựng dành cho các tài liệu XML trần thuật. Để cho phép ràng buộc độ với chi tiết mịn hơn, hãy xem xét định nghĩa bất kỳ bảng từ vựng kiểu cơ sở dữ liệu cứng nhắc nào, thông qua một lược đồ XML thay vì một DTD.

Tệp tin phẳng so với DBMS

Bạn có thể lưu trữ dữ liệu phức tạp trong một tài liệu XML đặt trong một tệp tin phẳng (flat file). Điều này có lẽ thỏa đáng với dữ liệu chỉ đọc có kích thước nhỏ. Tuy nhiên, khi dữ liệu lớn hoặc cần phải thay đổi lặp lại nhiều lần và nếu các yêu cầu truy cập tương tranh vào nó, thì một hệ quản trị cơ sở dữ liệu (DBMS) có lẽ thích hợp hơn để lưu trữ dữ liệu. Hãy xem xét việc lưu trữ dữ liệu XML trong một DBMS nếu nó chịu rất nhiều thao tác CRUD hay các yêu cầu truy cập tương tranh khá cao hoặc cần co giãn về quy mô.

Tiếp theo, bạn cần phải quyết định bạn có muốn chuyển đổi dữ liệu vào các bảng quan hệ nguyên sinh hay không, nhét nó vào trong các đối tượng lớn nhị phân XML (BLOB) hay là lưu trữ nó trong các cột XML kiểu chuỗi ký tự. Hãy đánh giá cẩn thận việc sử dụng dữ liệu của ứng dụng, ghi nhớ rằng mỗi tài liệu XML đòi hỏi phải phân tích cú pháp khi sử dụng nó. Nếu những mảnh nhỏ của một tài liệu XML thường xuyên được truy vấn hoặc cập nhật, có thể sẽ tốt hơn nếu lưu dữ liệu theo mô hình quan hệ và sử dụng truy cập SQL.

Các nhà cung cấp DBMS đang kết hợp nhiều sự hỗ trợ XML hơn, làm cho XQuery ngày càng hấp dẫn. Nếu các yêu cầu thường xuyên truy cập vào toàn bộ một tài liệu XML theo cách chỉ đọc, hãy xem xét việc lưu trữ tài liệu trong một BLOB hoặc một cột kiểu chuỗi ký tự, sau đó sử dụng truy cập cơ sở dữ liệu bằng XQuery của các nhà cung cấp.

XML so với các phương pháp trao đổi dữ liệu không phải XML

Simple Object Access Protocol (SOAP - Giao thức truy nhập đối tượng đơn giản), Really Simple Syndication hay Rich Site Summary (RSS -Sự cung cấp thực sự đơn giản hay còn là Sự tóm tắt trang Web phong phú), Electronic Business using eXtensible Markup Language (ebXML – Doanh nghiệp điện tử sử dụng Ngôn ngữ đánh dấu mở rộng) và mẫu thiết kế Đối tượng giá trị (Value Object) là các ví dụ về các tài liệu XML hướng dữ liệu được sử dụng để thực hiện trao đổi dữ liệu. Các dữ liệu có thể có mức phức tạp tùy ý và định dạng của nó có thể bị ràng buộc thông qua một lược đồ liên quan. Việc sử dụng XML để trao đổi dữ liệu cho phép các nền tảng và các ngôn ngữ khác hẳn nhau tạo ra hoặc thừa nhận dữ liệu vì XML được tiêu chuẩn hóa. Dữ liệu XML chứa nhiều dư thừa thống kê, làm cho nó có thể được nén lại khá tốt để lưu trữ hoặc truyền dẫn.

Việc sử dụng XML để trao đổi dữ liệu cũng có các mặt trái. XML dài dòng, đặc biệt là khi các phần tử, chứ không phải các thuộc tính, chứa siêu dữ liệu. Phần mềm xử lý làm việc tốt hơn với các đối tượng và các cây DOM, chứ không phải với các dấu ngoặc góc. Việc tuần tự hóa và không tuần tự hóa (cũng được gọi là tạo ra (creating) và phân tích cú pháp (parsing), hoặc sắp xếp theo thứ tự (marshaling) và sắp xếp không theo thứ tự (unmarshaling)) có thể rất tốn kém.

Bạn có thể chọn các giải pháp khác, ít khả năng hơn nhưng đơn giản hơn, thay thế cho mô hình trao đổi dữ liệu XML, đặc biệt là khi bạn kiểm soát hai đầu của việc trao đổi. Danh sách các giá trị được phân cách bằng dấu phẩy (CSV) có thể phân tách các dữ liệu lặp lại đơn giản hoặc dữ liệu phân biệt vị trí, chẳng hạn như các hàng của bảng cơ sở dữ liệu hoặc dữ liệu bảng tính. Các cặp tên-giá trị có thể định nghĩa hay truyền dẫn các thuộc tính của các hoạt động hoặc dữ liệu không định kiểu. JSON là một cấu trúc dữ liệu JavaScript có cách ràng buộc với hầu hết các ngôn ngữ khác.

Không một lựa chọn thay thế nào trong số nói trên là mạnh mẽ như XML với một lược đồ XML đi kèm, nhưng tất cả chúng đều đáng xem xét để làm cho công việc đơn giản hơn. Khi bạn xem xét các lựa chọn thay thế, hãy nhớ rằng XML đẩy mạnh tính khả chuyển (portability) và khả năng được hiểu xuyên các nền tảng, các ngôn ngữ, các dự án và các định dạng dữ liệu. Nếu bạn sử dụng CSV, mỗi bên phải đồng ý về ý nghĩa của văn bản giữa các dấu phẩy. Một nhà thiết kế trao đổi dữ liệu cần phải đánh giá XML và các lựa chọn thay thế sẽ sử dụng trong thiết kế trao đổi dữ liệu, nhưng hãy nhớ rằng XML có thể chuyển tải các ngữ nghĩa hoặc cấu trúc, cũng như các mảnh dữ liệu có đặt tên, định nghĩa một cách đơn giản.

XSLT so với CSS

Cascading Style Sheets (CSS - Các bảng định kiểu xếp tầng) được sử dụng chủ yếu để định kiểu dáng các khía cạnh có tính nghệ thuật và định vị nội dung trong các trang Web. Cú pháp đơn giản không phải là cú pháp XML. Nó đơn giản chỉ là một danh sách các phần tử XML để nhận được một kiểu dáng. Nếu một phần tử ở trong một không gian tên, thì tên phân biệt đầy đủ của nó được sử dụng. Để đính kèm một bảng định kiểu CSS vào một tài liệu XML, hãy cung cấp các chỉ thị xử lý như sau:

<?xml-stylesheet type="text/css" href="someDoc.xml"?>

Lưu ý rằng thuộc tính type (kiểu) là "text/css", chứ không phải là "text/xsl". Một thuộc tính media (phương tiện) tùy chọn, hướng bảng định kiểu đến chỉ một kiểu phương tiện đã cho. Các phép biến đổi CSS là để biểu hiện -- làm cho thành dễ đọc với con người, dành cho người sử dụng.

Trái ngược với CSS, việc áp dụng một bảng định kiểu XSLT là để tạo một tài liệu XML. Tài liệu đích có thể là một sự mô tả dữ liệu khác hoặc nó có thể là HTML trực quan, tuỳ thuộc vào ứng dụng. Vì vậy, dù là CSS hay là XSLT đều có thể tạo ra một biểu hiện trực quan. Vậy loại bảng định kiểu nào là thích hợp ? Nói chung, XSLT có thể chuyển đổi dữ liệu ngữ nghĩa thành một dạng có thể xem được, trong khi CSS chỉ được sử dụng cho các hiệu ứng trực quan và bài trí các đối tượng trực quan. Nói chung, bạn sử dụng XSLT, chứ không phải CSS, để chuyển đổi dữ liệu XML vào trong tầng khung nhìn HTML/XHTML. Tôi khuyến nghị chỉ dùng các chuyển đổi CSS dành cho định kiểu dáng các hiệu ứng trực quan và bài trí trực quan, không phải để chuyển đổi các dữ liệu phía sau.

Thuộc tính so với phần tử

Các nhà phát triển thường tự hỏi liệu họ nên thiết kế ngữ pháp để sử dụng các thuộc tính hay là sử dụng các phần tử. Câu trả lời chuẩn là các thuộc tính là siêu dữ liệu -- có nghĩa là, dữ liệu về dữ liệu -- trong khi các phần tử định nghĩa cấu trúc tài liệu. Trong thực tế, sự phân biệt không rõ ràng như vậy. Ví dụ, người ta có thể tranh luận rằng tất cả các thành phần XML là siêu dữ liệu.

Rõ ràng, các thuộc tính là các chuỗi ký tự phẳng, không có hệ thống phân cấp. Chúng không có thứ tự. Nếu một mục cần các đặc tính đó, thì nó phải là một phần tử.

Một số người cho rằng tất cả mọi thứ phải là một phần tử. Các hệ thống phân cấp của các phần tử thường dễ đọc với con người. Đó cũng là một trong số các dấu hiệu phân biệt về thiết kế của XML. Tuy nhiên, các hệ thống phân cấp của các phần tử chiếm nhiều không gian hơn các thuộc tính. Nếu bạn nghĩ XML là dài dòng, hãy hình dung bức tranh về HTML, một phiên bản phương ngữ hoàn toàn không có thuộc tính. Ở mức cực đoan này, một tài liệu thô có thể khó đọc với con người.

Thường thì sự lựa chọn tóm lại là theo thẩm mỹ và kiểu dáng -- trừ khi mục dữ liệu là có thứ tự, có hệ thống phân cấp và cần một sự ràng buộc kiểu, thế thì nó phải là một phần tử.


Tối ưu hóa các phép biến đổi, cải thiện thiết kế

Các phần sau thảo luận các mối quan tâm để tối ưu hóa hay cải tiến các phép biến đổi XML.

Các biểu thức XPath trong XLST

Nhớ lại rằng XPath là một cú pháp ngắn gọn (không phải là XML) để trỏ đến các phần của các tài liệu XML. Hãy suy nghĩ về cách bạn sẽ dùng các biểu thức XPath để truy cập vào tài liệu như thế nào. Ví dụ toán tử // trỏ đến tất cả các nút con cháu hậu thế của nút hiện tại. Điều này tốn kém hơn việc dẫn hướng thận trọng qua từng nút con. Một lập luận giống như thế cũng đúng cho ký hiệu dấu hoa thị (*) được sử dụng trong một truy vấn. Mục đích là để giảm việc bộ xử lý phải duyệt đi qua toàn bộ tài liệu lặp lại nhiều lần. Với mục đích nâng hiệu năng của XPath, hãy cố gắng tránh không sử dụng các biểu thức trỏ đến một gộp nhóm các nút. Với mục đích đạt hiệu năng tốt hơn, tránh sử dụng các biểu thức có thể mù quáng duyệt qua một số lượng lớn các nút:

<xsl:apply-templates />

Thay vào đó, hãy sử dụng các phần tử phối hợp với các nút được quan tâm:

<xsl:for-each>

Một cách tiếp cận tốt là cố gắng sử dụng <xsl:key /> tab và hàm key() để tạo ra các cặp tên-giá trị để tra cứu trong các tài liệu phức tạp.

Máy khách so với máy chủ về thực hiện các chuyển đổi

Trong một ứng dụng nhiều tầng, bạn phải chọn nơi để thực hiện phép chuyển đổi XSLT thành một biểu hiện trực quan. Nếu bạn chuyển đổi trên máy chủ, bạn sẽ dễ xử vì có tính khả chuyển xuyên các trình duyệt phía khách. Bạn có thể điều chỉnh hoạt động thông qua việc nhớ nhanh (caching) thông minh, nhưng trái lại, bạn có thể phải lên kế hoạch điều chỉnh các yêu cầu đồng thời.

Thay vào đó, bạn có thể trút gánh nặng các chu kỳ biến đổi cho máy khách. Điều này có thể hấp dẫn đối với một mạng diện rộng (WAN) nội bộ, ở đây bắt buộc dùng chỉ một trình duyệt đã cho. Mỗi yêu cầu trình duyệt sẽ nạp một tài liệu XML và một bảng định kiểu XSLT (và rất có thể là một bảng định kiểu CSS). Nếu những người sử dụng của bạn là người dùng Internet, họ có thể có nhiều trình duyệt khác nhau. Sự hỗ trợ đặc tính trong các trình duyệt mới hơn là gần với nhau, nhưng bạn biết rằng tất cả các khách hàng Internet của bạn không luôn có các trình duyệt mới nhất. Tôi khuyên bạn nên đánh giá khả năng dễ điều chỉnh so với tính khả chuyển khi bạn cân nhắc trút gánh nặng các phép chuyển đổi cho các trình duyệt khách.

Bảng định kiểu kết hợp so với chuyển đổi bằng kịch bản lệnh

Nếu bạn sử dụng chuyển đổi XSLT để biểu hiện dữ liệu theo HTML và bạn quyết định thực hiện phép chuyển đổi XSLT ở phía khách, bạn vẫn còn có thêm một sự lựa chọn. Tài liệu XML hướng dữ liệu có thể có một bảng định kiểu kết hợp. Trong trường hợp này, trình duyệt sẽ cố gắng nạp bảng định kiểu, thực hiện chuyển đổi và biểu hiện kết quả. Tuy nhiên, tài liệu XML là dữ liệu. Nó không áp đặt biểu hiện trực quan của dữ liệu. Trong thực tế, nó có thể biểu hiện khác nhau tại các điểm khác nhau trong ứng dụng. Ví dụ, một trang có thể hiển thị toàn bộ danh mục đĩa CD như thấy trong Liệt kê 1, trong khi trang tiếp sau có thể hiển thị chuyên sâu kết quả chọn chỉ các đĩa CD của Bonnie Tyler.

Bạn có thể tách biệt khung nhìn khỏi dữ liệu và vẫn thực hiện chuyển đổi thông qua JavaScript ở phía khách. JavaScript quyết định thực hiện phép chuyển đổi nào hoặc cung cấp một tham số chuyển đổi để kiểm soát nó.

Ở đây nghệ thuật phát hiện kiểu trình duyệt là rất quan trọng. Các phiên bản Internet Explorer 6.0 và thấp hơn thực hiện XSLT thông qua một điều khiển ActiveX độc quyền, trong khi Mozilla và Opera sử dụng một đối tượng XSLTProcessor có sẵn kèm theo. Internet Explorer 7.0 sẽ hỗ trợ XSLTProcessor, nhưng bạn không thể mong đợi rằng toàn bộ cộng đồng Web chung đều có trình duyệt đó.

Mặt khác, nếu mạng WAN doanh nghiệp của bạn bắt buộc dùng một trình duyệt đã cho, bạn có thể ghép thiết kế ứng dụng nội bộ của bạn với trình duyệt đó. Tất nhiên, điều này đưa vào thêm một sự phụ thuộc mà bạn có thể sẽ hối tiếc nếu tổ chức lại đưa ra một lệnh áp đặt trình duyệt mới. Đó là các loại thỏa hiệp đánh đổi mà bạn phải xem xét khi bạn thiết kế một ứng dụng.

Ví dụ

Ta hãy viết kịch bản lệnh một phép chuyển đổi XSLT. Bạn có thể nhận được tệp cdcatalog.xml, được hiển thị trong Liệt kê 1, từ W3Schools (xem Tài nguyên để biết thêm chi tiết).

Liệt kê 1. cdcatalog.xml
<?xml version="1.0" encoding="utf-8"?>
<catalog>
  >cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd>
    <ttitle>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
  <cd>
    . . . 
    
<catalog>

Tiếp theo, bạn hãy lấy về tệp cdcatalog.xsl, như được hiển thị trong Liệt kê 2, từ W3Schools. Bảng định kiểu này tạo ra một tệp tin HTML, liệt kê bộ sưu tập đĩa CD theo thứ tự vốn có trong tài liệu (bạn có thể thêm việc sắp xếp theo thứ tự vào phép chuyển đổi nếu muốn).

Liệt kê 2. cdcatalog.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2> 
    <table border="1">
      <tr bgcolor="#9acd32">
        <th align="left">Title</th> 
        <th align="left">Artist</th> 
      </tr>
      <xsl:for-each select="catalog/cd">
      <tr>
        <td><xsl:value-of select="title" /></td>
        <td><xsl:value-of select="artist" /></td>
      </tr>
      </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Tiếp theo, tạo một kịch bản lệnh ajax.js, như được hiển thị trong Liệt kê 3, trong cùng một thư mục làm việc với các tệp tin XML và tệp XSL. Kịch bản lệnh này là độc lập với trình duyệt. Hàm createRequest trả về một đối tượng XMLHttpRequest được trình duyệt Mozilla hay trình duyệt Opera sử dụng để yêu cầu một tệp tin thông qua một URL. Lưu ý rằng nó trả về một đối tượng của ActiveX® Microsoft cho các trình duyệt Internet Explorer.

Liệt kê 3. ajax.js
function createRequest() {
  var request = null;
  try {
    request = new XMLHttpRequest();
  } catch (tryIE) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (otherIE) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }
  if (request == null) {
    alert("Could not create request object");
  } else {
    return request;
  }
}

Bây giờ tạo tệp tin HTML như được hiển thị trong Liệt kê 4, trong đó bao gồm mã JavaScript để nhận hai đối tượng yêu cầu đồng bộ. Nó dùng một đối tượng yêu cầu để nạp tệp tin XML và nó sử dụng đối tượng yêu cầu kia để nạp tệp tin XSL. Các đối tượng không có khả năng sử dụng lại, do đó, bạn cần cả hai.

Kịch bản lệnh sử dụng một đối tượng XSLTProcessor để áp dụng phép chuyển đổi, do đó tạo ra một nút DOM. Nó chèn nút DOM này vào trong nút div HTML, và như thế hoàn tất việc biểu hiện danh mục đĩa CD. Hàm render được gọi trong lúc tài liệu đang nạp, vì vậy dẫn chứng tài liệu phải xuất hiện ở gần cuối tài liệu, sau thẻ div để truy cập vào thẻ đó.

Liệt kê 4. catalog.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<body>
<script type="text/javascript" src="ajax.js"> </script>
<script type="text/javascript">

function render(insertionID){
  var request1 = createRequest();
  var request2 = createRequest();

  // load the xslt file
  request1.open("GET", "cdcatalog.xsl", false);
  request1.send(null);

  var xslStylesheet = request1.responseXML;
  var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xslStylesheet);

  // load the xml file
  request3.open("GET", "cdcatalog.xml", false);
  request2.send(null);

    var xmlDoc = request2.responseXML;
    var fragment = xsltProcessor.transformToFragment(xmlDoc, document);
  document.getElementById(insertionID).innerHTML = "";
  document.getElementById(insertionID).appendChild(fragment);
} 
</script>

<div id="example"/>
</body>
<script  type="text/javascript">
  render("example")
</script>
</html>

Hình 1 cho thấy kết quả trong trình duyệt Firefox. Nó cũng sẽ làm việc đúng trong Opera. Tuy nhiên, nó sẽ không làm việc trong Internet Explorer 6.0 hoặc phiên bản cũ hơn, do thiếu đối tượng XSLTProcessor.

Hình 1. Ví dụ W3Schools dùng kịch bản lệnh trong Firefox
Ví dụ W3Schools dùng kịch bản lệnh trong Firefox

Liệt kê 5 hiển thị catalogIE.html, một phương thức thực hiện chuyển đổi xoay quanh Internet Explorer. Trang này chỉ biểu hiện trong Internet Explorer, chứ không phải trong trình duyệt Firefox hay Opera. Việc kết hợp trộn cả hai phép chuyển đổi, kiểm soát bằng mã JavaScript được dành lại như là một bài tập cho sinh viên dám nghĩ dám làm. Nếu bạn sử dụng mã JavaScript để thực hiện các chuyển đổi phía khách, hãy xử lý và thử nghiệm các vấn đề về sự phụ thuộc trình duyệt một cách cẩn thận.

Liệt kê 5. catalogIE.html
<html>
<body>
<script type="text/javascript">

// Load XML into Internet Explorer 6.0
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")

// Load XSL into Internet Explorer 6.0 
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")

// Transform within Internet Explorer 6.0
document.write(xml.transformNode(xsl))

</script>

</body>
</html>

Thử nghiệm XML

Cụm từ thử nghiệm XML thường đề cập đến việc kiểm tra một tài liệu đúng ngữ pháp và cú pháp, kiểm tra tài liệu hợp lệ, thử nghiệm các phép chuyển đổi XSLT, thử nghiệm các truy vấn XQuery và v.v. Các phần sau xem xét việc sử dụng các công cụ miễn phí hoặc các bản dùng thử để đánh giá của các công cụ thương mại để thực hiện các loại công việc ấy. Kỳ thi để cấp chứng chỉ không bao gồm các công cụ cụ thể, nhưng điều quan trọng là để hiểu các công cụ cung cấp khả năng để tạo, chuyển đổi, kiểm tra và xác nhận tính hợp lệ các tệp tin XML như thế nào, cùng với bất kỳ các lược đồ và các DTD kèm theo.

Trình tra soát DOM của Firefox

Gói cài đặt trình duyệt Web Mozilla Firefox 1.5 miễn phí có chứa một trình tra soát (Inspector) DOM, mà bạn có thể sử dụng để xem và hiệu chỉnh DOM của bất kỳ tài liệu XML hoặc HTML nào. Việc cài đặt nó là một tùy chọn trong gói của trình cài đặt Windows; hãy chọn tùy chọn bản cài đặt tùy chỉnh (Custom installation), sau đó nhấn vào mục các công cụ của nhà phát triển (Developer Tools) trong danh sách bật lên các thành phần. Để tra soát một DOM, hãy hướng trình duyệt đến tài liệu mong muốn. Sau đó, để gọi trình tra soát DOM, truy cập vào trình đơn Tools > DOM Inspector, chọn Ctrl+Shift+I hoặc nhập firefox -inspect c:\tmp\locs.xml từ dòng lệnh.

Hình 2 cho thấy tài liệu locs.xml được hiển thị trong DOM Inspector. Công cụ này có một số chế độ hiển thị cho phép bạn hiển thị và chỉnh sửa tất cả mọi thứ có trong DOM của trình duyệt hiện tại, bao gồm các bảng định kiểu và JavaScript. Để biết thêm thông tin, hãy xem Hỏi đáp về trình tra soát DOM của trình duyệt Firefox (Firefox DOM Inspector FAQ) (xem Tài nguyên để biết thêm chi tiết).

Hình 2.Trình tra soát DOM của Firefox
Trình tra soát DOM của Firefox

Kiểm tra cú pháp và xác nhận hợp lệ

Trình duyệt của bạn là người bạn của bạn khi cần làm tiếp hay dừng việc kiểm tra cú pháp hoặc việc kiểm tra tính hợp lệ của XML. Đơn giản chỉ cần hướng trình duyệt của bạn tới tài liệu cần xem xét ở máy tại chỗ hay máy từ xa. Một lỗi cú pháp trông giống như nội dung Hình 3. Một lỗi xác nhận hợp lệ làm cho trình duyệt hiển thị một thông báo mô tả tương tự như ví dụ lỗi cú pháp. Hãy sử dụng một trình duyệt để nhanh chóng kiểm tra một tài liệu đúng ngữ pháp và cú pháp hoặc kiểm tra một tài liệu hợp lệ.

Hình 3. XML không đúng ngữ pháp và cú pháp trong Internet Explorer
Xem xét XML không đúng ngữ pháp và cú pháp trong Internet Explorer

Một tài liệu đúng được biểu hiện dưới dạng hệ thống phân cấp có thể thu gọn lại được, như được hiển thị trong Hình 4, trừ khi nó có một bảng định kiểu kết hợp hoặc một phép chuyển đổi kiểm soát bằng Javascript để tạo ra mã HTML. Khi đó, nó sẽ giống như Hình 15, ở gần cuối của hướng dẫn này, với điều kiện là mọi việc diễn ra tốt đẹp.

Hình 4. XML đúng ngữ pháp và cú pháp trong Internet Explorer
Xem xét XML đúng ngữ pháp và cú pháp trong Internet Explorer

Sử dụng bàn điều khiển JavaScript của trình duyệt Firefox

Việc thực hiện các yêu cầu chuyển đổi XSLT từ mã JavaScript có thể làm bạn nản lòng nếu bạn có một lỗi mã JavaScript đơn giản. Ứng dụng thường lặng lẽ không hoạt động đúng nữa. Bạn biết rằng bạn phạm một lỗi, nhưng nó ở đâu? Bàn điều khiển JavaScript của trình duyệt Firefox liệt kê các lỗi, các cảnh báo và các thông báo cho đến khi bạn xóa nó. Để gọi bàn điều khiển JavaScript của trình duyệt Firefox, truy cập vào mục Tools > JavaScript Console.

Mỗi thông báo lỗi là một siêu liên kết đến nguồn gốc gây ra nó. Hình 5 hiển thị một thông báo lỗi trong bàn điều khiển, găm đúng ở chỗ nơi bạn cố ý làm hỏng một kịch bản lệnh được sử dụng để thực hiện chuyển đổi XSLT trong phần Bảng định kiểu kết hợp hay chuyển đổi bằng kịch bản lệnh (Linked stylesheet versus scripted transformation).

Hình 5. Bàn điều khiển JavaScript của trình duyệt Firefox
Bàn điều khiển JavaScript của trình duyệt Firefox

Hình 6 hiển thị lỗi sau khi bạn nhấn vào thông báo trong bàn điều khiển.

Hình 6. Lỗi JavaScript
Lỗi JavaScript

Gỡ rối kịch bản lệnh trong trình duyệt Internet Explorer

Trình duyệt Internet Explorer có đặc tính thông báo lỗi JavaScript (và VBScript) mà bạn phải trang bị để cảnh báo cho bạn về các lỗi kịch bản lệnh. Từ trình đơn chính, nhấn vào Tools > Internet Options, sau đó chọn thẻ Advanced. Đánh dấu chọn tùy chọn Browsing > Display a notification about every script error, như được hiển thị trong Hình 7.

Hình 7. Cho phép thực hiện gỡ rối kịch bản lệnh của trình duyệt Internet Explorer
Cho phép thực hiện gỡ rối kịch bản lệnh của trình duyệt Internet Explorer

Hình 8 cho thấy một kiểu thông báo lỗi bật lên do lỗi kịch bản lệnh kích hoạt. Loại thông báo bật lên này có thể hữu dụng khi có rất ít lỗi và bạn không muốn bỏ sót chúng. Trái lại, bàn điều khiển JavaScript của trình duyệt Firefox có ích hơn trong chu kỳ phát triển.

Hình 8. Lỗi kịch bản lệnh trong Internet Explorer
Lỗi kịch bản lệnh trong Internet Explorer

IBM Rational Application Developer (Nhà phát triển ứng dụng Rational của IBM)

IBM Rational Application Developer, dựa vào IDE Eclipse, có một trình soạn thảo XML có các đặc tính khung nhìn ô lưới và khung nhìn văn bản. Nó cũng bao gồm một khả năng thi hành XSLT và một trình gỡ rối (debugger) cho phép bạn thi hành phép chuyển đổi hoặc thiết lập các điểm tạm dừng (breakpoints) và thi hành chuyển đổi từng bước một, giống như khi bạn gỡ rối bất kỳ chương trình nào khác.

Để có được các đặc tính này, đánh dấu chọn Rational Application Developer for XML. Truy cập vào Window > Preferences để mở hộp thoại Preferences. Chọn Workbench > Capabilities, , chọn tất cả các mục XML và nhấn vào Apply hoặc OK. Xem Hình 9.

Hình 9. Đánh dấu chọn khả năng XML Developer
Đánh dấu chọn khả năng XML Developer của Rational Application Developer

Để nhận được các trợ giúp, tìm kiếm chuyển đổi và gỡ rối các tệp XML và XSL (Transforming and debugging XML and XSL files) trong các tiện ích trợ giúp của Rational Application Developer.

Hình 10 cho xem lại luồng xử lý cơ bản để chuyển đổi cdcatalog.xml của W3Schools thành mã HTML bằng cách áp dụng bảng định kiểu XSLT, đó là cdcatalog.xsl.

Hình 10. Chuyển đổi XML
Chuyển đổi XML

Để chạy hoặc gỡ rối một phép chuyển đổi XSLT trong Rational Application Developer, nhấn chuột phải vào tệp tin XML trong trình soạn thảo XML trong Package Explorer hoặc khung nhìn dẫn hướng (Navigator). Chọn Run > XSL Transformation để thực hiện chuyển đổi và tạo ra một mô tả sơ lược quá trình chạy (run profile) để tái sử dụng.

Để chỉnh sửa mô tả này, hãy chọn mục trình đơn Run tiếp theo. Bạn có thể chỉnh sửa phần đuôi mở rộng của tên tệp tin đầu ra thành bất kỳ kiểu tệp nào. Xem mô tả sơ lược cdcatalog trong Hình 11.

Hình 11. Mô tả sơ lược quá trình chạy XSLT
Mô tả sơ lược quá trình chạy XSLT

Nếu bạn chọn xml, tệp tin kết quả sẽ hiển thị trong trình soạn thảo XML, như thấy trong Hình 12. Hình 12 cho thấy Rational Application Developer bị treo tại một điểm tạm dừng trong khi đang thực hiện chuyển đổi thực tế trong trình gỡ rối XSLT của nó. Lưu ý rằng các nút điều khiển Chạy (Run), Treo (Halt) và Thực hiện từng bước (Step) xuất hiện và hoạt động giống như chúng làm với một chương trình Java hoặc JavaServer Pages™ (JSP). Khung nhìn các điểm dừng (Breakpoint) xem cho phép bạn vô hiệu hoá hoặc loại bỏ các điểm dừng như thông thường.

Hình 12. Gỡ rối XSLT với Rational Application Developer
Gỡ rối XSLT với Rational Application Developer

Nếu bạn cho phần mở rộng tên tệp là html hay htm, tệp tin kết quả sẽ biểu hiện như HTML trong trình duyệt tích hợp sẵn (xem Hình 13).

Hình 13. Một phép chuyển đổi XSLT tạo ra HTML
Một phép chuyển đổi XSLT tạo ra HTML

Altova XMLSpy

Altova XMLSpy là một sản phẩm phân phối qua cấp phép, có các đặc tính nâng cao về biên tập cấu trúc, xác nhận hợp lệ và thử nghiệm các chức năng cho các tài liệu XML, các DTD, các lược đồ XML, XSLT, XQuery, Web Services Description Language (WSDL- Ngôn ngữ mô tả dịch vụ Web) và các công nghệ XML khác.

Thậm chí nếu bạn không có điều kiện để mua toàn bộ sản phẩm hoàn chỉnh, Altova cung cấp một bản XMLSpy Home Edition (XMLSpy Ấn bản gia đình) có thể tải về miễn phí, có nhiều chức năng hơn sản phẩm đầy đủ circa 2001 của Altova. Quá trình cài đặt sẽ tạo một mục Tools > Edit trong mục trình đơn Altova XMLSpy trong trình duyệt Web Internet Explorer. XMLSpy Home Edition có thể thực hiện các nhiệm vụ kiểm tra và các nhiệm vụ soạn thảo tài liệu sau đây:

  • Kiểm tra XML đúng ngữ pháp và cú pháp
  • Kiểm tra tính hợp lệ của một tài liệu kết hợp với một DTD hay lược đồ.
  • Tạo một DTD hay lược đồ sử dụng các gợi ý trợ giúp trực tiếp.
  • Hiển thị một phác thảo tài liệu.
  • Thực hiện một phép chuyển đổi XSLT 1.0.
  • Biểu hiện các tài liệu kết quả chuyển đổi trong một trình duyệt.
  • Thực hiện một XQuery.
  • Chấp nhận các tham số bên ngoài cho một phép chuyển đổi XSLT hay một Xquery.

Lược đồ locs.xsd, như được hiển thị trong Liệt kê 6, và một tài liệu ví dụ mẫu kết hợp, locs.xml, như được hiển thị trong Liệt kê 7, đã được tạo ra bằng cách sử dụng XMLSpy Home Edition, sử dụng các gợi ý trợ giúp trực tiếp. (Thậm chí tôi đã sử dụng nó để soạn thảo ra hướng dẫn này). Ngoài ra, bạn có thể sử dụng bất kỳ một trong số các trình soạn thảo XML nào, chẳng hạn như XMLBuddy (xem Tài nguyên).

Liệt kê 6. locs.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://rogers60.com/location" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://rogers60.com/location" 
elementFormDefault="qualified" 
attributeFormDefault="unqualified">
  <!-- Definition of simple elements -->
  <xs:element name="city" nillable="false">
    <xs:annotation>
      <xs:documentation> US city</xs:documentation>
    </xs:annotation>
    <xs:simpleType>
      <xs:restriction base="xs:normalizedString">
        <xs:whiteSpace value="collapse"/>
        <xs:maxLength value="50"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="state" nillable="false">
    <xs:annotation>
      <xs:documentation> Two-letter abbreviation of US state
       or territory.</xs:documentation>
    </xs:annotation>
    <xs:simpleType>
      <xs:restriction base="xs:normalizedString">
        <xs:length value="2"/>
        <xs:whiteSpace value="collapse"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="zipcode" nillable="false">
    <xs:annotation>
      <xs:documentation> US Postal ZIP Code</xs:documentation>
    </xs:annotation>
    <xs:simpleType>
      <xs:restriction base="xs:normalizedString">
        <xs:minLength value="5"/>
        <xs:maxLength value="10"/>
        <xs:whiteSpace value="collapse"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!-- Definition of attributes -->
  <!-- Definition of complex elements -->
  <xs:element name="locs" nillable="false">
    <xs:annotation>
      <xs:documentation> Root: Collection of locations</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="location" minOccurs="0" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>Geo-postal location</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="city"/>
              <xs:element ref="state"/>
              <xs:element ref="zipcode"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Liệt kê 7. locs.xml
<?xml version="1.0" encoding="UTF-8"?>
<locs xmlns="http://rogers60.com/location" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://rogers60.com/location ./locs.xsd">
  <location>
    <city>Fuquay-Varina</city>
    <state>NC</state>
    <zipcode>27526</zipcode>
  </location>  
  <location>
    <city>Spokane</city>
    <state>WA</state>
    <zipcode>27217</zipcode>
  </location>
  <location>
    <city>San Jose</city>
    <state>CA</state>
    <zipcode>95123</zipcode>
  </location>
  <location>
    <city>Raleigh</city>
    <state>NC</state>
    <zipcode>27613</zipcode>
  </location>
  <location>
    <city>Durham</city>
    <state>NC</state>
    <zipcode>27703</zipcode>
  </location>
</locs>

Hình 14 cho thấy tài liệu locs.xml với lược đồ kết hợp với nó, locs.xsd. Để kiểm tra tính hợp lệ tài liệu đối với lược đồ, nhấn F8.

Hình 14. XMLSpy với tài liệu và lược đồ
XMLSpy với tài liệu và lược đồ

Hình 15 cho thấy các tệp tin cdcatalog.xml và cdcatalog.xsl từ Liệt kê 1Liệt kê 2. Nhấn F10 để gọi một phép chuyển đổi XSLT, tạo ra biểu hiện HTML.

Hình 15. Danh mục đĩa CD được biểu hiện thành HTML
Danh mục đĩa CD được biểu hiện thành HTML

XMLSpy Home Edition chứa một trình đơn cao cấp, nó mời bạn thử các chức năng bổ sung thêm với hạn chế thời gian hoặc nâng cấp lên sản phẩm hoàn chỉnh đủ chức năng. Các chức năng phải mua bao gồm:

  • Một trình soạn thảo lược đồ đầy đủ hơn.
  • Một khung nhìn văn bản cao cấp.
  • Một trình gỡ rối XSLT 2.0.
  • Một trình soạn thảo khung nhìn ô lưới nâng cao.
  • Một trình gỡ rối SOAP và một trình soạn thảo WSDL.
  • Nhập khẩu và xuất khẩu cơ sở dữ liệu.
  • Lập trình tạo mã lệnh dựa vào nội dung XML.
  • Kiểm soát mã nguồn trong quản lý dự án và hỗ trợ WebDAV.
  • Làm khác biệt tệp tin XML.
  • Hỗ trợ bộ xử lý XSL/XSL-FO bên ngoài.

Kết luận

Tóm tắt

Từ Phần 1 đến Phần 4 của loạt bài này thảo luận về các khía cạnh ứng dụng XML và các công nghệ có liên quan phổ biến của nó (Tài nguyên). Hướng dẫn này hoàn tất loạt bài bằng cách giải thích làm thế nào để lựa chọn công nghệ XML thích hợp cho các bài toán cần giải quyết. Nó chỉ cho bạn thấy, làm thế nào để tối ưu hóa các chuyển đổi, cải tiến các thiết kế và hiểu được các lựa chọn đơn giản ảnh hưởng đến hiệu năng như thế nào. Nó đã giải thích bằng các ví dụ đơn giản về việc làm thế nào để sử dụng các công cụ phổ biến để thử nghiệm các thiết kế XML, sau đó tiếp tục mô tả làm thế nào để thử nghiệmXML khi sử dụng các công cụ có sẵn thông thường.

Nếu bạn nghiên cứu toàn bộ loạt bài này, bạn sẽ có đầy đủ nền tảng để giúp bạn chuẩn bị tiến hành Bài thi số 142 để cấp chứng chỉ IBM, XML và các công nghệ liên quan, để đạt chứng chỉ Nhà phát triển giải pháp được IBM chứng nhận – XML và công nghệ có liên quan.

Tài nguyên

Học tập

  • XML on developerWorks: Nhận các tài nguyên mà bạn cần để nâng cao các kỹ năng XML của bạn với các bài viết kỹ thuật và các lời khuyên, các hướng dẫn, các tiêu chuẩn và các sách Đỏ của IBM.
  • Trang New to XML (developerWorks): Duyệt qua tổng quan này nếu bạn muốn tìm hiểu về XML nhưng không biết bắt đầu từ đâu.
  • IBM XML 1.1 certification: Trở thành một nhà phát triển có Chứng chỉ IBM về XML 1.1 và các công nghệ liên quan.
  • Introduction to XML tutorial (Doug Tidwell, developerWorks, 08.2002): Tìm hiểu XML là gì, tại sao nó đã được phát triển và nó đang có ảnh hưởng lớn đối với tương lại của thương mại điện tử như thế nào. Nó cũng trình bày một loạt các giao diện lập trình và các chuẩn XML quan trọng.
  • XML in a Nutshell, 3rd Edition (Elliotte Rusty Harold and W. Scott Means, O'Reilly Media, 2004, ISBN: 0596007647): Xem qua tài liệu tham khảo XML toàn diện này với tất cả mọi thứ từ các quy tắc cú pháp cơ bản, DTD và việc tạo lược đồ XML, các phép chuyển đổi XSLT, xử lý các API , XML 1.1, cộng với SAX2 và DOM mức 3.
  • XML Schema Part 0: Primer Second Edition Đọc về lược đồ XML và làm thế nào để tạo các lược đồ bằng cách sử dụng ngôn ngữ Lược đồ XML.
  • W3C Markup Validation Service: Với dịch vụ miễn phí này, hãy kiểm tra các tài liệu Web theo các định dạng như HTML và XHTML xem mức tuân thủ các khuyến cáo W3C và các chuẩn khác như thế nào.
  • Apache Xerces: Đọc về trình phân tích cú pháp SAX và DOM dựa trên Java rất phổ biến này.
  • XHTML: Tìm hiểu thêm về XHTML- Ngôn ngữ đánh dấu siêu văn bản mở rộng trên trang Web Wikipedia.
  • Hướng dẫn XML của W3Schools: Tìm hiểu XML là gì, sự khác biệt giữa XML và HTML và làm thế nào để sử dụng XML trong các ứng dụng của bạn.
  • Hướng dẫn DTD của W3Schools: Xem mục đích của một DTD (Document Type Definition-Định nghĩa kiểu tài liệu) và làm thế nào để sử dụng nó.
  • Hướng dẫn lược đồ XML của W3Schools: Học cách để đọc và tạo ra các lược đồ XML, tại sao các lược đồ XML mạnh hơn các DTD và làm thế nào để sử dụng ngôn ngữ lược đồ XML trong ứng dụng của bạn.
  • Firefox DOM Inspector FAQ: Tìm các câu trả lời cho các câu hỏi về công cụ có thể xem và sửa đổi DOM của XML và HTML này.
  • developerWorks technical events and webcasts: Theo sát với công nghệ trong các phiên này.

Lấy sản phẩm và công nghệ

  • IBM product evaluation versions: Tải về và thử các công cụ phát triển ứng dụng và sản phẩm phần mềm trung gian từ DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
  • Rational Application Developer for WebSphere Software V6.0: Tải về một phiên bản dùng thử đánh giá trong 30 ngày.
  • Mozilla Firefox Web browser: Tải về miễn phí Firefox 1.5 với sự hỗ trợ của nó về các tiêu chuẩn Web mở.
  • Eclipse SDK: Tải về Eclipse SDK, sau đó duyệt qua nhiều trang dự án khác nhau để tìm ra các công cụ có ích và các trình cắm thêm mà bạn cần.
  • Altova XMLSpy 2006 Home Edition: Tải về miễn phí một trình soạn thảo XML mức nhập môn và công cụ phát triển để thiết kế và chỉnh sửa các ứng dụng dựa trên XML.
  • FireBug: Tải về phần mở rộng này dành cho kịch bản lệnh và DOM của trình duyệt Firefox.
  • XMLBuddy: Tải về một trình cắm thêm để soạn thảo XML dành cho IDE Eclipse.
  • Microsoft Internet Explorer 6.0 or its successors: Tải về trình duyệt này được đóng gói với hệ điều hành Microsoft Windows và hệ điều hành Mac OS/X.
  • cdcatalog.xml: Tải về tệp tin XML mẫu này từ W3Schools.
  • cdcatalog.xsl: Tải về tệp tin XSL mẫu này từ W3Schools.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=427453
ArticleTitle=Chuẩn bị thi chứng chỉ XML và các công nghệ có liên quan, Phần 5: Thử nghiệm và tinh chỉnh XML
publish-date=09112009