|
|
|
|
| 深入了解OpenOffice.org——路广[转] |
 深入了解OpenOffice.org——路广[转] - gogoliu [ 2007-01-10 22:47 | 800 byte(s)]
 Re: 深入了解OpenOffice.org——路广[转] - gogoliu [ 2007-01-10 23:33 | 35,151 byte(s)]
 Re: 深入了解OpenOffice.org——路广[转] - gogoliu [ 2007-01-10 23:15 | 33,513 byte(s)]
 Re: 深入了解OpenOffice.org——路广[转] - gogoliu [ 2007-01-10 22:50 | 25,107 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
深入了解OpenOffice.org(一)
作者:路广
1.作者简历
1994年入学清华大学电机工程与应用电子技术系,2002年毕业于该系,获电气工程专业工学硕士学位。
1996年起接触UNIX平台上的大型工业控制和分析软件系统研发,1997年开始尝试自由和开源软件,1999年完成了国内第一套基于GNU/Linux平台的能量管理/调度员培训仿真(EMS/DTS)一体化系统的移植工作,并于2000年在广西玉林电网投入现场运行,该项目获得年度广西科技进步三等奖。
2002年加入Sun中国工程研究院,专注于StarOffice/OpenOffice.org相关技术工作。现为结构化信息标准促进组织(OASIS)所设立的开放办公XML格式技术委员会(Open Office XML Format TC)1成员。
2.序言
随着自由软件和开放源码运动的发展,越来越多的个人和团体对Linux等开放源码操作系统平台熟悉起来。作为开源操作系统系统上应用最广泛的办公软件,OpenOffice.org也逐渐被越来越多的用户和开发者所了解、接受与喜爱。但是在这一不断学习和推广的过程中,他们常常会遇到很多问题。其中的一些是:
用户应该如何学习使用OpenOffice.org,在使用过程中遇到了困难,该循什么途径解决?软件开发者该怎样参与开源社区的建设、了解OpenOffice.org的技术,并编写自己的软件?软件厂商可以如何利用OpenOffice.org的架构和实施方案,参考成功案例,搭建自己的软件平台,为用户提供自己的服务和附加价值?企业和其他团体用户如何利用OpenOffice.org进行信息化建设,保护投资与降低总持有成本(Total Cost of Ownership,TCO);国家如何利用OpenOffice.org等开源技术提高互联网络上信息的共享和交流,保护信息安全。
本系列讲座并非试图解决以上所有的问题,只是作者从系统架构的角度出发进行探讨,期望能够对读者,尤其是软件开发者深入了解OpenOffice.org有所裨益。“深入了解OpenOffice.org”系列讲座共分为三篇:第一篇“OpenOffice.org简介”,主要介绍OpenOffice.org的发展轨迹、若干易产生误解的问题、OpenOffice.org的应用概述,以及社区的结构和运作机制,志愿者和团体参与社区建设的途径,社区的通讯和协作方式,与之关系较为密切的若干开源软件社区;第二篇“OpenOffice.org体系结构”,主要介绍OpenOffice.org的技术架构、编程语言、组件对象模型、应用程序接口、二次开发包以及与其他组件的关系;第三篇“OpenOffice.org中的XML应用”,主要介绍OpenOffice.org的XML文件格式规范、基于XSLT的文件过滤器、与OASIS Open Office XML格式的关系。希望能够通过这些介绍,使开发者对OpenOffice.org的技术特点有更深入的了解,有更多的志愿者参与到OpenOffice.org社区的建设中来,共同推广OpenOffice.org的发展与应用。
在此特别说明一点,本系列讲座的所有文字都是在OpenOffice.org 上完成创作的。
3.OpenOffice.org简介
3.1.OpenOffice.org发展轨迹
开放源码的时代背景
上世纪90年代开始的Internet的爆炸性发展给个人和整个软件产业都带来了一场巨大的变革。随着互联网络的高速发展,传递信息的速度越来越快,而发布信息的成本却在不断地降低。传统专有软件商在软件发布和维护成本不断降低的同时,仍然试图通过昂贵的许可证方式分发软件。而消费者希望能够快速、廉价甚至自由地获得具有必要功能的、稳定和可用的产品。这样就凸现了一个原先并不明显的矛盾:前互联网时代的版权法规限制着软件和信息产品在网络上的自由传播,称之为“盗版”,普通大众需要一种合法的、成本可接受的方式来获得必要的软件和信息产品2。有需求就有市场。起源于80年代的自由软件和开放源码运动在潜行了相当长一段时期之后,从此具有了适合的土壤而蓬勃发展起来。
对于计算机的普通用户来说,具有文字处理、电子表格、演示文稿、数据图表、公式编辑、简单绘图和图片处理等功能的办公软件已经成为一种“生产力软件”,也就是能够大幅提高生产力的基础软件。但是占据市场份额超过90%的Microsoft Office却一直是价格昂贵的专有软件,其中的大部分功能个人用户很少用到。所以对消费者来说,它逐渐地已经成为一种奢侈品,然而现在的大部分用户因为专有文件格式被锁定在其上,不得不继续使用其升级产品。广大用户希望能够出现一种替代昂贵专有办公软件的廉价、稳定、具有足够功能并且可用的办公软件。
OpenOffice.org的历史
OpenOffice.org来自上世纪八十年代中期在德国创立的一家软件公司Star Division,它生产一种叫做StarOffice的办公软件,市场主要集中在欧洲。因为价格低廉、稳定、跨平台、功能充足等优点获得了用户的好评。Sun Microsystems意识到市场上需要这样一种替代专有软件的产品,并且认为公司的愿景与策略和StarOffice的技术背景都与这样的市场需求和趋势相吻合3。于是Sun在1999年8月收购了Star Division公司,并于翌年7月资助建立了OpenOffice.org社区。同年10月,公布了StarOffice绝大部分源代码(大约800万行),由此成为世界三大开源社区之一(另外两个是Mozilla和Apache);12月,发布了OpenOffice.org XML文件格式规范。2001年7月,OpenOffice.org 开发工具包发布。2002年5月,OpenOffice.org 1.0正式发布。2003年3月,OpenOffice.org 2003首届年会4在德国汉堡召开。2003年10月,OpenOffice.org 1.1.0 发布。
迄今为止,OpenOffice.org已经发布了1.1.2版本,支持Windows、Linux/x86、Linux/PowerPC、Solaris/Sparc、Solaris/x86、FreeBSD和Macintosh等7种CPU/OS平台,正在进行另外10种平台的移植,支持的语言也达到了42种。统计显示5,截至2004年6月,OpenOffice.org已经被下载超过2600万次;电子邮件列表的注册人数也超过了2万4千人,已经有434个人和团体签署了《共同版权委托协议》6承诺为OpenOffice.org社区贡献代码。OpenOffice.org现在已经成为全球领先的跨平台、全功能、多语言、公开对象接口、可扩展文件格式的开源办公软件。
OpenOffice.org的下一个版本是2.0,主要目标是实现与Microsoft Office更好的互操作性、更低的用户再培训成本、更优秀的性能、广泛提高的易用性、更易用的程序接口、更好地集成进本地桌面系统。OpenOffice.org 2004年会也将于今年9月在德国柏林举行。
实际上,OpenOffice.org不只是一个办公软件产品,它也是一个开发平台,开发者可以基于它提供的应用程序接口组建自己的产品,设计并实现完整的解决方案;它也是一个网络社区,世界各地成千上万的用户和软件开发者每天都在这里交流;它还是一种信念:办公软件这种生产力工具已经成为社会信息基础设施的必要组成部分,而OpenOffice.org正是通过开放源码社区来使之为更广泛的人群服务,推动整个社会的信息化水平。
3.2.与Sun和StarOffice的关系
从历史上看,OpenOffice.org来源与StarOffice,它在OpenOffice.org成立前的最后一版是5.2。在Sun把StarOffice的绝大多数源码开放之后,StarOffice也是基于OpenOffice.org来开发的。也就是说OpenOffice.org是Sun资助的,但是不属于Sun,StarOffice才是Sun所有的产品。而Sun所提供给OpenOffice.org社区的源代码一经发布,就无法收回。Sun从此无法关闭OpenOffice.org,因为它是属于公有领域7的。由于StarOfficeTM这个商标已经被注册了,Sun就在东亚地区为StarOffice注册了StarSuiteTM这个商标,StarOffice和StarSuite实际上是同一产品的西方和东方语言版本。
因为StarOffice的源码里含有少量的第三方代码,而这些代码是Sun付费才获得许可在StarOffice中使用的,所以OpenOffice.org并不包括这部分源码。这些不可公开的代码实现以下功能:
* 某些字体,特别是亚洲语言字体(例如方正宋体、方正黑体等);
* 数据库模块(StarOffice中包含了Software AG公司的数据库Adabas D);
* 一些文档模板;
* 增强的剪贴画图库;
* 一些亚洲语言的增强功能;
* 某些文件过滤器。
事实上,现在文档模板和剪贴画在OpenOffice.org社区里已经可以找到比较丰富的资源,桌面数据库现在也已经有了比较成熟稳定的开源产品,亚洲语言的增强功能和某些特定文件过滤器也并不是至关重要的功能,但是缺乏丰富的字体,可以说是OpenOffice.org和StarOffice相比的一个最大的缺点。这也跟现在没有质量很好的开放源码字体有直接的联系,优秀中文字体的许可证是相当昂贵的,而OpenOffice.org这样的非盈利组织无法负担地起这样高昂的费用。
3.2.1.License问题
OpenOffice.org采用GNU通用公共许可证(GPL)和Sun工业标准源码许可证(Sun Industry Standards Source License,SISSL)8的“双许可证”方式对源码进行许可;采用独立的公共文档许可证9(Public Documentation License,PDL)对发布在OpenOffice.org网站上、但不期望集成进软件的绝大多数文档进行许可。
“双许可证”方式意味着要么应用GNU GPL许可证,要么应用SISSL许可证。当应用GPL许可证的时候,OpenOffice.org源码中的库和组件功能将根据GNU LGPL进行许可。由于LGPL与GPL完全兼容,这样就能够鼓励更多的人参与到OpenOffice.org社区建设中来。
SISSL则是为商业应用设计的。由于GPL许可证对于自由复制、修改、发布等权利的严格保证,某些软件商会因此而受限、不能参与到开放源码社区中来。OpenOffice.org的双许可证方式解决了这个问题,他们可以选择根据SISSL进行许可。SISSL是经过开放源码促进会(Open Source Initiative,OSI)确认的开放源码许可证10,它规定在被许可者承诺保证“标准”一致的条件下,可以分发软件但不公开修改过的源代码。这里的“标准”是指OpenOffice.org的XML文件格式规范11,和OpenOffice.org的应用程序接口规范12。
3.3.OpenOffice.org应用
开源社区
OpenOffice.org本身优良的性能促进了它的应用。现在世界范围内几乎所有的Linux发行版都附带了OpenOffice.org或其衍生软件。OpenOffice.org的使用者还建立了一些组织和网站来推广OpenOffice.org的应用,比如OpenOffice.org文档项目13、OpenOffice.org论坛14、关于附件和模板的OpenOffice.org Extras15、关于宏的OpenOffice.org Macros16、OpenOffice.org帮助在线17、Taming OpenOffice.org18。GetOpenOffice.org19、ByteBot.net20、ClueSheets21、Itrainonline22和Digital Distribution23等网站也已经开始提供OpenOffice.org的在线培训服务。
网上书店上关于OpenOffice.org的使用类书籍已经有几十本,并且还在不断增加。关于OpenOffice.org的技术类书籍也已经出版了一些,例如关于XML文件格式要义的《OpenOffice.org XML Essentials》24和《OpenOffice.org Macro Explained》25。
亚洲地区的一些国家和地区也在积极推广OpenOffice.org的应用。日本建立了OpenOffice.org文档翻译项目26和用户组织27;韩国也建有OpenOffice.org用户组织28;中国台湾地区的OpenOffice.org应用也非常活跃,台南县教育网建立了“OpenOffice.org补给站”29,台湾高性能网络计算中心也建立了OpenOffice.org讨论组30,有些个人爱好者31建立了个人维护的OpenOffice.org论坛,甚至还长期提供提高中文版面效果的独立补丁(该补丁已加入OpenOffice.org源代码的CVS服务器)和安装包。
衍生软件
自从OpenOffice.org 1.0公布以来,有些地区,特别是亚洲地区,根据OpenOffice.org的双许可证方式发布并包装了具有本地特色的办公软件。比如Pladao Office32就是为了提高泰文的本地化,依据LGPL/SISSL和JCA协议8而定制的OpenOffice.org;BharateeyaOO33是印度信息通信技术研究培训中心为了提高OpenOffice.org对印度各种方言和民族语言的支持而资助的加强本地化的项目。非洲地区也开始了为本地民族语言基于OpenOffice.org进行本地化的公益项目。
国内一些软件企业根据SISSL在OpenOffice.org的基础上进行中文化、定制化和扩展功能的开发。比如中文俩仟的RedOffice、金山的KingStorm飓风Office、中标软件的中标普华Office、共创开源的共创Office、即时软件的即时全能办公室、KaiSource公司的KaiOffice等。
中国有55个少数民族,除了回族和满族已基本不使用自己的民族语言和文字以外,其他53个民族仍在使用的民族语言有72种。其中29个民族有与自己的民族语言相一致的文字,由于有的民族有一种以上的文字,所以这29个少数民族共有54种民族文字34。少数民族语言文字在少数民族社会生活种起着十分重要的、其他民族的语言文字无法替代的作用,所以为这些语言文字提供信息化手段是提高全国整体信息化水平的重要组成部分,是延续多民族的传统文化的重要手段。
为了实现支持民族语言的跨平台信息处理系统,国家863计划设立了重大软件专项课题“民族语言版本Linux操作系统和办公套件研发”35。该专项中的办公套件就是在OpenOffice.org的基础上针对藏文、蒙文、维文等主要民族语言提升本地化的水平,以期达到实用性的效果,具有很高的政治意义和社会意义。该项目已经取得阶段性成果36。
3.3.1.用户市场
早期OpenOffice.org的用户主要分布在欧洲地区,这和OpenOffice.org起源于德国、所以西方语言支持比较好有很大关系。欧洲的很多政府机构、公司、学校、非盈利机构甚至个人都在广泛使用OpenOffice.org。Jupiter Research在2003年的一项研究报告中认为OpenOffice.org在小型商业机构的市场份额已经达到6%,另有3%在2004年有应用计划。
团体用户在削减IT预算的时期,更加注重于从降低总持有成本的角度来考量。德国慕尼黑政府经过一年的评估,最近决定将市政当局的14000台PC从Microsoft Windows/Office迁移到Linux和OpenOffice.org,这一降低政府开支的举措引起了各国政府的广泛关注,具有强烈的示范效应。
随着OpenOffice.org的不断推广,其他地区的用户也开始注意和尝试OpenOffice.org。北美和拉美地区的一些企业、学校、和政府机构也在评估将OpenOffice.org作为日常办公套件的可行性,并已经开始了试用。37
OpenOffice.org所具有的优秀特性使它获得了广泛赞誉。38例如Linux Format 2001年读者选择奖“最佳商业软件”;XML Journal 2002年读者选择最终奖“最具创意的XML应用”;Linux Journal 2002年编辑选择奖“最佳办公软件”,2003年读者选择奖“最受欢迎的办公软件”;Open for Business 2003年开放选择奖“最佳办公软件”;O'RELLY下属的OSDir.com 2003年编辑选择奖“桌面开源软件最佳应用”,等等。
3.4.OpenOffice.org社区
3.4.1.理事会
OpenOffice.org社区由社区理事会39进行管理,理事会章程40也是由社区成员起草,经过全体社区成员讨论和修改,几乎以全票通过。理事会是由社区成员志愿组成的非自治组织,建立理事会的目的是在战略规划与资源分配、协调与资助者和公众的关系、在整个社区内提供仲裁这些方面提供指导。理事会可以调节冲突并为社区成员提供论坛,它也可以对项目的目标发表意见。理事会除此之外的权利在章程中被严格限制。
理事会由九名成员组成,这些成员都是各个项目的代表,他们也基本上都是项目中活跃的贡献者,在若干方面颇有建树,获得了其他贡献者的尊敬。这九名理事会成员包括:
* 五名成熟类项目代表,其中有一名作为项目领导的Sun雇员,一名作为项目领导的非Sun的程序员,一名非程序性项目的管理者,其他两名项目领导或社区管理者;
* 两名本地语言类项目代表,从成熟的本地语言类项目领导中选出;
* 一名社区贡献者代表,来自于孵化类项目领导和杰出成员;
* 一名Sun公司代表。
理事会每月至少召开一次会议,如有必要也可临时召开。会议以互联网中继聊天(Internet Relay Chat,IRC)的形式召开,会后通过电子邮件确认会议记录。任何社区成员都有权查看会议记录,并向理事会提案。
3.4.2.项目
OpenOffice.org社区内的资源是以项目的形式组织起来的,分为四大类:理事会、成熟类41、孵化类42、本地语言类43、网站资源。理事会类包含了与社区管理运作相关的信息,网站资源类包括OpenOffice.org下载、技术支持、开发资源的信息。
成熟类项目是指那些包含核心技术、或者关键用户信息的项目,现在共有22个。比如应用架构、组件技术、应用程序接口、XML文件格式、编译工具和环境、安装工具、数据库访问、图形系统层、用户界面、文字处理、电子表格、图形应用、语言模块、本地化、移植、文档、质量保证、市场推广等等。成熟类项目通常是社区开发者关注的焦点。
孵化类项目用来给社区成员提供测试想法的空间。这些想法可能是编程性的,也可能不是。只要能表明想法对社区明显的支持,任何社区成员都有权利创建一个孵化类项目。现有的孵化类项目共11个,包括:参考文献、商务拓展、软件发布、群件、KDE集成、项目管理、脚本、技术规范、社区统计、用户FAQ等。
本地语言类项目用来以用户的本地语言提供更多信息和资源,相关的工作包括翻译OpenOffice.org社区内的资料,介绍本地语言版本内所特有的资源和信息等。现在已经包含的本地语言包括:汉语、阿拉伯语、印地语、日语、韩语、老挝语、泰米尔语、泰语、越南语等37种语言。其中的汉语项目--“OpenOffice.org中文计划44”是由台湾地区的几名志愿者维护的,支持繁体和简体中文两个版本。
3.4.3.参与贡献
OpenOffice.org社区欢迎公众对OpenOffice.org的关注与支持,为此建立了必要的设施使得开放源码技术能够被所有感兴趣的参与者获得。参与者可以很方便地下载软件、获取技术支持、以及开发资源。
实际上无论角色如何,每个人都可以对OpenOffice.org项目提供帮助。参与越多则越能获得他人的信任和支持,项目的长期有价值的贡献者会获得直接向代码库提交代码的权利。OpenOffice.org网站上注册的用户都是OpenOffice.org的“成员”,社区鼓励成员参加到项目中并订阅该项目的电子邮件列表。参加到项目中的成员首先的身份是“观察员”,如果对项目的贡献频繁并确有价值,就能够获得 “开发者”的身份,拥有对代码库的写权限,只对项目文档有写权限的成员称之为“内容开发者”。开发者在提交不止于微小改动的代码前必须要签订《共同版权委托协议》8。项目开发者定期选举项目领导,项目领导负责指导该项目的方向,确保相关问题都被解答,并负责创建友好并相互支持的社区环境。
现在已经有很多个人和团体对OpenOffice.org社区作出贡献。Debian、SuSE、RedHat对软件打包,GNOME、KDE、Ximian对桌面集成与用户界面修饰方面都有贡献。Ximian甚至还建立了专门的OpenOffice.org网页45提供非官方的资源。虽然国内OpenOffice.org及其衍生软件的应用已经非常广泛,可惜的是,迄今为止只有寥寥几人签订了《共同版权委托协议》承诺为OpenOffice.org社区贡献代码。
其实开发者可以参与OpenOffice.org社区的方面很多,编写脚本与宏、扩展与集成组件、编译除错并提高源码、向新平台移植、本地化与国际化、撰写使用与开发文档、测试与质量保证等等。都是不错的开发型入手点。另外,技术支持和市场推广也是不错的非开发型参与方式。
OpenOffice.org社区由CollabNet提供主机并负责日常管理,代码库采用CVS维护,以IssueZilla管理“问题”。社区成员的主要交流方式包括电子邮件与邮件列表、IRC、网络日志(Blog)、时事通讯(News Letter)等。社区成员也会经常为媒体撰写文章并接受访问。由于OpenOffice.org社区成员来自于世界各地,所操母语千差万别,为了沟通方便起见广泛采用英语作为通行语言。
3.5.相关开源软件社区
全世界众多开源社区能够进行交流的基础是他们都认同开放源码软件的基本理念。OpenOffice.org社区作为三大开源社区之一,在获得开源软件领域广泛关注的同时,也获得了普遍的支持,与其他开源社区建立了密切的协作关系。比如:
* Mozilla社区为了实现OpenOffice.org在Mozilla浏览器中的插件而密切合作;
* Apache社区为OpenOffice.org提供了优秀的XML/XSLT46软件,并且在POI47项目中与OpenOffice.org合作将MS Excel文件格式文档化48,它的Cocoon49项目及其子项目Forrest50在服务器端能够把OpenOffice.org无缝集成进内容管理系统;
* OpenGroupware51社区与OpenOffice.org群件项目52协作以提供邮件、日志、即时消息和白板等功能,其客户端软件Glow正在开发中;
* CPAN53社区中的OpenOffice::OODoc54项目支持Perl对OpenOffice.org文档的访问;
* Zope55/Plone56社区用Python实现了内容管理系统/架构,OpenFlow57以此为基础实现了工作流管理系统,它们现在都是非常流行的开源软件。Zope中所包括的CMFOODocument58和ZooDocument59支持对OpenOffice.org文档的访问,由此OpenOffice.org可以作为内容著作工具而集成进该内容管理系统。基于Zope/Plone的软件商icoya60就提供了包含OpenOffice.org的内容管理解决方案。国内也有一些Zope/Plone的相关社区,例如:Python中文社区61、Zope/Plone中文社区62、中文Zope用户组63,中蟒(中文Python)64等等。
OpenOffice.org及其它相关开源社区相互协调、共同发展,就可以为个人消费者和团体用户提供更优秀的软件以及整体解决方案。比如在办公自动化、电子出版、工作流、内容管理等领域,OpenOffice.org及其解决方案就有广阔的应用前景。
本篇对OpenOffice.org进行了简要介绍,概述了它的发展轨迹、应用现状与前景、社区组织结构等基本信息。读者可以看到,OpenOffice.org的应用范围不断扩大,与用户和开发者积极参与社区建设、第三方软件厂商的大力支持都是分不开的。作者在此也很希望国内能够有更多的软件开发者和其他志愿者积极参与到OpenOffice.org社区的建设中来。这不仅有利于促进OpenOffice.org的提高和应用,同时也有利于提高国内软件行业人员的技术与交流水平,从而有利于从整体上提高国内软件行业的国际化程度与竞争实力。
OpenOffice.org之所以能够获得广泛应用,原因不仅如此,更深刻地是在于它优秀的跨平台架构和开放的XML文件格式这些技术特性。下一篇将会重点介绍OpenOffice.org优秀的跨平台技术架构。
本文依据《创作共用约定》之“署名-禁止派生-非商业用途”方式发布,即你可以免费拷贝、分发、呈现和表演当前作品,但是必须基于以下条款:
* 署名:你必须明确标明作者的名字。
* 非商业用途:你不可将当前作品用于商业目的。
* 禁止派生:你不可更改、转变或者基于此作品重新构造为新作品。
对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款。
在得到作者的明确允许下,这里的某些条款可以放弃。
此约定是法律文本(完整的协议)65的简单易读概要。
1 OASIS开放办公XML格式技术委员会,http://www.oasis-open.org/committees/office/
2 Lawrence Lessig,<Free Culture>,The Penguin Press,2004
3 OpenOffice.org成立宣言,http://www.openoffice.org/white_papers/OOo_project/OOo_project.pdf
4 OpenOffice.org首届年会,http://marketing.openoffice.org/conference/OOoCon2003.html
5 OpenOffice.org时事通讯(News Letter),Volumn 1 Issues 12,June 2004
6 共同版权委托协议(Joint Copyright Assignment,JCA),http://www.openoffice.org/contributing.html
7 公有领域联盟(Union for the Public Domain),http://www.public-domain.org/
8 Sun工业标准源码许可证,http://www.openoffice.org/licenses/sissl_license.html
9 公共文档许可证,http://www.openoffice.org/licenses/PDL.html
10 开源许可证列表,http://opensource.org/licenses/
11 OpenOffice.org XML文档格式规范,http://xml.openoffice.org/
12 OpenOffice.org应用程序接口规范,http://api.openoffice.org/
13 OpenOffice文档项目,http://www.ooodocs.org/
14 OpenOffice.org论坛,http://www.oooforum.org/
15 OO Extras,http://ooextras.sourceforge.net/
16 OOoMacros,http://www.ooomacros.org/
17 OpenOffice.org帮助在线,http://www.sover.net/~mackmoon/OOoHelpOutline.html
18 Taming OpenOffice.org,http://www.taming-openoffice-org.com/
19 GetOpenOffice.org,http://www.getopenoffice.org/
20 ByteBot.net,http://training.bytebot.net/
21 ClueSheets,http://www.cluesheets.com/
22 Itrainonline,http://www.itrainonline.org/itrainonline/mmtk/opensource.shtml
23 Digital Distribution,http://www.digitaldistribution.com/
24 OpenOffice.org XML Essentials,http://books.evc-cit.info/
25 OpenOffice.org Macro Explained,http://www.pitonyak.org/book/
26 日本OpenOffice.org文档项目,http://openoffice-docj.sourceforge.jp/
27 日本OpenOffice.org用户组织,http://oooug.jp/
28 韩国Open Office用户组织,http://openoffice.guideline.co.kr/
29 OpenOffice.org补给站,http://ooo.tnc.edu.tw/modules/news/
30 OpenOffice.org讨论组,http://openoffice.nchc.org.tw/
31 Firefly萤火虫论坛,http://firefly.idv.tw/test/Forum.php?Board=1
32 Pladao Office,http://www.pladao.org/
33 BharateeyaOO,http://trinetra.ncb.ernet.in/bharateeyaoo/
34 我国的少数民族语言文字简介,http://ywb.edu.xm.fj.cn/list.asp?ID=79
35 863重大软件专项”民族语言版本Linux操作系统和办公套件研发”,http://sonata.iscas.ac.cn/
36 《用少数民族文字一样上电脑》,人民日报,http://www.people.com.cn/GB/paper464/11776/1061414.html
37 OpenOffice.org市场份额,http://bizdev.openoffice.org/files/documents/148/1688/so_ooo_market_share_analysis_draft10.sxw
38 OpenOffice.org奖项,http://www.openoffice.org/awards/
39 OpenOffice.org社区理事会,http://council.openoffice.org/
40 OpenOffice.org社区理事会章程,http://council.openoffice.org/CouncilProposal.html
41 OpenOffice.org成熟类项目,http://projects.openoffice.org/accepted.html
42 OpenOffice.org孵化类项目,http://projects.openoffice.org/incubator.html
43 OpenOffice.org本地语言类项目,http://projects.openoffice.org/native-lang.html
44 OpenOffice.org中文计划,http://zh.openoffice.org/
45 Ximian的OpenOffice.org网页,http://ooo.ximian.org/
46 Apache XML项目,http://xml.apache.org/
47 Apache POI项目,http://jakarta.apache.org/poi/
48 OpenOffice.org电子表格,http://sc.openoffice.org/
49 Apache Cocoon项目,http://cocoon.apache.org/
50 Apache Cocoon Forrest项目,http://forrest.apache.org/
51 OpenGroupware组织,http://www.opengroupware.org/
52 OpenOffice.org群件项目,http://groupware.openoffice.org/
53 CPAN(Perl全面文档网),http://www.cpan.org/
54 CPAN OpenOffice::OODoc项目,http://search.cpan.org/author/JMGDOC/OpenOffice-OODoc-1.203/
55 Zope组织,http://www.zope.org/
56 Plone组织,http://plone.org/
57 OpenFlow工作流管理系统,http://www.openflow.it/
58 Zope CMFOODocument,http://www.zope.org/Members/longsleep/CMFOODocument
59 Zope ZooDocument,http://www.zope.org/Members/philikon/ZooDocument
60 icoya内容管理系统,http://www.python.org/
61 Python中文社区,http://python.cn/
62 Zope/Plone中文社区,http://zope.cn/
63 中文Zope用户组,http://www.czug.org/
64 中蟒(中文Python),http://www.chinesepython.org/
65 创作共用协议的完整法律文本,http://www.creativecommons.cn/licenses/by-nd-nc/1.0/legalcode
来源: http://blogs.sun.com/GavinLu/resource/deepknowlegeofooo-1.html
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
深入了解OpenOffice.org(二)
作者:路广
OpenOffice.org技术架构
上一篇简单介绍了OpenOffice.org的发展轨迹、许可证问题、应用范围等情况。实际上,OpenOffice.org之所以获得如此广泛的应用,是与它本身优秀的技术架构,开放、可扩展、标准化的XML文件格式规范,以及社区成员的广泛参与密不可分的。
本篇将主要介绍OpenOffice.org的技术体系结构,它的分层架构、UNO组件模型、基于IDL的API和SDK,以及UNO与其它组件模型的互操作。
1. 分层架构
OpenOffice.org所基于的技术架构能够提供在UNIX和类UNIX系统上丰富的办公软件功能,并且这种架构能够被移植到其他很多的平台上。这是因为整个架构就是在平台无关性的思路下实现的。
整个OpenOffice.org中实际上只有不到10%的代码是与平台相关的,这些代码为上层的组件模块提供一个系统抽象层。由于C++编译器存在于每一个主要平台上,所以OpenOffice.org采用了C++作为主要的编程语言(最底层的部分代码由于效率等原因是C语言编写的)。这种实现方式允许OpenOffice.org移植到非常广泛的不同的平台上,采用面向对象语言也使得OpenOffice.org具有面向对象的技术架构。
图1是OpenOffice.org的分层架构图,总体上分为四层,每层由若干不同的子层/库组成,在图中用小方框表示。每层和每个子层/库都完成不同的功能。需要注意的是每个子层/库很可能不是对应于具体的某个源代码模块,而是相关的若干个模块。因为OpenOffice.org的源码模块众多,刚发布的时候还不到100个代码模块,而最近发布的OpenOffice.org 1.1.2已经到了150左右。模块之间的相互依赖关系可能是很复杂的,而且随着版本发布的更新不断有变化。所以从总体上把握OpenOffice.org分层模型的功能结构和依赖关系对于掌握整个OpenOffice.org的技术架构是很有帮助,也是至关重要的。
表1是OpenOffice.org 1.1.2源代码模块的功能描述表。在约150个模块当中,有将近30个模块是从其它开放源码社区获得的源代码。这些模块依照字母顺序排列,它们的功能描述尽管比较粗略,也会对理解整个OpenOffice.org的体系结构很有帮助。需要注意的是不同版本的OpenOffice.org包含的模块数目可能有不同,或有增删,而且有些模块也正在变更当中。
大致上讲,
* 系统抽象层(System Abstraction Layer)封装了所有系统相关的API并提供了共同的面向对象的API以平台无关的方式访问系统资源;
* 基础设施层(Infrastructure Layer)构建应用程序同平台无关的环境,为了向上提供组件和服务,这一层完整地包含了面向对象平台所需面向对象API的很多方面,包括组件模型、脚本解释、复合对象等等;
* 构架层(Framework Layer)为在不同应用间能够实现复用,提供每个应用和所有共享功能(例如公共对话框、文件访问或者配置管理等)所需的架构和环境;
* 应用层(Application Layer)提供所有的OpenOffice.org应用,这些应用的交互方式是基于若干底层的。
图2是OpenOffice.org 1.1.2源代码模块依赖关系树状图。这张图所描述的是OpenOffice.org中各个模块的编译依赖关系,实际的模块编译顺序也是根据这个依赖关系产生的。从图中我们大致可以看出OpenOffice.org的分层结构。最底部比较密集的区域是系统抽象层,在此之上非常密集的区域内的模块组成基础设施层,上部比较稀疏的区域是构架层,最顶部的若干模块组成应用层。
下面逐层描述它们的功能。
1.1. 系统抽象层
分层的系统架构是OpenOffice.org能够轻松移植到广泛而不同的系统平台上的重要因素之一。为此目的,OpenOffice.org架构中特别定义了一个称作“系统抽象层”的虚拟层。所有平台相关的实现都在这一层下发生,或者作为可选模块存在。所以理想状况下只要实现了系统抽象层提供的功能再把上面诸层所属的模块重新编译,OpenOffice.org就能够在新的平台上运行了。但如果想要实现所有功能,可选的平台相关模块也要进行移植。为了减少移植工作量,系统抽象层所提供的功能被缩减到每个平台上可用的最小集合。当然在某些平台上系统抽象层必须模拟某些不存在的功能,比如在没有本地多线程的环境下支持“用户境”线程。1
系统抽象层包括如下四个子层/库:
* 操作系统层(Operating System Layer,OSL)封装了用来访问和使用系统资源(例如文件、内存、套接字、管道等)的操作系统功能。OSL是具有面向对象API的很薄的一层,和上层不同的是这里的面向对象API是C语言实现的API。C语言API的优势在于允许将该层用不同的实现语言移植到不同的平台上去,比如对于嵌入式系统或者互联网应用设备来说,汇编语言就可以用来实现这一层。
* 运行时库(Runtime Library,RTL)提供所有的准平台无关的功能。这里提供字符串类的实现,也能够把字符串转换到不同的字符集,内存管理的功能也是在这里实现的。
* 标准模板库(Standard Template Library,STL)2在这里作为泛型容器类来使用。STL提供了列表、队列、栈、映射等模板/类的实现。
* 可视类库(Visual Class Library,VCL)3是OpenOffice.org的核心库之一。VCL的实现分为两个部分,一部分封装了对不同的底层GUI系统的所有访问方式,另一部分是完全平台无关的,包括面向对象的2-D图形API和OpenOffice.org使用的整个窗口部件集。这种纵向划分的方法保证了所有的窗口部件具有独立于不同平台上所用GUI系统的相同的行为方式,并且在所有平台上的外观感受和功能都是相同的。对打印功能的访问、剪贴板和拖放功能都是在VCL内实现的。
1.2. 基础设施层
* 虚拟操作系统层(Virtual Operating System Layer,VOS)为了更方便地使用文件、线程、套接字等系统资源,把操作系统层(OSL)的所有功能封装成了C++类。这些C++类提供了一个以面向对象方式访问所有系统资源的便捷途径。
* 工具库(Tools Libraries)4由提供辅助功能的很多小库组成,包括处理日期时间相关数据的公共实现,也包括结构化存储方式的实现,另外还包括通用注册表、类型安全管理、以及持久属性数据的实现。
* 通用网络对象(Universal Network Objects,UNO)5是OpenOffice.org所使用的组件技术。这种组件技术不依赖于任何图形子系统,而是很大程度上基于多线程和网络通讯的环境所提供的功能。
UNO中的IDL编译器能够根据特定的接口定义产生二进制表示形式和相关的C头文件或者Java文件。这个二进制表示形式是平台和语言无关的,并在运行时编组远程函数调用的参数、或者为特定语言访问接口所提供的实现产生即时代码。这种技术的优点是减少了同时为不同语言绑定所产生的代码量,缺点是不仅对每种语言绑定所产生的代码都需要特定的后端支持,而且对每种编译器都需要一个运行时的桥接模块。
很多UNO的部件都是作为UNO组件实现的,这有助于创建非常灵活的系统以及运行时的系统扩展。以提供新的桥接/通讯协议为例,UNO提供了本地和在网络上的访问组件的透明方式,其中在网络上的通讯是通过IIOP实现的。如果组件是做为共享库实现的,那么该组件就可以被UNO加载入程序的进程内存中。从而对组件的每一个访问都好像是函数调用一样,不需要任何远程函数调用所需的参数编组。
* 通用内容代理(Universal Content Broker。UCB)6允许所有的高层代码透明地访问不同类型的结构内容。UCB由一个核心和若干通用内容提供者(Universal Content Provider,UCP)组成,后者用来集成不同的访问协议。现有OpenOfficr.org UCP实现了对HTTP、FTP、WebDAV和本地文件系统上内容的访问。
* 复合对象(Compound Objects)提供了复合文档(比如电子表格被镶嵌进文字处理文件中)的功能。现在的OpenOffice.org支持复合文档和镶嵌多媒体播放器这样的可视控件,并且这个实现是平台无关的。复合文档的所有内容都以同OLE结构存储格式兼容的方式保存,这样以来,只要支持OpenOffice.org的平台就可以访问OLE复合文档。复合对象在Windows平台上的实现可以和OLE服务交互,所以可以和所有支持OLE的应用程序更紧密地结合。
* 脚本与Basic库(Scripting and Basic Libraries)7提供一个解释器,用以解释源代码并产生元指令。这些指令可以通过附带的元指令处理器直接执行,或者在模块/库里持久保存已备后用。UNO实现的所有上层应用组件所提供的功能都可以通过组件的脚本接口访问到,这就保证了采用OpenOffice.org UNO技术的新组件不需很大的成本就可以被完全脚本化。脚本接口也实现为组件,这就允许其他脚本语言轻松地集成进来。在OpenOffice.org 2.0中会集成BeanShell8(一种轻量级的Java解释器)和JavaScript。实际上随OpenOffice.org所附带的Basic是一个Basic方言。
1.3. 构架层
* 应用架构库(Application Framework Library,SFX)9为所有的应用提供环境,每个应用所共享的而没有被其他层提供的功能都在这里实现。就程序结构来讲,每个应用都要实现一个壳(shell)和若干视图(view),SFX提供了所有的基础功能,所以应用只需补充特有的功能即可。
这个架构库对于内容检测和集成来说也是结构合理的,模板管理和配置管理就在这里提供。SFX也和复合文档的一些方面相关,比如菜单和工具条的合并和设置。对所有应用的定制化功能也是由SFX提供的。
* 共享功能库(SVX Library)10为所有应用提供架构无关的共享功能。SVX的一部分实现了一个被若干应用用来做图形编辑和输出的完整的面向对象“画布”,这个“画布”还包含一个完整的3-D 引擎。另一部分实现了字体选择、颜色选择等公共对话框11,而数据库连接12也是完全在这里实现的。
1.4. 应用层
所有的应用:文字处理应用13、电子表格应用14、演示文稿应用、图表应用等等,都是在这一层实现的。而这些实现实际上都是共享库,在运行时由应用架构进行加载。架构提供了所有这些应用的环境以及它们交互的功能。
2.UNO组件模型
现在开放系统世界里并没有每个人都接受的组件技术。桌面领域有KDE和GNOME,他们都把CORBA作为底层通讯方式的基础,但是高层的组件模型彼此完全不同。所以现在不可能写出在两种桌面环境都可用的组件。而且现在的CORBA规范中并没有包括组合文档和其他桌面软件相关的功能。
另一个问题是现大多数CORBA的设计实现都是用来通过远程服务运行分布式网络应用的。所以在桌面组件模型中采用这样支持完全网络通讯负荷的CORBA实现在大多数情况下都是错误的选择。Mozilla开源项目开始的时候就根据需要建立了一个可以轻松移植到不同平台上的轻量级组件模型,这就是XPCOM。
OpenOffice.org之所以采用自己的组件模型正是基于以上这些原因,以及为了提供一套与Microsoft Office相似的办公套件功能。OpenOffice.org套件提供的UNO组件技术满足了现代桌面应用对组件的所有需求。UNO也是在对象技术层面上形成的,该组件技术是OpenOffice.org API建立的基础。
UNO技术包含如下的特点:
* 开放:UNO支持所有流行的组件标准通讯协议,例如CORBA、JavaBeans、OLE(Windows Scripting Host、Visual Basic、Delphi等)、JavaScript、Python15、Perl16等脚本语言,以及C++和C语言的本地集成。其中C、C++、Java和Python都已经实现了完整的UNO绑定,而OpenOffice.org Basic、OLE和共同语言架构(Common Language Infrastructure,CLI)现在只支持访问UNO组件,还不能用来创建新的组件。
* 面向对象:UNO是面向对象的,支持聚集、集成、异常处理和多态这样的概念。
* 基于接口:UNO的功能被集成进接口里,具有相似功能区域的组件对同样的接口有访问权限,开发者将具有组件世界的真实感觉。
* 平台无关:UNO特意被设计成平台无关的,有OpenOffice.org的平台就有UNO。
* 支持异常:UNO提供对异常机制的支持,这意味着它可以被映射成嵌入的开发系统的出错处理机制,比如C++异常和Java异常。
* 开发系统无关:UNO可以用现在所有的流行开发环境和编程语言实现,包括C++、C、Visual Basic、Windows Scripting Host和所有支持COM的系统、CORBA、JavaBeans组件、以及OLE。
* 支持网络:基于UNO技术的组件可以在网络上通讯,也可以在远程服务器上实现功能,比如在互联网设备上提供完整的文字处理功能。
3.API,SDK,与UDK
OpenOffice.org 应用程序接口(Application Programming Interface,API)基于OpenOffice.org的UNO组件技术,由许多类CORBA的IDL定义17的接口所组成。UNO组件技术决定组件和应用如何相互通讯、某种编程语言如何访问API,而API定义了独立于特定编程语言的访问OpenOffice.org功能的接口。这种接口结构对于决定开发中需要重新实现应用到何程度非常重要。
OpenOffice.org API定义的接口具有如下特征:
* 完全是定义好的组件与环境的接口,可以轻松地组合起来满足特定对象的需求。
* 版本无关性,通用功能和特定版本所需要的功能被区分开来;
* 可扩展性,开发者可以从接口的一个最小集合开始逐步地增加应用的特性;
* 可重用性,总是尽可能地采用通用的接口定义。
与其他办公套件的API不同,OpenOffice.org并不是已有实现的简单反映,它是从应用和组件开发者的角度来设计的,所以提供了几乎所有的OpenOffice.org组件程序接口,并且可以集成新的组件。
3.1. 应用领域
OpenOffice.org API有很多应用领域。首先,为了自动运行某些任务可以编写典型的宏程序;其次,部分OpenOffice.org可以作为其他程序的组件运行,比如将OpenOffice.org当作JavaBeans组件来访问。另外,有一个非常有趣的应用是将OpenOffice.org的用户界面替换掉,并搭建一个完全不同的应用环境。
3.2. 结构规范
OpenOffice.org API的结构规范采用的是“接口与支持类”方式,而不是“实现-继承”方式。
“接口与支持类”方式意味者对象只通过接口进行通讯,支持类被用来提供实现。这样的设计思路是因为组件是高度地环境、语言、和版本无关的。“实现-继承”方式意味着部分实现的基类,而子类从中衍生接口并继承下来。不选择这种规范的原因是在较大的系统中会导致膨胀的接口和深度继承层次。而且,主要通过基类依赖于环境的组件,也是编程语言相关和高度版本相关的。
3.3. 对象模型
OpenOffice.org API是为UNO组件技术设计的,也是用它实现的。因此OpenOffice.org API是程序语言无关的,可以在C/C++、Java和好几种脚本语言中使用。对于其它语言来讲,只需要一个语言绑定就能够提供对整个OpenOffice.org API的访问。该API是基于以下的原型构造的:
* 实现类:类其实不是在OpenOffice.org API中实现的,在这里提及只是为了更好的理解。实现类实际上是使用真实的程序语言来实现服务。一般来讲,使用服务的开发者不需要处理API层次上的实现。而对象不是为应用而是为实现类翻译成实际语言概念,这点类似于Java现实类的实现。
* 服务:对象规范称为服务。你可以把服务想象为对支持服务的实现类和使用组件所提供服务的应用都有利的“合同”。服务通常描述实现的的接口和一套参数。虽然服务通常不翻译成实际语言概念,你也可以把它看作类似于Java的抽象类。
* 接口:API层次上某一方面的规范称之为接口。接口可被看作是“合同”内通过合法验证的文字模块,接口可以组合成整个“合同”。OpenOffice.org API中的接口非常类似于Java中的接口。
* 结构:普通的数据块可以被定义为结构,因此结构是不含方法的。结构的优势在于它们可以传送到不同的进程甚至不同的机器,这会大大提高了进程间通讯和远程调用的效率。使用Java实现时,结构可以表示为只有数据成员和get/set方法的类。
* 异常:异常是方法调用的非常规结果。正如在Java中一样,异常被用来处理出错。
* 常量/常量组/枚举:常量被分成两类,可以分组和赋值为数值和字符串值的常量,和包含数值固定集的枚举。在Java实现中,这两者都表示为具有常量数据成员的类。
3.4. 模块化分层
OpenOffice.org API是按照与Java及CORBA类似的层次模块概念来组织的,从上到下一共分为四层:
* 办公软件接口,比如对文字处理、电子表格、绘图和演示文稿的接口;
* 集成架构接口,使得能够集成进OpenOffice.org新的组件,比如配置管理和通用内容代理;
* 应用域无关接口,这类非常重要的接口包括属性访问、集合、流操作、附加脚本引擎和其他很多接口;
* 组件系统接口,这部分基础接口包括必要的处理对象模型的接口,比如生命期控制、查询、建立桥接、和实例化远程对象等接口。
3.5.SDK和UDK
OpenOffice.org软件开发工具包(Software Development Kit,SDK)18是OpenOffice.org的一个补充部件。它提供使用现有UNO组件与开发新组件编写应用所需要的工具、例程和文档。SDK的主要部分就是《OpenOffice.org开发者指南》19,这本超过1000页的内容全面的指南提供了OpenOffice.org API概念、UNO组件模型、和在不同应用上下文中如何使用API的详细介绍。这本《指南》对于利用SDK进行OpenOffice.org的二次开发具有非常重要的参考价值。利用OpenOffice.org API和SDK提供的其他资源,开发者可以在不修改OpenOffice.org源代码的情况下使用自己熟悉的编程语言,基于UNO组件构建新的应用。
开发者在OpenOffice.org中有时也会看到UDK和ODK这样的名称,它们与SDK有联系也有区别。UDK是UNO和SDK的合称,而ODK实际上是指SDK中的一个模块,也用来指SDK中OpenOffice.org架构和应用相关的高层部分。
4. 融合与发展
4.1. 组件桥接
现在桌面环境下所流行的组件技术有KDE/KParts20、GNOME/Bonobo21、CORBA、Mozilla/XPCOM22、OLE/ActiveX和OpenOffice.org/UNO等,各种组件技术之间的交互并不方便。为了在不同的环境中提供办公软件的功能,就有必要支持不同的组件技术。由于OpenOffice.org的组件技术能够使用桥接方式访问其他组件,有可能将办公组件集成进不同的环境中,比如GNOME、KDE和Mozilla。在组件基本概念非常相似的环境中实现桥接是相当容易的,而其他环境下想要隐藏所有的概念差异并提供桥接功能可能会非常困难。但是在很多情况下开发者和用户必须要处理不同的概念和哲学。而且如果桥接需要处理复杂的参数和调用转换,效率问题可能会凸现出来。
由于OpenOffice.org UNO支持对OLE的桥接,所以OpenOffice.org已经能够作为一个ActiveX控件在IE等支持ActiveX的程序内运行。可惜的是UNO同GNOME/Bonobo桥接的项目开始后又中止了。而OpenOffice.org为Mozilla提供的插件也已经开发完成,将会集成在2.0版本中。OpenOffice.org为KDE中的Konqueror 制作的插件23也已经实现了一些基本功能。
4.2. 本地部件架构
在VCL最初的设计中并不封装底层GUI系统的本地窗口部件或控件。平台相关部分实现了2-D图形“画布”以供VCL上层的平台无关部分使用,该“画布”将每个功能调用都重定向到了底层的GUI系统上。
后来为了使OpenOffice.org在各个平台上的观感更接近于本地系统,开始了一个称作本地部件架构(Native Widget Framework,NWF)24的项目。NWF的基本方法是使用本地桌面环境/窗口管理器提供的可视部件替换当前的基于窗口系统API实现的可视类库。现在把OpenOffice.org集成进KDE25的项目正在进行,其中就包括实现KDE本地部件架构26、和基于Qt实现VCL插件27的两个子项目。其他的针对GTK+、Win32、和Apple Aqua 28的NWF实现也在进行当中。
本篇主要介绍了OpenOffice.org的技术体系结构。在这一体系结构中有很多闪光之处,比如跨平台的分层结构、虚拟操作系统概念、UNO组件模型、基于IDL的API和SDK等等,都对OpenOffice.org移植到众多平台上、并获得广泛的应用和赞誉贡献良多。实际上OpenOffice.org架构中还有一些优秀的特性,因为篇幅所限在这里没有详细介绍,比如基于UNO的数据库连接(SDBC)和通用内容代理/提供者(UCB/UCP)。这些技术架构的详细内容需要读者实际进行研究与开发才会有更深入的理解。
下一篇将会介绍OpenOffice.org的另一个优秀的技术特点:开放、可扩展和标准化的XML文件格式规范。
本文依据《创作共用约定》之“署名-禁止派生-非商业用途”方式发布,即你可以免费拷贝、分发、呈现和表演当前作品,但是必须基于以下条款:
* 署名:你必须明确标明作者的名字。
* 非商业用途:你不可将当前作品用于商业目的。
* 禁止派生:你不可更改、转变或者基于此作品重新构造为新作品。
对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款。
在得到作者的明确允许下,这里的某些条款可以放弃。
此约定是法律文本(完整的协议)29的简单易读概要。
模块
功能描述
accessibility
提供对辅助功能的支持
apache_java
包括Apache提供的Java工具,Xalan和XML-APIS30
autodoc
从UNO IDL和C++源文件自动产生文档的工具
automation
自动测试架构
basctl
Basic集成开发环境
basic
Basic解释器和运行时库
berkeleydb
Sleepycat公司31提供的轻型数据库
bitstream_vera_fonts
Bitstream公司提供的用于拉丁语系文字的Bitstream Vera字体32
boost33
与C++标准库协作的一套可移植的C++库,将会包含进C++标准库中
bridges
实现UNO向C++(MS Visual C++、Sun Forte C++、gcc等)和Java等不同语言的桥接
chaos
在UCB之前使用,大部分已废弃,现在只实现邮件文档转移服务
codemaker
包含产生C++头文件、Java文件和IDL文件的程序,该程序是在unoidl编译器产生二进制格式注册表上工作的
comphelper
编写UNO组件所需的辅助类
configmgr
访问配置信息的注册表客户端UNO组件
config_office
配置编译环境
connectivity
数据库连接,包含了ODBC、JDBC、ADO、MySQL、dBase等数据库驱动的实现
cosv
用C++实现的工具库,包括对文件、字符串等的访问
cppu
除了Java之外所有的语言绑定所需的运行时库
cppuhelper
C++的UNO辅助类的实现
cpputools
UNO工具和运行时程序的集合
crashrep
程序崩溃后的汇报工具
curl34
客户端的URL转换库
dbaccess
数据库访问层,包含从应用访问数据库相关的用户界面
desktop
产生office可执行代码,基于offmgr模块
dictionaries
拼写检查、同义词等功能所需的字典,现在只支持西方文字
dlcompat35
Mac OS X/Darwin系统中与动态加载库函数dlopen(3)兼容的库
dmake36
类似于GNU make和Sun Forte dmake的make工具
dtrans
实现剪贴板管理器、MIME类型管理、拖放功能等辅助功能
embedserv
实现OLE2的接口
eventattacher
基于组件的事件处理
expat37
用C语言实现的轻型XML解析器
extensions
为各种目的提供的独立UNO组件,例如OLE、PGP、语音等
external
包含若干外部组件
extras
对程序正常运行至关重要的非代码性辅助文件
fileaccess
实现UCP的文件系统访问
filter
包含各种文件过滤器的实现
forms
实现窗体控件
fpicker
基于UNO实现了封装窗口系统文件对话框的文件拾取器
framework
集成不同环境(基于SFX和不基于SFX)中的应用组件
freetype38
平台无关的字体引擎,特别用于亚洲字体
goodies
辅助类(例如3-D基本功能和图形管理器)与外部图形文件过滤器
gtk
与GNOME集成需要的模块
helpcontent
二进制格式的英文帮助内容,其他语言的帮助内容39需要单独下载
i18n
旧的国际化架构,只支持西方语言
i18npool
新的国际化架构,支持西方语言,东亚语言和复杂文字排版
i18n_simple
国际化的UNO实现框架
i18nutil
国际化所需的工具
icu40
IBM提供的Unicode国际化组件技术
idl
为所有基于SFX的组件由IDL生成所需的定义(头)文件
idlc
UNO的IDL编译器
instsetoo
生成可执行的安装包,即将升级到instsetoo_native
io
包括基本的UNO输入/输出流的服务和进程间通讯
javaunohelper
Java的UNO辅助类的实现
jpeg
JPEG图像格式过滤器
jurt
Java的UNO运行时库,包含UNO的Java绑定
jut
Java的UNO辅助工具的集合
jvmaccess
C++实现访问Java虚拟机
lingucomponent41
创建不同语言的字典、词典和其他相关工具
linguistic
UNO语言组件的封装和特定语言的实现
MathMLDTD
W3C制定的MathML DTD规范42,用于公式的文件格式
moz
编译地址簿连接驱动所需的Mozilla的头文件和库
msfontextract
libmspack43提供的解压CAB文件格式的工具,用以释放字体
nas
网络透明的C/S模式音频传输系统NAS44,用以提供对音频的支持
neon45
C接口的HTTP和WebDAV的客户端库,提供对UCP的支持
netbeans_integration
将SDK集成进NetBeans46 IDE的组件技术
np_sdk
为Mozilla编写客户端插件需要的SDK
odk
为生成SDK进行第一步编译
offapi
包含特属于UNO组件的部分API,接口用IDL语言写成
officecfg
包含应用和组件的配置schema
offmgr
包含全局功能配置的资源和代码,基于sfx2,与svx模块紧密相关
offuh
生成UNO的C++头文件,任何API模块中产生代码的文件若有变化则须更新
openssl47
支持SSL/TLS的开源工具包
package
实现打包压缩功能的UNO组件
padmin
打印机管理工具,用来在UNIX平台上配置打印机
psprint
产生PostScript代码,是当前UNIX平台上的打印方式,即将支持CUPS48
psprint_config
PostScript打印机的配置文件集合
python
Python49语言运行环境,用以支持UNO-Python桥接
pyuno
实现UNO-Python桥接
qadevOOo
自动化完成产品的测试
rdbmaker
由二进制格式注册表产生子集或进行反射
readlicense
自述文件和许可证文件
readlicense_oo
OpenOffice.org自述文件和许可证文件
regexp
GNU C库50提供的正则表达式处理程序,用C++做了封装
registry
通用注册表的实现
remotebridges
包含进程间UNO桥接的UNO服务,例如IIOP桥接
res
包含位图、图标、光标文件这样的典型资源文件
ridljar
生成Java类文件,udkapi模块中任何产生代码的文件若有变化则须更新,该模块还包含一些Java实现的核心API,例如Any类型
rsc
资源编译器,从用户界面的文字描述生成二进制描述
rvpapi
用Java实现远程通讯的接口
sablot
来自于Ginger联盟51的C++实现的XSLT处理器
sal
系统抽象层,集成了所有支持平台的底层API,定义平台无关的C语言API
salhelper
系统抽象层的辅助类
sandbox
基于Java 的安全管理器
sane
支持SANE52接口扫描设备的文件
sax
XML SAX53解析和输出的UNO组件
sc
电子表格应用组件
scaddins
电子表格应用的附件
sch
图表应用组件
scp
安装脚本文件,即将升级到scp2
scptools
打包工具
sd
演示文稿应用组件和绘图应用组件,它们由相同的代码基产生
sdk_oo
为SDK进行第二步编译,生成最终的完整工具包
setup2
安装程序的实现,即将升级到setup_native的本地安装方式
sfx2
SFX是应用架构的核心模块
shell
实现某些shell命令的工具,例如网络代理设置和命令行邮件
sj2
提供对嵌入式Applet程序的支持,也用Java实现了JavaScript引擎
smoketest
安装程序的粗略测试
so3
包含组合文档对象的基础实现部分,也实现了OLE桥接
solenv
编译环境(solar)
soltools
solar编译环境所需的工具
sot
与Microsoft Office兼容的存储实现方式
starmath
数学公式应用组件
stlport54
多平台的标准C++模板库的实现
stoc
基本UNO服务
store
可信赖、可恢复的存储所需的包含文件和数据流的文件访问,由registry使用
svtools
基于VCL的工具集
svx
2-D与3-D绘图引擎,以及其他与应用架构无关的共享库
sw
文字处理应用组件
sysui
实现与桌面系统环境的集成
testshl
旧的测试脚本,已废弃
testshl2
新的测试脚本
testtools
测试工具
toolkit
用UNO工具包和控件实现VCL
tools
包含字符串、时间、日期、流等基本类
transex3
本地化工具
twain
支持TWAIN55图像获取设备标准的文件
ucb
UCB核心的实现和相关辅助服务,也包括各种UCP
ucbhelper
使用UCB和实现UCP需要的C++辅助类
udkapi
包含属于UNO核心的部分API,接口用IDL语言写成
udm
C++工具类,实现对HTML、XML、和组合数据类型等的支持
unixODBC56
非Windows平台上提供的支持ODBC的开源软件
UnoControls
包含非直接调用VCL的UNO控件,这些控件使用抽象窗口工具包
unoil
生成Java类文件,offapi模块中任何产生代码的文件若有变化则须更新
unotools
提供基于UNO的API的辅助类
unzip
自由的infozip57压缩库
uui
提供UCB图形用户界面的组件
vcl
可视类库,窗口管理与基本控件库,也包含用户界面的系统抽象层
virgule
实现获取击键事件、操纵键盘映射的功能
vos
虚拟操作系统层
wizards
应用中向导所需的基本宏和库
x11_extensions
X-Window扩展库中render相关的头文件
xml2cmp
实现UNO组件描述的处理器
xmlhelp
以UCP方式实现的帮助
xmloff
XML的输入/输出过滤器
xmlscript
实现XML对脚本的支持
XmlSearch
用Java实现的对XML的查询引擎
zlib58
一个没有法律风险的自由软件,实现数据压缩功能
表 1 OpenOffice.org 1.1.2源代码模块的功能描述表
图 2 OpenOffice.org 1.1.2源代码模块依赖关系树状图
1 OpenOffice.org移植,http://porting.openoffice.org/
2 STLport,http://www.stlport.org/
3 OpenOffice.org图形系统,http://www.gsl.openoffice.org/
4 OpenOffice.org工具,http://util.openoffice.org/
5 OpenOffice.org通用对象模型/组件模型,http://udk.openoffice.org/
6 OpenOffice.org通用内容代理,http://ucb.openoffice.org/
7 OpenOffice.org脚本架构,http://framework.openoffice.org/scripting/index.html
8 BeanShell,http://www.beanshell.org/
9 OpenOffice.org架构,http://framework.openoffice.org/
10 OpenOffice.org图形应用,http://graphics.openoffice.org/
11 OpenOffice.org公共用户界面,http://ui.openoffice.org/
12 OpenOffice.org数据库访问,http://dba.openoffice.org/
13 OpenOffice.org文字处理,http://sw.openoffice.org/
14 OpenOffice.org电子表格,http://sc.openoffice.org/
15 OpenOffice.org Python-UNO桥,http://udk.openoffice.org/python/python-bridge.html
16 OpenOffice.org Perl-UNO桥,http://perluno.sourceforge.net/
17 OpenOffice.org IDL参考,http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html
18 OpenOffice.org软件开发工具包,http://api.openoffice.org/SDK/index.html
19 OpenOffice.org开发者指南,http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html
20 KDE Kparts,http://developer.kde.org/documentation/tutorials/kparts/
21 GNOME Bonobo,http://www.gnome.org/gnome-office/bonobo.shtml
22 Mozilla XPCOM,http://www.mozilla.org/projects/xpcom/
23 cuckOOo项目,http://kde.openoffice.org/cuckooo/index.html
24 OpenOffice.org本地部件架构,http://people.redhat.com/dcbw/
25 OpenOffice.org KDE集成项目,http://kde.openoffice.org/
26 OpenOffice.org KDE本地部件架构,http://kde.openoffice.org/nwf/index.html
27 OpenOffice.org QT VCL插件,http://kde.openoffice.org/ooo-qt/index.html
28 NeoOffice.org,http://www.neooffice.org/
29 创作共用协议的完整法律文本,http://www.creativecommons.cn/licenses/by-nd-nc/1.0/legalcode
30 Apache XML项目,http://xml.apache.org/
31 Sleepycat公司,http://www.sleepycat.com/
32 Bitstream Vera字体,http://www.gnome.org/fonts/
33 C++ Boost,http://www.boost.org/
34 cURL,http://curl.haxx.se/libcurl/
35 dlcompat,http://www.opendarwin.org/projects/dlcompat/
36 dmake项目,http://dmake.wticorp.com/
37 Expat,http://expat.sourceforge.net/
38 FreeType组织,http://www.freetype.org/
39 OpenOffice.org非英语帮助内容,http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/helpcontent/
40 Unicode国际化组件,http://oss.software.ibm.com/icu/
41 语言组件,http://lingucomponent.openoffice.org/
42 W3C MathML DTD规范,http://www.w3.org/TR/REC-MathML/
43 libmspack,http://www.kyz.uklinux.net/libmspack/
44 NAS,http://nas.codebrilliance.com/
45 neon库,http://www.webdav.org/neon/
46 NetBeans组织,http://www.netbeans.org/
47 OpenSSL,http://www.openssl.org/
48 公共UNIX打印系统,http://www.cups.org/
49 Python程序语言,http://www.python.org/
50 GNU C库,http://www.gnu.org/software/libc/
51 Ginger联盟,http://www.gingerall.org
52 SANE,http://www.sane-project.org/
53 SAX,http://sax.sourceforge.net/
54 STLport组织,http://www.stlport.org/
55 TWAIN,http://www.twain.org/
56 unixODBC,http://www.unixodbc.org/
57 Info-ZIP,http://www.info-zip.org/
58 zlib,http://www.zlib.org/
来源: http://blogs.sun.com/GavinLu/resource/deepknowlegeofooo-3.html
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
|