上一篇简单介绍了OpenOffice.org的发展轨迹、许可证问题、应用范围等情况。实际上,OpenOffice.org之所以获得如此广泛的应用,是与它本身优秀的技术架构,开放、可扩展、标准化的XML文件格式规范,以及社区成员的广泛参与密不可分的。
本篇将主要介绍OpenOffice.org的技术体系结构,它的分层架构、UNO组件模型、基于IDL的API和SDK,以及UNO与其它组件模型的互操作。
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的技术架构是很有帮助,也是至关重要的。
模块 |
功能描述 |
---|---|
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源代码模块的功能描述表
1、OpenOffice.org移植,http://porting.openoffice.org/
2STLport,http://www.stlport.org/
3OpenOffice.org图形系统,http://www.gsl.openoffice.org/
4OpenOffice.org工具,http://util.openoffice.org/
5OpenOffice.org通用对象模型/组件模型,http://udk.openoffice.org/
6OpenOffice.org通用内容代理,http://ucb.openoffice.org/
7OpenOffice.org脚本架构,http://framework.openoffice.org/scripting/index.html
8BeanShell,http://www.beanshell.org/
9OpenOffice.org架构,http://framework.openoffice.org/
10OpenOffice.org图形应用,http://graphics.openoffice.org/
11OpenOffice.org公共用户界面,http://ui.openoffice.org/
12OpenOffice.org数据库访问,http://dba.openoffice.org/
13OpenOffice.org文字处理,http://sw.openoffice.org/
14OpenOffice.org电子表格,http://sc.openoffice.org/
15OpenOffice.org Python-UNO桥,http://udk.openoffice.org/python/python-bridge.html
16OpenOffice.org Perl-UNO桥,http://perluno.sourceforge.net/
17OpenOffice.org IDL参考,http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html
18OpenOffice.org软件开发工具包,http://api.openoffice.org/SDK/index.html
19OpenOffice.org开发者指南,http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html