Zope

出自Wikibooks

跳转到: 导航, 搜索

目录

[编辑] zope的特点

--61.171.37.218 05:48, 24 Feb 2004 (UTC)897

  • 是一个最强大的内容管理服务器。
  • 树状的授权和用户数据库
  • web管理界面
  • ftp管理界面
  • 多服务器集成
  • 实现了完美的门户功能,如用户注册,文章发表、工作流,全文检索、可定制外观。
  • 有一个成熟的weblog
  • 成熟的wiki
  • Python的应用服务器。
  • 树状结构
  • 插件结构
  • 组件结构
  • 大量的组件可以相互调用
  • 多语言编程能力
  • 统一的数据库结构
  • 嵌入html的编程
  • 三层结构,表现层、逻辑层、数据层分开
  • 跨平台的服务器
  • Python实现,容易从底层改造,可以获得Python的强大能量。
  • 应用开发语言和底层平台语言一致,可以重用底层代码。
  • 实现了变量的层级获取
  • 开源软件,并允许商业使用和开发。
  • 有成熟、强大的社区
  • 层出不穷的新组件


==Zope的优点及和Apache+PHP+MySQL的比较==--Davidkoree 07:41, 14 Jul 2004 (UTC)

Zope能和Apache+PHP+MySQL进行比较是因为它即是HTTP服务器,又是数据库,又包含脚本编程语言。现在向大家推荐Zope是因为它的功能更丰富,建立应用更容易,效率比PHP高几倍。现在的服务器端编程环境有IIS+ASP+SQLServer、Apache+PHP+MySQL、和现在的Zope,相比较Zope对于文档出版更专业。

我曾经用过Dreamweaver和Frontpage编网页,就感觉Frontpage的导航系统比较好,还有它能生成图形化的标题,和各种专业化的模板。Dreamweaver的导航系统几乎不能用,但Dreamweaver的网页制作更专业,Dreamweaver的模板也有自己独特的地方。曾经想过将Frontpage和Dreamweaver相结合,但感觉很别扭。当网站的资料多了最迫切的需要是把资料放到数据库中,这样容易统一管理。常常奇怪大型的网站常常有统一的外观,丰富的导航系统,丰富的相关链接。肯定在网站的后面有专业的网站管理软件和专业的技术人员的支持。因此我常常寻找可以用的网站管理系统。在linuxfab.cx网站发现了Zope,终于找到了我想要的东西。

每当向人们推荐Zope的时候,总有人说我用PHP很好不用换,或说用ASP很好。ASP和PHP比较相似,都是可以在HTML中加入脚本语言。相比来说,我比较欣赏ASP,它是基于VB的,同时因为它有独立的脚本引擎,也可以支持Perl、Javascrip等脚本。这样大家可以用自己熟悉的语言来编程不要另学新的语言。而PHP就比较奇怪,本来和Perl很相似,为什么不干脆用Perl来实现在页面的嵌入还要专门发明一种语言,来增加大家的学习负担,PHP虽然语言稍微清楚了一些,但没有根本的不同,却把Perl的精华模式匹配丢掉了。Perl也比较奇怪,为什么不象JSP一样推出相同的功能?因此心理上对PHP比较讨厌,虽然它和数据库的紧密结合,以及能生成图象的功能比较好。Zope虽然在网站管理上很出色,但它同时也是一个很好的编程环境。它支持Python和Perl,Python现在的发展势头很强,善于编制大的程序,是一个语法非常丰富的面向对象的编程语言,在很多方面可以代替C和Java,编程效率要高很多,很有吸引力。我学完了Python正找不到使用的机会,Zope正好给了我使用python的机会,也让我领教了python的强大。-"Zope整个程序都是用Python编的!

Zope是一个面向对象的数据库,是一个文档管理的数据库,是一个强大的HTTP服务器,是一个完善的开发环境。从本质和出发点来说,Zope是一个文档管理数据库。它有大量的文档管理功能。

[编辑] 先说zope做为http服务器的优势

虽然zope是个数据库,它的所有文档都放到数据库中而不是放到文件系统,但它却完成了一个类似文件管理器的管理界面和一个ftp接口,完全可以当作一个一个大家熟悉的文件系统来使用,管理习惯很熟悉。

而zope又是一个面向对象的数据库,面向对象的数据库和一般的数据库很不一样,它不象关系数据库一样基于表格,而更象文件系统一样是树状结构的。从对象的角度来说,记录的各个域值就是对象的各个属性。它超越关系数据库的地方是能适应各种数据类型,每种数据类型都是一种对象,不但有各种属性,还有各种操作特定数据类型的方法。常常听说对象数据库,通过zope才具体接触了对象数据库。(ingresql和userland的产品也是对象数据库)

zope的特点是把文件和文件夹作为基本的对象,每个文件和文件夹都可以随意增加属性,同时,文件夹下面的文件和文件夹又是父文件夹的属性。通过增加脚本文件的形式,可以为文件和文家夹增加方法。比如,一个文件可以加入“作者”、“分类”、“难度等级”等属性,文件夹也可以加入“显示此文件夹下所有文件内容”的方法。

zope还有它独特的方法来实现了对象级的继承。这个方法就是“获取”。比如文件系统的结构是/a/b/c,c是一个文件,在c中如果要引用一个变量v,如果c的属性中没有v,就到b的属性中找,然后找b下是否有叫v的文件,然后找a的属性,然后找a中的文件,然后找/目录的属性,找根下的文件。如果v是b的属性,就不用特别用a.b.v来引用。这样,c文件中就会从各级文件夹继承丰富的变量环境。一个典型的例子是"dtml-var standard_html_header",如果在根目录下放置了文件standard_html_header,就可以在任何目录下的文件引用它来表现每个网页的共性的东西。如果在某个目录下需要自己特有的网页效果,只要在这个目录下放一个特有的standard_html_header就可以了。这样,这个目录下的文件就会获得这个目录下的header,而不是根目录下的header,从而实现了每个栏目的个性。

获取的形式还可以是:c.m,m可以是方法,也就是脚本文件,比如用m来使c有另外一种表现形式。m文件可以放到b文件夹下,也可以放到a文件夹下,c.m的表达方法都成立。这样,我在根目录下放了m,网站的所有文件都有了方法m。

用url也可以支持这种获取,比如用"http://my.com//a/b/c/m"来调用方法m。同样,m的变量环境就是/a/b/c。

[编辑] 总结

zope作为http服务器,可以使服务器中的文件和文件夹有属性和方法等丰富的附加信息。便于文件的查找和管理和表现等操作。同时,它又提供方便的文件操作。??

[编辑] zope的现在的缺点

是,不能直接使用外部文件,还要通过ftp复制到数据库中。现在有对这方面的补救措施,但不是zope默认的。希望zope将来能象操作自己的对象一样操作外部文件和其他网站的文件。

[编辑] zope作为数据库的优势

从上面的论述,大家对zope作为数据库的表现有了大概的印象。zope和其他数据库相比,它是一个面向对象的文档数据库。

不像mysql,zope有可视的管理界面,zope的所有的管理工作都是通过web来完成的。web界面的优点是跨平台,可以远程操作,便于界面的定制。zope的管理界面和一个文件管理器类似,当点击一个文件后,有可以用同样的web界面来进行文件的编辑和添加属性、安全管理等。zope的脚本调试也是用web完成的。

zope作为数据库,有强大的用户权限管理功能,它的用户和权限管理非常强大,可以在某个文件夹下进行添加用户的操作,也分别对特定的对象都有自己的安全权限管理。

网站中数据库中主要的数据是文档,zope作为文档数据库,有强大的文档管理功能,有版本管理、历史记录功能,有全文检索功能。同时集成了文档的编辑环境和管理环境,管理文档象在文件管理器中一样方便。这些都是一般的数据库所不具备的。

如果,数据库中有上万条记录,zope的效率会比传统数据库要低,但zope有大量的适配器来链接各种数据库。来实现纯表格操作和大量的记录操作。

[编辑] zope作为编程和定制环境的优势

zope有dtml(动态模板标记)语言来嵌入html中,实现网页的动态化。简单地使用"dtml-var 变量"地形式就可以插入动态内容。由于可以方便地加入属性和方法以及“获取”功能,文档具有极为丰富的变量环境。可以比一般的客户端包含提供更强大的功能。又有"dtml-in 文件列表"的形式来方便地获取多个文件地内容。在dtml中还可以嵌入python表达式。这样,不用编程就具有强大的动态网页功能,实现导航功能等也轻而易举。这些功能的实现比php等语言要容易的多。

如果要加入复杂的功能,可以用脚本模块来实现函数和复杂操作,然后在dtml中调用脚本模块,这样,实现了逻辑和表现的分离。在zope中允许用python、perl和sql做脚本语言,各种脚本可以相互调用,这样实现了多语言的混合编程,实现了.net要实现的混合编程的目的。zope为脚本语言提供了统一的zope API。用这种方式(以dtml为媒体)perl在unix中也可以实现嵌入html的效果。perl爱好者有福了。在这里可以直接用sql操作数据库,免去了把sql嵌入其他语言的麻烦。

zope提出了zclass的概念,在一个product中捆绑了针对特定用途数据的一系列的属性和方法,甚至编辑和查看界面、特定权限、帮助等。比如把任务作为一个zclass,任务有任务的发出人、任务的执行人、任务的开始时间、完成时间、任务的内容等属性,也可以有一个任务的建立和完成的方法。这样当调用建立方法时给执行人发一封信,当调用完成方法时,给发出人发一封信。同时要有任务的web编辑界面,发出任务和修改任务的权限定义。当建立了这样一个zclass,就可以在任何文件夹中加入一个任务实例,zope先检查用户是否有新建任务的权限,然后调出任务的编辑界面填入任务的各种属性,也有“建立”和“完成”按钮来调用方法。通过zclass可以方便地为zope增加新功能。这种product的概念是php等语言所没有的功能,而通过product,zope可以思路清晰地完成一项复杂地功能。

同时,在product的实现中,不但可以调用zope API,还可以直接调用zope本身的各种模块来实现更复杂的功能。因为zope是开放源代码的,又是python实现的,当编程中遇到难题时,可以随时参考zope的源代码,方便的调用zope模块和函数,甚至可以修改zope代码,这些也是其他编程环境所没有的。

zope的用户管理、版本管理等功能也是通过product来实现的,因此,zope有一个标准的、开放的开发环境。

最近刚读了一篇文章,它用dos和windows的关系来类比apache和zope,在apache中所有的东西都要自己来搞,如果不是自己搞,也要集合很多不同的程序来完成自己的任务,并且每个人的选择是不同的,这样,造成了相互之间没有共同语言,就像要编dos程序,要先自己到各处抓一些图形程序、打印程序、声音程序、安装程序等,来集合在一起,这样很容易出毛病。而在zope中,有很多统一的API,当你完成一个product时,用户管理、权限管理、管理界面、编辑界面等这些都是zope自带的,有API可用,就不用自己乱忙了。比如象zwiki,几乎不用它,zope本身就是一个协同工作的产品自带用户管理和版本管理,这些就不用浪费时间白手起家了。文章中有一句话很好:“最差的统一编程界面也比没有统一好”。到cmf,zope更提供了极为丰富的API。

最后,如果对zope还有什么不满意,还可以使用cmf(内容管理框架,zope的二级开发平台)来建立、管理网站,开发新功能。cmf对zope的用户管理、文档管理、product进行了大量的扩展来实现更加高端的功能。关于cmf的功能,需要另外写一篇文章来叙述。

[编辑] zope是干什么的???

新增内容:

zope有强大的协同工作能力,有强大的版本管理能力和回退能力。

原内容:

zope首先是一个专业的网站管理系统。可以做象frontpage那样的复杂的导航系统。如果网站内容多,用它没错。

zope也是一个文档数据库,和notes一样,对非结构数据能够提供很好的管理功能。是办公自动化的帮手,和notes相比,zope的web功能更强大。

zope也是一个功能丰富的网站开发环境,它内置功能最强大的成员管理、权限管理功能,内置文档对象数据库,内置对各种数据库的连接,内置程序调试环境,提供一种面向对象的程序发布系统,他的cmf提供了一种可以非常灵活的程序定制的标准。总的来说,zope从各个方面提供了程序开发的支持。很多东西都是标准化的,不用自己开发,能够和其它人的程序完美协调。程序代码可以非常简介。

从性能上说,它提供了多个计算机的负载平衡,性能应该不错。但,对于纯形态网页和大文件的发布,肯定不如apache。

和php相比,php更简单、纯粹些。zope需要学的东西多,但zope象windows一样,通用的东西都提供,都标准化,不用自己开发。象windows能提供声卡、显卡驱动一样,zope提供了很多一般的东西和标准化支持。

另外,zope是界面友好的,它的全部工作都可以在web界面完成。和一般linux程序的神秘的字符界面不同。

[编辑] zope能为编程提供什么

zope有最先进得成员认证和权限管理功能,那么,在zope中不用开发关于成员管理得代码。

zope提供面向对象得文档数据库,那么在zope中开发程序不用建立自己得数据结构,不用编写数据管理得程序代码。因为zope本身有基于web得数据管理界面。同时zope也有基于web得程序调试界面,基于web得成员管理界面。另外,zope得所有数据和程序都实现了继承,这种继承功能非常强大,只有使用才知道,在已有得软件产品中没有类似得功能。

zope提供了链接其他数据库得接口,这样可以不用关心程序使用什么何种数据库。并且,zope提供专门得sql脚本模块,把所有得sql脚本都集中在一个文件中,提供程序调用,不会象php一样针对专门得数据库编程,也不用学习具有sql功能得各种函数。只有直观得纯sql语句。

zope提供了dtml语言专门用于界面设计。dtml和asp、php一样可以嵌入到html语言中,但dtml语言是和html类似得标记语言,不会脚本语言、标记语言混在一起,尤其是在脚本得for、if等控制模块中使用html得时候,在读代码得时候常常让人看着眼花。dtml避免了这种情况,都是统一得标记语言。dtml甚至可以用很优雅、简练得方式代换html得属性值。这都得益于dtml得标记语言特点。另外,dtml文件和脚本文件是完全分开得,这样就实现了显示、数据和逻辑得分离。也实现了使用不同语言得脚本模块,各种不同语言得脚本之间还可以相互调用函数。

zope得程序发布除了采用编写脚本或上载脚本得方式外还有独特得“产品”方式。zope提供得各种功能都是通过“产品”得方式实现得,如成员和权限管理、dtml语言、一般文件、文件夹、数据库等都是一种产品。因此,开发者也可以自己开发“产品”来丰富zope得功能,如编写自己得数据库接口、自己得权限管理、自己独特得文件类型。zope使用产品只是一个简单得“添加”操作。在zope得产品中可以定义产品得图标、产品独特得文件夹功能、独特得权限管理、独特得文件和文件夹操作,独特得数据结构,有自己特有的一组供通用脚本开发的API和help文件。在这里说一下zope得管理界面。zope得管理界面是树状显示,就像使用我们常用得资源管理器一样,各种操作类似于文件和文件夹的复制、粘贴、删除,zope得各种功能,如成员管理、数据管理都是类似于文件操作。只是有各种独特功能得文件夹和文件。使用产品就是简单得象在资源管理器中新建文件一样。这是一种非常理想得软件和数据得操作方式,非常理想得软件发布和运行方式,就像在windows中工作简单、友好、令人满意。

在zope得二级平台cmf中,实现了使用中得产品界面定制、产品功能定制,这种产品开发比windows更高级,windows中没有类似得概念,只有mozilla得xul和这个功能类似。

zope实现了xml-rpc功能,将要实现soap功能,这就是微软得.net得web service。.net得多种语言混合编程。.net得统一API。

zope得脚本模块缺省支持python,python和zope得结合是最紧密得,因为zope就是用python编写得,因此,python除了用于脚本模块以外还可以用于外部模块,直接调用zope得各种底层库函数,而不通过一般得编程界面,甚至可以查看zope得python代码,修改zope得python代码。用过安装产品脚本模块可以支持perl和php,perl得支持更成熟。

在zope中有很多各种功能得产品,有pop、office文档管理等。最著名得是squishdot,完全实现了slashdot网站得功能,很多人之所以使用zope就是为了squish。

[编辑] 评论

本文比较杂乱,在product中,重点不突出。

未提到zope的界面一致性,所有的文档、程序、界面都在对象数据库中。所有的操作,如编程、加入服务、使用新功能、管理文档数据、修改界面、管理、用户管理等都在类似文件管理器的web界面中。

未提到他的组件API,所有的API都是可以添加、重用的组件。



[编辑] zope的二级平台cmf的介绍

cmf是zope上的二级平台。实际上是更完善了zope的功能。

如果说zope是纯文档数据库,cmf则是功能更完善的文档管理系统和发布系统。

zope需要进行一些开发才能使用,而cmf则可以不经过开发就具有了比较完善的网站功能。

cmf带来的新概念和对zope进行的扩展:

[编辑] 对界面来说

  • cmf首先对zope的管理界面进行了扩展,zope的树状管理界面虽然很方便,但如果作为网站的界面则比较简陋。cmf的管理界面包含在网站的网页中,使管理、编辑界面和浏览界面融为一体,这样,从网站的浏览者到网站的编辑者的界面转换非常自然。避免了在两种界面的转换带来的突然和不适应。
  • 提供了在网页的自动增加用户的功能。
  • cmf对用户的浏览提供了个性化工具,有页面风格选择、收藏夹、topic(主题,内容定制)。

对文档来说:

  • cmf除了支持html外,对structure text有了默认支持。
  • 现在文档的默认属性有作者、修改时间、关键词、文档类型、文档摘要等,实现了比较完整的都柏林核心(这些属性称为元数据)。这样,文档查找起来更方便。更象一个正规的文档库。
  • 经过设置,文档具有树状讨论功能。比起zope的简单留言也要编程的状况要好多了。
  • zope的catalog在cmf中叫topic,topic设置比catalog要容易很多,并且由于元数据的支持,对topic的支持更充分。
  • 对news item的支持,实现了weblog功能。
  • 在cmf中有工作流工具,有简单的编辑、审批、发布的工作流。

[编辑] 对开发来说

  • zope的product在使用过程中不能修改,如果要修改要到product去改,很繁琐。cmf引入了skin的功能,可以在实例中对product的所有页面进行修改。每种修改可以作为一个skin。可以有多个皮肤。
  • 对已有的文档类型和工具还可以进行各种设置,以更符合网站的个性化要求。
  • 如果只是对已有文档类型进行扩充,不必创建复杂的zclass,对已有的文档类型简单的添加属性等,就可以建立新的文档类型。
  • 提供了工作流等更丰富的API来进行开发。

总体来说,cmf具有完善的结构来支持新闻系统、知识库系统和社区。



[编辑] notes、zope、projectwise的比较

notes、zope、和projectwise都是文档数据库。在企业计算机化的过程中,开始只有基本数据的数据库化。以数据库来统一管理企业数据。但企业中更大量的信息是文档,文档数据能管理起来能产生很大的经济效益,企业中大量的信息可以容易地查询,编辑、存储、传输。notes是ibm公司下属的lotus公司的产品,zope是digital create公司的免费的开放源代码的产品,projectwise是bentley公司的产品。bentley公司的macrostation是在cad市场份额第二的产品。

notes:是最早,也是最著名的文档数据库,有非常强大的功能,比如高级别的加密和数字签名,字段级的授权,内置的格式化文本编辑器,同步的http服务器,强大的mail服务器,自带的web和mail客户端和设计工具,强大的离线和复制功能。

notes结构庞大且功能复杂,存在有很多不方便的地方。比如不能象数据库一样方便地生成报表,不能方便地导入和导出文件(只支持ole),只能支持自动的web界面,没有html的自由的定制功能。

因此notes服务的客户是电子化办公,它的特点是方便地使用公式来根据数据库来生成电子邮件和格式化文本。

zope:是最强大的基于web的文档数据库,具有彻底的web化,它的管理界面是纯web的。他的文档格式也是html的。并且能用和asp类似的嵌入html的动态语句来生成动态网页。另外zope也是强大的面向对象的数据库,他的数据环境具有继承和变异性,能方便地为对象加入属性和方法。另外它对文件的输入输出很方便,可以使用ftp界面,也有强大的授权和文档版本管理。同时,它是完全免费的,可以被所有人方便地获得。它也具有大量的数据库支持和email支持。

zope不但可以作为网站管理工具,作为通用的文档数据库也是一个廉价、强大、友好的工具。

projectwise:之所以介绍它,是因为它作为文档数据库有自己独到的东西。他的文件界面最友好,可以从文件管理器直接拖拽文件到他的数据库,通过在不同的文档状态具有不同的授权的方式来支持工作流。另外,它的本意是为cad服务的。对autocad和macrostation的支持很好,它具有web发布能力,支持远程的图形的浏览和管理。也可以为文档加入各种属性,来方便文档管理和编程。但它本身没有编程环境,需要通过和其它数据库的同步来通过数据库编程实现定制化。

projectwise最有用的地方是cad领域,但它作为通用的文档数据库也是一个比较友好简单和有独特功能的文档数据库。

[编辑] 对zope的发展方向的我的想法

  • 一、逃离apache、php运动,要具有apache和php的特点。能够使用外部文件。zodb的输入输出更快。zodb的存储效率更高。zodb文件能分为多个文件,分别备份、分别pack、分别维护。要除了数据库客户、smtp客户外有更多的客户product,如ftp客户、pop客户甚至sms客户。
  • 二、notes化。能够自我提供pop和smtp服务器。
  • 三、集成。把多个product产品打包发布,象windows一样全集成,统一维护,不要象现在这样,每个product孤军作战,得不到zope公司的关心。省去了不断寻找product的麻烦,体现了zope的强大功能。并且建立product使用时加载功能,不是启动时加载。
  • 四、建立图形化、可视化的客户端,能鼠标拖动加入文件以及各种复杂的操作。



[编辑] zope的层次结构

[编辑] 最底层:ZODB(zope 对象数据库)

ZODB实现了一个面向对象的文件数据库。下层对象能够继承上层对象的方法和属性。实现了用户和权限功能。实现了数据库操作的API。ZODB就是一组模块来实现数据库功能,来供python程序调用。ZODB也实现了版本管理功能。

[编辑] 第二层:ZOPE

- ZOPE实现了一个web服务器,ftp服务器,webdev服务器。 - 实现了ZMI(zope管理界面),一个web形式的对ZODB的操作。并提供了ftp和webdev方式的数据存取。 - 为web编程提供了一套命名空间来存取各种web数据环境。 - 并且提供了“产品”功能。

[编辑] 第三层:product(产品)

product是zope的一种开发方式。每个product都有自己特有的文件类型和相应的编程API。用表现、程序、和数据、权限、管理界面、帮助等组成一种具有完整功能的特定类型的网站,如squishdot,weblog、forum等。也有些product只是为了完善或增加zope的某一方面的功能。如xml、user folder、fromulator等。可以说product是在zope的平台上开发的。也可以说product是zope的一个组成部分,因为zope的编程的底层接口都对product开放,product也要实现和zope类似的API、ZMI的功能,pruduct也要和ZODB直接打交道。zope能实现的功能,product都能实现。

[编辑] 第四层:除product外的几种网站开发方式

这几种开放方式都是zope的一种product。

[编辑] DTML(动态文本模型语言)

DTML是zope最早实现的表层的网站开发方式,采用标签的方式来实现在文本中插入动态内容。DTML有自己的变量赋值、流程控制等程序语言功能的实现。更复杂的功能采用在双引号中调用python的方式来实现。DTML能够直接存取zope命名空间中的各个对象和变量。

[编辑] python script(python脚本)=

python script的出现是为了实现将DTML中的复杂逻辑部分剥离。python通过绑定context等环境变量和zope的命名空间交流。python script有三种方式调用zope功能:通过调用zope的库的方式;使用zope的API;将传进来的参数转为调用ZMI页面的参数,来实现和ZMI操作相同的功能。

[编辑] TAL(模板属性语言)

TAL是为了适应在html和xml内部实现动态内容的需求而出现的。它把动态语言以标签的属性的方式书写。这样,当使用各种html和xml编辑工具的时候,不会出现不应有的信息。它也能调用python语言。

[编辑] 第五层:cmf(内容管理框架)

cmf以面向终端用户的方式重新实现了ZMI的用户管理、文档管理、版本控制等功能。实现了一个完整的门户网站。增加了ZMI没有工作流。增加了对文件后缀的识别。另外,内置实现了讨论等功能。

另外,cmf也是对product开发方式的改进。在product中,表现、逻辑和数据被一起混合在product包中,能够定制的部分只有ZMI中有限的几个选项,如果要定制更多就只能深入product内部了。cmf用皮肤(这里的皮肤不是只能改变字体和颜色,而是能改变版式等很多部分)、服务、文件类型的方式实现了表现、内容、数据的分离。每一个部分都可以定制,并且每一部分的改变不影响其它部分。很可惜的是cmf相关的开发文档比较缺乏。

[编辑] 结束语

我只是一个zope的初学者,对很多概念的理解很有可能是错误的,很多东西都是猜测着说的。如果有错误请更正。

另外,我这篇文章(砖)出来是为了引玉,尤其是各种开发工具的相互调用和各个命名空间的相互关系。如python脚本、DTML等各自的命名空间的情况。




[编辑] 我对plone的一些看法

plone具有对zope、cmf和各种product打包,以out of box的方式提供给大家的很好的功能。但我也发现了一些plone的一些不良影响。

plone采用GPL的授权方式开发。和zope、cmf的ZPL的授权方式不同,那么plone的开发成果必然不能合并到cmf中去。这必然造成了cmf的分支产生的情况。我认为这是一种不好的做法。如果cmf的开发者和开发成果,就应该采用和原软件相同的授权方式以集合社区的力量。尤其是象plone这种并没有大的改动的情况。很多最终用户如果针对plone开发,那么就会影响cmf的开发、测试等工作。并且造成了很多不兼容的软件。因此,我的做法是尽量不用plone。

另外,plone是采用的GPL的方式,而不是LGPL的方式,是不是在plone基础上开发的程序必须也采用GPL才行呢?是不是在此基础上不能开发商业程序呢?

目前plone另起炉灶的plone书也是对社区力量的分散,我认为plone的出现坏处多余好处。

可能某些人对GPL情有独中。而我不认为GPL是唯一的开源的方式。具体请到我的网站了解 tomz.126.com , tomz.533.net

[编辑] 新增

plone对使用者的好处是将zope、cmf、formuler、dcflow及一些产品进行了打包发布,并且作为根目录发布。

plone没有直接改变cmf,而是采用另外一个产品的方式来改进cmf。这样,可以随时获得cmf更新的好处。和cmf和平共处。不能说plone改变了一些cmf代码然后作为GPL发布。另外,plone book也是个人或几个人的作品,作者有权决定选择什么授权形式。

但是plone确实夺走了很多使用者、管理者和开发者。造成了用户经验、网站环境、部分产品适应plone,而不自动适应cmf。将用户和开发者区分了两个不兼容的群体。目前的情况是为cmf开发的产品经修改能适应plone,为plone开发的产品,因为采用了dcflow和forumler,有可能不适应cmf环境,或需要更大的修改才行。

另外,虽然“分支”分散了社区的力量,但“分支”也给用户提供了更多的选择。但在plone的情况是:cmf不能获得plone改进的好处,而plone可以获得cmf的好处。这是授权不同的分支。这种分支没有最终合并的可能。只是改变了一下打包方式就争取了大量的用户和开发者,真让人苦恼。

为plone开发的产品应该可以自由采用各种授权形式,为plone写的书也同样。

在这种情况下,确实看到了GPL的优点,使用GPL的开源软件不必担心自己的用户和第三方开发者被夺走。看来zope改用GPL或MPL授权是个明智的选择。当然,zope主要是一个公司开发的,它可以继续坚持采用ZPL,可以让更多的人收益(但有可能让自己受苦)。如果是社区主导的大型项目的开发,开发者选择GPL是必然的。

如果zope公司不介意出现许多分支和变种,认为自己完全应付的来,就像BSD不介意apple那样,那么,它还可以坚持ZPL,否则,该考虑修改授权的事了。

[编辑] discuss:

'Re: 我对plone的一些看法 [re: nonametomz1] 回复 '

很有兴趣拜读tomz的大作,就我现在了解的情况,好像没有那么复杂。

plone社区和cmf社区、zope社区都是非常紧密的关系的。

plone中的一些tool据说也要转移到cmf中,plone中的一些核心成员,也同时是cmf的核心成员。

plone最早推出也是cmf的一个skin的形式推出的。

plone和cmf也不是竞争关系,plone是cmf的一个扩展。一般人会选择plone的。

'Re: panjunyong [re: panjunyong] 编辑 回复 '

但我提到的问题都是存在的:

cmf的用户会被plone抢走。cmf的新版本的测试的参与人员会减少。用户的减少意味着相应的社区开发人员的减少。很多开发者会转移到直接在plone环境下开发。plone的很多环境和cmf不同,有自己的组件和目录结构。如果大量GPL的狂热者为plone开发,而不为cmf开发。那么大量的GPL代码不能合并到cmf中。

另外,为cmf和plone开发的程序相互间的不兼容也早就存在了。分支的不能合并造成了兼容的不能解决。

plone的代码合并到cmf是不合法的。除非以另外的product的形式。

有可能zope公司还没意识到这个问题。但zope公司既然敢以ZPL的形式发布代码就有用户流失的准备。

之前有很多product是以GPL开发的,但是product的形式提供附加的功能。而cmf和plone的用户是重合的,plone站在cmf前面,妨碍了用户和cmf的接触。

新增:

cmf和plone之间的友好关系,开发人员的重叠,都是正常的。因为人们都比较务实,只要是好东西就有人参与,但plone对cmf的危害还是很明显的。

我对plone选用GPL授权很不赞成,因为保持和开发主干的授权一致很有必要,也表明了对原开发者的尊重。授权的不同导致了不可合并的分支。如果plone只是一个普通的zope的product也没有问题。但plone有很多和cmf重叠的功能,plone对很多地方做了改动。甚至目录结构和控制面板都改了。另外,plone book采用的open publish授权形式也是类似GPL那样和ZPL不兼容的,stallman专门写过一个文章抵制商业文档,主张另外开发GPL兼容的文档,这里我也认为plone book抑制了cmf book的开发。不过我尊重开发者选择软件授权的自由,这也是ZPL授权的优点:允许在zope基础上开发各种授权的软件,包括商业软件。但我还是决定尽量不用plone,虽然plone看起来很方便。





[编辑] 学习资源

  • 参考手册
  • FAQ
  • HOWTO
  • 例子程序
  • 程序处方
  • 程序代码的头文件和类文件的接口文件

我正在读zope的组件开发的书,准备开始看cmf的代码。cmf的文档确实太缺乏了。不过一些FAQ和HOWTO补充了文档的空缺。

  • 测试


[编辑] 贡献

本文章的最初作者是:tomz。tomz的网页:http://tomz.126.com

Wikipedia
请参看维基百科上的:
个人工具
Create a book
  • Add wiki page
  • Collections help