JiBX 1.2 - Phần 1: Từ mã Java thành lược đồ XML

Cải thiện chất lượng lược đồ bằng phép biến đổi tùy chỉnh các mô hình dữ liệu

Java thành tài liệu XML và từ tài liệu XML

Dennis Sosnoski, Nhà tư vấn, Sosnoski Software Solutions, Inc.

Tóm tắt: Các định nghĩa lược đồ XML là cơ sở cho nhiều kiểu trao đổi dữ liệu,

bao gồm hầu hết các dạng dịch vụ web. Nhưng lược đồ XML là một tiêu chuẩn

phức tạp và hầu hết các công cụ để tạo và sửa đổi các định nghĩa lược đồ không đủ

mạnh mẽ hay dễ sử dụng như các công cụ để làm việc với mã Java™. Các đặc tính

mới của JiBX 1.2 mà bạn sẽ tìm hiểu về nó trong hướng dẫn này —Phần 1 của

một loạt bài viếtcó hai phần —cho phép bạn bắt đầu từ mã Java và dễ dàng tạo ra

các định nghĩa lược đồ có chất lượng khớp với các cấu trúc dữ liệu của bạn. Sau

đó bạn có thể sử dụng trực tiếp các lược đồ này, dù bạn có sử dụng liên kết dữ liệu

JiBX hay không.

pdf49 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2076 | Lượt tải: 0download
Tóm tắt nội dung JiBX 1.2 - Phần 1: Từ mã Java thành lược đồ XML, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
h orderNumber bên 
trong phần tử Bằng cách sử dụng một thuộc tính 
element="order-num", tùy chỉnh orderNumber ra lệnh cho BindGen diễn tả giá trị 
này như là một phần tử, chứ không phải dưới dạng thuộc tính mặc định được sử 
dụng cho một giá trị nguyên thủy. Tùy chỉnh thứ hai là dành cho thuộc tính sưu 
tập các mục hàng. Tùy chỉnh này sử dụng cả hai thuộc tính item-name và element. 
Thuộc tính item-name kiểm soát tên được sử dụng cho các giá trị riêng lẻ mà sưu 
tập biểu diễn, trong khi thuộc tính element bắt buộc sử dụng tên đã cung cấp như 
là một phần tử bao gói các giá trị trong sưu tập. 
XML không có các không gian tên 
Tất cả các ví dụ của hướng dẫn sử dụng các không gian tên XML vì việc sử dụng 
các không gian tên thường được coi là một thói quen thực tế tốt nhất cho việc trao 
đổi dữ liệu. Nếu bạn muốn làm việc với XML mà không có các không gian tên, 
bạn có thể sử dụng một thuộc tính namespace-style="none" ở bất kỳ mức tùy 
chỉnh nào để tắt hoàn toàn các không gian tên cho tất cả các thành phần lồng bên 
trong. 
Các tùy chỉnh của Listing 11 cũng định nghĩa các không gian tên được sử dụng 
trong tài liệu XML. Các ví dụ trước đó dựa vào BindGen xử lý mặc định các 
không gian tên, cụ thể là lấy URI không gian tên dùng trong biểu diễn XML của 
mã Java trong gói Java. Việc xử lý mặc định này đã chuyển đổi gói org.jibx.starter 
thành URI không gian tên  Trong Listing 11, không gian tên 
được tùy chỉnh bằng cách thêm một cặp hai thuộc tính — 
namespace="" và namespace-style="fixed" — trên phần tử 
gốc . Thuộc tính đầu tiên định nghĩa không gian tên cơ sở, còn thuộc 
tính thứ hai ngăn chặn hành vi thông thường là sửa đổi không gian tên dựa vào gói 
Java. Cả hai thuộc tính này được thừa kế xuyên qua các phần tử tùy chỉnh lồng 
vào nhau, vì thế chúng có thể dễ dàng được đặt vào phần tử thay vì 
phần tử . 
Bạn có thể thử nghiệm tùy chỉnh trong Listing 11 bằng cách sử dụng đích Ant 
custgen3 để tạo ra lược đồ và liên kết và đích run3 để chạy một phép thử nghiệm 
(sau khi sử dụng đích bind tiêu chuẩn để chạy trình biên dịch liên kết JiBX — 
hoặc chỉ cần sử dụng đích full3 để thực hiện toàn bộ chuỗi tác vụ). Listing 12 hiển 
thị tài liệu đầu vào được sử dụng với mã thử nghiệm: 
Listing 12. Mẫu XML với các tên và các không gian tên đã được tùy chỉnh 
<order order-date="2008-10-18" ship-date="2008-10-22" 
xmlns=""> 
 12345678 
 5678 
 John 
 Smith 
 12345 Happy Lane 
 Plunk 
 USA 
 PRIORITY_MAIL 
 333 River Avenue 
 Kirkland 
Nếu bạn so sánh mẫu Listing 12 với mẫu Listing 10 bạn sẽ thấy biểu diễn XML đã 
thay đổi như thế nào bởi các tùy chỉnh mới nhất. 
Tùy chỉnh các biểu diễn lược đồ 
Bây giờ bạn đã thấy các tùy chỉnh của BindGen có thể thay đổi biểu diễn XML 
của dữ liệu Java của bạn như thế nào. Các tùy chỉnh cũng có thể được sử dụng để 
kiểm soát một số khía cạnh của cấu trúc lược đồ thực tế. 
Hãy nhớ lại rằng BindGen mặc định sẽ sử dụng các định nghĩa được lồng nhau 
hơn là các kiểu và các phần tử toàn cục. Nếu bạn xem lại lược đồ được tạo ra trong 
Listing 9 bạn sẽ thấy cấu trúc lồng nhau này. Lược đồ chỉ sử dụng ba định nghĩa 
toàn cầu: các kiểu phức hợp địa chỉ (address) và đơn hàng (order) và phần tử 
order. Các lớp khác trong các cấu trúc dữ liệu Java (Customer, Item, và Shipping) 
mỗi thứ được tham chiếu chỉ tại một điểm trong lớp Order do đó các định nghĩa 
kiểu tương ứng được nhúng trực tiếp trong định nghĩa kiểu lược đồ order. 
Bạn có thể thay đổi kiểu dáng của lược đồ bằng cách sử dụng một thuộc tính 
force-mapping="true" trên bất kỳ các phần tử tùy chỉnh lồng nhau nào. Listing13 
cho thấy tệp tin tùy chỉnh custom4.xml, trong đó bổ sung thêm sự thay đổi này cho 
các tùy chỉnh custom2.xml khớp với lược đồ đã tạo ra trong Listing 9: 
Listing 13. Tùy chỉnh cho cấu trúc của lược đồ 
 <class name="Address" includes="street1 street2 city @state @postCode 
country" 
 requireds="street1 city"/> 
 <class name="Customer" includes="customerNumber firstName lastName" 
 requireds="lastName firstName /customerNumber"/> 
 <class name="Order" requireds="/orderNumber customer billTo shipping 
orderDate"/> 
Listing 14 hiển thị cấu trúc lược đồ kết quả (là tệp starter.xsd được tạo ra bằng 
cách chạy đích custgen4). Phiên bản này của lược đồ biểu diễn cùng một cấu trúc 
tài liệu XML giống như là lược đồ trong Listing 9 nhưng bao gồm các định nghĩa 
kiểu riêng biệt khớp với mỗi lớp Java. 
Listing 14. Cấu trúc lược đồ đã tùy chỉnh 
<xs:schema xmlns:xs="" 
 xmlns:tns="" elementFormDefault="qualified" 
 targetNamespace=""> 
 Supported shipment methods. The "INTERNATIONAL" 
shipment 
 methods can only be used for orders with shipping addresses outside the U.S., 
and 
 one of these methods is required in this case. 
 ... 
 Order line item information. 
 Address information. 
 Customer information. 
 Order information. 
 Get the order number. 
 <xs:element type="tns:item" name="item" minOccurs="0" 
maxOccurs="unbounded"/> 
Các lược đồ theo kiểu được hiển thị trong Listing 14, được gọi là các lược đồ kiểu 
"Cửa chớp lật" (Venetian Blind) được sử dụng phổ biến trong các định nghĩa cấu 
trúc XML phức hợp. Bằng cách tách riêng từng định nghĩa kiểu, lược đồ kiểu này 
cho phép bạn dễ dàng sử dụng lại các cấu trúc thành phần khi sửa đổi hoặc mở 
rộng một lược đồ. Tính linh hoạt của lược đồ kiểu “Venetian Blind” có thể không 
quan trọng nếu bạn chỉ lập kế hoạch để sử dụng mã Java của bạn làm cơ sở cho bất 
kỳ thay đổi thêm nào khác (chạy lại BindGen mỗi khi thay đổi mã của bạn), nhưng 
có thể sẽ tốt hơn, nếu bạn dự định sử dụng lược đồ làm cơ sở cho các phát triển 
tiếp theo. 
Các tham số dòng lệnh BindGen 
BindGen hỗ trợ một số tham số dòng lệnh ngoài những tham số đã dùng trong mã 
hướng dẫn. Bảng 1 liệt kê các tùy chọn quan trọng nhất: 
Bảng 1. Các tùy chọn dòng lệnh BuildGen 
Command Purpose 
-b name Tên tệp tin định nghĩa liên kết gốc được tạo ra (tên mặc định là binding.xml). 
-c path Đường dẫn đến tệp tin tùy chỉnh đầu vào. 
-n uri=name,...
Cho cặp URI không gian tên lược đồ và 
tên-tệp tin (mặc định tạo các tên tệp tin từ 
các URI không gian tên lược đồ). 
-p path,... 
Các đường dẫn để nạp các tệp tin lớp Java 
(mặc định là đường dẫn được sử dụng để 
chạy BindGen). 
-s path,... 
Các đường dẫn để nạp các tệp mã nguồn 
Java (nguồn không được sử dụng theo mặc 
định). 
-t path 
Đường dẫn thư mục đích dành cho kết quả 
đầu ra được tạo ra (mặc định là thư mục 
hiện tại). 
-w 
Xoá tất cả các tệp tin khỏi thư mục đích 
trước khi sinh ra kết quả đầu ra (bỏ qua 
nếu thư mục đích cũng là thư mục hiện tại) 
Bạn cũng có thể chuyển cho BindGen các tùy chỉnh toàn cục dưới dạng các tham 
số dòng lệnh mà không cần phải tạo ra một tệp tin tùy chỉnh, bằng cách sử dụng kí 
hiệu -- làm một tiền tố dành riêng cho giá trị của thuộc tính tùy chỉnh. Ví dụ để 
thiết lập cũng các tùy chọn toàn cầu giống như đã dùng trong các tùy chỉnh của 
Listing 13, bạn cần thêm --property-access=true --force-mapping=true vào dòng 
lệnh của BindGen . Không cần dùng dấu nháy kép cho giá trị thuộc tính khi bạn sử 
dụng kỹ thuật này. Nếu bạn muốn thiết lập một tùy chỉnh cho một danh sách nhiều 
giá trị, hãy sử dụng các dấu phẩy để phân cách từng giá trị riêng lẻ chứ không phải 
các khoảng trống (Ví dụ, để bỏ qua các tiền tố m_ và s_ trước các tên trường, bạn 
sử dụng tham số dòng lệnh --strip-prefixes=m_,s_). 
Tiến xa hơn 
Trong hướng dẫn này, bạn đã học những điều căn bản về cách sử dụng JiBX để 
tạo ra một định nghĩa lược đồ XML từ mã Java của bạn và sau đó chuyển đổi các 
tài liệu XML khớp với lược đồ này thành cấu trúc dữ liệu Java và ngược lại. Có rất 
nhiều tùy chỉnh khác mà bạn có thể sử dụng để kiểm soát việc tạo lược đồ, ngoài 
những thứ mà tôi đã trình bày trong hướng dẫn này. Các tài liệu JiBX cung cấp 
đầy đủ các chi tiết về tất cả các lựa chọn tùy chỉnh ấy, cùng với nhiều ví dụ về việc 
tạo lược đồ từ mã Java. 
Bạn thậm chí có thể tiến xa hơn với JiBX bằng cách làm việc với các định nghĩa 
liên kết thực tế; nó sẽ cho phép bạn kiểm soát tất cả các bước của quá trình biến 
đổi. Bạn có thể dễ dàng thêm mã riêng của bạn mà sẽ được thực hiện như là một 
phần của các phép biến đổi, khi sử dụng các móc nối phần mở rộng của người 
dùng xây dựng vào trong định nghĩa liên kết. Bạn thậm chí có thể tự viết các mã 
lệnh tuần tự hóa và không tuần tự hóa tùy biến riêng của bạn để chúng có thể kiểm 
soát có chọn lọc các mã được JiBX tạo ra để xử lý các cấu trúc XML hoặc cấu trúc 
dữ liệu Java duy nhất. Tài liệu JiBX bao gồm một hướng dẫn để minh họa nhiều 
khía cạnh khi làm việc với các định nghĩa liên kết, bao gồm cả các đặc tính mở 
rộng này, cùng với tài liệu tham khảo có tất cả các thông tin chi tiết. 
JiBX đặc biệt tiện lợi khi bạn muốn phát triển một định nghĩa lược đồ một cách 
nhanh chóng để trao đổi dữ liệu mà không cần phải tìm hiểu nhiều về lược đồ. 
Lược đồ XML tiêu chuẩn là phức tạp và các công cụ để làm việc với các định 
nghĩa lược đồ cung cấp rất ít hỗ trợ cho việc tổ chức lại và cấu trúc lại các lược đồ. 
Bằng cách sử dụng mã Java và BindGen làm cơ sở cho sự phát triển lược đồ của 
bạn như đã chỉ ra trong hướng dẫn này, bạn có thể áp dụng tất cả tính linh hoạt của 
các IDE Java để tạo ra định nghĩa lược đồ một cách nhanh chóng và dễ dàng mà 
không phải tự cam kết sử dụng JiBX. 
JiBX cũng bao gồm một công cụ để tạo ra đầy đủ các định nghĩa lược đồ và 
WSDL cho các dịch vụ Web dựa trên mã Java. Công cụ này, có tên Jibx2Wsdl, 
được xây dựng bên trên BindGen. Bạn có thể sử dụng tất cả các tuỳ chỉnh 
BindGen đã bàn luận trong bài viết này cho các lớp dữ liệu được sử dụng làm đầu 
vào và đầu ra cho các phương thức dịch vụ của bạn, sao cho lược đồ được tạo ra sẽ 
phản ánh sở thích của bạn. Tài liệu JiBX cung cấp các chi tiết về cách sử dụng 
Jibx2Wsdl như thế nào. 
Trong Phần 2, bạn sẽ tìm hiểu cách sử dụng JiBX để tạo mã Java từ các định nghĩa 
lược đồ XML. 

File đính kèm:

  • pdfJiBX 1.2, Phần 1_Từ mã Java thành lược đồ XML.pdf
Tài liệu liên quan