Khóa luận Xây dựng dịch vụ web học từ vựng

MỤC LỤC

LỜI NÓI ĐẦU I

BẢNG CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT IV

BẢNG CÁC HÌNH VẼ V

BẢNG CÁC BẢNG BIỂU VII

TÓM TẮT NỘI DUNG VIII

CHƯƠNG 1: GIỚI THIỆU 1

1.1. Đặt vấn đề 1

1.2. Tổng quan về giải pháp 2

1.2.1 Tại sao là dịch vụ Web? 2

1.2.2. Giải pháp Webdict 2

CHƯƠNG 2: TỔNG QUAN VỀ DỊCH VỤ WEB 5

2.1. Giới thiệu dịch vụ Web 5

2.1.1. Dịch vụ web là gì? 5

2.1.2 Đặc điểm của dịch vụ web 5

2.1.2.1. Sự tương kết có một ưu tiên cao nhất 5

2.1.2.2. XML 6

2.1.2.3. WSDL 6

2.1.3. Giao thức dịch vụ web – SOAP 8

2.2. Python 11

2.3. Sphinx 12

2.3.1. Giới thiệu 12

2.3.2. Tính chất 13

2.3.3. Cài đặt 13

2.3.4. Tạo mục lục 14

2.4. CakePHP 15

2.4.1. Giới thiệu 15

2.4.2. Mô hình MVC 16

2.4.3. Sử dụng 17

2.5. OpenID 18

CHƯƠNG 3: PHÂN TÍCH HỆ THỐNG 21

3.1. Phân tích yêu cầu 21

3.1.1. Yêu cầu người sử dụng 21

3.1.2. Yêu cầu hệ thống 21

3.2. Biểu đồ Ca sử dụng 22

3.3. Luồng sự kiện 22

3.3.1. Đăng nhập 22

3.3.2. Tra từ 23

3.3.3. Học từ 23

3.3.4. Đọc báo 24

3.3.5. Quản lý từ vựng 25

CHƯƠNG 4: THIẾT KẾ 26

4.1. Thiết kế hệ thống 26

4.1.1. Biểu đồ tuần tự 26

4.1.1.1. Đăng nhập 26

4.1.1.2. Tra từ 27

4.1.1.3. Học từ 31

4.1.1.4. Đọc báo 32

4.1.1.5. Quản lý từ vựng 33

4.1.2. Biểu đồ hoạt động 33

4.1.2.1. Đăng nhập 34

4.1.2.2. Tra từ 34

4.1.2.3. Học từ 36

4.1.2.4. Đọc báo 37

4.1.2.5. Quản lý từ vựng 38

4.1.3. Biểu đồ lớp 39

4.2. Thiết kế cơ sở dữ liệu 39

4.3. Thiết kế giao diện 43

4.3.1. Đăng nhập 43

4.3.2. Tra/Học từ 44

4.3.3. Đọc báo 44

CHƯƠNG 5: CÀI ĐẶT VÀ THỬ NGHIỆM 46

5.1. Đăng nhập 46

5.2. Tra từ/Học từ vựng 47

5.3. Đọc báo 49

KẾT LUẬN 51

TÀI LIỆU THAM KHẢO 52

 

 

doc67 trang | Chia sẻ: netpro | Lượt xem: 1759 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Khóa luận Xây dựng dịch vụ web học từ vựng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
gần như HTML, tuy nhiên cũng có sự khác biệt. XML được thiết kế theo hướng dữ liệu cần lưu trữ là gì, còn HTML thì thiết kế theo hướng dữ liệu sẽ được trình bày như thế nào (theo trang ). Ví dụ đoạn mã sau: Name here Content here Như trong ví dụ, các thẻ của XML không được định nghĩa trước mà hoàn toàn phụ thuộc vào người dùng. Tuy nhiên vẫn có một chuẩn chung đó là một thẻ mở phải có một thẻ đóng. Trong ví dụ trên nếu là thẻ mở, thì thẻ đóng phải là . Nó được tổ chức theo cấu trúc dạng cây, xuất phát từ gốc và phát triển theo từng nhánh. Như ví dụ trên, gốc là menu, có hai nhánh con là name và content. Điểm mạnh của XML là nó được sử dụng giữa nhiều ngôn ngữ khác nhau. Nếu dùng C# để tạo ra một file XML thì cũng có thể dùng PHP, ASP.Net để đọc file đó. Chính vì thế, XML khá phổ biến, được dùng ở mọi nơi. 2.1.2.3. WSDL Là một ngôn ngữ dựa trên XML, để mô tả, cách thức để truy cập tới một dịch vụ web [2]. WSDL được cung cấp dưới dạng tài liệu XML. Các thẻ cơ bản cần phải có đó là: : Định nghĩa kiểu dữ liệu được sử dụng bởi dịch vụ web : Định nghĩa tin nhắn được sử dụng bởi dịch vụ web : Phương thức được thực thi bởi dịch vụ web : Giao thức truyền thông được sử dụng bởi dịch vụ web Cấu trúc của một tài liệu wsdl như sau:   definition of types........   definition of a message....   definition of a port.......   definition of a binding.... Một tài liệu wsdl cũng có thể chứa các thành phần khác, như thành phần mở rộng. Dưới đây là một ví dụ về tài liệu wsdl (tham khảo từ trang Thành phần định nghĩa “glossaryTerms” là tên của cổng, còn “getTerm” là tên của một phương thức. Phương thức “getTerm” có một tin nhắn vào là “getTermRequest” và một tin nhắn trả về là “getTermResponse”. Tham khảo chi tiết tại trang Giao thức dịch vụ web – SOAP Một giao thức thông dụng khi sử dụng dịch vụ web đó là SOAP. Đơn giản hơn, nó là một giao thức để truy cập dịch vụ web. Mục đích của SOAP là cho phép ứng dụng trao đổi dữ liệu thông qua giao thức HTTP. Phiên bản hiện tại của SOAP là 1.2, được công bố vào ngày 27-04-2007 (theo Các đặc điểm của SOAP: Là một giao thức truyền thông Cho phép hai ứng dụng giao tiếp với nhau Là một định dạng cho phép gửi thông tin Truyền thông tin qua internet Là một nền độc lập Một ngôn ngữ độc lập Dựa trên XML Đơn giản và dễ mở rộng Tại sao lại sử dụng SOAP? Bởi vì nó quan trọng khi phát triển ứng dụng cho phép các ứng dụng trao đổi thông tin qua internet. RPC là một giao thức cũng cho phép các ứng dụng trao đổi thông tin qua internet, nhưng nó thường gặp các vấn đề về bảo mật, nó bị chặn bởi các máy chủ sử dụng proxy, hay tường lửa. Nhưng HTTP được sử dụng bởi tất các trình duyệt web và máy chủ. SOAP cho phép các ứng dụng giao tiếp với nhau trên bất cứ hệ điều hành nào, hay công nghệ và ngôn ngữ khác nhau. Chẳng hạn một chương trình chạy trên máy tính có hệ điều hành Windows 2000 muốn giao tiếp với chương trình chạy trên hệ điều hành Linux, hoặc trên hệ điều hành Solaris. [2] [7] Một tin nhắn dưới dạng SOAP là một tài liệu XML chứa những thành phần như sau: Hình 3. Thành phần của SOAP Thành phần Envelope để xác định tài liệu XML đó là một tin nhắn SOAP Thành phần Header chứa đựng thông tin tiêu đề Thành phần Body chứa đựng yêu cầu và phản hồi. Thành phần Fault chứa đựng thông tin về lỗi và trạng thái. Tin nhắn SOAP phải theo tiêu chuẩn sau: Phải được mã hóa dưới dạng XML Phải sử dụng tên miền khai báo trong phần Envelope Phải sử dụng tên miền đã mã hóa Phải không chứa đựng tham chiếu DTD Phải không chứa đựng chỉ dẫn xử lý XML SOAP được sử dụng thế nào. Một tin nhắn SOAP được gửi tới một website có dịch vụ web với tham số nào đó cần thiết. Website sau đó sẽ phản hồi lại một tài liệu dưới dạng XML có chứa kết quả tìm kiếm. Dưới đây là một tin nhắn SOAP: ... ...     ...   Dưới đây là một ví dụ về tin nhắn SOAP (theo Một yêu cầu SOAP: POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn       IBM   Máy khách gọi tới hàm GetStockPrice với tham số là StockName=IBM. Phản hồi của máy chủ như sau: HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn       34.5   Máy chủ trả về kết quả là GetStockPriceResponse với Price=34.5. Phần thông tin phản hồi này nằm trong Body của tin nhắn SOAP. 2.2. Python Vấn đề lấy dữ liệu từ các báo quan internet cần một ngôn ngữ nhanh và mạnh. Python là ngôn ngữ khá tốt trong xử lý xâu, văn bản. Chẳng hạn tương tác với khối lượng lớn dữ liệu trong các file, hoặc muốn thay đổi tên, hay sắp xếp lại các file hình ảnh theo một tiêu chuẩn phức tạp. Bạn có thể viết mã để chạy trên Unix, hay Windows. Bạn có thể viết một chương trình C/C++/Java, nhưng rất mất thời gian. Python thì rất đơn giản, chạy trên mọi hệ điều hành, Windows, MacOS X, Unix, đồng thời giúp bạn nhanh chóng có kết quả trong công việc. [6] Rất đơn giản để sử dụng. Python mạnh hơn C trong việc kiểm tra lỗi, là một ngôn ngữ bậc cao, hỗ trợ nhiều kiểu dữ liệu, các mảng linh động và từ điển. Python cũng cho phép chia nhỏ chương trình để thành các module để sử dụng lại ở các chương trình khác nhau. Nó cũng có nhiều module có sẵn, như xử lý file, tương tác socket, hay ngay cả bộ giao diện người dùng. Python là một ngôn ngữ thông dịch, nghĩa là không cần biên dịch hay liên kết nào cả, chỉ cần file mã nguồn là có thể chạy chương trình. Python giúp bạn viết chương trình ngắn gọn hơn các ngôn ngữ như C/C++/Java vì các lý do sau đây: Kiểu dữ liệu bậc cao cho phép tối ưu các thao tác phức tạp chỉ trong một câu lệnh - Nhóm câu lệnh được kết thúc bởi dấu lùi đầu dòng thay vì dấu mở ngoặc và đóng ngoặc Không cần thiết khai báo biến. Vì những lý dó trên, nên việc xử lý lấy dữ liệu từ web sử dụng python rất hiệu quả. 2.3. Sphinx 2.3.1. Giới thiệu Sphinx là một cỗ máy tìm kiếm sử dụng full-text, được phân phối giấy phép theo GPL phiên bản 2. Là một cỗ máy tìm kiếm độc lập, nghĩa là nhanh, tối ưu dung lượng, và thích hợp với các ứng dụng khác. Sphinx được thiết kế đặc biệt tương thích với cơ sở dữ liệu SQL. Hiện tại đang hỗ trợ MySQL, PostgreSQL, hoặc dưới dạng XML. Giao diện lập trình ứng dụng tìm kiếm được sử dụng trong nhiều ngôn ngữ, như PHP, Python, Perl, Ruby, Java và cỗ máy lưu trữ MySQL. Nó cũng rất dễ dàng để sử dụng trong một ngôn ngữ mới, chỉ mất thời gian rất ngắn. Sphinx là tên viết tắt từ SQL Phrase Index. Tham khảo thêm tại trang Tại sao phải sử dụng Sphinx để tìm kiếm? Với hệ thống từ điển, dữ liệu là rất lớn, lên đến hơn 500.000 hàng. Nếu như tìm kiếm một từ, chẳng hạn “baby”, bằng cách sử dụng câu lệnh thông thường: “select name, meaning from words where name=’baby’”, thì thời gian tìm kiếm là gần 6 giây. Đó là còn nhanh do từ này có trong cơ sở dữ liệu, nhưng nếu tìm từ babies mà cũng dùng câu lệnh trên: “select name, meaning from words where name=’babies’”, thì thời gian tìm kiếm sẽ rất là lâu, lên đến 12 giây. Nguyên nhân là do với tìm kiếm thông thường, nó sẽ duyệt qua tất cả các hàng trong bảng cho tới khi tìm thấy dữ liệu thỏa mãn. Do đó, nếu từ cần tìm kiếm nằm ở cuối bảng thì thời gian trả về kết quả là rất lâu. Với hệ thống từ điển, nếu cứ dùng cách thông thường này thì người dùng sẽ không bao giờ muốn sử dụng hệ thống. Họ tìm một từ mà thời giản trả về kết quả quá lâu, sẽ khiến họ tức giận và từ bỏ hệ thống. Do đó, Sphinx là một giải pháp tuyệt vời. Nó index dữ liệu, khi tìm kiếm thì tìm trong index của nó, và kết quả trả về nhanh chóng. Như với từ baby ở trên, kết quả trả về trong 0.012 giây, còn nếu không tìm thấy thì thời gian tìm kiếm là 0.000 giây, rất nhanh chóng. Như thế thì thỏa mãn được người dùng, khiến họ muốn sử dụng hệ thống lâu dài. 2.3.2. Tính chất Tốc độ tạo index rất nhanh (10MB/sec) Tốc độ tìm kiếm nhanh (trung bình 0.1sec trên 2-4GB trong tập dữ liệu văn bản) Cung cấp khả năng tìm kiếm phân phối Cung cấp khả tìm kiếm trực tiếp trong cơ sở dữ liệu MySQL Hỗ trợ tìm kiếm theo cụm từ, theo dạng BOOLEAN, theo từ. Hỗ trợ tìm kiếm nhiều trường trong một câu lệnh (tối đa 32) Hỗ trợ tìm kiếm theo stopwords Hỗ trợ tìm kiếm theo UTF-8 Hỗ trợ rất tốt với MySQL, PostgreSQL. Thông tin tại trang 2.3.3. Cài đặt Sphinx hỗ trợ nhiều hệ điều hành khác nhau: Linux, Windows, FreeBSD, NetBSD, Solaris, MacOS X. Để cài đặt Sphinx trên hệ điều hành Windows, trước hết tải Sphinx về từ địa chỉ Giải nén ta sẽ có được thư mục sphinx. Vào thư mục đó, tìm đến /bin/searchd.exe. Thêm đường dẫn tới thư mục bin vào biến môi trường trong windows. Sau đó mở cmd, gõ lệnh sau: C:\Sphinx> C:\Sphinx\searchd --install --config C:\Sphinx\sphinx.conf --servicename SphinxSearch Sau khi tạo xong, sẽ có một dịch vụ mới được tạo ra trong windows, vào services.msc, tìm đến SphinxSearch rồi đặt chế độ khởi động là Automatic. 2.3.4. Tạo mục lục Trong thư mục sphinx có file sphinx.conf, chứa cấu hình của dữ liệu mà ta sẽ tạo ra. Ví dụ tạo mục lục dict như bên dưới: source dict { type = mysql sql_host = localhost sql_user = root sql_pass = sql_db = webdict sql_port = 3306 # optional, default is 3306 sql_query_pre = SET NAMES utf8 sql_query = SELECT id, name, name_search, name_ascii_search, meaning, meaning_search, dictionary_id from words sql_attr_uint = dictionary_id sql_query_post = sql_ranged_throttle = 0 } index dict { source = dict path = /data docinfo = extern mlock = 0 morphology = none min_word_len = 1 charset_type = utf-8 min_prefix_len = 0 min_infix_len = 1 ngram_len = 1 } Phần source là định nghĩa kết nối tới cơ sở dữ liệu. Ở đây có các thiết lập như sql_host, sql_user, sql_pass, sql_db, sql_port. Sau đó là dữ liệu mà sẽ dùng trong index. sql_query = SELECT id, name, name_search, name_ascii_search, meaning, meaning_search, dictionary_id from words sql_attr_uint = dictionary_id Dữ liệu sẽ được lấy ra từ bảng words với các trường như trên. Sql_attr_uint là thuộc tính sẽ dùng để lọc dữ liệu khi tìm kiếm, tức là sẽ lọc theo dictionary_id. Sau khi đã thiết lập xong cấu hình, tạo index bằng cách mở cmd, chạy lệnh sau: indexer –config sphinx.conf dict Như vậy là hoàn thành việc tạo index dữ liệu từ điển. 2.4. CakePHP 2.4.1. Giới thiệu PHP là một ngôn ngữ khá phổ biến trên thế giới. Nhưng nó lại không có một cấu trúc cụ thể trong lập trình, tùy thuộc rất nhiều vào từng người lập trình. Họ có thể tùy biến chương trình của mình theo nhiều cách khác nhau, và đôi khi là theo những cách có thể gây nguy hiểm cho chương trình của họ. Chính vì thế mà khi lập trình với PHP nhiều người sẽ thấy khó khăn và đôi khi là phức tạp. Nhiều đoạn mã lặp lại ở nhiều nơi, hay quên kết nối tới cơ sở dữ liệu … Chính vì thế cần có một bộ khung cho PHP để giúp việc lập trình đơn giản hơn, nhanh chóng hơn và hiệu quả, an toàn hơn. PHP hiện tại đã cho phép lập trình OOP (Object Oriented Programming) – lập trình hướng đối tượng – giống như các ngôn ngữ Java, C++. Từ đây, các nhà phát triển PHP đã dần dần tạo ra những bộ khung giúp cho PHP phát triển nhanh hơn. Trên internet có rất nhiều bộ khung, mỗi cái đều có những quy tắc đặt tên riêng, những cải tiến và cả những lỗi còn tồn tại. Ruby On Rails là một bộ khung khá tốt cho PHP. Tuy nhiên nó vẫn còn một số điểm mà nhiều người lập trình không muốn sử dụng nó: Sử dụng nó trong PHP giống như là phải viết cả một hệ thống, khó tùy chỉnh mã nguồn theo ý của từng nhà lập trình. CakePHP thì đơn giản hơn rất nhiều, nó cung cấp cấu trúc tương thích cho một ứng dụng PHP. 2.4.2. Mô hình MVC [1] [5] MVC là tên viết tắt của Model-View-Controller. Tại sao lại có mô hình này? Bình thường khi lập trình thì mọi xử lý dữ liệu, xử lý logic đều trong một file. Chẳng hạn khi kết nối tới cơ sở dữ liệu. Trong nhiều file chúng ta đều phải sử dụng tới nó, như thế mã lặp đi lặp lại rất nhiều. Nếu có thay đổi trong kết nối thì lại phải sửa ở từng file, rất mất thời gian, không hiệu quả. Trong một file vừa cập nhật dữ liệu vào cơ sở dữ liệu, vừa xử lý logic, vừa hiển thị tới người dùng. Như vậy rất khó kiểm soát mã nguồn, người đọc mã nguồn cũng rất khó hiểu. Còn một vấn đề nữa. Một ứng dụng có nhiều người cùng phát triển. Làm thế nào để phân chia công việc cho từng người một cách cụ thể khi mà mỗi một file đều tồn tại nhiều xử lý logic, liên quan tới cơ sở dữ liệu. Chẳng hạn có người chỉ làm về giao diện, có người chỉ làm về cơ sở dữ liệu. Rõ ràng, với cách truyền thống thì việc phân chia công việc sẽ không hiệu quả. Chính vì thế mô hình MVC ra đời, giải quyết được các vấn đề trên, đem lại một phong cách lập trình khá hiệu quả. Không chỉ ngôn ngữ PHP mà rất nhiều ngôn ngữ khác, như Java, ASP.Net … đều hỗ trợ. Hình 4. MVC Ứng dụng sử dụng MVC được chia thành ba phần riêng biệt: Bộ điều khiển (Controller): Chứa đựng các xử lý logic. Mỗi một bộ điều khiển chứa nhiều phương thức xử lý riêng biệt các yêu cầu. Nó nhận và xử lý dữ liệu từ mô hình, đồng thời tạo ra các đối tượng sẽ được sử dụng ở khung nhìn. Mô hình (Model): Là thể hiện dữ liệu. Nó kết nối tới cơ sở dữ liệu, xử lý mọi vấn đề về dữ liệu, như truy vấn lấy dữ liệu, hay cập nhật, hay xóa… Không có một tương tác nào giữa mô hình và khung nhìn, tất cả tương tác với khung nhìn được xử lý thông qua bộ điều khiển. Khung nhìn (View): Là một mẫu file dùng để trình bày dữ liệu tới người dùng. Các biến, mảng, hay đối tượng sử dụng trong khung nhìn được khởi tạo ở trong bộ điều khiển. Khung nhìn không chứa các xử lý logic phức tạp. Khi mới làm quen với MVC thì mất một chút thời gian, nhưng khi đã tạo được ứng dụng rồi thì chắc chắn bạn sẽ không muốn viết ứng dụng theo cách truyền thống nữa. 2.4.3. Sử dụng Để sử dụng CakePHP, trước hết vào trang tải xuống bản CakePHP mới nhất. Sau đó giải nén ra, sẽ được thư mục CakePHP. Thêm đường dẫn vào biến môi trường trong windows, trỏ tới thư mục cake/console. Để sử dụng được CakePHP thì trong cấu hình của apache phải bật LoadModule rewrite_module modules/mod_rewrite.so bằng cách bỏ dấu # ở đầu dòng trong file htttpd.conf. Cấu trúc thư mục của một ứng dụng phát triển bằng CakePHP như bên dưới: /path_to_app config/ controllers/ models/ plugins/ tmp/ vendors/ views/ webroot/ index.php .htaccess Có ba thư mục quan trọng, đó là controllers, models và views. config: Chứa các cấu hình về cơ sở dữ liệu. controllers: Chứa các bộ điều khiển models: Chứa các mô hình views: Chứa các khung nhìn webroot: Chứa các file javascript, css … Sau khi đã tạo xong ứng dụng, bắt đầu lập trình bằng cách vào controllers, models, views để tạo ra các mô hình, bộ điều khiển và khung nhìn mới tùy theo yêu cầu của ứng dụng. 2.5. OpenID OpenID là tương lai của dịch vụ web. Mỗi người chỉ cần một tài khoản email duy nhất trên mạng (tham khảo thêm tại Bạn có thể dùng nó để đăng nhập vào mọi trang web. OpenID được phát triển bởi Brad Fitzpatrick vào tháng 5/2005. Trang chủ của OpenID ở địa chỉ Hiện nay rất nhiều nhà cung cấp dịch vụ mạng đã hỗ trợ OpenID. Chẳng hạn như Google hay Yahoo. Có nghĩa là nếu bạn có một tài khoản email abcxyz@gmail.com hay abcdef@yahoo.com, và trang web có hỗ trợ OpenID, bạn có thể dùng tài khoản đó và đăng nhập vào trang web mà không phải mất thời gian đăng ký tài khoản rồi lại phải nhớ thêm một tài khoản nữa. Các nhà cung cấp OpenID, thông tin được lấy từ địa chỉ Google Yahoo Microsoft Facebook LiveJournal MySpace WordPress Blogger Verisign Typepad MyOpenID Google Profile Vidoop Orange Launchpad Bảng 1. Các nhà cung cấp OpenID Hệ thống sử dụng OpenID do Google cung cấp. Một chương trình nhỏ mã nguồn mở do Google cung cấp, tải về tại địa chỉ Khi người dùng chọn đăng nhập với tài khoản Gmail, thì một cửa sổ popup hiện ra, yêu cầu nhập Email và Mật khẩu. Toàn bộ quá trình xử lý do Google. Khi đăng nhập xong thì kết quả trả về là Email đã đăng nhập. Sử dụng chương trình này rất đơn giản. Khi tải về, giải nén ra có tệp quan trọng là popuplib.js. Trước hết trỏ đường dẫn tới tệp đó trong dự án của bạn. Sau đó khai báo hai biến như bên dưới. var extensions = {"openid.ns.ext1":"http:\/\/openid.net\/srv\/ax\/1.0", "openid.ext1.mode":"fetch_request", "openid.ext1.type.email":"http:\/\/axschema.org\/contact\/email", "openid.ext1.type.first":"http:\/\/axschema.org\/namePerson\/first", "openid.ext1.type.last":"http:\/\/axschema.org\/namePerson\/last", "openid.ext1.type.country":"http:\/\/axschema.org\/contact\/country\/home", "openid.ext1.type.lang":"http:\/\/axschema.org\/pref\/language", "openid.ext1.required":"email,first,last,country,lang", "openid.ns.oauth":"http:\/\/specs.openid.net\/extensions\/oauth\/1.0", "openid.oauth.consumer":"googlecodesamples.com", "openid.oauth.scope":"http:\/\/docs.google.com\/feeds\/ http:\/\/spreadsheets.google.com\/feeds\/ http:\/\/www-opensocial.googleusercontent.com\/api\/people\/", "openid.ui.icon":"true"}; var upgradeToken = function() {window.location = '/webdict/'; }; var googleOpener = popupManager.createPopupOpener({ 'realm' : ' 'opEndpoint' : 'https://www.google.com/accounts/o8/ud', 'returnToUrl' : ' 'onCloseHandler' : upgradeToken, 'shouldEncodeUrls' : true, 'extensions' : extensions }); Extensions không được thay đổi. Còn googleOpener có ba cấu hình quan trọng. Thứ nhất là ‘realm’, đây là địa chỉ mà chúng ta đăng ký và đã được Google xác nhận. Thứ hai là ‘opEndpoint’ là địa chỉ openid của Google, không được thay đổi. Thứ ba là ‘returnToUrl’ là địa chỉ sau khi đăng nhập thành công sẽ được Google trỏ về. Cuối cùng, có một đường link với id LoginWithGoogleLink. Thêm gọi hàm bên dưới là chương trình của bạn đăng nhập được với Gmail. $(document).ready(function () { jQuery('#LoginWithGoogleLink').click(function() { googleOpener.popup(450, 500); return false; }); }); CHƯƠNG 3: PHÂN TÍCH HỆ THỐNG 3.1. Phân tích yêu cầu 3.1.1. Yêu cầu người sử dụng - Không cần đăng ký tài khoản khi đăng nhập. Sử dụng tài khoản Gmail có sẵn hoặc đăng ký mới tài khoản Gmail thông qua địa chỉ - Hệ thống phải cung cấp cho phép người dùng tìm kiếm một từ nhanh chóng, có phát âm chuẩn, có hình ảnh kèm theo để dễ ghi nhớ. - Học từ theo từ điển: Hiện các từ liên tiếp nhau. Phải cho phép người dùng lưu lại một từ vào từ điển của họ. - Đọc báo: Nội dung của tin tức phải được hiển thị ở vị trí thuận tiện cho người đọc. - Nội dung tin tức phải phong phú, thuận tiện cho người dùng tìm được tin mong muốn. Đọc báo phải giúp tăng khả năng từ vựng của người dùng. 3.1.2. Yêu cầu hệ thống Từ yêu cầu phía người sử dụng, hệ thống có các chức năng sau: Đăng nhập hệ thống: Sử dụng chính Gmail để đăng nhập. Tra từ: Hệ thống sẽ tìm trong cơ sở dữ liệu từ phù hợp nhất và hiện nghĩa, đồng thời có phát âm đi kèm, có ảnh minh họa từ đó. Các ảnh minh họa được lấy từ Google, đảm bảo kết quả phù hợp nhất với từ được tra. Đồng thời còn tìm kiếm theo các từ tương tự nếu từ gõ vào không tìm thấy. Chẳng hạn gõ babies thì sẽ tìm ra được baby. Học từ: Hiện lên các từ liên tiếp nhau sau mỗi mười lăm giây. Cho phép dừng học từ bằng cách nhấn nút Pause. Có nút cho hiện từ ngay trước từ hiện tại, từ ngay sau từ hiện tại. Đọc báo: Các tin tức được lấy từ báo nước ngoài. Được phân loại theo chuyên mục, dễ dàng tìm được tin tức mong muốn. Khi đọc chi tiết một tin thì chỉ hiển thị tin đó trong tầm nhìn cửa sổ. Nếu tin đó dài quá thì sẽ được cắt thành nhiều trang. Khi đó có nút cho sang trang sau, trở về trang trước. Có một tập các từ thông dụng, coi như người dùng nào cũng biết, chẳng hạn như will, has, have, go, do … Kết hợp với các từ có trong cơ sở dữ liệu của riêng từng người dùng, khi đọc tin sẽ chỉ bôi đậm các từ không có trong tập dữ liệu trên. Khi người dùng rê chuột lên từ đó, một cửa sổ con hiện lên nghĩa đầy đủ, có phát âm đi kèm. Cửa sổ hiện lên tự động định vị trong phạm vi khung nhìn, không tràn ra phía ngoài phạm vi cửa sổ. 3.2. Biểu đồ Ca sử dụng Hình 5. Biểu đồ Ca sử dụng Biểu đồ Ca sử dụng hệ thống có hai tác nhân, đó là Người dùng và Web Service. Có năm chức năng chính, đó là Tra từ, Đăng nhập, Từ vựng của tôi, Học từ và Đọc báo. 3.3. Luồng sự kiện 3.3.1. Đăng nhập Bảng 2. Luồng sự kiện Đăng nhập Tên Ca sử dụng Đăng nhập Tác nhân Người dùng, Web Service Mức 2 Sự kiện kích hoạt Người dùng nhấn vào đăng nhập Luồng sự kiện chính: Hiện lên cửa sổ yêu cầu nhập Gmail và mật khẩu Nhấn nút Sign in Dịch vụ của Google thực hiện đăng nhập Đăng nhập thành công, quay lại trang chủ Luồng sự kiện phụ: 3.1 Đăng nhập thất bại, yêu cầu đăng nhập lại. Tên Ca sử dụng Tra từ Tác nhân Người dùng, Web Service Mức 3 Sự kiện kích hoạt Người dùng nhập từ cần tìm kiếm Luồng sự kiện chính: Nhấn nút Tra từ Truy vấn đến web service với từ đã nhập Tìm thấy kết quả Hiển thị kết quả tìm được bao gồm nghĩa, phát âm, hình ảnh minh họa. Người dùng chọn thêm từ vựng vào cơ sở dữ liệu Luồng sự kiện phụ: 2.1. Không tìm thấy từ cần tra. Lược bỏ đuôi theo quy tắc rồi tìm lại. 2.1.1. Không tìm thấy, thông báo không có trong cơ sở dữ liệu. 5.1. Kiểm tra trạng thái đăng nhập. 5.1.1. Đã đăng nhập, thêm từ vào cơ sở dữ liệu. 5.1.2. Chưa đăng nhập, yêu cầu đăng nhập. 3.3.2. Tra từ Bảng 3. Luồng sự kiện Tra từ 3.3.3. Học từ Bảng 4. Luồng sự kiện Học từ Tên Ca sử dụng Học từ vựng Tác nhân Người dùng, Web Service Mức 1 Sự kiện kích hoạt Người dùng nhấn nút Play Luồng sự kiện chính: Hệ thống tìm từ tiếp theo của từ hiện tại. Truy vấn tới chức năng Tra từ với từ tiếp theo tìm thấy. 3.3.4. Đọc báo Bảng 5. Luồng sự kiện Đọc báo Tên Ca sử dụng Đọc báo Tác nhân Người dùng, Web Service Mức 1 Sự kiện kích hoạt Người dùng chọn chức năng đọc báo Luồng sự kiện chính: Người dùng chọn trang web muốn đọc Tìm những bài viết mới nhất từ trang đó Người dùng chọn đọc chi tiết một tin Truy vấn từ vựng đã học của người này Hiển thị thông tin bài viết Hiển thị kết quả tìm được, hightlight từ vựng chưa học Hiển thị thông tin bài viết Người dùng di chuột lên từ vựng đã hightlight Truy vấn nghĩa của từ đã chọn Hiển thị cửa sổ nghĩa của từ. 3.3.5. Quản lý từ vựng Bảng 6. Luồng sự kiện Quản lý từ vựng Tên Ca sử dụng Quản lý từ vựng của tôi Tác nhân Người dùng, Web Service Mức 2 Sự kiện kích hoạt Người dùng chọn chức năng quản lý từ vựng Luồng sự kiện chính: Tìm kiếm ID của người dùng Hiển thị từ vựng của người dùng Người dùng chọn chức năng Thực hiện chức năng CHƯƠNG 4: THIẾT KẾ 4.1. Thiết kế hệ thống Hình 6. Thiết kế tổng quan hệ thống Hệ thống có bốn thành phần chính, bao gồm Máy chủ web, máy khách web, máy chủ SOAP và máy khách SOAP. Máy chủ và máy khách web giao tiếp với nhau thông qua giao thức HTTP. Nói cách khác là người dùng sẽ dùng trình duyệt để học tập trên hệ thống. Máy chủ là nơi lưu trữ mã nguồn, dữ liệu về từ điển. Máy khách web giao tiếp với máy khách SOAP thông qua giao thức SOAP. Nhìn vào hệ thống ta thấy máy chủ web và máy chủ SOAP là riêng biệt, tức là có thể phát triển nhiều hệ thống khách nhau và dùng cùng một máy chủ SOAP được. Nội dung thiết kế được tham khảo ở phần [3] [4]. 4.1.1. Biểu đồ tuần tự 4.1.1.1. Đăng nhập Hình 7. Biểu đồ tuần tự chức năng Đăng nhập - Chức năng đăng nhập được thực hiện khi người dùng nhấn vào liên kết “Đăng nhập với Gmail”. - Một cửa sổ popup được hiện lên yêu cầu nhập Email và Password. Tại đây, mọi xử lý đều do Google. - Kết quả trả về khi đăng nhập xong là thông tin về Email của người dùng. 4.1.1.2. Tra từ - Chức năng được thực hiện khi người dùng gõ từ vào ô tìm kiếm. - Khi đang gõ, chức năng gợi ý từ được thực hiện: Khi từ được gõ lớn hơn hoặc bằng hai ký tự, chuỗi đó sẽ được gửi lên máy chủ, máy chủ tìm kiếm các từ bắt đầu bằng chuỗi đó, trả lại và hiển thị ra cho người dùng dưới dạng một danh sách. - Hàm search() ở DictsController được gọi . Hàm này sẽ khởi tạo dịch vụ web và gọi hàm searchdict() với tham số search_term. Search_term là một mảng bao gồm: search_term[‘search_term’] và search_term[‘dict_id’]. - Hàm searchdict() mà dịch vụ web thực hiện được mô tả như hình dưới. Đầu tiên Model kết nối tới máy chủ Sphinx. Sau đó truy vấn dữ liệu thông qua index của Sphinx, trả về kết quả là một mảng id từ vựng tìm thấy thỏa mãn từ cần tìm. Có một điểm lưu ý, Sphinx tìm kiếm không như kiểu thông thường khi dùng lệnh SQL. Chẳng hạn nếu tìm từ baby, dùng SQL thông thường thì câu lệnh là “Select * from words where name=’baby’”, tuy nhiên Sphinx không tìm kiếm như thế. Kết quả trả về thường nhiều hơn. Do đó có bước findId(search_term). Bước này sẽ tìm ra từ chính xác mà người dùng đã gõ vào. - Nếu như không tìm thấy, tức id==’’, ta loại bỏ đuôi theo quy tắc số nhiều, quá khứ trong tiếng anh. Lúc này có được search_term_new. Tìm kiếm cho tới khi tìm thấy. - Nếu đã tìm thấy, tức id!=’’, truy vấn dữ liệu của từ này trong cơ sở dữ liệu. - Trả về cho dịch vụ web. Hình 8. Biểu đồ tuần tự chức năng Tra từ - Searchdict - Có được dữ liệu từ dịch vụ web, hiển thị cho người dùng. - Người dùng chọn Thêm vào từ vựng của tôi. Tiến hành kiểm tra xem đã đăng nhập hay chưa. Nếu chưa thì yêu cầu đăng nhập. Ngược lại thêm từ này vào cơ sở dữ liệu và thông báo thành công. Hình 9. Biểu đồ tuần tự chức năng Tra

Các file đính kèm theo tài liệu này:

  • docBui Quang Trung_K51CNPM_Khoa luan tot nghiep dai hoc.doc