Đồ án Phát triển engine đa ngữ cho giải pháp cổng thông tin Zope-Plone và ứng dụng trong xây dựng website bộ môn

Công nghệ Zope và Plone là một trong những công nghệ phát triển ứng dụng web mạnh nhất hiện nay. Trong Zope cũng như trong Plone được tích hợp rất nhiều ứng dụng và công nghệ mạnh cho phép chúng ta phát triển ứng dụng web. Zope và Plone đều là nguồn mở và có cộng đồng phát triển rất lớn và được hỗ trợ bởi nhiều người, nhiều công ty và tổ chức chính vì vậy mà Zope và Plone sẽ rất phát triển trong tương lai. Zope và Plone đều được phát triển chủ yếu dựa trên ngôn ngữ Python – ngôn ngữ nguồn mở. Trong tương lai chắc chắn Zope – Web Application Server và Plone – Content Management System sẽ phát triển rất mạnh. Hiện nay Zope và Plone được sử dụng rất rộng rãi. Việc tìm hiểu công nghệ Zope và Plone rất có ích và rất thực tế, với việc nắm được hai công nghệ này thì chúng ta có thể phát triển các ứng dụng web một cách dễ dàng và sẽ nâng cao được công nghệ và kinh nghiệm của bản thân Việc phát triển engine đa ngữ cho Zope tạo ra khả năng đa ngữ mạnh mẽ, đem lại lợi ích rất lớn cho việc phát triển giải pháp cổng thông tin này. Nó khiến cho các portal phát triển trên nền Zope sẽ có tính mở và tính phục vụ cao hơn đối với đông đảo người dùng Các kết quả chính đạt được trong quá trình làm đồ án: o Xây dựng cơ sở lý thuyết cơ bản về Zope-Plone o Dựng phần mềm khung cổng thông tin bằng việc tích hợp một số tính năng hỗ trợ o Phát triển và tích hợp engine đa ngữ cả nội dung và giao diện cho phần mềm khung này o Xây dựng website bộ môn trên phần mềm khung này Trong quá trình làm đồ án em đã hoàn thành các yêu cầu đặt ra như vậy tuy nhiên kết quả đạt được vẫn còn một số hạn chế do thời gian không cho phép cũng như nó nằm ngoài phạm vi của đề tài: o Engine đa ngữ này xây dựng cụ thể cho giải pháp cổng thông tin Zope-Plone chứ không áp dụng được cho các cổng thông tin khác tuy nhiên cơ chế đa ngữ của nó có thể áp dụng cho các giải pháp cổng thông tin khác có kiến trúc hướng đối tượng, sử dụng CSDL hướng đối tượng vì như vậy nó mới tối ưu o Ứng dụng website bộ môn vẫn còn một số hạn chế như đã nêu trong phần trên

doc75 trang | Chia sẻ: oanh_nt | Lượt xem: 1173 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Phát triển engine đa ngữ cho giải pháp cổng thông tin Zope-Plone và ứng dụng trong xây dựng website bộ môn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
gày càng trở nên vô cùng quan trọng đối với mọi tổ chức, cá nhân. Lượng thông tin trao đổi, xử lý trên các ứng dụng web càng ngày càng lớn và rất phong phú về chủng loại nên việc quản lý sao cho thật tốt các thông tin đó là vấn đề cốt yếu đối với các ứng dụng web. Ta có thể thấy rằng hệ quản trị nội dung là một trong những phần quan trọng nhất của các ứng dụng web, nó quyết định sự thành công và khả năng phát triển của ứng dụng Web. Chúng ta có thể tưởng tượng một tổ chức lớn như tổng công ty bưu chính viễn thông hoặc các bộ ngành chẳng hạn thì lượng thông tin phải xử lý trong một thời điểm lớn cỡ nào. Nếu như với những tổ chức lớn như vậy mà thông tin không được tổ chức và quản lý một cách khoa học và có tổ chức thì hệ thống của các tổ chức đó có thể tồn tại và ngày càng phát triển tốt như vậy không. 2.4.3 Điểm mạnh của hệ quản trị nội dung Plone Plone là một hệ quản trị nội dung nguồn mở được xây dựng trên Zope. Đây là một hệ quản trị nội dung rất mạnh cũng được xây dựng chủ yếu trên ngôn ngữ Python và đã được tích hợp rất nhiều công nghệ và ứng dụng hỗ trợ. Hệ quản trị nội dung Plone được cài đặt hết sức dễ dàng và nó rất linh hoạt. Plone cung cấp cho bạn đầy đủ những công cụ và công nghệ cần thiết nhất và hợp lý nhất cho bạn để quản lý nội dung web. Dưới đây là một số điểm mạnh của Plone CMS: Plone cho phép bạn tuỳ biến giao diện theo ý bản thân Plone cho phép bạn quản lý nội dung, tạo nội dung, thêm nội dung rất dễ dàng Plone có cơ chế Cache, Có Navigation, Form, Action, Slot là những công nghệ rất mạnh của CMS Plone cung cấp cho bạn cơ chế để duy trì và tối ưu hoá Plone Plone cho phép bạn mở rộng nó rất dễ dàng, linh động Plone cho phép bạn định nghĩa các kiểu nội dung (content type) và tạo nội dung theo các kiểu đó rất thoải mái không gò bó Plone kết hợp với Zope, ngôn ngữ Python cho phép bạn tuỳ biến, cải tiến, sửa đổi Plone theo ý mình. Bạn có thể nhúng các Product của bạn, nhúng các đoạn Script, các đối tượng Script vào Plone Site rất dễ dàng: Plone với cơ chế bảo mật của Zope (Membership Services) và công nghệ Catalog với Catalog tool của Zope thì Plone rất an toàn và mạnh mẽ. Cho phép bạn tìm kiếm, phân loại nội dung rất khoa học. 2.4.4 Thế nào là một Content Management Framework (CMF) Content Management Framework là một ứng dụng bao gồm một loạt các công cụ (tools) cho Zope. Những công cụ này kết hợp với nhau tạo nên một framework cung cấp những dịch vụ then chốt cho mọt hệ quản trị nội dung. CMF có thể dùng độc lập như một Product trong Zope và chúng ta vẫn khai thác được các dịch vụ mà nó cung cấp. Thông thường người ta hay dùng Zope như là cái nền và dùng Plone (với phần nhân là CMF) ở phía trên để khai thác các dịch vụ của CMF và cung cấp thêm các tính năng để tạo nên hệ quản trị nội dung Plone rất mạnh: Hình 11. Kiến trúc của Plone trong Zope Trong kiến trúc của Plone thì Plone có phần nhân là CMF (Content Types, Membership Service, Workflow, Catalog Tool…), CMF lại nằm trên nền Zope. 2.4.5 Các đặc điểm của Plone Plone rất mạnh và rất linh động Plone được lý tưởng hoá như là các Intranet và Extranet Server, Document Publishing Server, Portal Server. Hơn nữa Plone còn được coi là một Groupware tool cho việc làm việc cộng tác giữa các thực thể tách biệt Plone rất dễ sử dụng Cộng đồng phát triển Plone rất lớn, bao gồm nhiều chuyên gia chính vì vậy mà Plone đã được tối ưu và rất dễ dàng trong sử dụng, giao diện rất thân mật và dễ sử dụng. Plone rất dễ cài đặt Việc cài đặt Plone rất dễ dàng vì Plone đã được cấu hình và đóng gói bởi các công cụ cài đặt và bạn chỉ cần kick vào và chạy install là được Plone mang tính chất quốc tế cao Giao diện của Plone đã được dịch ra hơn 40 ngôn ngữ và Plone cung cấp công cụ cho bạn quản lý các nội dung đa ngữ Plone đã được chuẩn hoá Plone hỗ trợ các chuẩn, tuân theo các chuẩn: chuẩn của W3C, chuẩn về sử dụng, truy cập của Mỹ, các chuẩn về web, porlet….. Plone là nguồn mở (Open Source) Plone được hỗ trợ rất nhiều Plone được hỗ trợ rất nhiều từ cộng đồng Plone, từ các công ty, tổ chức có sử dụng Plone. Đặc biệt Plone nhận được hỗ trợ rất nhiều từ cộng đồng Plone và Zope Plone có tính mở rộng cao Plone có phần nhân là CMF là một framework hỗ trợ việc tích hợp thêm các sản phẩm (add-on product) và bạn chỉ cần xây dựng một Product của mình trên nền Zope với ngôn ngữ Python chẳng hạn thì bạn có thể dễ mở rộng Plone với sản phẩm đó Plone mang tính cơ động cao Plone có thể chạy trên hầu như là mọi nền (platform) và hỗ trợ hầu như mọi CSDL mạnh ngày nay Phát triển ứng dụng trên Plone rất nhanh Plone được xây dựng và phát triển trên nền Zope - một môi trường phát triển ứng dụng web rất nhanh. Và phát triển các ứng dụng với Plone sẽ rất nhanh. 2.4.6 Workflow System trong Plone Trong Plone thì Workflow là quy trình được sử dụng để quản lý các đối tượng (Objects) trong ứng dụng web của bạn. Plone có một Workflow System rất mạnh được phát triển trên Object States và User Roles. Object States Một trạng thái của đối tượng quyết định tính sẵn sàng của nó đối với các loại người dùng khác nhau định nghĩa trong Plone và quyết định những trạng thái mà đối tượng này có thể chuyển sang. Workflow System của Plone mặc định có bốn trạng thái: Visible Đây là trạng thái mặc định đối với các đối tượng được tạo ra. Ở trạng thái này thì mọi người dùng đều có thể thấy được đối tượng và có thể truy cập trực tiếp tới đối tượng này thông qua URL của đối tượng. Visible Object trong Private Folder thì những người dùng khác cũng có thể thấy được đối tượng này. Pending Là trạng thái của đối tượng được submit để publishing bởi các thành viên của site. Đối với người dùng cuối (End User) thì trạng thái Pending và trạng thái Visible chẳng khác gì nhau. Sự khác nhau duy nhất giữa trạng thái Pending và trạng thái Visible là đối tượng ở trạng thái Pending thì được bật cờ Review Published Ở trạng thái Published thì các đối tượng có thể được thấy đối với tất cả những người vào website. Published Items chỉ có thể bị thay đổi, chỉnh sửa bởi người quản lý nhưng nó có thể bị người sở hữu rút về không publishing nữa và người sở hữu lại có thể chỉnh sửa, thay đổi nó (rút đối tượng lại – retract thì đối tượng lại trả về trạng thái Visible) Private Đối tượng ở trạng thái này chỉ có thể thấy và có thể chỉnh sửa thay đổi bởi chủ sở hữu của đối tượng này và những người quản trị truy cập tới Folder có chứa đối tượng User Roles Plone sử dụng Role (vai trò) để định nghĩa những thứ khác nhau mà những người dùng khác nhau có thể thấy và làm. Và bằng cách này Plone xây dựng cơ chế bảo mật cho tất cả các khía cạnh của hệ thống. Mặc định Plone có bốn vai trò: Anonymous Vai trò này dành cho bất cứ người nào vào website mà không đăng nhập. Thông thường thì người dùng với vai trò Anonymous thì có thể thấy được các đối tượng được Publishing Member Là vai trò được gán cho người dùng vào website mà đăng nhập. Với vai trò này thì người dùng có thể tạo nội dung trong Folder riêng của mình và submit cho reviewer của site để publishing. Thông thường thì người dùng với vai trò Member thì có thể thấy được các đối tượng ở trạng thái Visible, Published và Pending Owner Trong Plone cũng như trong Zope thì một người dùng có thể có nhiều hơn một vai trò. Trong Plone thì người dùng sẽ có vai trò Owner với những đối tượng mà họ tạo ra Reviewer Với vai trò này thì người dùng có thể Publish hoặc huỷ bỏ các nội dung được submit bởi người dùng Manager Đây là vai trò có được nhiều quyền nhất. Với vai trò này thì người dùng có thể làm mọi thứ với website, có thể thấy được mọi đối tượng ở mọi trạng thái. Plone kế thừa mô hình Role từ Zope. PHẦN III. PHÁT TRIỂN ENGINE ĐA NGỮ CHO ZOPE 4.1 Bài toán đa ngữ Ngày nay các ứng dụng nói chung và các ứng dụng web nói riêng luôn luôn tìm cách để đáp ứng được tất cả người dùng từ khắp nơi trên thế giới Internet là mạng toàn cầu, nó có mặt ở khắp nơi trên thế giới vì vậy mà các ứng dụng web để đáp ứng được đông đảo hơn hay tất cả người dùng từ khắp nơi trên thế giới thì nó phải có cơ chế nào đó cho phép người dùng từ các quốc gia khác nhau, với các ngôn ngữ sử dụng khác nhau có thể làm việc được với ứng dụng. Một người Anh, một người Campuchia chỉ biết tiếng Campuchia, một người Trung Quốc chỉ biết tiếng Trung Quốc liệu có thể cùng làm việc với một ứng dụng hay một trang web mà lượng thông tin nhận được, chức năng của ứng dụng là như nhau? Cổng thông tin là một ứng dụng web điển hình với mục đích là phục vụ cộng đồng đông đảo người dùng, là nơi chia sẻ nguồn thông tin cho cộng đồng thì yêu cầu trên càng trở nên cấp bách và quan trọng. 4.2 Thế nào là đa ngữ Đa ngữ đối với các ứng dụng nói chung và các ứng dụng web nói riêng là cơ chế cho phép người dùng làm việc với ứng dụng chọn ngôn ngữ hiển thị phù hợp với mình: Chuyển đổi ngôn ngữ biên tập Hình 12 . Lựa chọn ngôn ngữ Khi lựa chọn ngôn ngữ thì thông tin hiển thị của ứng dụng sẽ được hiển thị trong các ngôn ngữ được chọn. 4.3 Phân loại đa ngữ Đa ngữ đối với các ứng dụng web là cơ chế cho phép người dùng chọn ngôn ngữ hiển thị, làm việc phù hợp với mình Đa ngữ đối với các website và cổng thông tin ngày nay được chia làm 2 loại: Đa ngữ về giao diện Đa ngữ về giao diện là cơ chế đa ngữ cho phép chúng ta thay đổi ngôn ngữ hiển thị của giao diện theo lựa chọn của người dùng: Hình 13. Đa ngữ giao diện Đa ngữ về nội dung Đa ngữ nội dung là cơ chế đa ngữ cho phép chúng ta thay đổi ngôn ngữ hiển thị của phần nội dung theo lựa chọn của người dùng: Hình 14. Đa ngữ nội dung Khi chúng ta xây dựng được cơ chế đa ngữ nội dung thì chúng ta có thể đa ngữ giao diện luôn một cách khá đơn giản. 4.4 Tại sao cần phải đa ngữ cả giao diện và nội dung Ngày nay thông tin được chia sẻ trên internet và con người từ khắp nơi trên thế giới đều có thể truy cập và chia sẻ nguồn thông tin này. Mỗi người ở một quốc gia và biết một thứ tiếng khác nhau chính vì vậy mà các website hoặc cổng thông tin cần phải có cơ chế sao cho bất cứ ai từ bất kỳ quốc gia nào, biết bất cứ ngôn ngữ nào cũng có thể đọc được thông tin từ các website hay cổng thông tin đó. Vậy thì làm thế nào để có thể đáp ứng được yêu cầu đó? Một website hay cổng thông tin đáp ứng được những yêu cầu trên gọi là các website hay cổng thông tin đã được đa ngữ. Hiện nay phần lớn các website, cổng thông tin đã ít nhiều tích hợp được cơ chế đa ngữ tức là cho phép người dùng lựa chọn ngôn ngữ hiển thị phù hợp với ngôn ngữ mà mình biết. Tuy nhiên các website hay cổng thông tin này chỉ đáp ứng được đa ngữ về mặt giao diện. Khi chọn ngôn ngữ thì người dùng chỉ biết được phần người ta đang xem là phần gì mà không biết được nội dung của nó là gì vì nội dung của nó không được thay đổi theo ngôn ngữ được chọn. Điều này rất bất tiện và không hợp lý, nó làm giảm tính mở và khả năng quảng bá thông tin. Nhu cầu đa ngữ cả về giao diện và nội dung là rất cấp thiết và rất thực tế tuy nhiên một website hay cổng thông tin như thế nào thì đa ngữ được và cơ chế đa ngữ như thế nào còn là một câu hỏi rất hóc búa đối với những nhà thiết kế và phát triển ứng dụng web. 4.5 Yêu cầu đối với một giải pháp đa ngữ Khi đưa ra một giải pháp đa ngữ thì có rất nhiều yêu cầu cần phải giải quyết. Những yêu cầu này một khi giải quyết được triệt để thì mới có một giải pháp đa ngữ thực sự, toàn diện. Các yêu cầu này bao gồm: Yêu cầu về lưu trữ dữ liệu: Cơ chế lưu trữ phải đảm bảo lưu đúng dữ liệu cho từng ngôn ngữ khác nhau Yêu cầu về trích rút và hiển thị dữ liệu: Dữ liệu khi được trích rút và hiển thị thì phải đảm bảo tuân thủ đúng theo ngôn ngữ được chọn, dữ liệu trích rút ra phải đúng như dữ liệu lúc lưu trữ Yêu cầu về tìm kiếm sắp xếp dữ liệu: Hệ thống phải đảm bảo cơ chế tìm kiếm và sắp xếp thoả mãn được với tất cả các ngôn ngữ hỗ trợ Những yêu cầu này là rất quan trọng và nó là thiết yếu khi xây dựng một giải pháp đa ngữ. Nếu giải quyết được những yêu cầu này một cách tối ưu thì bạn sẽ có một giải pháp đa ngữ tối ưu. 4.6 Khó khăn gặp phải khi giải quyết bài toán đa ngữ Như trên đã trình bày, khi giải quyết bài toán đa ngữ ta phải thoả mãn được các yêu cầu nói trên. Trong thực tế khi giải quyết những yêu cầu nói trên thì chúng ta gặp phải rất nhiều khó khăn. Hai yêu cầu đầu tiên: yêu cầu về lưu trữ dữ liệu, yêu cầu về trích rút và hiển thị dữ liệu thì dễ giải quyết hơn tuy nhiên lại chỉ dễ giải quyết ở khâu định dạng (format) chứ cơ chế lưu trữ và trích rút ra làm sao lại là một vấn đề khó khăn. Cơ chế lưu trữ phải đáp ứng được yêu cầu về tốc độ thực hiện, tính toàn vẹn dữ liệu, điều này là khó khăn và vô cùng quan trọng trong việc giải quyết vấn đề đa ngữ nội dung (sẽ xem xét kỹ hơn trong phần giải quyết đa ngữ nội dung ở phần sau) Yêu cầu thứ ba: yêu cầu về tìm kiếm và sắp xếp dữ liệu thì thực sự là một vấn đề khó khăn. Mỗi ngôn ngữ có một bộ chữ khác nhau, cách sắp xếp khác nhau. Các ngôn ngữ này có những cách sắp xếp khác với cách sắp xếp của Unicode đối với những từ được sắp xếp. Có những ngôn ngữ mà có những charset mà có nhiều phần Unicode không hỗ trợ. Tất cả những vấn đề này chúng ta cần phải giải quyết đối với bất cứ ngôn ngữ nào khi muốn đa ngữ ngôn ngữ đấy đối với hệ thống. 4.7 Thực tại về đa ngữ của Zope-Plone Hiện tại Zope cũng đã có cơ chế đa ngữ tuy nhiên lại chỉ thực hiện được đa ngữ về mặt giao diện, điều này đem lại một số bất tiện cho những ứng dụng portal phát triển trên Zope bên cạnh những điểm mạnh của nó. Zope có hai product (plug-in) được xây dựng trên Plone đảm nhận việc đa ngữ là: PlacelessTranslationService Trong java chúng ta thực hiện đa ngữ giao thông qua “Locale” với việc sử dụng file “Resouces.properties” cho từng ngôn ngữ thì trong Zope (sử dụng python based script language và python language) thực hiện đa ngữ dựa trên chuẩn “I18N” - một chuẩn đa ngữ với việc sử dụng các “.po files”. “.po files” cũng như các “Resources.properties” files đối với từng ngôn ngữ, chúng chứa các cặp thông tin: message_id: id của message giao diện cần đa ngữ message_string:nội dung của message giao diện trong ngôn ngữ tương ứng PlacelessTranslationService quản lý và tham chiếu các “.po files” PlacelessTranslationService lấy ra “language_code” và tham chiếu đến “.po file” tương ứng PlacelessTranslationService thông qua API của ZPT (Zope Page Template) để tham chiếu đến các Zope page tìm ra tất cả những “i18n label” và “message_id” đặt trong đó tiếp theo sẽ lấy phần “message_string” tương ứng trong “.po file” và thay vào phần nội dung được đặt trong “i18n label”. Kết quả ta đã có đa ngữ giao diện cho Zope tuy nhiên với việc sử dụng một mình PlacelessTranslationService thì việc đặt “language_code” phải đặt trong “browser setting” của trình duyệt, điều này là rất bất tiện cho người dùng - những người có am hiểu không sâu về tin học. PloneLanguageTool Để giải quyết những khó khăn gặp phải khi sử dụng Placelesstranslation Service thì PloneLanguageTool được phát triển. PloneLanguageTool cung cấp cho ta giao diện đồ hoạ ngay trong Zope để thực hiện các công việc sau: Đặt “language_code” và thực hiện việc truyền và lưu trữ nó trong: cookie, url, browser Đặt “default language_code” cho portal site Đặt chế độ “fall back” - chuyển sang một ngôn ngữ chỉ định khi “.po file” không tồn tại Dưới đây là minh hoạ cơ chế đa ngữ giao diện trong Zope-Plone: PloneLanguage Tool Placless Translation Service .po files msg_id : msg_str Cookie URL Browser Language selector msg_id : msg_str msg_id : msg_str msg_id : msg_str msg_id : msg_str translation getLanguage() language_code language_code language_code get .po file select language enter language ZPT API editor user Hình 15. Cơ chế đa ngữ trong Zope-Plone 4.8 Kiến trúc phân cấp hướng đối tượng của Zope và khả năng đa ngữ nội dung, giao diện Tất cả các thành phần trong Zope đều là các đối tượng, từ những thành phần cao nhất cho đến những thành phần thấp nhất: Hình 16. Kiến trúc phân cấp hướng đối tượng Trong kiến trúc trên đây sở dĩ phần tử trên cùng là “Plone root” là vì Plone chính là phần CMS, Portal của Zope như đã trình bày trong phần kiến trúc của Plone. Plone root là một đối tượng chứa những thông tin, thông số của portal và có các phương thức – method, hành vi – behavior để triệu gọi, yêu cầu các đối tượng ở mức dưới thực hiện những tác vụ cụ thể. Có hai lớp đối tượng ở mức tiếp theo mức đỉnh là: Portal Objects Portal Objects hay còn gọi là Control Objects là những đối tượng được dùng để điều khiển, duy trì hoạt động của portal. Các đối tượng này cũng có các phương thức, hành vi, thuộc tính cho chúng ta điều khiển, duy trì hoạt động của portal Content Objects Content Objects là những đối tượng của Zope đảm nhận phần nội dung của portal Ở đây tôi sẽ tập trung vào phần Content Objects bởi vì cơ chế đa ngữ sẽ thực hiện ở đây. Các content object là các đối tượng chứa dữ liệu, nó cung cấp cho chúng ta các phương thức để có thể thêm dữ liệu, chỉnh sửa dữ liệu, xoá dữ liệu, lấy dữ liệu ra…. Đặc biệt các content object này tuân thủ chuẩn metadata: “DublinCore”: Hình 17. Chuẩn metadata Nhờ tuân thủ chuẩn metada mà dữ liệu có thể đảm bảo tính toàn vẹn và trao đổi được với các hệ thống khác nhau. Dữ liệu được lưu vào database dưới dạng các thuộc tính của các đối tượng do đó chỉ cần biết id của đối tượng đó là ta có thể lấy được dữ liệu, thay đổi, thêm và xoá dữ liệu mà luôn đảm bảo tính toàn vẹn và không dư thừa của dữ liệu. Tất cả mọi thành phần của ứng dụng web đều có một identifier để truy xuất chính vì vậy mà để đa ngữ đối với ứng dụng web thì cùng một identifier của thành phần đó làm sao để khi chọn ngôn ngữ khác nhau nội dung trả về lại khác nhau. Điều này chúng ta hoàn toàn có thể làm được trong CSDL hướng đối tượng cũng như trong CSDL quan hệ bằng việc dùng khóa tổng hợp: Content_component_id Repository Content Component Language_id + Hình 18. Dùng khoá tổng hợp Trong CSDL quan hệ thì điều này thực hiện phức tạp hơn và dễ gây ra dư thừa dữ liệu và không đảm bảo tính toàn vẹn ví dụ như có một form thông tin của người dùng tương ứng với bảng người dùng thì tất cả các thông tin về người dùng trong các ngôn ngữ khác nhau được lưu trong cùng bảng người dùng, điều này rất dễ gây ra dư thừa dữ liệu và trong tìm kiếm và xử lý sẽ dẫn đến việc tìm kiếm dư thừa rất nhiều đối với các dữ liệu trong các ngôn ngữ mà mình không quan tâm. Trong CSDL hướng đối tượng thì điều này chúng ta hoàn toàn có thể thực hiện dễ dàng và tối ưu hơn rất nhiều bởi vì trong cơ sở dữ liệu hướng đối tượng thì các thuộc tính của các đối tượng có thể gán cho các kiểu đặc biệt: ArrayList, Hashtable, Dictionary… cho phép một thuộc tính có thể có giá trị là một dãy giá trị: {key:value} và chúng ta thể truy xuất trực tiếp. Zope có cơ sở dữ liệu hướng đối tượng là ZODB, xây dựng trên nền ngôn ngữ Python hỗ trợ kiểu dữ liệu Dictionary cho phép một thuộc tính của đối tượng có thể có giá trị là một dãy giá trị và với các phương thức get(), set(), add(), remove() cho phép ta thao tác với dãy giá trị này. Điểm mạnh của cơ sở dữ liệu hướng đối tượng là nó che giấu đựơc thông tin: encapsulation mà thông tin vẫn đảm bảo tính toàn vẹn, thao tác với dữ liệu rất dễ dàng. 4.9 Cơ chế đa ngữ nội dung cho Zope Với ý tưởng như vậy tôi đi xây dựng cơ chế đa ngữ nội dung cho Zope như sau: Language selector Form1 content_id1 Form2 content_id2 Language selector Language selector Session Cookie user language_code select language Content_type1 content_id1 Attribute 1 Attribute 2 Content_type2 content_id2 Attribute 1 Attribute 2 …. Key1:value1 Key2:value2 …. Key1:value1 Key2:value2 …. Key1:value1 Key2:value2 …. Key1:value1 Key2:value2 Attributes values dictionary for content_type1 Attributes values dictionary for content_type2 Attribute 1 Attribute 2 Attribute 2 Attribute 1 Request Cookie URL language_code language_code language_code ≡ key language_code ≡ key language_code ≡ key key key Zope Object Database ZODB Portal Page Hình 19. Cơ chế của đa ngữ nội dung Ta có thể thấy cơ chế đa ngữ trên không có gì là phức tạp. Portal luôn được đặt mặc định một ngôn ngữ, khi người dùng vào site thì ngôn ngữ đặt mặc định được sử dụng. Khi người dùng chọn một ngôn ngữ khác phù hợp với mình hơn đối với toàn bộ site thì “language_code” cho ngôn ngữ đó được lưu vào trong cookie, session,… để từ những trang sau thì language_code được lựa chọn có thể lấy ra và áp dụng. Người dùng đang ở một trang nào đó của site cũng có thể thay đổi ngôn ngữ cho trang đó, hoặc cho từng form trong trang bởi vì mỗi form sẽ tương ứng với một “content_type” là một object đảm nhận phần nội dung sẽ được lưu vào trong ZODB. Khi người dùng lựa chọn, thay đổi ngôn ngữ cho từng form thì “language_code” của ngôn ngữ được chọn sẽ được lưu và truyền qua request tới chính trang chứa form đó và nội dung của form đó sẽ được chuyển sang ngôn ngữ được chọn Khi ngôn ngữ cho toàn bộ site được thay đổi thì tất cả các form trong portal site đều thay đổi ngôn ngữ theo đúng ngôn ngữ được chọn. Tất cả các form được map với content_type tương ứng trong ZODB (thông qua content_id) và language_code của ngôn ngữ được dùng chung đối với mọi content_type. Khi đó language_code chính là “key” để ta lấy ra được nội dung của các thuộc tính của content_type (chính là dữ liệu đối với form) trong từ điển các giá trị nội dung của các thuộc tính của content_type ứng với ngôn ngữ được chọn. Từ đó nội dung tất cả các form được chuyển sang ngôn ngữ được chọn Khi ngôn ngữ cho từng form được chọn thì chỉ có form đó được map với content_type tương ứng và language_code của ngôn ngữ được chọn được sử dụng chỉ được áp dụng với content_type đó, các form, content_type khác không ảnh hưởng. Và như vậy chỉ có form đó được đa ngữ 4.10 Xây dựng engine đa ngữ nội dung và giao diện cho Zope Với cơ chế đa ngữ nội dung như trên tôi xây dựng product: “Multilingual” đảm nhận phần đa ngữ nội dung cho Portal. Product Multilingual sẽ kết hợp với hai product: PloneLanguageTool và PlacelessTranslationService để tạo ra engine đa ngữ cho phép đa ngữ cả nội dung và cả giao diện cho Portal phát triển trên Zope-Plone: Multilingual PloneLanguage Tool Placeless Translation Service Portal site content multilingual interface multilingual Hình 20. Kết hợp đa ngữ nội dung và giao diện Đây là mô tả bằng sequence diagram việc kết hợp ba product nói trên để tạo ra engine đa ngữ cho Zope: Hình 21. Sequence diagram cho kết hợp đa ngữ 4.10.1 Xử lý sắp xếp và tìm kiếm Trong xử lý các yêu cầu của giải pháp engine đa ngữ này thì yêu cầu lưu trữ và trích rút dữ liệu đã có giải pháp rõ ràng. Trong cơ chế đa ngữ nội dung trình bày ở trên thì với ZODB với các dữ liệu kiểu từ điểm và các tính năng của hướng đối tượng thì cơ chế lưu trữ đáp ứng được hoàn toàn về performance cũng như khả năng trích rút dữ liệu với hỗ trợ encoding Unicode trong đọc và ghi dữ liệu. Khi đã đáp ứng được các yêu cầu lưu trữ và trích rút dữ liệu thì với nguồn dữ liệu đó ta làm thế nào để có thể tìm kiếm dữ liệu theo đúng ý muốn và khi có dữ liệu rồi thì việc sắp xếp các dữ liệu đó thực hiện như thế nào khi mà charset và cách sắp xếp của các ngôn ngữ này không tuân thủ theo Unicode? Ta có thể giải quyết vấn đề này chúng ta có thể sử dụng cơ chế xử lý như sau: Portal Normalizer (Proxy) ZODB Hình 22. Xử lý tìm kiếm sắp xếp Khi có những yêu cầu tìm kiếm sắp xếp từ người dùng thì Portal chuyển những yêu cầu đó tới một tầng trung gian xử lý tìm kiếm sắp xếp (Normalizer – Proxy) thay vì thao tác trực tiếp với CSDL Normalizer thực hiện những xử lý, chuyển đổi để chuẩn hoá những thông tin tìm kiếm về dạng charset chuẩn của Unicode Normalizer chuyển những thông tin tìm kiếm đã được chuẩn hoá tới CSDL để thực hiện tìm kiếm trích rút dữ liệu Dữ liệu được tìm kiếm và gửi trả ở dạng chuẩn Unicode cho Nomalizer Normalizer thực hiện chuyển đổi về charset của ngôn ngữ được chọn và thực hiện xử lý các thao tác sắp xếp theo ngôn ngữ đó. Cuối cùng Normalizer trả kết quả về cho Portal hiển thị cho người dùng Chúng ta hãy xem xét việc xử lý tìm kiếm và sắp xếp tiếng việt đã được xử lý như thế nào: Hình 23. Sequence diagram xử lý sắp xếp, tìm kiếm tiếng việt Như thể hiện trong sequence diagram trên đây thì Normalizer cho tiếng việt sẽ bao gồm hai thành phần là: - TVSplitter: Đây là đối tượng thực hiện việc tách từ trong một xâu tìm kiếm để tạo ra khả năng “keyword search”. Ví dụ với chuỗi tìm kiếm là: “Đại học” thì nó sẽ tách ra thành: “Đại”+ “học” và tìm kiếm với các từ này. Mặc định nếu không xử lý tách từ thì chúng ta chỉ tìm được theo kiểu “sub-string search” và thông tin tìm được sẽ rất nghèo nàn thậm chí còn không tìm được gì. TVSplitter sẽ xử dụng các hàm cung cấp bởi _VNCodecs Chúng ta cùng xem xét lớp TVSplitter: from Products.ZCTextIndex.ISplitter import ISplitter from Products.ZCTextIndex.PipelineFactory import element_factory import re import types try: import vncodecs except ImportError: vncodecs = None class TVSplitter: rx = re.compile(r'\w+', re.U) rxGlob = re.compile(r'\w+[\w*?]*', re.U) rxTag = re.compile(r']*>') rxEntity = re.compile(r'&[A-Za-z]+;') # u3300-u33FF CJK Compatibility # u4E00-u9FFF CJK Unified Ideographs # uF900-uFAFF CJK Compatibility Ideographs rxCJK = re.compile(u'([\u3300-\u33FF\u4E00-\u9FFF\uF900-\uFAFF])', re.U) def process(self, lst, isGlob=0): result = [] if isGlob: rx = self.rxGlob else: rx = self.rx for s in lst: # Convert to unicode sType = type(s) if sType not in [types.StringType, types.UnicodeType]: s = str(s) if sType == types.StringType: try: s = unicode(s, 'utf-8', 'strict') except: s = unicode(s, 'latin-1', 'ignore') # Remove HTML tags and entity definitions for pat in [self.rxTag, self.rxEntity]: s = pat.sub(' ', s) # Vietnamese processing if vncodecs: # Convert VN unicode characters like ộ s = vncodecs.highentitysub(s) # Convert VN compound unicode to VN pre-compound s = vncodecs.to_canonical(s) # VN normalize: ho`a -> hoa` s = vncodecs.vn_normalize(s) # Word splitting if self.rxCJK.search(s): # s contains a CJK character for seq in rx.findall(s): result += filter(None, self.rxCJK.split(seq)) else: result += rx.findall(s) return result def processGlob(self, lst): return self.process(lst, 1) # Register splitter try: element_factory.registerFactory('Word Splitter', 'Tieng Viet HTML-aware unicode splitter', TVSplitter) except ValueError: # already registered pass Chúng ta có thể thấy việc tách từ cũng phải thực hiện việc chuẩn hoá các ký tự đặc biệt, các charset đặc biệt, cách đánh dấu, cách bỏ dấu.... _VNCodecs Đây là đối tượng (component) đảm nhận chính công việc xử lý việc chuyển đổi charset, chuẩn hoá charset, thực hiện việc sắp xếp theo đúng quy định trong tiếng việt. Chi tiết của component này chúng ta có thể tham khảo trong phần phụ lục của đồ án. ZCatalog Spyder là một built-in search engine của Zope theo kiểu “crawler search engine” hỗ trợ rất nhiều phương thức và cơ chế tìm kiếm. Khi đã có thông tin được chuẩn hóa thì chúng ta chỉ việc chuyển cho spyder và nó sẽ tìm thông tin và trả lại cho ta. 4.10.2 Multilingual usecase diagram Dưới đây là usecase diagram của Multilingual: Hình 24. Usecase diagram của Multilingual 4.10.3 Multilingual class diagram Đây là class diagram của Multilingual: Hình 25. Class diagram của Multilingual Trong product Multilingual chúng ta xây dựng lại các content object của Zope để khi phát triển các content_type chúng ta sẽ kế thừa từ những content object được viết lại này và sẽ có được đa ngữ đối với các content_type. Hình 26. Sequence diagram cho usecase “view content” Chúng ta hãy xem mô tả chi tiết các lớp trong class diagram trên đây để thấy được cơ chế đa ngữ tôi đã trình bày bên trên được cài đặt và ứng dụng như thế nào: 4.10.4 Multilingual class specifications LanguageBase Các thuộc tính: id: id của đối tượng content_languages: lưu giá trị của các thuộc tính đa ngữ dưới dạng một từ điển langObj: giá trị mặc định của các thuộc tính đa ngữ được đặt là rỗng, sử dụng khi khởi tạo ngôn ngữ mới cho đối tượng Các phương thức: __init__: khởi tạo một số thuộc tính của đối tượng, deleteContentLanguages: Xoá ngôn ngữ đang tồn tại của đối tượng getCurrentLanguage: Trả về ngôn ngữ hiện tại của session getLanguageObject: Trả về từ điển giá trị các thuộc tính đa ngữ của một ngôn ngữ cụ thể của đối tượng getLanguages: Trả về một từ điển các ngôn ngữ của site getDefaultLanguage: Trả về ngôn ngữ mặc định của site getDefinedLanguages: Trả về từ điển các ngôn ngữ đã được tạo của đối tượng getUndefinedLanguages: Trả về từ điển các ngôn ngữ của site mà đối tượng này chưa có setTitle: Lưu tiêu để của đối tượng đối với một ngôn ngữ cụ thể vào CSDL Title: Trả về tiêu đề của đối tượng đối với một ngôn ngữ cụ thể title_or_id: Trả về tiêu đề của đối tượng đối với một ngôn ngữ cụ thể, id chỉ được trả về khi tiêu đề không tồn tại setDescription: Lưu nội dung tóm tăt của của đối tượng đối với một ngôn ngữ cụ thể vào CSDL Description: Trả về nội dung tóm tắt của đối tượng đối với một ngôn ngữ cụ thể indexTitle: Ghép tất cả các giá trị đa ngữ của tiêu đề của đối tượng dùng để đánh Index metaTitle: Trả về một từ điển các tiêu đề của từng ngôn ngữ của đối tượng dùng để làm metadata trong Catalog indexDescription: Ghép tất cả giá trị đa ngữ của nội dung tóm tắt của đối tượng dùng để đánh Index metaDescription: Trả về một từ điển các nội dung tóm tắt của từng ngôn ngữ của đối tượng dùng để làm metadata trong Catalog DefinedLanguages: Trả về danh sách các ngôn ngữ đã được tạo của đối tượng dùng để đánh index MLDocument Các thuộc tính: id: id của đối tượng title: Tiều đề giá trị mặc định là ‘’ description: Tóm tắt của tài liệu text_format: định dạng văn bản text: Nội dung của tài liệu langObj: giá trị mặc định của các thuộc tính đa ngữ được đặt là rỗng, sử dụng khi khởi tạo ngôn ngữ mới cho đối tượng Các phương thức: __init__: khởi tạo một số thuộc tính, tham số lang_code xác định ngôn ngữ của giá trị thuộc tính edit: thay đổi giá trị của một số thuộc tính của tài liệu trên một ngôn ngữ cụ thể CookedBody: Trả về nội dung của tài liệu đối với một ngôn ngữ cụ thể sau khi đã xử lý nó tuỳ theo từng loại định dạng văn bản EditableBody: Trả về nội dung chưa xử lý theo định dạng của tài liệu đối với 1 ngôn ngữ cụ thể SearchableText: Ghép tất cả giá trị đa ngữ của tiêu đề, tóm tắt và nội dung của tài liệu dùng để đánh Index toàn văn MLNews Các thuộc tính: langObj: giá trị mặc định của các thuộc tính đa ngữ được đặt là rỗng, sử dụng khi khởi tạo ngôn ngữ mới cho đối tượng Các phương thức: __init__: sử dụng lại phương thức khởi tạo của MLDocument getFirstImage: Phương thức này trả về thẻ IMG đầu tiên trong nội dung tin dùng để trình bầy trích dẫn tin và ảnh dưới dạng liệt kê FirstImages: Trả về một từ điển các thẻ IMG đầu tiên trong nội dung tin của từng ngôn ngữ dùng để đưa vào metadata của Catalog MLFolder Các thuộc tính: id: id của thư mục title: Tiều đề giá trị mặc định là xâu rỗng description: Mô tả của thư mục mặc định là xâu rỗng Các phương thức: __init__: khởi tạo một số thuộc tính, tham số lang_code xác định ngôn ngữ của giá trị thuộc tính edit: thay đổi giá trị của một số thuộc tính của thư mục trên một ngôn ngữ cụ thể SearchableText: Ghép tất cả giá trị đa ngữ của tiêu đề và mô tả của thư mục dùng để đánh Index toàn văn MLFile Các thuộc tính: id: id của tệp title: Tiều đề giá trị mặc định là ‘ ’ description: Mô tả tệp file_text: Nội dung của tệp Các phương thức: __init__: khởi tạo một số thuộc tính, tham số lang_code xác định ngôn ngữ của giá trị thuộc tính. Tải nội dung của tệp nếu có edit: thay đổi giá trị của một số thuộc tính của tệp trên một ngôn ngữ cụ thể. Tải nội dung của tệp. Convert nội dung của tệp về định dạng phù hợp, chuyển đổi bảng mã sang Unicode UTF-8. SearchableText: Ghép tất cả giá trị đa ngữ của tiêu đề và mô tả của tệp đồng thời cả nộ dung tệp được lưu trong file_text dùng để đánh Index toàn văn MImage Các thuộc tính: id: id của ảnh title: Tiều đề giá trị mặc định là ‘ ’ description: Mô tả của ảnh Các phương thức: __init__: khởi tạo một số thuộc tính, tham số lang_code xác định ngôn ngữ của giá trị thuộc tính. Tải ảnh nếu có edit: thay đổi giá trị của một số thuộc tính của ảnh trên một ngôn ngữ cụ thể. Tải nội dung của ảnh. SearchableText: Ghép tất cả giá trị đa ngữ của tiêu đề và mô tả của ảnh dùng để đánh Index toàn văn MLLink Các thuộc tính: id: id của liên kết title: Tiều đề giá trị mặc định là ‘ ’ description: Mô tả của liên kết remote_url: Địa chỉ URL của liên kết format: Định dạng của liên kết, mặc định là texr/url Các phương thức: __init__: khởi tạo một số thuộc tính, tham số lang_code xác định ngôn ngữ của giá trị thuộc tính. edit: thay đổi giá trị của một số thuộc tính của liên kết trên một ngôn ngữ cụ thể. SearchableText: Ghép tất cả giá trị đa ngữ của tiêu đề và mô tả của liên kết dùng để đánh Index toàn văn PHẦN IV ÁP DỤNG CÔNG NGHỆ ZOPE VÀ PLONE 4.1 Giải pháp cổng thông tin Zope-Plone và Website bộ môn Như đã trình bày ở trên Zope Appication Server và Plone CMS là hai công nghệ rất mạnh trong phát triển các ứng dụng web gắn với hệ quản trị nội dung. Chúng ta có thể áp dụng hai công nghệ này rất rộng rãi trong thực tiễn: xây dựng cổng thông tin cho chính phủ, tỉnh thành, xây dựng cổng thông tin cho một tổ chức, xây dựng thư viện điện tử, xây dựng siêu thị online…. Zope và Plone là giải pháp cổng thông tin nguồn mở được ứng dụng rất mạnh mẽ hiện nay trên thế giới.Trong phạm vi của đề tài em sẽ tiến hành biến Zope và Plone thành giải pháp cổng thông tin phù hợp, áp dụng ở điều kiện Việt Nam. Giải pháp này có thể đáp ứng được yêu cầu của điều kiện Việt Nam và thoả mãn được yêu cầu đối với bất cứ ai, quốc gia, tổ chức nào. Với giải pháp này em sẽ áp dụng vào xây dựng website bộ môn với đầy đủ các chức năng cần thiết của cổng thông tin và hệ quản trị nội dung. 4.1.1 Yêu cầu của bài toán Bộn môn CNPM cần xây dựng một website để giới thiệu và cung cấp thông tin về bộ môn cho đông đảo các bạn sinh viên, giáo viên cũng như người dùng. Đồng thời cũng là nơi để quảng bá về bộ môn với các trường đại học, các khoa, bộ môn ở trong và ngoài nước. Website này phải đáp ứng được các yêu cầu sau đây: Quản lý thông tin giáo viên Quản lý thông tin sinh viên Quản lý thông tin hoạt động Quản lý thông tin của hoạt động nghiên cứu trong bộ môn Quản lý thông tin đào tạo Quản lý thông tin tài nguyên, tài liệu học tập của bộ môn ... Bên cạnh các yêu cầu chức năng trên đây thì để khả năng quảng bá được lớn hơn thì website này phải có cơ chế đa ngữ cho phép hiển thị bằng cả tiếng Anh và tiếng Việt đối với người dùng. 4.1.2 Mô tả ứng dụng Tuy chỉ là một website cho bộ môn nhưng những tính năng của một cổng thông tin được đáp ứng rất đầy đủ và còn được hỗ trợ thêm một số tính năng rất mạnh. Dưới đây là một số tính năng nổi trội của website mà em xây dựng: Cho phép đa ngữ nội dung và giao diện với bất cứ ngôn ngữ nào, tuy nhiên hiện tại do thời gian có hạn nên mới chỉ thực hiện được tiếng anh và tiếng việt Tích hợp một hệ soạn thảo, tạo nội dung mạnh mẽ, mềm dẻo và tiện lợi Tích hợp WEBDAV cho phép bạn theo dõi, làm việc và đưa thông tin lên website từ bất cứ nơi đâu như làm việc trên desktop Tích hợp LDAP cho phép tích hợp CSDL người dùng sẵn có Có cơ chế phân quyền mềm dẻo và mạnh mẽ Có cơ chế tìm kiếm thông minh và mạnh mẽ Cho phép bạn làm việc như làm việc trên desktop: copy, paste, undo,… Có cơ chế post tin bài và duyệt tin bài mềm dẻo, an toàn Có một workflow mềm dẻo và cho phép định nghĩa thêm workflow cho ứng dụng Xử lý tiếng việt và xử lý tìm kiếm tiếng việt triệt để Cho phép cá nhân hoá giao diện đối với từng người dùng Tích hợp lịch sự kiện cho cá nhân, cho tổ chức … Như vậy ta có thể thấy rằng đây chính là một giải pháp cổng thông tin mạnh mẽ, nó đã được tích hợp rất nhiều tính năng mạnh hỗ trợ tối đa cho cổng thông tin chỉ việc dùng. Và việc phát triển mở rộng hay phát triển mới một cổng thông tin hay một website chỉ là việc tạo thông tin, nội dung đối với từng yêu cầu , ứng dụng cụ thể 4.2 Xây dựng ứng dụng 4.2.1 Phân tích thiết kế Từ những yêu cầu trên đây của bộ môn ta thấy yêu cầu của bộ môn cũng chính là yêu cầu về việc quản lý thông tin nhưng những thông tin ở đây không đơn thuần chỉ để lưu trữ và xem mà nó cần được tổng hợp, thống kê, trích rút, tìm kiếm…. Chính vì vậy những thông tin này cần được tổ chức thành các đối tượng – content_type và ta sẽ cần phải xây dựng các product để quản lý, tham chiếu các content_type này. Trong hệ thống website này ta có ba lớp người dùng khác nhau: User: người dùng thông thường hoặc nặc danh Teacher: giáo viên trong bộ môn Admin: người quản trị website 4.2.1.1 Usecase diagram của hệ thống Hình 27. Usecase diagram của hệ thống Người quản trị có quyền quản lý mọi hoạt động của website. Người dùng thông thường, giáo viên có quyền xem thông tin, tìm kiếm, post, quản lý tin bài. Usecase quản lý hoạt động Hình 28. Usecase diagram cho usecase “Quản lý hoạt động” Use case quản lý hoạt động mô tả việc quản lý hoạt động của bộ môn. Người quản trị website (giáo viên trong bộ môn) sẽ quản lý lịch công tác, lịch trực, thời khoá biểu của bộ môn. Hoạt động quản lý bao gồm:thêm lịch biểu, xoá lịch biểu, cập nhật lịch biểu. Lịch biểu có thể quản lý theo tuần, theo tháng hoặc theo năm. Hình 29. Sequence diagram cho usecase “Thêm lịch biểu” Usecase QL thông tin đào tạo Hình 30. Usecase diagram cho usecase “QL thông tin đào tạo” Usecase “Quản lý đào tạo” mô tả cơ chế quản lý thông tin đào tạo trong bộ môn: các môn học, các lĩnh vực, các chuyên đề. Hình 31. Sequence diagram cho usecase “Cập nhật thông tin ĐT” Usecase QL thông tin giáo viên Hình 32. Usecase diagram cho usecase “QL thông tin giáo viên” Usecase quản lý thông tin giáo viên mô tả cơ chế quản lý thông tin giáo viên trong bộ môn. Việc quản trị thông tin giáo viên bao gồm các chức năng sau đây: thêm giáo viên cùng những thông tin về giáo viên, cập nhật thông tin cho giáo viên, phân quyền cho giáo viên, xoá thông tin giáo viên Hình 33. Sequence diagram cho usecase “Cập nhật thông tin GV” Usecase QL tài nguyên Hình 34. Usecase diagram cho usecase “QL tài nguyên” Usecase quản lý tài nguyên mô tả việc quản lý tài nguyên của bộ môn bao gồm các tính năng như: thêm, sửa, xóa tài nguyên, upload, download tài nguyên. Hình 35. Sequence diagram cho usecase “Upload tài nguyên” Usecase QL thông tin nghiên cứu Hình 36. Usecase diagram cho usecase “QL thông tin nghiên cứu” Usecase quản lý thông tin nghiên cứu miêu tả việc quản lý thông tin nghiên cứu trong bộ môn: các sản phẩm do bộ môn làm ra, các đề tài nghiên cứu, các lĩnh vực nghiên cứu. Hình 37. Sequence diagram cho usecase “Thêm thông tin NC” Usecase QL thông tin sinh viên Hình 23. Usecase diagram cho usecase “QL thông tin sinh viên” Usecase quản lý thông tin sinh viên mô tả việc quản lý sinh viên trong bộ môn. Thông tin sinh viên có thể được thêm, sửa, xoá. Việc quản lý thông tin sinh viên phải gắn liền với việc quản lý thông tin lớp, thông tin khoá, thông tin hệ đào tạo. Hình 38. Sequence diagram cho usecase “Thêm thông tin SV” Usecase Quản lý tin bài Hình 39. Usecase diagram cho usecase “Quản lý tin bài” Usecase quản lý tin bài mô tả cơ chế quản lý việc tạo, post và duyệt tin bài trong website bộ môn. Cơ chế duyệt tin này bao gồm việc tạo ra tin, post tin, duyệt tin, xoá tin, publish tin, vận chuyển tin. Hình 40. Sequence diagram cho usecase “Post tin bài” Usecase Tìm kiếm Hình 41. Usecase diagram cho usecase “Tìm kiếm” Usecase Tìm kiếm mô tả chức năng tìm kiếm trong website của bộ môn, cơ chế tìm kiếm bao gồm tìm kiếm thông thường và tìm kiếm nâng cao. Hình 42. Sequence diagram cho usecase “tìm kiếm nâng cao” Usecase Xem thông tin Hình 43. Usecase diagram cho usecase “Xem thông tin” Usecase Xem thông tin mô tả chức năng xem thông tin của website bộ môn. Người dùng thông thường, giáo viên và người quản trị có thể xem thông tin nghiên cứu, xem thông tin giáo viên, xem thông tin hoạt động, xem thông tin đào tạo, xem thông tin sinh viên, xem thông tin tài nguyên. Với mỗi vai trò người dùng khác nhau thì khả năng xem thông tin cũng khác nhau. 4.2.2 Kết quả đạt được Trong quá thời gian làm đồ án và quá trình xây dựng ứng dụng website bộ môn tôi đã đạt được một số kết quả nhất định: Đáp ứng được các chức năng do yêu cầu đề ra Website hoạt động ổn định Tích hợp một số tính năng hỗ trợ mạnh mẽ: mail server, LDAP,... Cơ chế phân quyền mềm dẻo Tích hợp được cơ chế duyệt tin bài mềm dẻo Hỗ trợ cho soạn thảo thông tin với hệ quản trị nội dung, soạn thảo nội dung Epoz Giao diện thân thiện Đảm bảo đa ngữ triệt để tiếng Anh và tiếng Việt Bên cạnh một số kết quả đã đạt được thì ứng dụng website bộ môn còn có một số hạn chế của nó: Do thời gian có hạn và khả năng ngoại ngữ không cho phép nên trong quá trình xây dựng website mới chỉ xây dựng được đa ngữ cả nội dung và giao diện được cho tiếng Anh và tiếng Việt. Tuy nhiên chỉ cần dịch giao diện của website ra một .po file cho ngôn ngữ mới và import vào là sẽ có đa ngữ giao diện cho ngôn ngữ đó. Biên tập nội dung của website với một ngôn ngữ mới ta sẽ có đa ngữ nội dung cho website với ngôn ngữ đó Khi đa ngữ nội dung với một ngôn ngữ mới và đặc biệt thì việc tìm kiếm dữ liệu trong ngôn ngữ đó mặc định sẽ là “sub-string search”. Muốn có “keyword search” thì phải bổ xung component “Normalizer” cho ngôn ngữ đó PHẦN V. NHẬN XÉT ĐÁNH GIÁ KẾT LUẬN 5.1 Nhận xét, đánh giá, kết luận Công nghệ Zope và Plone là một trong những công nghệ phát triển ứng dụng web mạnh nhất hiện nay. Trong Zope cũng như trong Plone được tích hợp rất nhiều ứng dụng và công nghệ mạnh cho phép chúng ta phát triển ứng dụng web. Zope và Plone đều là nguồn mở và có cộng đồng phát triển rất lớn và được hỗ trợ bởi nhiều người, nhiều công ty và tổ chức chính vì vậy mà Zope và Plone sẽ rất phát triển trong tương lai. Zope và Plone đều được phát triển chủ yếu dựa trên ngôn ngữ Python – ngôn ngữ nguồn mở. Trong tương lai chắc chắn Zope – Web Application Server và Plone – Content Management System sẽ phát triển rất mạnh. Hiện nay Zope và Plone được sử dụng rất rộng rãi. Việc tìm hiểu công nghệ Zope và Plone rất có ích và rất thực tế, với việc nắm được hai công nghệ này thì chúng ta có thể phát triển các ứng dụng web một cách dễ dàng và sẽ nâng cao được công nghệ và kinh nghiệm của bản thân Việc phát triển engine đa ngữ cho Zope tạo ra khả năng đa ngữ mạnh mẽ, đem lại lợi ích rất lớn cho việc phát triển giải pháp cổng thông tin này. Nó khiến cho các portal phát triển trên nền Zope sẽ có tính mở và tính phục vụ cao hơn đối với đông đảo người dùng Các kết quả chính đạt được trong quá trình làm đồ án: Xây dựng cơ sở lý thuyết cơ bản về Zope-Plone Dựng phần mềm khung cổng thông tin bằng việc tích hợp một số tính năng hỗ trợ Phát triển và tích hợp engine đa ngữ cả nội dung và giao diện cho phần mềm khung này Xây dựng website bộ môn trên phần mềm khung này Trong quá trình làm đồ án em đã hoàn thành các yêu cầu đặt ra như vậy tuy nhiên kết quả đạt được vẫn còn một số hạn chế do thời gian không cho phép cũng như nó nằm ngoài phạm vi của đề tài: Engine đa ngữ này xây dựng cụ thể cho giải pháp cổng thông tin Zope-Plone chứ không áp dụng được cho các cổng thông tin khác tuy nhiên cơ chế đa ngữ của nó có thể áp dụng cho các giải pháp cổng thông tin khác có kiến trúc hướng đối tượng, sử dụng CSDL hướng đối tượng vì như vậy nó mới tối ưu Ứng dụng website bộ môn vẫn còn một số hạn chế như đã nêu trong phần trên 5.2 Hướng phát triển Với việc áp dụng công nghệ Zope và Plone vào xây dựng website – cổng thông tin cho bộ môn thì ta đã xây dựng được nền tảng của cổng thông tin và hệ quản trị nội dung (xử lý tiếng việt, xây dựng Portal, xây dựng hệ quản trị nội dung….). Với cái nền như vậy và khả năng phát triển và mở rộng của Zope và Plone chúng ta có thể mở rộng việc ứng dụng công nghệ Zope và Plone từ cổng thông tin cho bộ môn lên thành cổng thông tin cho trường trong tương lai. Việc phát triển website của bộ môn thành cổng thông tin của trường hoàn toàn rất khả thi, tất cả những gì cần thiết cho hệ thống đều đã được xây dựng việc mở rộng phát triển lên chỉ đơn thuần là tạo thêm các Products – các site cho từng bộ phận trong trường và đưa vào trong Zope, Plone mà việc này phát triển với Zope và Plone là rất dễ và nhanh chóng. Tích hợp một số ứng dụng web sẵn có trong bộ môn, trong khoa, trong trường vào để tận dụng tính năng của engine đa ngữ. PHỤ LỤC Cài đặt Zope 2.7 Bổ sung của Zope 2.7 so với phiên bản trước: Sửa lại các ServiceInstallers (zope27start, zeo27server, zeo27clientX): Cho phép chạy nhiều Zope instance với cùng một Zope core bằng cách dùng config-file thay cho thư mục Zope trong tên service. Để gỡ bỏ service cần thêm tham số chỉ ra config-file (xem phần “Các tham số khác” ở cuối mục 2). Bổ sung tham số tuỳ chọn “-immortal”, cho phép tự động restart Zope khi gặp lỗi hệ thống. Các phiên bản Zope/Plone đang sử dụng: Zope 2.7 URL: File: Zope-2.7.X-win32.exe Plone 2 URL: File: Plone-2.X.X.tgz Cài đặt Zope/Plone: Cài đặt Zope Core: Chạy Zope Installer (Zope-2.7.X-win32.exe) Có thể chấp nhận thư mục cài đặt mặc định (C:\Program Files\Zope-2.7.X), hoặc chọn thư mục khác cũng được. Ví dụ ta chọn thư mục C:\Zope27. Không chọn “Zope ‘instance home’ files” Không chọn “Launch Zope” sau khi cài xong Tạo Zope instance: Vào thư mục bin (C:\Zope27\bin), chạy lệnh: python.exe mkzopeinstance.py Chọn Directory, ví dụ ta chọn thư mục C:\ZopeInstance. Chọn username/password Kiểm tra Zope instance: Chỉnh sửa config của Zope instance (C:\ZopeInstance\etc\zope.conf), ví dụ như thay đổi port của HTTP server, cấm FTP server, tắt chế độ debug (mặc định là ON)... Trong thư mục C:\ZopeInstance\bin, chạy runzope.bat, đợi đến khi xuất hiện thông báo “Zope Ready to handle requests” Vào ZMI kiểm tra lại Cài đặt Plone: Dùng WinRAR hoặc WinZip version 8.0 trở lên (không dùng WinZip 6/7!) để giải nén file Plone-2.X.X.tgz Copy các thư mục con (Archetypes, CMFPlone...) vào thư mục Products trong Zope Core (C:\Zope27\lib\python\Products) hoặc vào thư mục Products của Zope instance (C:\ZopeInstance\Products). Restart Zope, vào ZMI tạo Plone Site như trong Zope 2.6. Cài đặt Zope Service: Copy zope27start.exe (có tại \\QS\Public\Zope\Zope27\ServiceInstallers) vào thư mục C:\Zope27\bin. Vào C:\Zope27\bin, chạy lệnh: zope27start.exe install –C C:\ZopeInstance\etc\zope.conf Trong Computer Management / Services, kiểm tra phải có service với tên “Zope (C:\ZopeInstance\etc\zope.conf)”. Start service này. Các tham số khác: Để gỡ bỏ service, chạy lệnh: zope27start.exe remove C:\ZopeInstance\etc\zope.conf Nếu muốn Zope service tự động khởi động lại khi gặp lỗi hệ thống (những trường hợp khi service “chết” không rõ nguyên nhân), có thể dùng tham số “-immortal” khi cài service như sau: zope27start.exe install –immortal –C C:\ZopeInstance\etc\zope.conf Cài đặt ZEO Giả sử ta sẽ cài ZEO server vào cùng thư mục ZopeInstance, ở cổng 8090, và ZEO client #1 ở cổng 8081. Chú ý là ZEO server và mỗi ZEO client cần có một file config riêng. Copy các file zeo27*.exe (có tại \\QS\Public\Zope\Zope27\ServiceInstallers) vào thư mục C:\Zope27\bin. Cài đặt ZEO server: Vào C:\Zope27\bin, chạy lệnh: python.exe mkzeoinstance.py C:\ZopeInstance 8090 Trong C:\ZopeInstance\etc phải xuất hiện zeo.conf. Vào C:\Zope27\bin, chạy lệnh: zeo27server.exe install –C C:\ZopeInstance\etc\zeo.conf Trong Computer Management / Services, kiểm tra phải có service với tên “ZEO Storage Server (C:\ZopeInstance\etc\zeo.conf)”. Start service này. Kiểm tra lại bằng cách telnet vào cổng 8090. Cài đặt ZEO client: Vào C:\ZopeInstance\etc, copy zope.conf thành zeo1.conf (là file config dành cho ZEO client #1). Sửa zeo1.conf như sau: Gán tên cho ZEO client: zeo-client-name zeo1 Dùng log file riêng cho từng ZEO client để tránh xung đột giữa các ZEO client: ... path $INSTANCE/log/event_zeo1.log ... ... path $INSTANCE/log/access_zeo1.log ... Tương tự, để tránh xung đột giữa các ZEO client, cần đổi tên pid-file và lock-file cho từng ZEO client: pid-filename $INSTANCE/var/zeo1.pid lock-filename $INSTANCE/var/zeo1.lock Đổi cổng HTTP server: address 8081 Thay FileStorage bằng ZEO Storage: # # # Main FileStorage database # ... # # Temporary storage database (for sessions) ... # ZEO client storage: mount-point / server localhost:8090 storage 1 name zeostorage var $INSTANCE/var # Use 200MB for ZEO on-disk cache cache-size 200000000 Sau khi sửa xong zeo1.conf, vào C:\Zope27\bin, chạy lệnh: zeo27client1.exe install –C C:\ZopeInstance\etc\zeo1.conf Trong Computer Management / Services, kiểm tra phải có service với tên “ZEO Client #1 (C:\ZopeInstance\etc\zeo1.conf)”. Start service này. Vào ZMI (cổng 8081) để kiểm tra lại. Thay đổi ZCatalog để xử lý được Unicode Copy các module bổ sung vào C:\Program Files\Zope-2.7.X\lib\python vncodecs.py _vncodecs.dll Thay thế Products/CMFPlone/CatalogTool.py Chú ý: Cần làm các bước trên trước khi tạo Plone Site. Trong trường hợp đã có Plone Site thì phải sửa đổi portal_catalog như sau: Vào tab Contents, xoá plone_lexicon Tạo lại plone_lexicon: Add “ZCTextIndex Lexicon” Id: plone_lexicon Case Normalizer: checked Stop Words: Don’t remove Word Splitter: HTML-aware unicode splitter Vào tab Indexes, xoá và tạo lại các index Title, Description, SearchableText: Add ZCTextIndex Id, Attributes: Title / Description / SearchableText Ranking: Okapi Lexicon: plone_lexicon Reindex nếu cần thiết Tài liệu tham khảo www.zope.org www.plone.org www.sourceforge.net Building Websites with Zope and the CMF.ppt - A Tutorial Presented to the O'Reilly Open Source Convention 2001 CMS and Zope - Paul Browning Information Strategy Co-ordinator University of Bristol ZopeBook.pdf - Amos Latteier and Michel Pelletier ZopeShelf.chm - Hernán Martínez Foffani - hernan@orgmf.com.ar Python Cookbook - Alex Martelli and Anna Ravenscroft Oreilley Các tài liệu down được từ nhiều nguồn khác nhau

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

  • docDAN293.doc