Thuật toán được cài đặt bằng ngôn ngữ lập trình Java chạy trên phiên bản SDK 1.5.0 trở lên. Các CSDL quan hệ được sử dụng trong chương trình có thể được tạo lập từ môi trường CSDL MS Access hoặc SQLServer. Các tài liệu XML có thể được tạo lập trong môi trường soạn thảo WordPad, NotePad, XML Editor,... Chi tiết và giao diện cài đặt cụ thể thuật toán tích hợp các hệ thống CSDL quan hệ và XML được mô phỏng như sau:
Đọc tài liệu XML dưới dạng sơ đồ hình cây
Một tài liệu XML được đọc vào trong chương trình được hiển thị dưới dạng một cấu trúc hình cây được thể hiện qua giao diện sau:
Trong phần này, lớp DOMTreeTest được xây dựng để hiển thị một tài liệu XML bằng việc sử dụng mô hình DOM, với việc đưa vào một số thư viện xử lý DOM cũng như các sự kiện:
import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.*;
public class DOMTreeTest extends JInternalFrame {
public static Document doc = null; public static File f;
public DOMTreeTest(File f) {
super("DOM Tree Test", true, true, true, true); this.f = f;
try {
if (builder == null) {
// Create new instance from Factory Pattern Class
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder();
}
doc = builder.parse(f);
JTree tree = new JTree(new DOMTreeModel(doc)); tree.setCellRenderer(new DOMTreeCellRenderer()); setContentPane(new JScrollPane(tree));
validate(); }
{
JOptionPane.showMessageDialog(this, exception); }
catch (ParserConfigurationException exception) {
JOptionPane.showMessageDialog(this, exception); }
catch (SAXException exception) {
JOptionPane.showMessageDialog(this, exception); }
setTitle("DOMTreeTest"); }
private DocumentBuilder builder; }
Lớp DOMTreeModel được xây dựng để mô tả cấu trúc cây trong java, với các phương thức được xây dựng:
getRoot(): lấy phần tử gốc trong tài liệu
getChildCount(Object parent): Lấy danh sách các node con
getChild(Object parent, int index): Lấy note con tương ứng với chỉ số index được chỉ ra trong danh sách các con tìm được.
getIndexOfChild(Object parent, Object child): Lấy chỉ số tương ứng của phần tử con trong danh sách.
isLeaf(Object node): Kiểm tra xem một node có là lá không.
Lớp DOMTreeCellRenderer với các phương thức: Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus), elementString(Element e) và characterString(CharacterData node) được xây dựng để chuyển cấu trúc cây thành các định dạng String để hiển thị tài liệu dưới dạng cấu trúc cây.
Chuyển đổi một tài liệu XMl thành một CSDL quan hệ
Một tài liệu XML được tạo lập theo đúng cấu trúc yêu cầu sẽ được chuyển đổi và hiển thị dưới dạng một bảng CSDL quan hệ.
Ví dụ: Có tệp Test.xml với nội dung như sau
<?xml version="1.0" encoding="UTF-8"?> <employee> <row> <emp_id type="java.lang.String">CFH28514M</emp_id> <fname type="java.lang.String">Carlos</fname> <minit type="java.lang.String">F</minit> <lname type="java.lang.String">Hernadez</lname> <job_id type="java.lang.Short">5</job_id> <job_lvl type="java.lang.Byte">211</job_lvl> <pub_id type="java.lang.String">9999</pub_id> <hire_datetype="java.sql.Timestamp">1989-04-21 00:00:00.000</hire_date> </row> <row> <emp_id type="java.lang.String">JYL26161F</emp_id> <fname type="java.lang.String">Janine</fname> <minit type="java.lang.String">Y</minit> <lname type="java.lang.String">Labrune</lname> <job_id type="java.lang.Short">5</job_id> <job_lvl type="java.lang.Byte">172</job_lvl> <pub_id type="java.lang.String">9901</pub_id>
<hire_date type="java.sql.Timestamp">1991-05-26 00:00:00.000</hire_date> </row> <row> <emp_id type="java.lang.String">HAN90777M</emp_id> <fname type="java.lang.String">Helvetius</fname> <minit type="java.lang.String">A</minit> <lname type="java.lang.String">Nagy</lname> <job_id type="java.lang.Short">7</job_id>
<job_lvl type="java.lang.Byte">120</job_lvl> <pub_id type="java.lang.String">9999</pub_id>
<hire_date type="java.sql.Timestamp">1993-03-19 00:00:00.000</hire_date> </row>
</employee>
Sau khi chọn chức năng chuyển đổi một tài liệu XML thành một CSDL quan hệ, bảng CSDL quan hệ được hiển thị như sau:
Lớp ConvertToTable được xây dựng để thể hiện thuật toán này. Trong lớp này, các phương thức được xây dựng:
buildContent(): Xây dựng nội dung của bảng dữ liệu, trong đó phương thức buildTable(NodeList list) được gọi để xây dựng nội dung cho bảng CSDL quan hệ tương ứng với cấu trúc DOM thu được từ tài liệu XML.
Phương thức buildTable(NodeList list) được xây dựng để ánh xạ một tài liệu XML thành một bảng CSDL quan hệ theo các nguyên tắc ánh xạ.
Chuyển một CSDL quan hệ thành một tài liệu XML
Để chuyển một CSDL quan hệ được tạo lập từ môi trường MS Access hay SQLServer, ta thực hiện các bước như sau:
Bước 1: Tạo kết nối ODBC
- Vào màn hình ODBC Data Source Administrator của Windows.
- Chọn trang User DNS và bấm chọn nút lệnh “Add” để tạo nguồn dữ liệu mới.
- Chọn Driver của CSDL cần chuyển đổi sang tài liệu XML.
- Chọn CSDL nguồn và khai báo tên cho nguồn dữ liệu ODBC sẽ được tạo ra.
- Bấm nút lệnh “Finish” để kết thúc việc tạo kết nối dữ liệu ODBC.
Bước 2: Tạo kết nối với JDBC-ODBC bằng ngôn ngữ Java.
- Trong chương trình dùng lớp ConnectData() để thực hiện chức năng này. - Chuyển đổi từ dữ liệu ODBC sang tài liệu XML. Trong chương trình sử dụng lớp Gennerate() và lớp DisplayData() để thực hiện chức năng này. Lớp Gennerate() cho phép tạo kết nối và xử lý câu lệnh SQL để kết xuất nội dung tài liệu chuyển đổi. Lớp DisplayData() đọc CSDL được tạo ra từ câu lệnh SQL nói trên và tổ chức lưu trữ dữ liệu dưới dạng tài liệu XML.
Giao diện yêu cầu nhập vào tên của dữ liệu ODBC cần chuyển đổi, khi nhập đúng, chọn OK giao diện xuất hiện tiếp theo sẽ yêu cầu người dùng gõ vào câu lệnh SQL rồi chọn Create để kết xuất dữ liệu mong muốn sang tài liệu XML.