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

Mục Lục Các từ viết tắt dùng trong báo cáo API Application Programming Interface CSDL Cơ Sở Dữ Liệu CSS Cascading Style Sheet CNTT Công Nghệ Thông Tin CMS Content Management System CMA Content Management Application CDA Content Delivery Application CMF Content Management Framework DTD Document Type Definition DHTML Dynamic HTML DOM Document Object Model DTML Document Template Markup Language FTP File Transfer Protocol HTTP HyperText Transfer Protocol HTML HyperText

doc75 trang | Chia sẻ: huyen82 | Lượt xem: 1780 | Lượt tải: 1download
Tóm tắt tài liệu Phát triển engine đa ngữ cho giải pháp cổng thông tin Zope - Plone & ứ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
Markup Language PORTAL Presenting natiOnal Resource To Audiences Locally SAX Simple API for XML XML eXtensible Markup Language XSL XML Stylesheet Language XSLT XSL Transformation ZPT Zope Page Templates ZMI Zope Management Interface ZEO Zope Enterprise Object Các hình dùng trong báo cáo Hình 1 Vấn đề trong các hệ thống cung cấp thông tin Hình 2 Giải pháp công nghệ Portal Hình 3 Kiến trúc của Zope Hình 4 Zope API Hình 5 Zope Catalog View Hình 6 Kiến trúc của ZEO Hình 7 Form tạo database connection Hình 8 Form Add SQL Method Hình 9 Security cho root Folder Hình 10 Proxy Roles trong Zope Hình 11 Kiến trúc của Plone trong Zope Hình 12 Lựa chọn ngôn ngữ Hình 13 Đa ngữ giao diện Hình 14 Đa ngữ nội dung Hình 15 Cơ chế đa ngữ trong Zope-Plone Hình 16 Kiến trúc phân cấp hướng đối tượng Hình 17 Chuẩn metadata Hình 18 Dùng khoá tổng hợp Hình 19 Cơ chế của đa ngữ nội dung Hình 20 Kết hợp đa ngữ nội dung và giao diện Hình 21 Sequence diagram cho kết hợp đa ngữ Hình 22 Xử lý tìm kiếm sắp xếp Hình 23 Sequence diagram xử lý sắp xếp, tìm kiếm tiếng việt Hình 24 Usecase diagram của Multilingual Hình 25 Class diagram của Multilingual Hình 26 Sequence diagram cho usecase “view content” Hình 27 Usecase diagram của hệ thống Hình 28 Usecase diagram cho usecase “Quản lý hoạt động” Hình 29 Sequence diagram cho usecase “Thêm lịch biểu” Hình 30 Usecase diagram cho usecase “QL thông tin đào tạo” Hình 31 Sequence diagram cho usecase “Cập nhật thông tin ĐT” Hình 32 Usecase diagram cho usecase “QL thông tin giáo viên” Hình 33 Sequence diagram cho usecase “Cập nhật thông tin GV” Hình 34 Usecase diagram cho usecase “QL tài nguyên” Hình 35 Sequence diagram cho usecase “Upload tài nguyên” Hình 36 Usecase diagram cho usecase “QL thông tin nghiên cứu” Hình 37 Sequence diagram cho usecase “Thêm thông tin NC” Hình 38 Usecase diagram cho usecase “QL thông tin sinh viên” Hình 39 Sequence diagram cho usecase “Thêm thông tin SV” Hình 40 Usecase diagram cho usecase “Quản lý tin bài” Hình 41 Sequence diagram cho usecase “Post tin bài” Hình 42 Usecase diagram cho usecase “Tìm kiếm” Hình 43 Sequence diagram cho usecase “tìm kiếm nâng cao” Hình 44 Usecase diagram cho usecase “Xem thông tin” Các bảng dùng trong báo cáo Bảng 1 Một số loại Portal Công việc thực hiện trong thời gian làm đồ án Trong thời gian làm đồ án được sự hướng dẫn tận tình của thầy giáo Lê Tiến Dũng và thày giáo Huỳnh Quyết Thắng em đã thực hiện những công việc sau: Xây dựng cơ sở lý thuyết cho Zope-Plone Dựng khung phần mềm giải pháp cổng thông tin Zope-Plone và tích hợp một số tính năng Phát triển Engine đa ngữ cho Zope-Plone Xây dựng website bộ môn trên giải pháp cổng thông tin Zope-Plone PHẦN I. GIỚI THIỆU ĐỀ TÀI 1.1 Xuất phát của đề tài Thông tin ngày nay được truy cập, tìm hiểu bởi rất nhiều người và cũng được cung cấp bởi nhiều nguồn khác nhau. Chính vì vậy việc đáp ứng, quản lý các nguồn thông tin trở nên rất quan trọng. Trong lĩnh vực CNTT của chúng ta thì việc chia sẻ các nguồn tài nguyên thông tin, việc quản lý các nguồn thông tin trở nên đặc biệt cần thiết bởi vì đời sống con người hiện nay đã được tin học hoá rất nhiều. Hiện nay công nghệ cổng thông tin rất phát triển nhằm đáp ứng nhu cầu đó. Có rất nhiều công nghệ cổng thông tin khác nhau với những đặc điểm và thế mạnh khác nhau. Chúng ta cần nắm bắt công nghệ mới này để làm sao phát triển, áp dụng nó, phát huy thế mạnh của nó để tăng hiệu quả cho mình. Vậy thì trước nhiều công nghệ như vậy ta nên chọn giải pháp nào, chọn cổng thông tin, hệ quản trị nội dung nào, nên xuất phát từ đâu? 1.2 Giới thiệu tổng quát đề tài Đề tài của em là “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”. Trong đề tài này của mình em sẽ trình bầy những kiến thức cơ bản nhất về Zope-Plone để chúng ta có khái niệm về giải pháp cổng thông tin này tiếp đến em sẽ trình bầy về nhu cầu đa ngữ, vấn đề gặp phải khi giải quyết vấn đề đa ngữ và đưa ra giải pháp engine đa ngữ và xây dựng nó, cuối cùng em sẽ áp dụng giải pháp này vào xây dựng website bộ môn. 1.3 Lý do chọn đề tài và mục đích của đề tài Có rất nhiều giải pháp cổng thông tin khác nhau: Oracle, IBM, Liferay, uPortal, DOTNETNUKE,…. Mỗi giải pháp đều có những thế mạnh riêng của mình và tất cả đều đáp ứng được yêu cầu của một cổng thông tin tuy còn có những hạn chế của mình. Ở Việt Nam thực tế đã triển khai và ứng dụng nhiều giải pháp cổng thông tin khác nhau: iCMS, uPortal, Oracle… và trong khoa CNTT cũng đã có nhiều đề tài làm về cổng thông tin tuy nhiên em vẫn mạnh dạn chọn đề tài này. Trước hết là vì em là một người rất thích cổng thông tin và muốn giải quyết vấn đề đa ngữ. Em chọn giải pháp cổng thông tin Zope-Plone là vì Zope-Plone có kiến trúc rất đặc biệt, mạnh mẽ và quan trọng hơn cả là nó có một CSDL hướng đối tượng rất đặc biệt hỗ trợ đắc lực trong việc giải quyết vấn đề đa ngữ. Hơn thế nữa đây là công nghệ nguồn mở và có cộng đồng phát triển rất lớn. Chúng ta sẽ xem xét cụ thể vấn đề này trong những phần sau của đồ án. Mục đích của đề tài là nêu bật được các tính năng mạnh mẽ, khả năng của giải pháp cổng thông tin Zope-Plone và đưa ra được một engine đa ngữ triệt để cho giải pháp cổng thông tin này. PHẦN II. CƠ SỞ LÝ THUYẾT 2.1 Ngôn ngữ Python Python là một ngôn ngữ hết sức mềm dẻo rất phù hợp cho các dự án lớn và phức tạp, là một ngôn ngữ hướng đối tượng giống như Perl, Tcl,Scheme hay Java. Python có những đặc điểm rất mạnh khiến nó trở thành một ngôn ngữ mạnh mẽ: Với bộ thư viện hỗ trợ mở rộng của mình thì năng suất của lập trình viên tăng lên từ 2 tới 10 lần so với việc sử dụng các ngôn ngữ khác: C, C++, Java, Basic… Python hỗ trợ tất cả các loại ứng dụng: Enterprise Application Integration (EAI), Web Services, làm việc tốt với CORBAR, COM, có gọi hoặc được gọi trực tiếp từ C, C++ hay Java Python cung cấp khả năng điều khiển tiến trình mạnh mẽ, cài đặt hầu như tất cả các giao thức Internet thông dụng và các data format, có khả năng xử lý mạnh XML và các loại ngôn ngữ đánh dấu khác, đặc biệt có thể được nhúng như là một ngôn ngữ kịch bản, được dịch ra byte code và chạy như nhau trên tất cả mọi nền Khả năng chạy các ứng dụng mạng lớn hoặc các ứng dụng mạng đa giao thức, hỗ trợ frame work Twisted cho việc phát triển các ứng dụng đa mạng , đa giao thức, giao tiếp giữa các mạng, database… Hỗ trợ phát triển web từ các đoạn kịch bản CGI cho đến các ứng dụng web lớn rất mạnh với Zope Application Server và Plone Content Management System Python hỗ trợ gần như tất cả các loại database, hỗ trợ xử lý text và document rất mạnh Python hỗ trợ các thư viện hoặc các ứng dụng trên rất nhiều lĩnh vực khác nhau: Python Imaging Library, VTK, Mayavi 3D Visualization Toolkits, Numeric Python, ScientificPython…. Python với khả năng xử lý chuỗi của mình và các thư viện được tích hợp thì nó hỗ trợ unit testing frame work phục vụ cho quá trình kiểm thử bắt lỗi trong quá trình xây dựng ứng dụng Python không chỉ hỗ trợ xây dựng các ứng dụng web mạnh mà nó còn hỗ trợ xây dựng các ứng dụng desktop với: wxPython, PyQt, hay PyGtk, MFC, GUI Framework…. Python có khả năng hỗ trợ bạn tạo các prototype tối đa nên phát triển ứng dụng sẽ rất nhanh … Python có một thế mạnh rất lớn vì nó là nguồn mở! Bởi vì nó được phát triển dưới dạng nguồn mở từ hàng nghìn người trên thế giới nên nó được thiết kế rất tốt, nhanh, khoẻ, portable và có khả năng mở rộng cao. Hiện nay Python đang dần dần chiếm lĩnh vị trí quan trọng trong các ngôn ngữ lập trình và các sản phẩm trên Python đang ngày càng nhiều và đang rất phát triển 2.2 Công nghệ Portal 2.2.1 Những vấn đề gặp phải trong CNTT (IT Challenges) Sự bùng nổ của các nguồn thông tin (source of information) Ngày càng có nhiều khó khăn cho người dùng trong việc tìm kiếm, lựa chọn thông tin, người dùng không biết được đâu là thông tin quan trọng Có quá nhiều dịch vụ yêu cầu xác thực đối với người dùng Quá phức tạp trong việc cung cấp bảo mật cho login vào hệ thống Người dùng và cả những người sản xuất đều không thích thú và thoải mái hvới những hệ thống này …. 2.2.2 Mong muốn từ phía người sử dụng Người dùng mong muốn hệ thống ngày càng dễ sử dụng, giao diện ngày càng thân thiện Ngày càng có nhiều dịch vụ (service) được cung cấp trên Web Sự cá nhân hoá (personalization) lớn hơn để có thể an tâm về các tài nguyên của mình …. Hình 1. Vấn đề trong các hệ thống cung cấp thông tin 2.2.3 Khái niệm Portal Chúng ta có thể thấy được sự phức tạp và cồng kềnh trong các hệ thống cung cấp thông tin này. Như vậy thì khi số người truy cập hệ thống tăng vọt như ngày nay, các nguồn thông tin cũng ngày càng khổng lồ và rất nhiều cùng với các khó khan như đã nêu trên thì các hệ thống này sẽ không đáp ứng nổi nữa. Như vậy vấn đề đặt ra là phải có một giải pháp, một công nghệ cho phép ta giải quyết được các khó khăn vướng mắc trên, và công nghệ “Portal” đã ra đời để khắc phục các khó khăn trên của các hệ thống cung cấp thông tin. Chúng ta hãy quan sát mô hình được đưa ra trong hình vẽ dưới đây: Portal – Presenting NatiOnal Resource To Audiences Locally sẽ đảm nhiệm vai trò trung tâm, tiếp nhận yêu cầu và phân phối các yêu cầu, thông tin cho các hệ thống, người dùng. Portal là bước phát triển tất yếu của các hệ thống cung cấp thông tin như website chẳng hạn. Sự khác biệt chính về bản chất so với các website là các website được thiết kế như những đơn vị cung cấp thông tin độc lập. Hình 2. Giải pháp công nghệ Portal Trong khi đó các hệ thống uPortal được thiết kế và xây dựng trở thành những trung tâm tích hợp thông tin, ứng dụng và các dịch vụ web (như trên hình vẽ trên). Portal tích hợp thông tin, ứng dụng và các dịch vụ chứ không chứa đựng chúng (integration not container). Do đã tích hợp các nguồn thông tin, ứng dụng và các dịch vụ nên người dùng chỉ cần làm việc với Portal đã có thể sử dụng được tất cả các ứng dụng, dịch vụ và khai thác được tất cả các nguồn thông tin được cung cấp bởi Portal. Có thể thấy rằng Portal là một giải pháp công nghệ mang tính cách mạng. Portal là cổng giao tiếp điện tử, là trung tâm tích hợp thông tin, ứng dụng và dịch vụ trên internet mà qua đó người sử dụng được hỗ trợ một cách tốt nhất để có thể tìm kiếm, khai thác và xử lý thông tin một cách thực sự hiệu quả. Portal cung cấp cơ chế “SSO - Single Sign On” tới mọi nguồn tài nguyên, dịch vụ trong hệ thống. Dưới đây là một số loại Portal tiêu biểu hiện nay: Kiểu Portal Ví dụ Enterprise Portal uPortal, Academus Portal Consumer Portal myYahoo Community Portal iSavixx Vertical Portal E*Trade Government Portal USPortal Web Application Server Zope Bảng1. Một số loại Portal 2.2.4 Các đặc trưng của công nghệ Portal Khả năng cá nhân hoá cao cho người dùng (personalization) Đây là tính năng quan trọng nhất của Portal. Người dùng có thể thiết lập màn hình sử dụng riêng của mình, thiết lập giao diện (look & feel), các nội dung, các cài đặt, các giao diện các ứng dụng theo ý riêng của mình dựa trên quyền hạn được cấp theo loại user đăng nhập. Khả năng tuỳ biến giao diện sử dụng (customization) Bạn dễ dàng thiết lập lại các thông số, các giao diện làm việc, cách tổ chức thông tin, cách thực thi ứng dụng, dịch vụ theo ý của mình Đăng nhập một lần cho toàn hệ thống (Single Sign On) Chỉ một lần đăng nhập (login) bạn có thể tìm kiếm, sử dụng, chia sẻ, khai thác mọi tài nguyên được cung cấp cho loại user của bạn Bảo mật cao Mọi tài nguyên trong hệ thống đều được bảo vệ khi không đăng nhập đúng và các tài nguyên được cung cấp theo quyền của user đăng nhập Hỗ trợ Workflow Các công việc, giao dịch , dịch vụ được xử lý tự động thành luồng các công việc một cách tự động Dễ tương tác Giao diện thân thiện, dễ thay đổi, sử dụng, mang tính tương tác cao Tích hợp đa hệ thống Portal không chỉ là một ứng dụng, nó còn là một platform cho phép ta tích hợp các hệ thống, ứng dụng web khác vào nó một cách hiệu quả, dễ dàng Hỗ trợ tổ chức, phân loại, sắp xếp thông tin Portal cho phép bạn tổ chức thông tin, sắp xếp thông tin thành các nhóm, để truy cập, tìm kiếm dễ dàng Hỗ trợ khả năng tìm kiếm nhanh thông tin Portal cung cấp cơ chế tìm kiếm thông tin dựa trên các Search Engine mạnh và cơ chế sắp xếp, phân loại thông tin Thông tin được tích hợp từ nhiều nguồn khác nhau Trong Portal thông tin được tích hợp từ rất nhiều nguồn khác nhau, bạn có thể tích hợp thông tin từ bất kỳ nguồn thông tin nào Hỗ trợ mô hình làm việc cộng tác hay cộng đồng ảo Cộng đồng ảo là một “vị trí ảo” trên internet mà các cá nhân, các doanh nghiệp có thể tập để giúp đỡ, hỗ trợ, cộng tác với nhau trong lĩnh vực thương mại để phát triển hơn. Cộng đồng ảo chính là nơi mang lại cơ hội cộng tác cho các cá nhân, tổ chức doanh nghiệp từ bất cứ nơi đâu thông qua internet và Portal Nhờ những thế mạnh của mình mà hiện nay Portal rất phát triển, và đã trở thành công nghệ mạnh mẽ nhất hiện nay trong lĩnh vực thông tin trên mạng. Nó là bước phát triển tất yếu trong lĩnh vực CNTT. 2.2.5 Hiện trạng Portal ở Việt Nam Hiện nay nền CNTT của Việt Nam đã và đang ứng dụng công nghệ Portal một cách mạnh mẽ. Các công ty đều đang triển khai các Portal của mình hoặc xây dựng các Portal để bán. Thị trường Portal ở Việt Nam đang rất sôi động, tuy nhiên Portal không chỉ đơn giản chỉ là cái khung, mà Portal chỉ thực sự là Portal khi nó có được một CMS đủ mạnh! Vấn đề CMS ở Việt Nam hiện nay cũng đang rất phát triển có rất nhiều hướng và rất nhiều công nghệ. Từ chính phủ, nhà nước, tỉnh thành cho đến các công ty, các trường đại học đều đang triển khai cổng thông tin của mình! Có thể nói rằng công nghệ Portal đã thâm nhập và đang phát triển rất mạnh mẽ ở Việt Nam. 2.3 Công nghệ nguồn mở Zope portal (Web Application Server) 2.3.1 Tổng quan về Zope Zope là một Open Source Web Application Server rất mạnh với một giao diện Web (không phải giao diện DOS – Console không thể can thiệp như các Web Application Server khác) rất thân thiện và dễ sử dụng. Trong Zope đã tích hợp nhiều ứng dụng và công nghệ rất mạnh cho phép chúng ta nhanh chóng phát triển các ứng dụng web: có thể tạo , sửa xoá một site khá dễ dàng và đảm bảo. Và đặc biệt Zope đã được tích hợp hệ quản trị nội dung Plone (một hệ quản trị nội dung web rất mạnh) nên Zope trở nên rất mạnh đối với việc phát triển các ứng dụng web. Zope không chỉ hỗ trợ như là một Web Application độc lập mà nó còn có khả năng kết hợp với các Web Application Server khác như IIS, Apache…, hơn nữa Zope lại có riêng cho mình một số ngôn ngữ, có riêng cho mình một CSDL hướng đối tượng và có thể kết hợp được với các CSDL ngoài: Oracle, SQL Server, DB2… Zope cho phép bạn cá nhân hoá giao diện tới mức tối đa. Đối với người phát triển (developer) thì Zope hỗ trợ phát triển tối đa: ZPT, DTML…. 2.3.2 Thực tế của Zope trên thế giới Hiện nay trên thế giới thì Zope được ứng dụng và phát triển rất rộng rãi. Rất nhiều các cơ quan, tổ chức lớn, các bộ ngành cấp quốc gia sử dụng Zope vì khả năng và sự ưu việt của Zope. Zope đặc biệt được ưa thích ở Mỹ (Hải quân Mỹ, Nasa, Boston.com …). Redhat, IDG, Viacom, AARP…. tất cả đều sử dụng và phát triển trên nền Zope. Zope là một trong những Web Application Server nguồn mở mạnh nhất hiện nay, với khả năng vượt trội của mình Zope đang ngày càng phát triển và chiếm lĩnh thị trường 2.3.3 Kiến trúc của Zope Zope là một hệ thống rất lớn với nhiều thành phần. Kiến trúc linh hoạt mềm dẻo của Zope cho phép Zope có thể giải quyết được nhiều vấn đề. Chúng ta hãy xem xét kiến trúc của Zope: Hình 3. Kiến trúc của Zope Qua lược đồ này chúng ta có thể phần nào thấy được kiến trúc của Zope, Zope là một hệ thống lớn bao gồm rất nhiều thành phần. Những thành phần của Zope trong lược đồ này là những thành phần ở mức cao của Zope bao gồm: ZServer Cung cấp các kết nối internet linh hoạt hỗ trợ nhiều loại giao thức khác nhau: HTTP, FTP, XML-RPC, FastCGI, PCGI… ZServer có thể hoạt động cộng tác với các Web Server có sẵn Zope Core Bao gồm ORB, search engine, security layer, membership…. Object Database (ZODB) Là hệ quản trị CSDL hướng đối tượng của Zope RDBMS Integration Cung cấp các kết nối cho phép các ứng dụng phát triển trên Zope có thể làm việc dễ dàng với các hệ quản trị CSDL khác Zope Products Là phần mở rộng của Zope Core bằng cách thêm các kiểu đối tượng mới, các tiện ích mới được viết trong Python vào ZClasses Là phần mở rộng của Zope Core với các kiểu đối tượng mới được tạo ra thông qua web. ZClass không cần bất cứ một chút lập trình nào và có thể dễ dàng phân tán và cài đặt. 2.3.4 Các đối tượng cơ bản trong kiến trúc hướng đối tượng của Zope Zope bao gồm các đối tượng khác nhau thực hiện các nhiệm vụ khác nhau và theo thiết kế của Zope thì mỗi thành phần giải quyết một mảng vấn đề của ứng dụng Web của bạn: có đối tượng thì giải quyết phần nội dung dữ liệu có đối tượng thì giải quyết phần xử lý logic của ứng dụng, có đối tượng thì điều khiển phần hiển thị dữ liệu… Các đối tượng cơ bản trong Zope được chia làm ba loại: Content Objects Là các Zope Object mang nội dung khác nhau của Zope: documents, images, files, folders… Trong đó: Folder Đối tượng cơ bản của Zope chứa được các đối tượng khác File Là đối tượng cơ bản của Zope dùng để chứa dữ liệu giống như file trong hệ điều hành Image Chứa dữ liệu từ các file ảnh: GIF, JPEG, PNG…. Image rất giống với File Object rất nhưng nó có chứa thêm các hành vi của các ảnh (xem ảnh, phóng to, thu nhỏ…) Presentation Objects Là các đối tượng cho phép bạn thay đổi thể hiện (look & feel) của ứng dụng Web của bạn dễ dàng như là sử dụng template. Presentation Objects trong Zope bao gồm 2 loại đối tượng: Zope Page Templates (ZPT) Zope Page Templates là đối tượng cho phép bạn định nghĩa các cách hiển thị động cho một trang Web. Phần nội dung HTML trong trang web được làm động (dynamic) bằng cách chèn những phần tử XML Namespace vào trong phần HTML và định nghĩa các hành vi động cho trang web đó DTML Objects DTML (Document Template Markup Language) Objects là đối tượng trong Zope cũng cho phép định nghĩa các cách hiển thị cho trang web, DTML cung cấp cho bạn các thẻ để bạn chèn vào phần HTML để tạo ra các hành vi động cho trang web của bạn Cả ZPT và DTML đều là các ngôn ngữ kịch bản phía server (server-side scripting languages) giống như SSI, embperl, PHP, JSP… tức là các câu lệnh của DTML và ZPT đều được thực hiện bởi ZServer và trả kết quả về cho web browser Logic Objects Logic Objects là những đối tượng trong Zope hỗ trợ việc xử lý các thao tác sắp xếp, xử lý… hỗ trợ cho việc thể hiện (presentation) của các đối tượng khác trong Zope. Khi các đối tượng này được thực hiện thì nó không trả về các phần HTML hay các thể hiện văn bản có cấu trúc mà nó thường trả về các giá trị dễ dàng cho các đối tượng thể hiện (presentation object) dùng để định dạng dữ liệu hiển thị. Logic Objects trong Zope được chia ra làm hai loại: Script (Python) Script (Python) Object là một loại Logic Objects của Zope. Script (Python) Object là tập hợp của các đoạn ràng buộc an toàn soạn thảo được trên web (security-constrained web-editable pieces of code) được viết trên một phần của ngôn ngữ kịch bản Python (Python scripting language). Không phải mọi phần mã nguồn Python đều có thể thực hiện được bởi Script (Python). Script (Python) Objects được ràng buộc bởi chính sách an toàn của Zope (Zope’s security policy) nên không phải mọi phần của Python đều có thể thực hiện được thông qua Script (Python) mà chỉ những phần được cho phép hoặc quy định trong Zope’s security policy mới có thể được thực hiện bởi Script (Python). Dưới đây là một đoạn Script (Python) đơn giản: ## Script (Python) "SalesScript" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters=name="Chris" ##title= ## return 'Hello, %s from the %s script' % (name, script.id) External Methods External Methods Object là một loại Logic Object trong Zope, nó được viết trong ngôn ngữ Python và cũng được sử dụng cùng mục đích với Script (Python) tuy nhiên nó có một số điểm khác biệt quan trọng : Nó không được soạn thảo thông qua ZMI (Zope Management Interface), thay vào đó nó được tạo ra bằng ngôn ngữ Python và modules được tạo ra đó được đưa vào hệ thống file của Zope Server dưới dạng thư mục con đặc biệt của Zope: Extensions Nó không được tạo ra thông qua ZMI nên nó không bị ràng buộc về security chính vì vậy mà nó có thể được tải vào, thực hiện và sinh ra modules trong hệ thống file của Zope và được sử dụng dễ dàng Nó không hỗ trợ binding 2.3.5 Khả năng tạo nội dung động với DTML DTML là một tiện ích, một ngôn ngữ template dùng để tạo ra các trang web động. Bạn có thể sử dụng DTML Script dưới hai dạng Zope Object là: DTML Documents DTML Documents là những Content Object trong Zope, nó chỉ có thể chứa đơn thuần HTML hoặc text. DTML Documents có những thuộc tính riêng của nó và những thuộc tính này có thể thay đổi được theo ý muốn của chúng ta. Để có thể thay đổi (render) được thuộc tính của một DTML Document thì chúng ta có thể dùng DTML Methods DTML Methods DTML Methods được dùng để thực hiện các hành động (Actions). DTML Methods là những đối tượng trình diễn (Presentation Objects). DTML Methods không có những thuộc tính riêng của nó, thông thường chúng ta hay dùng DTML Methods để thực hiện các DTML Scripting chứ không dùng được DTML Documents. DTML Methods là một Method Object của thư mục bao hàm nó DTML sử dụng các thẻ để thực hiện các công việc được đưa vào trong đó. Trong DTML có 2 loại thẻ: Singleton tags Là những thẻ đơn không cần thẻ đóng mà chỉ cần dấu “/” hoặc kết thúc bằng “<” (nhỏ hơn) hoặc “>” (lớn hơn) ví dụ thẻ var: Block tags Là những thẻ mà mỗi thẻ bao gồm một thẻ đóng kết thúc và một thẻ mở bắt đầu và ở giữa hai thẻ là nội dung: Mỗi thẻ trong DTML đều bao gồm: Tag Names Tag names chính là tên của thẻ và cũng chính là phần sau của “dtml-“. Ví dụ trong dtml-var thì tên thẻ là var Tag Targets Chính là target của thẻ, là phần đứng sau tên thẻ (được phân tách với tên thẻ bằng dấu cách: thì standard_html_header chính là target của thẻ Tag Attributes Là phần thuộc tính của thẻ, đứng sau cùng trong lúc viết thẻ: chẳng hạn: Thì missing=”unknown wingspan” là phần thuộc tính của thẻ. Với DTML bạn có thể làm được rất nhiều thứ với trang web của mình. Bạn có thể quy định thứ tự trình bày, chèn text vào trong HTML, xử lý dữ liệu vào từ form…. DTML cung cấp cho chúng ta đủ công cụ để chúng ta có thể làm động trang web của mình tới mức tối đa cũng như khi chúng ta sử dụng các ngôn ngữ kịch bản mạnh khác. Ngoài ra trong Zope còn cung cấp cho chúng ta phần lập trình DTML nâng cao: DTML Namespace, DTML Client Objects, DTML Request Object, DTML Security, DTML Advanced Tags…. Bạn có thể làm mọi thứ giống như trong các ngôn ngữ kịch bản phía Server khác một cách dễ dàng vì Zope đã gói, tích hợp rất nhiều vào trong DTML. 2.3.6 Zope Page Templates ZPT là một công cụ để sinh các trang Web. Nó giúp người thiết kế và người lập trình phối hợp dễ dàng với nhau để tạo ra trang web động, nó tách biệt phần giao diện và phần code của một trang web. Cả ZPT và DTML đều cho phép tạo ra các trang web động, vậy thì sự khác nhau giữa ZPT và DTML là gì? Zope đã có DTML vậy thì Zope cần gì phải có một template language nữa? DTML được sử dụng với mục đích là tạo ra các phần xử lý và nội dung động, chứ không có mục đích là thiết kết phần HTML. ZPT tạo ra các template pages là các trang HTML DTML không tách biệt được phần giao diện (presentation), phần xử lý (logic) và phần nội dung (content-data) chính vì vậy mà nếu chỉ dùng DTML thì việc xây dựng và phát triển các trang web sẽ không nhanh được. ZPT tách biệt được phần giao diện và phần xử lý. Namespace trong DTML chèn quá nhiều “magic” vào trong object lookup mà lại không có đủ điều khiển. Tuy nhiên có những thế mạnh của DTML mà ZPT không có được: chẳng hạn như DTML có thể sinh ra các email messages một cách động nhưng ZPT thì không thể. ZPT chỉ có thể sinh ra các HTML và các XML và nó dùng để sinh ra gần như là mọi trang web (phần giao diện) của các ứng dụng trong Zope. Một template page được tạo ra nhờ sử dụng Template Attribute Language (TAL). TAL là một ngôn ngữ có cú pháp XML, TAL bao gồm các thẻ đặc biệt bắt đầu bằng “tal:”. TAL cung cấp rất nhiều thẻ đặc biệt cho phép bạn thực hiện các xử lý, trình bày giao diện rất tốt. Giao diện của trang web được ZPT tách ra thành từng phần khác nhau: header, footer, body, title… Những thành phần này đều có tương ứng những thẻ của TAL cho phép ta định nghĩa và cung cấp nội dung cho từng phần một cách động và như vậy với ZPT ta có thể cá nhân hoá giao diện trong lúc làm việc một cách rất linh hoạt: chúng ta có thể dùng thẻ “tal:replace” để thay thế nội dung của các phần này trong quá trình làm việc với trang web. ZPT cho phép bạn tạo ra các trang web một cách khá dễ dàng, ZPT cho phép ta làm việc với giao diện theo các phép điều khiển logic, theo các cấu trúc lặp, chèn các xử lý của XML vào trong page templates, sinh ra các XML template… Ví dụ dưới đây là một ví dụ về sử dụng cấu trúc lặp với thẻ “tal:repeat” và cấu trúc điều khiển với thẻ “tal:condition”: <table tal:condition="container/objectValues" border="1" width="100%"> Number Id Meta-Type Title # Id Meta-Type Title Với ZPT bạn có thể tạo ra các thư viện file (File Library) với page template rất dễ dàng với một chút kiến thức về Python. Bạn cũng có thể dễ dàng tạo ra một page template từ xa thông qua FTP và WebDAV Trên đây chỉ là những trình bày tổng quan về ZPT cơ bản. Zope còn cung cấp cho chúng ta ZPT nâng cao (Advanced Zope Page Templates). Trong ZPT nâng cao ZPT cung cấp cho chúng ta: Các thẻ TAL nâng cao Bao gồm các thẻ điều khiển đặc biệt, các điều khiển đặc biệt, tương tác giữa các câu lệnh TAL, xử lý form…. ZPT Expressions Các biểu thức trong ZPT, cách gọi các hàm, module của Python trong ZPT, sử dụng Script trong ZPT… ZPT Macros ZPT cho phép bạn định nghĩa và sử dụng các Macros, bạn có thể tạo các portlet rất dễ dàng và nhanh chóng Caching Template Page Template Utilities 2.3.7 Advanced Zope Scripting Zope quản lý ứng dụng web của bạn (cả presentation, logic và data) thông các Objects. Trên đây chúng ta đã xem xét ZPT và DTML của Zope dùng để quản lý phần trình diễn (presentation) của ứng dụng web. Zope còn hỗ trợ chúng ta các Script Objects để chúng ta xử lý phần logic (xử lý các điều kiện, các sự kiện …). Script Objects cho phép chúng ta chèn các đoạn Scripts viết trong Perl hay Python vào ứng dụng web. Zope Script Objects là những Object trong Zope gói một số đoạn mã viết trong một ngôn ngữ lập trình nào đó. Script Object chỉ xuất hiện kể từ Zope 2.3. Hiện nay thì việc dùng Script Object để xử lý các phần logic và các Scripts được dùng với các Script Object là “Python-based Script” - được viết trong ngôn ngữ Python. Hiện nay Zope đã có third-party extensions cho phép ta viết các Script trong ngôn ngữ Perl. Bạn có thể thêm Script vào trong ứng dụng của mình cũng như thêm các đối tượng khác. Bạn có thể sử dụng “Python-based Script” hoặc “Perl-based Script” để tạo ra các Script Object để đảm nhận phần logic. Bạn có thể gọi các Script Object trực tiếp từ Web thông qua URL của Script Object đó, bạn cũng có thể gọi Script Object từ các Object khác một cách dễ dàng. Bạn có thể truyền tham số cho các Script trong quá trình gọi, thực thi Ví dụ dưới đây là một form và một Script đơn giản: Name Age ## Script (Python) "actionScript" ##parameters=name, age ## "Process form" context.processName(name) context.processAge(age) return context.responseMessage() Zope hỗ trợ bạn lập Script rất nhiều trong ZMI với Zope API: Hình 4. Zope API Zope hỗ trợ rất nhiều trong Zope Script, Zope Script cho phép bạn thực hiện các xử lý giống hệt như trong các ngôn ngữ Python hay Perl: xử lý chuỗi, xử lý toán học, các xử lý điều khiển…, điều này sẽ rất dễ dàng cho bạn khi bạn đã biết các ngôn ngữ Perl hay Python. Các Script trong Zope cũng được đảm bảo an toàn rất cao thông qua cơ chế Security của Zope (Sẽ trình bày rõ hơn trong phần Security phía dưới). 2.3.8 Cơ chế tìm kiếm và phân loại nội dung Trong Zope thì tất cả mọi thứ đều được tổ chức dưới dạng các đối tượng. Tất cả các đối tượng này đều được phân loại trong Zope. Zope có một CSDL hướng đối tượng và nó lưu trữ tất cả những gì thuộc Zope. Zope cung cấp cho bạn ZCatalog, là cơ chế Catalog của Zope. Catalog của Zope là một built-in Search Engine cho phép ta phân loại, tìm kiếm các đối tượng, nội dung trong Zope. ZCatalog còn cho phép ta lập trình với nó để tạo ra các cơ chế tìm kiếm, phân loại và cách thức report riêng. ZCatalog không chỉ cho phép ta tìm kiếm các đối tượng trong Zope mà Search Engine này còn cho phép ta tìm kiếm các dữ liệu quan hệ, tìm kiếm file, tìm kiếm các trang web từ xa (remote web pages). ZCatalog cung cấp cho ta một giao diện truy vấn rất phong phú và đa dạng, nó cho phép ta thực hiện “full text searching”, “multiple indexes searching”- tìm kiếm nhiều từ khoá đồng thời. ZCatalog có hai “kiểu sử dụng - usage pattern” phổ biến nhất là: Mass Cataloging Tạo catalog cho một tập hợp lớn các đối tượng đồng thời. Mass Cataloging bao gồm 3 bước: Tạo ZCatalog Tìm các đối tượng và catalog chúng Tạo giao diện web cho việc tìm kiếm catalog vừa được tạo Automatic Cataloging Tạo catalog các object như là lúc chúng được tạo ra và theo dõi các thay đổi được tạo ra cho chúng ZCatalog cho phép chúng ta phân loại (tạo các catalog – cataloging) các đối tượng và cho phép ta tạo ra các tìm kiếm khác nhau: tìm kiếm theo từ khoá, tìm kiếm theo trường, tìm kiếm theo dường dẫn (path)…, đặc biệt ZCatalog còn cho phép bạn tạo search theo cả Record. Zope cũng hỗ trợ chúng ta tạo các view cho các catalog và các kết quả tìm kiếm một cách khá dễ dàng: Hình 5. Zope Catalog View 2.3.9 Cơ chế phân tải và mở rộng - Scalability & ZEO Khi một ứng dụng web (website hay portal) nhận được quá nhiều yêu cầu, vượt quá khả năng xử lý, kiểm soát nó có thể bị chậm hoặc không đáp ứng nổi. Trong những trườ._.ng hợp như vậy Server bị quá tải thì cách giải quyết thường là ngừng không nhận các yêu cầu nữa, điều này là không thể chấp nhận được bởi như vậy thì thiệt hại sẽ là rất lớn. Vấn đề quá tải này đã được giải quyết trong Zope và Zope Server sẽ không bao giờ bị quá tải bởi vì Zope Server có thể chạy trên nhiều máy tính khác nhau. Khi một máy tính này gặp vấn đề thì các máy tính còn lại có thể tiếp tục hoạt động, cũng có thể các máy tính làm việc song song với nhau tương ứng với các xử lý của Zope Server. Việc chạy Server trên nhiều máy có những thuận lợi như vậy nhưng cũng có nhược điểm là chúng ta luôn phải đồng bộ, duy trì thông tin giống hệt nhau trên các máy đó. Điều đó là hoàn toàn đơn giản đối với các đơn vị nhỏ nhưng đối với các tổ chức lớn thì việc đồng bộ, duy trì này là vô cùng phức tạp và khó khăn. Để giải quyết vấn đề này Zope đã đưa ra Zope Enterprise Object (ZEO). ZEO (như đã nói ở phần giới thiệu về Zope) là một hệ thống cho phép chúng ta chạy ứng dụng web của mình trên nhiều máy tính hay còn gọi là “clustering hoặc load balancing”. ZEO chạy Zope trên nhiều máy tính khác nhau và luôn đảm bảo rằng Zope luôn được nhất quán và sử dụng chính xác cùng một CSDL. ZEO sử dụng kiến trúc Client/Server, phần cài đặt của Zope trên các máy tính khác nhau chính là các ZEO Client và tất cả các ZEO Client đều kết nối đến ZEO Storage Server duy nhất: Hình 6. Kiến trúc của ZEO Thông thường khi nghe nói tới Zope bạn nghĩ nó chỉ là một Server thuần tuý nhưng với ZEO thì Zope hoạt động vừa là Client (đối với dữ liệu từ ZEO Server) và Server (đối với các yêu cầu web – web request). ZEO Client và ZEO Server trao đổi, liên lạc với nhau thông qua các giao thức internet chuẩn chính vì vậy mà chúng ta có thể phân tán một Zope Server trên khắp thế giới. Đây cũng chính là một đặc điểm rất mạnh của Zope 2.3.10 Khả năng kết nối Relation Database trong Zope Zope có một hệ CSDL hướng đối tượng rất mạnh, mang đầy đủ các thế mạnh của Zope về Security, dynamic representation, networking…. Với hệ CSDL quan hệ thì người dùng khó có thể thay thế, sửa đổi các bản ghi của mình. Với Zope thì Zope hỗ trợ cho người dùng tối đa về truy cập dữ liệu, hiển thị dữ liệu, quản lý dữ liệu…. Chính vì vậy mà sử dụng CSDL quan hệ với Zope sẽ tận dụng được điều này vì Zope có một CMS rất mạnh. Zope làm việc với CSDL quan hệ thông qua các Database Adapter và SQL Method. Để sử dụng được CSDL quan hệ trong Zope bạn phải tạo hai đối tượng khác nhau của Zope đó là: Database Connection Z SQL Method Database Connection dùng để hình thành và quản lý các kết nối tới các CSDL quan hệ bên ngoài, phải có database connection trước khi tạo các Z SQL method. Zope hiện nay đã có các Database Adapter cho các hệ CSDL sau: Oracle Sysbase ODBC PostgreSQL MSQL Interbase Gadfly Việc tạo database connection trong Zope là khá dễ dàng vì nó đã được hỗ trợ cài đặt và có form giao diện để chúng ta làm việc. Dưới đây là form tạo database connection với PostgreSQL: Hình 7. Form tạo database connection Để thao tác với CSDL ngoài thì ta phải dùng Z SQL Method, việc cài đặt các Z SQL Method cũng được hỗ trợ tối đa, có giao diện làm việc, có cả query builder và với những truy vấn phức tạp ta mới phải nhập vào truy vấn. Zope hỗ trợ các query template, hỗ trợ các view để thực hiện, xem kết quả truy vấn: Hình 8. Form Add SQL Method 2.3.11 Security trong Zope Zope là một hệ thống đa người dùng, tuy nhiên Zope không tin tưởng hoàn toàn vào tài khoản của người dùng trong hệ điều hành mà nó chạy. Zope duy trì một hoặc nhiều CSDL người dùng của riêng nó. Người dùng trong Zope thì không có những đặc quyền giống như người dùng trong hệ điều hành: thay đổi, xóa, sửa file trong hệ thống file của hệ điều hành. Trong Zope thì người dùng chỉ có những quyền được cấp cho họ trong Zope’s security policy. Người dùng trong Zope chia ra làm 2 loại: Người quản lý (Managers ) Người dùng nặc danh (Anonymous users) Security trong Zope được thực hiện thông qua: Identification Authentication Authorization Role Permission Cụ thể là khi người dùng muốn truy cập hay tác động đến một nguồn tài nguyên nào đó trong Zope thì Zope sẽ yêu cầu người đó đăng nhập vào hệ thống bằng cách đưa ra các cửa sổ xác thực (Authentication) khác nhau sao cho phù hợp và yêu cầu người dùng đó nhập vào username và password. Khi người đó đăng nhập thì quá trình kiểm tra (Identification) diễn ra, username và password của người dùng đó được so sánh với dữ liệu có trong CSDL, nếu dữ liệu nhập vào khớp với dữ liệu có trong CSDL thì quá trình xác thực của người dùng đó là thành công. Khi người dùng đó đã được xác thực thì Zope tiến hành kiểm tra xem người đó có được truy nhập đến những dữ liệu được bảo vệ trong Zope hay không, quá trình này gọi là Authorization. Sở dĩ phải có quá trình Authorization trong Zope là vì các tài nguyên (Resources) của Zope không thể bị truy nhập bởi người dung nặc danh (anonymous users). Quá trình Authorization giữa người dùng và các tài nguyên được bảo vệ trong Zope được thực hiện thông qua 2 lớp trung gian: vai trò (Roles) và quyền (Permissions) Vai trò mô tả những gì người dùng có thể làm, trong Zope thì có 3 vai trò: “Author”, “Manager”, “Editor”. Những vai trò này được điều khiển bởi người quản trị của Zope (Zope Administrator). Người dùng có thể có nhiều hơn một vai trò và có thể có những tập hợp vai trò khác nhau trong những văn cảnh khác nhau. Quyền trong Zope diễn tả cái có thể được làm khi có quyền là như vậy. Trong Zope có rất nhiều quyền chẳng hạn như: “View”, “Delete Objects”, “Manage Properties”. Những quyền này có thể đã được định nghĩa sẵn trong nhân của Zope hoặc trong Zope Products. Văn cảnh trong Zope được định nghĩa là “nơi” mà trong cấu trúc phan cấp của Zope Objects. Chính sách bảo mật (security policies) trong Zope được dùng để phối hợp (map) giữa quyền (permissions) và văn cảnh “context” hay nói cách khác là security policies quy định ra “ai có thể làm gì” (who can do what). Vai trò trong Zope định nghĩa những hành động có thể thực hiện và Vai trò phân chia người dùng ra thành các lớp: Manager, Anonymous, Authenticated. Vai trò trong Zope cũng giống như nhóm (group) trong UNIX và cũng giống như trong UNIX thì một người dùng có thể có nhiều vai trò. Roles cho phép người quản trị dễ dàng hơn trong việc quản lý security. Thay vì việc người quản trị phải định nghĩa riêng từng chính sách an toàn cho từng người dùng khác nhau (rất mất công và chưa chắc đã chính xác) nay người quản trị có thể định nghĩa sẵn một số vai trò trong một số văn cảnh khác nhau và chỉ việc gán người dùng cho vai trò đó là xong. Trong Zope có bốn vai trò được định nghĩa sẵn: Manager Vai trò này định nghĩa những người dùng có quyền quản lý Zope và thực hiện các chức năng quản lý chuẩn Anonymous Vai trò này định nghĩa những người dùng nặc danh, những người dùng chỉ có quyền xem những tài nguyên public của Zope Owner Vai trò này dành cho người dùng với những Objects mà họ tạo ra trong văn cảnh hiện thời của người dùng đó Authenticated Vai trò này được gán cho những người dùng mà họ đã Authentication thành công Dưới đây là security policy của admin (root folder) trong Zope: Hình 9. Security cho root Folder Trong Zope còn định nghĩa Local Roles. Local Roles là một đặc điểm rất mạnh của Zope security. Một người dùng xác định có thể được gán thêm một số vai trò khi làm việc với những objects ở một văn cảnh cụ thể bằng việc sử dụng Local Roles. Nếu như các Objects này có local roles gắn với người dùng này thì người dùng này được cấp thêm những vai trò quy định trong Local Roles gắn với người dùng đó. Local Roles được điều khiển tự động bởi Zope thông qua Local Manager với Local Policies: từ các Local Policy Zope phân phối các điều khiển tới các Local Manager và định nghĩa các Local Roles. Các nguyên tắc cơ bản trong thiết kế Security của Zope là: Định nghĩa người dùng với mức điều khiển cao nhất mà họ có thể có nhưng không được phép có điều khiển cao hơn Các Group Object nên được quản lý bởi cùng những người trong cùng Folder Luôn giữ sao cho thật đơn giản Chúng ta có thể thấy rằng cơ chế phân quyền của Zope là rất mềm dẻo và linh động. Chúng ta hãy xem xét tiếp hai điểm rất mạnh dưới đây trong cơ chế phân quyền của Zope: Ownership Zope sử dụng Ownership để gắn kết các đối tượng với người đã tạo ra chúng. Khi người dùng tạo ra các Objects thì người dùng đó sở hữu (own) các Objects đó, những Object mà không thuộc sở hữu của ai thì nó là Unowned Objects, Ownership rất quan trọng đối với Security bởi vì người dùng sẽ có Local Role “Owner” với những Object mà người đó sở hữu ngoài ra nó còn điều khiển Role’s Executable Content Executable Content Là những tham chiếu đến những đối tượng như: Scripts, DTML Methods, Documents. Nó rất quan trọng trong security của Zope bởi vì nó ngăn chặn người dùng không đủ thẩm quyền chạy những đoạn Script hay ứng dụng độc hại. Sở dĩ như vậy là vì: Role’s Executable Content chỉ cho phép người dùng chạy các Object mà mình tạo ra khi người đó có quyền Executable, nếu người đó không có quyền chạy thì dù người đó có làm cho người có thẩm quyền cao hơn chạy cũng không được. Đây chính là điểm mạnh của Executable Content: Một Executable Object chỉ có thể được thực thi khi mà cả Owner và Viewer của nó uỷ quyền (authorized) cho. Với những cơ chế Security đặc biệt và rất mềm dẻo của mình security Zope có thể hỗ trợ cho bạn tối đa trong việc ngăn chặn Trojan, Spy…. Trojan hay Spy đều là những phần mềm gây nguy hiểm mà nó muợn vai trò hay quyền của những người dùng có đủ quyền và cài vào máy người dùng. Tuy nhiên nhờ Executable Content hay Ownership thì chúng ta có thể hạn chế được điều đó. Đôi khi người dùng muốn có nhiều quyền hơn, nhiều khả năng hơn với Ownership của mình, khi đó Zope có hỗ trợ Proxy Role cho phép người dùng tăng cường Security trên những Executable Content của mình hơn cả Ownership. Hình 10. Proxy Roles trong Zope 2.4 Hệ quản trị nội dung Plone – Content Management System Plone là một hệ quản trị nội dung (CMS) nguồn mở, miễn phí được phát triển trên nền Zope. Plone cung cấp cho bạn tất cả các hỗ trợ quản lý rất mạnh để có thể quản lý tổ chức của bạn ở mọi cấp. Plone có một “workflow engine”, có một cơ chế phân quyền Security và Roles được cấu hình sẵn theo Zope, có một tập hợp các kiểu nội dung (content) rất mạnh (theo kiểu đối tượng) và đặc biệt Plone còn hỗ trợ đa ngữ. Vì là nguồn mở, miễn phí nên Plone rất được hưởng ứng, mọi người trên thế giới rất ủng hộ và đóng góp cho Plone rất nhiều. Plone là một CMS phát triển dựa trên Content Management Framework (CMF) 2.4.1 Thế nào là một hệ quản trị nội dung Hệ quản trị nội dung là phần mềm cho phép chúng ta thêm, thao tác nội dung trên một website. Một hệ quản trị nội dung bao gồm 2 thành phần: Content Management Application (CMA) CMA là thành phần cho phép người quản lý hoặc tác giả của nội dung (người không biết gì về HTML) quản lý việc tạo, sửa, xoá nội dung của một Website mà không cần kiến thức của một người quản trị Web (Webmaster) Content Delivery Application (CDA) CDA là phần sử dụng và biên dịch thông tin nhận được từ CMA và cập nhật vào website. Các đặc trưng của một hệ quản trị nội dung thì rất nhiều nhưng thông thường thì hay có những đặc trưng cơ bản sau: Web-based publishing Format management Revision control and indexing Search Retrieval 2.4.2 Vai trò của một hệ quản trị nội dung Hệ quản trị nội dung càng ngà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._.

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

  • docDAN293.doc