C ƢƠN 3 PHÁT TRIỂN HỆ THỐNG TRUY VẤN DỮ LIỆU TÙY
3.2. MƠ HÌNH CHUYỂN ĐỔI CÂU TRUY VẤN NNTN SANG SQL VÀ
3.2.2. Chuyển đổi sang câu truy vấn Insert
a. Chuyển từ ngôn ngữ tự nhiên sang SQL
Quá trình chuyển đổi câu truy vấn NNTN trƣờng hợp Truy vấn Insert sang câu truy vấn SQL dựa vào việc phân tích ngữ nghĩa ở mức độ ngữ nghĩa từ vựng, biểu hiện các ý nghĩa của những từ thành phần.
Bƣớc 1: Xác định thành phần của câu truy vấn Insert bằng NNTN có cấu trúc
tƣơng ứng với cấu trúc câu truy vấn SQL
Dựa vào tìm hiểu về cấu trúc, thành phần của câu truy vấn INSERT ở chƣơng I, có thể thấy thành phần chính của câu gồm:
Insert into: phía sau từ khóa Insert into là chỉ định tên của bảng muốn thêm
hàng.
Values: sau từ khóa From là danh sách các giá trị trong hàng cần thêm. Select expression: Trả về các dịng giá trị cần thêm vào trong bảng đích.
Để xác đinh các thành phần của câu INSERT, mơ hình cũng sử dụng kỹ thuật ánh xạ các từ vào bộ từ điển để tìm ra vị trí của từng thành phần của câu INSERT trong truy vấn bằng NNTN. Bộ từ điển đƣợc xây dựng nhƣ Bảng 3.1.
ảng Danh sách từ và giá trị tương trong thành phần câu INSERT
Từ khóa Từ ó tƣơn ứng trong SQL
“insert”, “add”, “append”, “enter”, “insertion”, “get into”, “sell into”, ”entered into”, “join in”, “join into”
Insert into
“values”, “include”, “worth”, “scope”,”fair
value”, “import” Values
“put”, “initialize”,”fill”, “introduce”,
“selective”, “select show” Select expression
Từ câu truy vấn của ví dụ trên, xác định các thành phần của câu truy vấn đó nhƣ sau:
Insert into: là từ append và các từ khóa “First Name”, “Last Name” phía sau
là chỉ định tên của bảng muốn thêm hàng.
Values: : là từ worth và từ khóa “Contact” là danh sách các giá trị trong hàng
cần thêm.
Select expression: là từ put và cụm từ khóa “Last Name” trả về các dòng giá
trị cần thêm vào trong bảng đích.
Bƣớc 2: Sau khi xác định đƣợc các thành phần của câu truy vấn, sử dụng kỹ
thuật ánh xạ các thuộc tính, bảng có tên gọi bằng NNTN với bộ từ điển đƣợc xây dựng để xác định tên đƣợc quy định trong CSDL. Cuối cùng tiến hành tổng hợp các thành phần xác định đƣợc của câu truy vấn để tạo thành câu truy vấn SQL hoàn chỉnh.
Ví dụ:
Sau khi xác định các thành phần, ta đƣợc câu nhƣ sau: INSERT “Last Name”,
“First Name” VALUES “Contact”
Tiến hành ánh xạ để tạo thành câu truy vấn SQL hoàn chỉnh:
INSERT name, prename VALUES contact
b. Chuyển đổi sang câu truy vấn SPARQL
Ví dụ với câu truy vấn SQL: INSERT “Last Name”, “First Name” VALUES “Contact” đã tạo đƣợc ở bƣớc chuyển đổi câu truy vấn bằng NNTN sang câu truy vấn
SQL. Các bƣớc chuyển đổi sang câu truy vấn SPARQL nhƣ sau:
Bƣớc 1: Câu truy vấn SQL đƣợc phân tích để xác định các bảng, trƣờng dữ
liệu, và mệnh đề WHERE và GROUP BY nếu có.
INSERT name, prename: thuộc tính name, prename. VALUES contact: bảng contact.
Bƣớc 2: Xác định các tiền tố PREFIX của SPARQL dựa vào các bảng đã xác
định đƣợc trong Bƣớc 1 và URI tƣơng ứng đã đƣợc khai báo. Ví dụ với bảng contact sẽ có PREFIX là:
PREFIX contact: <http://www.semanticweb.org/itc/ontologies/2016/3/contact#>
Bƣớc 3: Mệnh đề INSERT SPARQL đƣợc tạo ra bằng cách mỗi “thuộc_tính”
sẽ đƣợc định dạng là “?thuộc_tính”.
Ví dụ: INSERT name, prename đƣợc biến đổi thành INSERT ?name ?prename Bƣớc 4: Thành phần đầu tiên của mệnh đề VALUES SPARQL là kết quả của
quá trình tạo các mẫu bộ ba từ các thuộc tính trong mệnh đề INSERT SQL, đƣợc tạo ra bằng cách thêm một biến cho mọi thuộc tính dữ liệu trong danh sách INSERT SQL. Cấu trúc tổng quan nhƣ sau:
?gia trị :thuộc_tính ?thuộc_tính.
Ví dụ: thuộc tính name, prename trong bảng contact đƣợc tạo với cấu trúc nhƣ
sau:
?x contact:name ?name.
?x contact:prename ?prename.
Nếu câu INSERT có nhiều giá trị, thì hệ thống sẽ tự gán mỗi giá trị ?biến khác nhau. Ví dụ có thêm thuộc tính salary của bảng contract thì câu đƣợc tạo nhƣ sau:
?x contact:name ?name.
?x contact:prename ?prename. ?y contract:salary ?salary. )
Bƣớc 5: Tích hợp các kết quả từ bƣớc 2 đến bƣớc 5 để tạo thành câu truy vấn
INSERT SPARQL hồn chỉnh.
Với ví dụ trên, câu truy vấn SPARQL hồn chỉnh nhƣ sau:
PREFIX contact: <http://www.semanticweb.org/itc/ontologies/2016/3/contact#> INSERT ?prename ?name
VALUES {
?x contact:prename ?prename. ?x contact:name ?name. }