URN Logo
UNIX Resources » Linux » China Linux Forum » Linux桌面与办公软件 » 1 » 深入了解OpenOffice.org——路广[转]
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
深入了解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)]
 
Subject: 深入了解OpenOffice.org——路广[转]
Author: gogoliu    Posted: 2007-01-10 22:47    Length: 800 byte(s)
[Original] [Print] [Top]
Deeper Knowledge of OpenOffice.org
October 22, 2004

OpenOffice.org系列讲座之《深入了解OpenOffice.org》

这个系列的文章本来是投给《开放系统世界》的,也算写了很久,但是后来版面有所收缩,不大方便登这么技术性的东西了,删节修改了很多。我就打算把完整版贴出来,与大家共享。这个是以《创作共用协议》之“署名-禁止派生-非商业用途”方式发布。

现有三篇文章,分别是:

OpenOffice.org简介

OpenOffice.org技术架构

OpenOffice.org中的XML应用

http://blogs.sun.com/GavinLu/entry/deeper_knowledge_of_openoffice_org
----
killall 眼高手低 用心浮躁 浅尝辄止
[Original] [Print] [Top]
Subject: Re: 深入了解OpenOffice.org——路广[转]
Author: gogoliu    Posted: 2007-01-10 22:50    Length: 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
----
killall 眼高手低 用心浮躁 浅尝辄止
[Original] [Print] [Top]
Subject: Re: 深入了解OpenOffice.org——路广[转]
Author: gogoliu    Posted: 2007-01-10 23:15    Length: 33,513 byte(s)
[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
----
killall 眼高手低 用心浮躁 浅尝辄止
[Original] [Print] [Top]
Subject: Re: 深入了解OpenOffice.org——路广[转]
Author: gogoliu    Posted: 2007-01-10 23:33    Length: 35,151 byte(s)
[Original] [Print] [Top]
深入了解OpenOffice.org(三)
作者:路广

OpenOffice.org中的XML应用

上一篇重点介绍了OpenOffice.org的技术体系结构。它的分层架构、UNO组件模型、基于IDL的API和SDK等等都是使OpenOffice.org获得广泛应用和好评的技术优势所在。

OpenOffice.org中的另一大特点是完全公开并充分记录的、可扩展和标准化的XML文件格式。该文件格式可以持久保存数据,用户不虞担心无法访问年代久远的文件,或者需要为此付出高昂的代价。基于该文件格式的架构和应用,开发者也可以轻松实现支持客户化的外部文件格式,与网络服务等其他应用集成。

1. 需求与目标

1.1. 专有办公软件的困扰

随着整个社会信息化程度的提高,办公软件已经成为社会信息基础设施的一部分。不论是个人消费者,还是企业、政府、和其它非盈利机构,都会或多或少地使用文字处理、电子表格、演示文稿、简单绘图和图像处理这样的功能,办公软件已经成为计算机使用中的日常需求。对于办公软件的团体用户来说,除了基本的办公“生产力”应用外,他们还有其他一些需求:

* 能够支持附加处理和集成功能:比如文件的归档和索引功能,校验文件内容的合法性,支持与数据库和工作流的集成,能够批量处理文件等;
* 文件具有长期的可读性:这对于那些需要处理历史悠久的文件的大型团体(比如政府、博物馆、大型企业等)分外重要;
* 文件独立于应用程序,最好是独立于提供者,这样用户就不会被锁定在某个文件格式上而被迫延续使用;
* 文件格式统一,避免非结构化的、混乱的工作流和多种文件格式混杂。

而现在用户所使用的专有办公软件无法轻易满足以上的这些要求,这是因为:

* 专有办公软件可以提供对附加功能和集成的支持,可是这需要附加的许可证和高额费用。
* 专有办公软件的文件通常都是不公开的,甚至是附带专利的,这样早期软件所支持的文件格式完全要期待软件厂商在后续版本中提供支持,这些支持通常是需要付费的,由于软件商的某些目标和企业行为甚至是不可得的。
* 专有办公软件的文件通常都是依附于特定应用程序,甚至是特定版本的,这样用户就会为了保持对以前文件的访问而被锁定在某个软件上,这种代价通常是高昂的。
* 专有办公软件的文件通常都是自成体系,经常由于利益问题导致文件交换困难,从而多种格式并存。

用户希望办公软件能够在保持功能的基础上开放文件格式,这样团体用户可以自己完成附加功能和集成工作;文件的长期可读性也可以保证,因为访问文件的应用程序可以由第三方实现;而由此文件也独立于软件商和特定应用程序,用户真正掌握了自己的数据和信息;文件格式也可以通过公开协商的方式实现统一。

1.2. 客户化与可扩展性

随着办公自动化和信息化,政府、企业等团体用户在日常工作中的业务流转已经逐步过渡到需要自动完成的阶段,而办公软件通常会被团体用户用来支持工作流(Workflow)1。工作流中的一个重要内容就是实现工作文件在流程中恰当地运转以完成整个业务,而这里所指的文件很可能是团体用户所在行业规范的文件,或者是用户自定义的文件。实际上,在政府公文2、法律文件3、税务记录4、专利管理5、会议论文6、科技文件7、技术规范8、电子书籍9、盲人书籍10、新闻稿件11、投资研究12、文字研究13、人力资源14、采购销售、财务报表15、医疗16、保险17、零售18、金融19等方面、甚至整个电子商务系统20,国际上有团体或者联盟已经开始、甚至是完成了这些专用文件格式规范的制定。

中国政府也在基于XML着手制定《中文办公软件文件格式规范》21和《基于XML的电子公文格式规范》22;国家知识产权局为实现专利受理自动化而制定的《以电子文件形式提出的专利申请请求类文件类型定义[DTD](试行)》23已经于2004年公布,并开始接受专利电子申请;中国证监会参考XBRL12制定的《上市公司信息披露电子化规范》在2004年通过审批,上海证交所已经推出了相关的服务;税务部门在某些税种内已经开始施行了基于XML的数据表示方式。

这些为特定目的定义的文件规范要求和定制好的结构化工作流紧密配合。对于专有办公软件来说,支持这些文件规范意味着要在保持传统办公软件使用模式的基础上,根据需要提供扩展功能。也就是要即能保证对市场中广泛使用的文件的兼容性,又要提供附加工具支持对文件语义的操作,在通用格式和专用格式间转换。要支持这样的扩展功能,在没有充分了解专有办公软件内封闭的文件格式的条件下是很难实现的。

1.3. 保护投资与标准化

团体用户通常在采用某种文件格式存储数据和信息后都希望能够保存尽可能长的时间,并且保证文件格式的稳定、或者是受控地演化,这样用户才能保持为此及相关系统的投资收益率并尽可能地降低总持有成本。而封闭的文件格式常常会导致丢失信息,或者是成本居高不下。

这个问题根本的解决之道在于文件格式的开放和标准化。只有文件格式开放了,才能够实现充分竞争,由此降低成本;只有标准化了,文件才能够稳定地演化,数据和信息才能更通畅地流转,也能够被更广泛地支持,出现更多的工具,用户才会有更多的选择。这是一个用户和业界双赢的途径。

1.4. 解决方案

为了满足如上用户的需求,OpenOffice.org采用了可扩展标记语言(eXtensible Markup Language,XML)作为本地文件格式规范24的基础。采用XML作为办公软件的文件格式,能够轻松实现各种集成和扩展处理。通过定义办公软件特定的标记,这种文件格式能够支持所有的办公软件的功能,易于生成和处理文件,而且不会被某个软件商或应用程序锁定。为了实现文件格式的标准化,OpenOffice.org还参与发起了OASIS开放办公XML格式技术委员会25,目标就是制定开放办公软件XML文件格式规范。

2. 设计原理

2.1. 内容与样式

办公软件文件格式同行业专用文件和页描述文件格式有显著的区别。

绝大多数的行业专用文件只定义了文件中具有特定逻辑的内容,文件的显示样式在外部独立地实现,内容是它们的关注点。而页描述文件(例如Adobe PostScript、PDF和其他小样格式)通常是在特定页中定义了内容的显示方式,对于内容中的逻辑是不作规定的。

办公软件文件的内容通常具有一定的逻辑关系,例如章节和标题层次,而且也需要确定它的显示样式,例如字体字号和缩进等。那么就有两种实现方式:一种是将样式和内容混合起来表示,样式就嵌入在内容流里;另一种是将样式与内容分离开来表示,通过某种映射联系起来。前者的优点在于格式简单,缺点是嵌入在内容中的样式很难管理,而且由于重复样式会产生很多的冗余信息。后者正好与前者相反,格式相对复杂但层次较为清晰,样式单独保存有利于提高数据表达信息的效率,并且方便对样式和内容分别进行处理。

OpenOffice.org的XML文件格式采用的就是后一种实现方式。

2.2. 文件打包

采用了样式与内容分别处理的OpenOffice.org XML文件格式,需要处理的一个问题是:如何处理文件内的非文字内容(例如图像、OLE对象和打印机设置信息),如何管理这么多数据部分?

OpenOffice.org针对多部分的文件采用了压缩打包26的方式。也就是说,将样式、内容、设置信息、元数据、和图像等非文字内容等采用通用压缩算法打包,访问时针对特定的部分进行解包和再打包。这样做的好处是统一管理,单独处理,文件尺寸更小,而且压缩算法和打包的ZIP文件格式也是各平台上都可得的,无专利隐患,并有开源软件的支持。

对于某些需要嵌入在文字内容流中的非文字对象,OpenOffice.org XML文件格式采用Base64的编码方式将其嵌入的。

2.3. 标准化

OpenOffice.org XML文件格式从设计之初就非常注重标准化。为了能够更好地同其他信息格式交互,OpenOffice.org XML充分利用了现有的行业标准,不是“重新发明轮子”,而是在这些标准的基础上组建自己的办公软件文件格式。比如它直接采用了MathML27、XLink、Dublin Core28,重复利用了XHTML、SVG29、XSL-FO30、CSS中的内容,在此基础上融合创新而成OpenOffice.org XML文件格式。

在OpenOffice.org的实现架构中实际上还充分支持了XSLT31,下一版的OpenOffice.org 2.0还会支持刚发布不久的XForms32。

2.4. 卓越的XML

OpenOffice.org XML文件格式,不仅仅是把现存的数据结构简单地XML化,也不是进行某种“拥抱-扩展-消灭”(Embrace-Extend-Extinguish,EEE)33的实践。

OpenOffice.org XML文件格式完全遵从于XML及其命名空间规范,所有的信息都通过结构化的XML来保存。没有信息存在于文件的物理表示方式中,没有信息存在于注释中,也没有信息存在于特别的节点名或者值中,更没有在值的“子格式”中保存信息。

为了统一文件格式,OpenOffice.org中所有相同功能的模块都采用同一概念和表示方式。这样在应用中就有很多的通用格式模型可以重复使用,提高了数据表示信息的效率。

3. 文件格式

3.1. 结构框架

如上所述,OpenOffice.org XML文件格式中引用了很多外部标准,比如XML 1.0、SVG 1.0、XML Namespace、XSLT 1.0、XPath 1.0、XLink 1.0、XSL-FO 1.0、HTML 4.01、ISO 860134、ISO 63935、ISO 316636等。而OpenOffice.org XML文件格式为了表示不同性质的内容,又为不同性质的数据内容定义了15个命名空间以便于区别管理。比如表示公共信息的xmlns:office、表示样式信息的xmlns:style、表示脚本的xmlns:script、表示文本的xmlns:text、表示元数据的xmlns:meta等。由于OpenOffice.org XML文件格式公布时W3C XML Schema还没有制定出来,所以它采用了传统的DTD进行数据类型定义。


图 1 OpenOffice.org XML文件根结点

图1是OpenOffice.org的文件基本结构。办公文件根结点<office:document>下包含的元素是:元数据<office:meta>、全局设置<office:setting>、脚本<office:script>、字体声明<office:font-decls>、普通样式<office:styles>、自动样式<office:automatic-styles>、主样式<office:master-styles>、内容体<office:body>。

3.2. 打包格式

子文件名

根元素

子文件内容

meta.xml
<office:document-meta>
文件元信息(例如作者和创建时间):<office:meta>

styles.xml
<office:document-styles>
文件中使用的样式:<office:font-decls>、<office:styles>、<office:automatic-styles>、<office:master-styles>

content.xml
<office:document-content>
文件内容及其使用的自动样式:<office:script>、<office:font-decls>、<office:automatic-styles>、<office:body>

settings.xml
<office:document-settings>
全局设置(例如窗口大小和打印机设置):<office:setting>

表 1 OpenOffice.org XML文件压缩包结构

实际上在OpenOffice.org的文件压缩包内,以上这几个部分被分别存储在相关的几个子文件内,如表1中所示。

OpenOffice.org XML文件的两个基本属性是类型和版本。文件类型通过<office:document>或<office:document-content>根结点的属性@office:class表示,可能的类型包括文字、主控文档、电子表格、绘图、演示文稿、图表等。

其中的“主控文档”是一类特殊的文字文件。主控文档由若干子文件构成,每个子文件实际上都是完整且独立的文件,链接到主控文档的“区域”中来。在主控文档中可以为这些区域定义主控样式,这些样式会在主控文档中应用到子文件上去。主控文档特别适合多人著述时使用。不同的作者撰写不同的章节,只要在主控文档中应用同样的样式,所有的内容就都被统一排版了。这样OpenOffice.org就能够在著作层次上实现内容和样式的分离管理。

OpenOffice.org XML文件中的校验和向前兼容性处理由文件根结点的属性@office:version控制。这个属性保存文件的当前版本,这样不同版本的OpenOffice.org访问文件时,会调用不同版本的文档模型。利用XML优秀的可扩展性,OpenOffice.org的不同版本能够方便地访问其他版本生成的文件,并最大程度上地保证兼容性。

压缩包内各个文件的相关信息由一个专门的列单文件(META-INF/manifest.xml)存储。它的主要内容包括:包内所有文件的列表、每个文件的媒体类型、包内被加密的文件所需要的解密信息。

3.3. 样式

OpenOffice.org XML文件格式采用的是样式与内容分离管理的方式。而样式实际上分为三大类:

* 普通样式:OpenOffice.org用户界面上可以看到的表示格式的样式,有时为了与其他样式区分称为普通样式。普通样式就是对OpenOffice.org XML文件格式不了解的用户眼中的样式。
* 自动样式:用户直接给对象(例如段落)设置的排版属性包含于自动样式。自动样式由OpenOffice.org在文件输出时自动生成。自动样式只包含设定于特定对象的排版属性。
* 主样式:包含应用于文件内容并一起显示的排版信息和附加内容的样式。比如OpenOfficr.org Draw主页中的图像背景,又如OpenOffice.org Writer主页中的页眉和页脚。主样式又分为普通主样式和自动主样式。

OpenOffice.org XML文件中的样式间支持继承关系,但被继承者只能是普通样式。在普通样式和自动样式中还根据包含的内容不同划分为不同的家族,例如段落、区域、文字、表格、图表、图形等,继承也只能在同家族的样式间进行。

OpenOffice.org XML文件格式中的样式也支持条件映射,也就是说可以在满足特定逻辑判断条件下映射为另一样式。这些条件映射还可以进行组合。

OpenOffice.org XML文件格式中的页样式(最常见的主样式),实际上由两部分组成:页主样式<style:page-master>和主页样式<style:master-page>。页主样式隶属于自动样式,主要描述页的物理和几何属性,例如页大小、页边距、页眉和页脚高度等。而主页样式是文件中的页模板,位于主样式<office:master-styles>结点内。它包含一个指向页主样式的引用,以及页上显示的静态信息,例如静态的页眉页脚和背景等。

OpenOffice.org XML文件格式中也为数据定义了丰富的样式,时间、日期、货币、数值、科学计数、百分数、分数等数据格式类型定义到了最小元素,完全不存在表达特定含义的编码子元素与字符串。在表示语言的ISO-639标准和表示国家地区的ISO-3166标准的基础上,支持近百种locale组合的数据表示方法。

3.4. 文字处理

OpenOffice.org XML文件格式中的文字内容主要由段落、标题、列表、表格、目录、索引、参考书目等构成,其中最基本的元素是段落。

段落用<text:p>表示,章节标题<text:h>可以看作是被标记为标题的特殊段落,它的特性大抵与段落相同。段落又由行内文本元素(Inline Text Element)构成。行内文本元素指的是文字区跨<text:span>和文本、脚注、尾注、书签、引用、链接锚、域和其他文字标记等,而文字区跨<text:span>所包含的也是行内文本元素。所以,从文件格式上讲文字区跨<text:span>是可以嵌套的,但是实际上OpenOffice.org输出的XML文件并不包含嵌套的文字区跨,因为这样的结构会更加复杂。段落内文字间的软回车<text:line-break>、空格符<text:s>和横向制表符<text:tab-stop>都是用元素来表示的,所以直接嵌在文本中的排版控制符号是不被OpenOffice.org识别的。

OpenOffice.org XML文件格式中的列表分为无序列表<text:unordered-list>和有序列表<text:ordered-list>两种。无序列表指的是由标记符号或图片引导的列表,而有序列表通常由各种数字或其本地语言文字表示引导。列表由若干列表头<text:list-header>和列表项<text:list-item>组成,而列表项又可包含段落、章节标题、无序或有序列表。被任意列表项包含的无序或有序列表实际上就是该列表项所在列表的子列表,或者说次级列表。OpenOffice.org就是这样通过列表嵌套来实现多级列表的。

3.5. 电子表格

表格<table:table>主要由表列组<table:table-columns>、表头行组<table:table-header-rows>和表行组<table:table-rows>构成,其中各组又分别包含单个表列、表头行和表行。表头行<table:table-header-row>表示在每页重复的表头,而表行<table:table-row>表示普通的表格内容。表头行和表行都由表单元格<table:table-cell>和<table:covered-table-cell>组成,后者表示表单元格合并后被覆盖的单元格。表单元格可以包含子表、段落/章节标题、列表和其他图形对象。表格的内容主要由表行包含的表单元格控制。

OpenOffice.org XML文件格式中的Writer和Calc应用都包含表格,所以它们采用了统一的定义。但是它们之中的表格在实施上还是有一些区别的:

* Calc中的表行和表列具有相对丰富的特性,比如隐藏、合并等功能,而在Writer中则没有;
* Calc中没有表头行的概念,表列与表行在概念上是平等的,表单元格只是依附于表行表示;而Writer中有可重复出现的表头行,表行是主要内容结点,表列是次要结点,只有横表头行而没有纵表头列,所以只支持纵向表;
* Calc中的表单元格是表格的原子单位,不能拆分、只能合并;而Writer中的表单元格既能拆分又能合并,但是纵向合并表示为子表<table:sub-table>,由于以表行为主要内容结点,所以纵向合并实际上存在某些限制;
* Calc中有表源<table:table-source>和表方案<table:table-scenario>的概念,还有命名区域、条件格式、公式计算、筛选、排序、合并计算、汇总、大纲等数据处理功能,以及丰富的数据样式;而Writer中的表格功能就非常有限。

因为OpenOffice.org Calc是专用的表格化数据处理应用,而OpenOffice.org Writer中的表格只是实现了部分简单的表格功能,所以两者在OpenOffice.org XML文件格式中的表格部分具有比较明显的区别,Writer中的表格相对简单,但是具有一些文字处理方面的特性。

3.6. 图形

OpenOffice.org中的图形应用是指绘图(Draw)和演示文稿(Impress),而实际上无论功能还是XML文件格式,绘图都是演示文稿的子集。演示文稿应用中具有一些绘图没有的功能,比如放映设置等。图形内容也可以插入到Writer和Calc中。

OpenOffice.org XML文件格式中的图形应用也具有主样式,通过主页样式、页主样式和传单主样式<style:handout-master>来确定。而图形内容主要通过内容体下的绘图页<draw:page>来表示。绘图页中可以包含众多的绘图元素,例如矩形、直线、折线、多边形、路径、圆、椭圆、连接线、标注、页缩略图、图元组等等。绘图页还可包含命名空间xml:dr3d下的3维图形容器元素:3-D场景<dr3d:scene>。3-D场景可以容纳的元素包括:光线、立方体、球体、多边形拉伸体、多边形旋转体等。

OpenOffice.org Impress特有的设置是通过其他一些元素来定义的。比如内容体中表示演示设置的<presentation:settings>、绘图页中表示演示笔记的<presentation:notes>和表示演示动画的<presentation:animations>等。

OpenOffice.org的其他应用,比如文字处理和电子表格中同样可以包含绘图内容。在这些应用中不需要绘图页这样的专用绘图容器元素,各种绘图元素可以直接放置于段落、文字区跨、表单元格、甚至内容体之内。

3.7. 窗体与控件

OpenOffice.org XML文件格式支持窗体(form)与控件(control),窗体是指包含与用户交互的控件的容器,所有的控件必须要处于某个窗体内部。

窗体集<office:forms>位于内容体之内,并可包含若干窗体<form:form>。每个窗体可包含窗体属性<form:properties>、关联事件<office:events>、若干控件<form:control>、甚至嵌套窗体。控件的种类也很多,包括文字、文字区域、固定文字、文件选择、密码、格式化文字、按钮、图片、检验盒、列表盒、单选盒、组合盒、控件框、图片框、隐藏控件、数据表格、和泛控件等。

控件是数据可感知的,若干控件组合起来可以方便地表示数据源中的数据。控件还可以和各种事件关联起来,通过宏或者其他方式实现数据的自动处理。

OpenOffice.org XML文件格式中的窗体和控件未来会迁移到W3C XForms标准上来。

3.8. 图表内容

OpenOffice.org XML文件格式中的图表<chart:chart>总是位于内容体之下。图表支持线条、平面、圆、环、散列、放射、柱、条等类型及其3-D形式,还支持add-in的外部绘图方式。

图表包含若干元素,标题<chart:title>、子标题<chart:subtitle>、图例<chart:legend>、绘图区域<chart:plot-area>等。如果数据源和图表在相同文件内,则通常用绘图区域的属性@table:cell-range-address来表示;如果数据源和图表不在同一文件内,则用绘图区域内的元素<table:table>来表示数据源。绘图区域包含的其他元素有2-D/3-D图表的墙体<chart:wall>、3-D图表的地板<chart:floor>、坐标轴<chart:axis>、数据序列<chart:series>、数据类别标识<chart:categories>和3-D光线<dr3d:light>等。

3.9. 索引

OpenOffice.org XML文件格式中支持多种索引,并且可以通过模板来修改这些索引的表现形式。

这些索引内容都位于内容体内,包括:内容目录<text:table-of-content>、插图索引<text:illustration-index>、表格索引<text:table-index>、对象索引<text:object-index>、字母顺序索引<text:alphabetical-index>、参考文献目录<text:bibliography>、以及用户自定义索引<text:user-index>等。

3.10. 用户界面与对话框

OpenOffice.org XML文件格式规范中也定义了用户界面和对话框的XML表示,它们是基于可扩展用户界面语言(Extensible User Interface Language,XUL)制定而成的。

OpenOffice.org的用户界面定义实际上是保存在文件内部,或者是位于全局用户配置包内的。每个OpenOffice.org组件都有其特有的菜单条<menu:menubar>、加速键列表<accel:acceleratorlist>、状态条<statusbar:statusbar>、工具条<toolbar:toolbar>的配置,它们都可以保存在全局配置包的子文件内。用户界面配置还包括与操作相关的事件<event:event>响应设置,以及为了标识工具条按钮和菜单项的图片。这里所有的内部图片<image:entry>和外部图片<image:externalentry>都必须保存在图片容器<image:imagecontaineer>内。

OpenOffice.org XML中的对话框同样也是基于XUL制定的。对话框<dlg:window>包含样式<dlg:style>、作为控件容器的公告板<dlg:bulletinboard>、以及与其关联的事件<script:event>和<script:listener-event>。公告板容器<dlg:bulletinboard>可以包含的控件种类也非常多,例如按钮、检查盒、单选组、组合盒、菜单列表、标题盒、文字域、文字、文件控件、图片、日期域、时间域、数字域、货币域、模式域、格式域、进度条、滚动条、固定线等等。对话框中的控件与文件内容中的控件是属于不同的XML命名空间的。

3.11. 文件安全性

OpenOffice.org XML文件格式规范也包括对文件安全性的考虑,现在主要体现在文件加密方面。加密是以密码保护方式实施的,具体步骤如下:

* 由用户键入的密码创建20字节长的SHA137摘要,并传递给打包组件;
* 打包组件根据当时的机器时间启动随机数发生器,为每个子文件产生一个随机的8字节初始向量和16字节的“盐”;
* 这个“盐”与用户密码的20字节长的SHA1摘要一起为每个文件产生128位的密钥,产生这个密钥的算法是迭代次数为1024的PBKDF238算法;
* 这个产生的密钥和初始向量一起用在密码反馈(Cipher Feedback,CFB)模式下的Blowfish39算法中给文件加密。

OpenOffice.org. XML文件格式规范并不满足于这已经很强大的128位密钥保护。在OpenOffice.org的下一版本中,会对W3C XML 签名40和加密41规范提供支持42。如此以来,不但可以对整个文件进行多次签名和加密,还可以对文件中的若干片断进行复合签名和加密;不但可以在OpenOffice.org及其衍生软件内保证文件的安全性,而且还可以在其外保证安全性。

OpenOffice.org XML文件格式的内容实际上非常丰富,这里只是比较概略的介绍。详细内容读者可以参阅《OpenOffice.org XML文件格式1.0技术参考手册》43,和OpenOffice.org XML文件格式DTD44。

4. 基于XML的文件过滤器45

4.1. XML组件

OpenOffice.org XML文件的输入、输出是通过与XML相关的组件来实现的。如图2所示,从结构上看OpenOffice.org运行时程序内部依然是二进制文档模型,这有利于提高效率。当文件从磁盘或其他文件系统读入时,基于XML的过滤器会将其转换成OpenOffice.org XML格式的数据流,再由实现ImportFilter服务的组件通过SAX方式导入内部的文档模型。其中基于XML的过滤器和实现ImportFilter服务的组件一起封装成文件输入过滤器,基于XML的过滤器通过调用XDocumentHandler方法来生成XML数据流。


图 2 OpenOffice.org 基于XML的文件输入过滤器

如图3所示,文件输出过程与输入过程基本上相反。实现XML ExportFilter服务的组件将OpenOffice.org XML的数据流传递给基于XML的过滤器,该过滤器处理XML SAX事件,并将数据以合适的格式存储为磁盘或其他文件系统上的文件。实现XML ExportFilter服务的组件和基于XML的过滤器一起封装成文件输出过滤器。


图 3 OpenOffice.org 基于XML的文件输出过滤器

类似的,如果可以把基于XML的输入过滤器与输出过滤器“串联”起来,实际上就能够实现脱离OpenOffice.org二进制文档模型而独立运行的文件转换工具。图4中就演示了这样的一个从其他格式文件转换到OpenOffice.org XML文件的工具。与图2相比,区别就在于原先实现XML ImportFilter服务的模块现在是XML Writer组件。如此以来,仅仅实现一个基于XML的输入过滤器我们就能够实现一个独立的文件转换工具了。


图 4 OpenOffice.org XML文件独立转换工具

实际上现在OpenOffice.org社区里已经出现了许多与其他文件格式相互转换的独立工具,例如Writer与LaTex的转换46、WordPerfect与Writer间的转换47、OpenOffice.org与OpenSHORE48文件之间的转换等。

OpenOffice.org还有一个XMerge49过滤器项目,这是为了实现与Palm、PocketPC和Nokian等手持设备上的嵌入式办公软件(比如Palm中的AportisDoc和MiniCalc、Pocket Pc中的Pocket Word和Pocket Excel)进行通讯和同步的工具。XMerge采用Java实现,能够导入并将手持设备上相对简单的文件合并进OpenOffice.org XML文件中来,这对于提高移动用户的工作效率是很有帮助的。

4.2. 基于XSLT的文件过滤器

XMerge项目具有优秀的可扩展性,它能够利用Java来提供对基于XSLT的文件过滤器50的支持,这就为OpenOffice.org支持第三方和客户化的XML文件格式提供了广阔的空间。


图 5 OpenOffice.org XML文件流处理

图5是将图2中的OpenOffice.org基于XML的文件输入过滤器进一步分解的流处理过程。该输入过滤器被进一步分解成XML解析器和XSLT处理器两部分。存储于磁盘或其他文件系统上的客户化XML文件,经过实现XDocumentHandler接口的XML解析器解析后,进入XML逻辑转换单元。在此,客户化XML数据流被XSLT处理器转换为OpenOffice.org XML数据流。该XSLT处理器由于也实现了XDocumentHandler接口,所以可以被实现了XML ImportFilter服务的组件通过SAX方式导入OpenOffice.org内部文档模型。基于XSLT的文件输出过滤器的流程与输入基本相反。

在这个文件流处理过程中,基本上只要实现客户化XML文件与OpenOffice.org XML文件间的转换逻辑,也就是XSLT脚本,并设定与文件和过滤器类型相关的配置信息就能增加一种客户化XML文件的支持。

OpenOffice.org软件内已经加入了好几种这样基于XSLT的文件过滤器,比如支持DocBook、XHTML、Microsoft Word/Excel 2003 XML格式的过滤器。OpenOffice.org社区内也出现了一些对独立XML文件格式的支持,例如HTML/WML51和TEI 12XML文件。而实际上在团体用户的工作流中,很多已经制定好的或者正在制定的行业XML文件格式规范都可以通过这种方式使OpenOffice.org提供对它们的支持。比如XBRL、UBL、Open eBook、NewsML、RIXML、中文办公软件文件(UOF)、中国专利电子申请文件(SIPO XML)等等,OpenOffice.org都可以作为它们的优秀的著作工具。对行业XML文件格式规范的支持能力,再辅以功能强大的SDK,可以说OpenOffice.org在这些行业的工作流和内容管理系统环境中具有广阔的应用前景。现在已经有了一些这方面的解决方案和成功案例。

5. OASIS Open Office

结构化信息标准促进组织(OASIS)是从早期的SGML Open组织发展而来,它是为了推动开发、统一和采用电子商务标准而建立的全球性非盈利联盟。OASIS的技术委员会主要针对的领域包括网络服务、电子出版、水平电子商务架构、安全、公共领域、垂直工业应用等等。为了促进产业共识并联合各方努力,OASIS为技术委员会特别设计了简单、开放的流程。

OASIS开放办公XML格式技术委员会52成立于2002年11月,目标就是为了建立一个开放的、基于XML的办公软件文件格式规范,该规范以OpenOffice.org XML文件格式规范为基础着手制定。现在这个技术委员会的成员包括办公软件提供者Sun、IBM、Corel和KOffice53,企业出版和内容管理提供商Arbortext54、SpeedLegal55、Stellent56、Blast Radius57等,IT咨询公司CSW集团58、Propylon59、ISOGEN60、Toolsmiths61等,以及波音公司和澳大利亚国家档案馆62等企业和用户组织。在经过了一年多的讨论之后,OASIS Open Office XML格式1.0的委员会草案采用RELAX-NG63和W3C XML Schema于2004年3月公布,面向全世界征集意见。这个草案虽然从总体结构上与OpenOffice.org XML文件格式差别不大,但是也进行了一些更改和提高。为了保持规范的独立性,它还采用了全新的XML命名空间定义。

OASIS开放办公XML格式技术委员会从成立之初就受到了世界各地的广泛关注和称赞,不断地获得了更多的支持。KOffice组织于2003年8月宣布会将本地文件格式迁移到OASIS Open Office XML文件格式上来,并于该技术委员会草案公布后的第二个月就提供了对该文件格式的初步支持。未来发布的OpenOffice.org 2.0也将会将OASIS格式做为本地文件格式。GNOME Office暂时还没有参加这个技术委员会,但是他们表示会根据用户的需要来提供对该文件格式的支持。与此同时,有用户通过公开信64的形式呼吁Corel也将OASIS Open Office XML格式作为WordPerfect的本地文件格式。



通过本文,相信读者可以对OpenOffice.org XML文件格式规范本身,及其由来、现状和未来的发展方向有了一个初步的了解。OpenOffice.org XML是迄今为止功能最完善、开放性、标准化程度最高的可扩展的办公软件文件格式,并且还将继续向开放、可扩展和标准化的方向前进。了解了OpenOffice.org技术架构和XML文件格式规范,就具有了一定的进行OpenOffice.org开发和应用的技术基础。

然而对于开放源码社区内的OpenOffice.org来讲,拥有技术基础只是必要条件。为了能够更通畅地同开源社区的成员交流,更快捷方便地获取最准确的技术资料,能够为OpenOffice.org开源社区做出更大的贡献,同时也为开发者自身的技术工作创造更广阔的舞台,了解OpenOffice.org开源社区的组织结构、行为规范、和文化风格,及其与其他若干开源社区的联系与协作方式,也是很有必要的。

总之,优秀的软件只能从优秀的软件开发实践中来,优秀的软件开发者也只能从不断的软件开发实践过程中锻炼而不断提高。希望国内的软件开发者能够积极主动地参与国际开放源码社区的建设,提高自己,贡献社会。



本文依据《创作共用约定》之“署名-禁止派生-非商业用途”方式发布,即你可以免费拷贝、分发、呈现和表演当前作品,但是必须基于以下条款:

* 署名:你必须明确标明作者的名字。
* 非商业用途:你不可将当前作品用于商业目的。
* 禁止派生:你不可更改、转变或者基于此作品重新构造为新作品。

对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款。

在得到作者的明确允许下,这里的某些条款可以放弃。

此约定是法律文本(完整的协议)65的简单易读概要。

1 工作流管理联盟,http://www.wfmc.org/

2 OASIS电子政务技术委员会,http://www.oasis-open.org/committees/egov/

3 OASIS法律XML技术委员会,http://www.legalxml.org/

4 OASIS税务XML技术委员会,http://www.oasis-open.org/committees/tax/

5 世界专利组织的XML专利文件格式标准,http://www.wipo.int/pct-safe/epct/xml_world_standard.htm

6 会议论文XML,http://www.gca.org/

7 DocBook,http://www.docbook.org/

8 W3C技术规范的文件规范,http://www.w3.org/2002/xmlspec/

9 Open eBook论坛,http://www.openebook.org/

10 盲人书籍联盟,http://www.daisy.org/

11 国际新闻通信理事会,http://www.iptc.org/

12 投资与金融研究信息XML,http://www.rixml.org/

13 文字编码促进会联盟,http://www.tei-c.org/

14 人力资源XML联盟,http://www.hr-xml.org/

15 商业报表XML,http://www.xbrl.org/

16 Health Level 7,http://www.hl7.org/

17 国际保险业合作研发协会,http://www.acord.org/

18 零售技术标准协会,http://www.nrf-arts.org/

19 SWIFT金融机构交流协会,http://www.swift.com/

20 OASIS通用商务语言技术委员会,http://www.oasis-open.org/committees/ubl/

21 中文办公软件文件格式XML标准研究,http://www.ec.org.cn/2004-05/09/content_1458956.htm

22 基于XML的电子公文格式规范,http://www.egs.org.cn/upload/WG1.pdf

23 中国电子申请类专利文件DTD(试行),http://www.sipo.gov.cn/sipo/ztxx/zldzsqxt/t20040408_27707.htm

24 OpenOffice.org XML项目,http://xml.openoffice.org/

25 OASIS Open Office XML Format TC,http://www.oasis-open.org/committees/office/

26 OpenOffice.org XML文件打包,http://xml.openoffice.org/package.html

27 W3C MathML规范,http://www.w3.org/Math/

28 Dublin Core元数据促进会,http://dublincore.org/

29 W3C SVG规范,http://www.w3.org/Graphics/SVG/

30 W3C XSL规范,http://www.w3.org/TR/xsl/

31 W3C XSLT规范,http://www.w3.org/TR/xslt/

32 W3C XForms规范,http://www.w3.org/MarkUp/Forms/

33 维基百科对“拥抱-扩展-消灭”的注解,http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish

34 互联网上的日期时间,http://www.hermetic.ch/cal_stud/newman.htm

35 语言名称表示国际标准,http://www.oasis-open.org/cover/iso639a.html

36 国家地区名称表示国际标准,http://www.oasis-open.org/cover/country3166.html

37 SHA1算法,http://www.itl.nist.gov/fipspubs/fip180-1.htm

38 RFC2898,http://www.ietf.org/rfc/rfc2898.txt

39 Blowfish算法论文,http://www.schneier.com/paper-blowfish-fse.html

40 W3C XML签名工作组,http://www.w3.org/Signature/

41 W3C XML加密工作组,http://www.w3.org/Encryption/

42 OpenOffice.org XML数字签名和加密规范,http://specs.openoffice.org/appwide/security/Electronic_Signatures_and_Security.sxw

43 OpenOffice.org XML文件格式1.0技术参考手册,http://xml.openoffice.org/xml_specification.pdf

44 OpenOffice.org XML文件格式DTD,http://xml.openoffice.org/source/browse/xml/xmloff/dtd/

45 基于OpenOffice.org XML文件格式的过滤器,http://xml.openoffice.org/filter/

46 Writer2LaTex项目,http://www.hj-gym.dk/~hj/writer2latex

47 libwpd项目,http://libwpd.sourceforge.net/

48 OpenSHORE项目,http://sourceforge.net/projects/openshore/

49 OpenOffice.org XMerge项目,http://xml.openoffice.org/xmerge/

50 OpenOffice.org XSLT文件过滤器规范,http://ui.openoffice.org/proposals/XMLFilterSpec.sxw

51 OpenOffice.org sx2ml项目,http://xml.openoffice.org/sx2ml/

52 OASIS Open Office XML格式技术委员会,http://www.oasis-open.org/committees/office/

53 KOffice,http://www.koffice.org/

54 Arbortext,http://www.arbortext.com/

55 SpeedLegal,http://www.speedlegal.com/

56 Stellent,http://www.stellent.com/

57 Blast Radius,http://www.blastradius.com/

58 CSW集团,http://www.csw.co.uk/

59 Propylon,http://www.propylon.com/

60 ISOGEN,http://www.isogen.com/

61 Toolsmiths,http://www.toolsmiths.se/

62 澳大利亚国家档案馆,http://www.naa.gov.au/

63 RELAX-NG规范,http://www.relaxng.org/

64 给Corel的一封公开信,http://software.newsforge.com/software/04/06/21/1547230.shtml

65 创作共用协议的完整法律文本,http://www.creativecommons.cn/licenses/by-nd-nc/1.0/legalcode

来源: http://blogs.sun.com/GavinLu/resource/deepknowlegeofooo-3.html
----
killall 眼高手低 用心浮躁 浅尝辄止
[Original] [Print] [Top]
« Previous thread
哪位大侠帮解决进入图形界面.急!!!
Linux桌面与办公软件
1
Next thread »
迈向自由办公[转] (推荐)
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 02:08:40, cost 0.19046306610107 ms.