Thursday, December 18, 2008

Extjs与XML的结合应用,组件化的web界面开发

使用JEE架构开发web应用程序的技术人员一定会关心并尽力提高web客户端界面的开发效率。由于web的日益广泛使用,越来越多的商业软件用户倾向采用支持HTTP协议的web客户端界面。原因是用户无需再安装客户端软件并可以随时随地通过互联网使用应用软件。

传统的桌面软件的界面开发都采用与开发工具整合(IDE)的界面组件设计器来完成软件界面的设计与实现,并已经有大量丰富的设计工具软件和资源可以使用。使开发人员的界面开发工作变得容易与高效。

Web界面开发有别于传统的桌面软件界面开发,其中涉及的标准与技术很多而且复杂,拿一个JEE的Web界面开发所使用到的技术为例,其中就包含以下的技术:

HTML/CSS, Javascript, DHTML, JSP/Servlet, XML, 不同浏览器的兼容性等,

这些技术本身都各不一样,需要全部掌握才可以熟练开发;而且,到目前为止,还没有那一个集成开发工具可以把这么多的技术成功融入到可以独立使用的组件里,象桌面开发那样。

不过使用AJAX技术的一些javascript框架的发展使得Web界面开发也可以组件化的需要可以得以满足了。这就是

Extjs与XML的结合应用,组件化的web界面开发

Extjs 是一款优秀的应用Ajax的javascript组件框架,这款框架是一个开源的框架,前身来自Yahoo的UI开源javascript库。而Extjs的开发者把它作进一步的发展,使得这个javascript的框架与UI的HTML界面元素结合并提供更丰富的组件化开发。要取得这个框架或者详细的文档资料,可以访问其网站 http://extjs.com

XML就不作详细介绍,这是一个互联网的信息媒介标准,并日渐大量使用在现在的信息系统开发中。这里要介绍的是如何使用XML作为数据的传输格式与组件化的Extjs框架结合使用,使得Web界面的开发效率、性能与功能都得到提高。

我们看一个十分普遍而简单的常见例子,开发一个城市名称下拉菜单

XML数据
=================================

<locations>
<location><key>1</key><value>北京</value><location>
<location><key>2</key><value>上海</value></location>
<location><key>3</key><value>广州</value></location>
</locations>


Extjs 的数据存储
=================================

locationStore = new Ext.data.Store({
// load using HTTP
url: 'util.html',
baseParams: {act:'loadValueList', id:'location'},
reader: new Ext.data.XmlReader({
totalRecords: 'results',
record: 'listItem'
}, [
{name: 'key'},
{name: 'value'}
])
});


Extjs 的下拉菜单组件
=================================

localeCombo = new Ext.form.ComboBox({
mode:'local',
store: locationStore,
value: 'en',
hiddenName: 'locationId',
valueField: 'key',
displayField:'value',
width: 130,
triggerAction: 'all',
forceSelection:true
});


这是一个非常简单的例子,把城市的名称显示为一个下拉菜单,供用户在web的表单里选择。这个简单的例子是为了演示使用Extjs可以把一个下拉菜单的组件分为数据、模型和视图,跟Web的MVC框架是一个道理,不过这是在客户端。

这样做可能会使得客户端的组件开发变复杂了,但好处是可以把组件的显示与数据绑定分开。我们知道web界面的开发的一个最头痛的问题是如何使相同的一个组件在不同的浏览器下能够显示相同的特性,具有相同的行为。Extjs把数据绑定抽离出来,的确解决了这个问题,同时带来的好处是数据与组件显示的可重用。

这是开发专业的web界面与富客户端rich-client应用程序的必须。

Extjs目前支持两种格式的数据,JSON与XML,JSON是JavaScript Object Notation, 就是一种用于JavaScript脚本的数据传输处理格式。这种格式比XML简单,处理起来相对容易,也是Extjs推荐的。不过使用XML就更为标准。

Sunday, December 7, 2008

发布基于OpenCms网站内容管理系统的网站

发布基于OpenCms网站内容管理系统的网站

www.tongtaipawn.com 广东省通泰典当行

该网站使用OpenCms7 开发, HTML采用div+css的代码布局以便更容易控制样式和对搜索引擎友好

网站提供了一个方便典当行发布黄金和白金的典当价与断当价格的工具,一个访客与典当行的问答论坛。这两个功能可以帮助典当行把最重要的业务信息及时地与用户通过互联网进行交流。

Sunday, November 2, 2008

database design - Key Value Pairs

As we know there is some key value pairs (KVP) using in database design. And it is very common in lots of projects. I forget what the actually purpose is at the moment. But I feel that some KVP design in commercial software product will make the maintenance and development a pain.

The reason is simple, developer needs to convert the key to value in SQL or Java class. Here is a sample.

KVP for language

1;"English"
2;"French"
3;"German"
4;"Spanish"
5;"Japanese"
6;"Russian"
7;"Korean"
8;"Mandarin"
9;"Cantonese"
10;"Other"

For the language storage, we save key in module table like language skill, candidate master. When we retrieve the data for candidate or language skill, we need to convert the language key to value so it displays the right text on browser. On the other side, when user searches data with language, like “German”, it needs to convert “German” to “3” so that query can indentify the language key in record.

For this case, I think the KVP is useless. It makes search more complicated.

I remembered that I discussed with some experienced DBA about this long time ago. The one purpose of using KVP in SQL database design is to optimize the storage of data, to save hard drive space. Now a truth is hard drive and memory becomes much powerful and large than before. I think software design is stepping out the time of hardware bound so developer can focus on software creativity than saving hardware resources.

Of course, it doesn’t mean we just throw all KVP in database design. But we had better to keep in mind to change the software design from computer oriented to business oriented.

Monday, September 22, 2008

伴随网络成长的一代

转载:阿根廷《民族报》

现在青少年的房间里大多会出现这样的场景:开着电视和电脑,iPod的音量调到最大,作业本打开着,同样打开的还有电脑屏幕上的许多“窗口”,google网站显示着搜索结果、聊天页面正在闪烁。这就是现代青少年“做作业”的情景。

“一心多用”的本领是新一代人的集中特点。这是看电视时“跳过广告的一代”,他们将这一本领衍生到了从手头的一件事情跳到另一件事情,学习、工作、人际交往、等一样也不耽搁。他们的父母和老师们总是抱怨:“这些孩子好像从来不会从头到尾地完成一件事情,不会坚持不懈。要他们对一件事情保持长久的兴趣或承诺很难。”

1984年到到1995年间出生的孩子现在年龄在12岁至24岁之间。他们的生活离不开电脑,他们与电脑差不多时间诞生,并在互联网的陪伴下成长。尽管这待人因地域不同而有一些差别,却已经成为一种全球现象。

这一代的年轻人更青睐时间灵活,团队优秀、气氛良好的工作。他们很少对所在的公司从一而终,不喜欢受约束,善于抓住机会。因此,他们会毫不犹豫地辞职去休假,然后开始期待已久的旅行或者参加一项对他们来说更刺激的活动。

与网络亲密无间

现在很多年轻人习惯在聊天框中写上一个小提醒,例如“我在吃饭”、“我去洗澡”等,总之永远也不会与对方失去联系。因此,这一代年轻人“需要时刻保持联系”,这与之前几代人的隐私观念大相径庭。他们通过博客毫不费吹灰之力地展现自己,尤其是照片博客。在这一代人的生活中,电脑取代电视的趋势逐渐明显。面对电视的被动性,这些年轻人更愿意选择具有互动性的新兴传媒。

Ubuntu linux的使用感受

使用了Ubuntu linux 8.04操作系统近两个多星期,现在写点使用体会来说一下我对这款开源操作系统的个人意见。作为体会,需要一个作为比较的其他操作系统,我之前使用过其他版本的linux(SuSE, Fedora),不过如果拿linux的各个不同发行版做比较,就象拿一对双胞胎来比较长相,他们的差别不会十分明显。因为我没有使用过Windows Vista,所以就用最长适用的windows xp来比较了。

Ubuntu的速度比xp快

毫无疑问,从系统的安装到启动到使用的整个过程,都是Ubuntu的速度比较快。而且在硬件兼容性方面,Ubuntu已经跟xp相当了,这是为什么安装过程可以很顺利并启动后各项硬件都工作良好。当然,我的xp使用很久,安装了很多的软件,启动时会有更多的程序需要加载,比如:杀毒软件,手机同步,IM等,而Ubuntu则没有。不过即使是打开浏览器,运行java,开启Eclips之类,都是Ubuntu的较快。而且可以明显体会一点,无论在使用多长的时间,在内存足够的情况下(我的机器是1.5G内存),打开程序的速度始终是Ubuntu的快而且不回有变慢的现象。

Ubuntu的桌面比xp炫

之所以使用“炫”这个字眼,是因为我开启了Ubuntu的3D和其他效果,这使得在Ubuntu下操作桌面和窗口变得很有趣和cool,而xp就明显没有这种乐趣。当然,这种效果是否真的十分实用,我倒不这么认为。不过在人们使用很长时间的电脑面前,能够提供操作的趣味,是一个很好的改进方向。但不是取胜于xp的充分条件

Ubuntu的应用比xp丰富

这里所指的应用是指执行不同任务的软件,得益于开源的策略,大部分的软件在Linux上都免费提供,你可以很容易在连接了互联网的电脑上安装你想要的各种软件,完全免费而且工作良好,当然,这也造成Ubuntu很依赖internet,不过现在我也很少使用不联internet的电脑。安装软件需要使用新立得软件包,或者使用命令,这对普通用户有点难,不过可以学会。所以我只是花了总计一天左右的设置,就基本地让Ubuntu成为我可以工作的电脑了。

另外,Ubuntu与windows的互操作性也有了很大提高。我的两个磁盘分区在不经过任何调整的情况下,可以良好的被Ubuntu访问和操作,数据可以共享。这一点也是我可以不用切换到xp的原因。

然而,我在写这篇blog时是在xp下面的,我又切换回来了,是因为

xp的第三方商业软件比Ubuntu多

这是一个很明显的优,Ubuntu的优点也恰恰是它的一个有待发展改善的缺点。因为开源免费,坦白讲,大部分优秀的第三方商业软件都不原意提供Linux平台的版本。为什么?很简单没有利润的事情,从来都不容易让人提起长久的兴趣。所以Ubuntu下的软件大多都很简朴,有时很容易找到bug,这对于商业应用,是致命的。在windows下,各个软件商其实已经形成了很好的共生关系(不管微软有多成功而且比较霸道,无法否认,很多软件商在这个平台上生存着),所以每个软件产品在windows下能够一个持续的利润保障,使它可以发展到比较完善的地步。而在Ubuntu下,软件好像是在街市摆摊的白菜,没有一个统一和良好的保障。他们之间的互操作性就更不用说了,是有待更大的改善。

xp的操作比Ubuntu更简便

虽然我很喜欢Ubuntu的操作,这就像操作一台专业的数码相机和使用一台普通傻瓜相机的感觉。在xp上我不需要担心我的这项操作会否失败。 而有时我在ubuntu上做拷贝、黏贴的操作,却会有失败的可能。不过我相信这一项可以在以后的版本中得到改善。

所以目前, 我还是要使用xp,虽然我很喜欢Ubuntu。

ClientVision CRM 客户关系管理系统

软件系统后台采用Spring+Hibernate+Postgres+eXist XML DB,前端界面采用Extjs的ajax框架,适合企业建立基于web的客户管理应用。该系统支持多种语言,包括数据与操作界面(目前为中、英文)



[功能区]

[桌面]


[记录御览]


[工作区]


[邮件工具]






Ajax, 客户端技术的又一次升华

从1999年开始,互联网的各种新技术催生了很多的以IT技术为创新动力的公司,从美国的硅谷出发,席卷全球。新技术的产生是件令人兴奋的事情,至少为我们的生活制造一些新玩意。当时的Java applet技术、DHTML、XML、Flesh等属于运行在浏览器上的各类技术,我称为前端技术(Front-end technology),的确使得很多拥有创业冲动的人尝试了开创IT公司。现在想来,这些技术其实一直在不断地扩大着它们的应用范围(除了Java applet),虽然许多当时创办的公司现在已不复存在,然而,也造就了一些世界级的新公司。

在过了差不多7年的时间,这些不断扩大应用范围的技术,正经历着又一次整合和升华的过程。不过,这次人们会理智得多地对待它们,至少,更倾向于它们的实用性和对现有技术的影响。Ajax全称为「Asynchronous JavaScript and XML」(非同步JavaScript和XML),是一种用于创建互动式网页的技术。光是看这个技术的名字,就知道这并不是才刚冒出来的东西,至少在互连网第一次热浪时就已经有了。只是这次因为某些著名的IT公司的成功应用例子,如:Google Maps,而使人们的注意力又回来了。

Ajax是多项技术的一次漂亮的汇合的结果,这也是可以理解的。在7年前因为互联网的热浪早就了许多的新玩意,然而直到现在,这些新玩意才慢慢地被人们了解并开始找到实用的方向。为什么“非同步JavaScript和XML”会有不同一般的效果呢,道理很简单,因为人们一直希望提高网页的交互性能和美观性,并使得企业可以借助如桌面应用程序一般强大的浏览器端技术把业务延伸到客户那里去。所以,我可以打赌,Java applet将很快退出舞台,原因是它太难看了,难以满足人们的美观追求。Ajax的确是集合了在某些方面都最为成功和通用的技术成果,Javascript-是国际的通用的网页脚本语言标准,这是一个OO的优秀的语言;XML-这个不用说了,我认为是IT技术的一个重要发明之一,它至少将继续在后面的数十年里发挥巨大作用。

现在要看清楚Ajax的全部还为时尚早,我个人认为这项技术有望把多种已经发明多年的但彼此独立的技术用更为紧密的方式应用起来。这听起来很不错,是的,想想你现在使用网络地图的快速和便捷,就知道这不是假话。我们拭目以待,信息将更为快速和便捷的方式呈现在你眼前。

企业内容管理系统-概念篇

CMS是Content Management System的缩写,意为"内容管理系统"。
CMS是如何应运而生的
随着网络应用的丰富和发展,很多网站往往不能迅速跟进大量信息衍生及业务模式变革的脚步,常常需要花费许多时间、人力和物力来处理信息更新和维护工作;遇到网站扩充的时候,整合内外网及分支网站的工作就变得更加复杂,甚至还需重新建设网站;如此下去,用户始终在一个高成本、低效率的循环中升级、整合……

于是,我们听到许多用户这样的反馈:

  “页面制作无序,网站风格不统一,大量信息堆积,发布显得异常沉重;
   内容繁杂,手工管理效率低下,手工链接视音频信息经常无法实现;
   应用难度较高,许多工作需要技术人员配合才能完成,角色分工不明确;
   改版工作量大,系统扩展能力差,集成其它应用时更是降低了灵活性”

对于网站建设和信息发布人员来说,他们最关注的是系统的易用性和功能的完善性,因此,这对网站建设和信息发布工具提出了一个很高的要求。

首先,角色定位明确,以充分保证工作人员的工作效率;其次,功能完整,满足各门道"把关人"应用所需,使信息发布准确无误。比如,为编辑、美工、主编及运维人员设置权限和实时管理功能。

此外,保障网站架构的安全性也是用户关注的焦点。能有效管理网站访问者的登陆权限,使内网数据库不受攻击,从而时刻保证网站的安全稳定,免于用户的后顾之忧。

根据以上需求,一套专业的内容管理系统CMS应运而生,来有效解决用户网站建设与信息发布中常见的问题和需求。对网站内容管理是该软件的最大优势,它流程完善、功能丰富,可把稿件分门别类并授权给合法用户编辑管理,而不需要用户去理会那些难懂的SQL语法。

CMS是如何发展的
内容管理从2000年开始成为一个重要的应用领域,这时.COM和B2B, B2C等经历了资本和市场的考验及洗礼,人们重新回到信息技术应用的基本面-如何提高竞争能力,而内容管理恰恰能够通过对企业各种类型的数字资产的产生、管理、增值和再利用,改善组织的运行效率和企业的竞争能力,企事业单位也开始认识到内容管理的重要性。
从企事业单位信息化的观点来看,以下因素导致对内容管理软件的巨大需求:
(1) 知识是企业的财富。在Internet交互过程中,只有十分之一涉及销售,其他十分之九都和信息交互有关,员工的知识获取越来越依赖于互联网,特别是在电子商务的个性化环境中,客户为了做出购买决定,需要智能化地获取信息,不仅仅是商品的数量和价格,更重要的可能是产品的手册、安全保证、技术指标、售后服务、图片文件等等。
(2) 信息的及时性和准确性。无论在企业内网还是外网,信息的更新越来越快,企事业单位的信息生产量越来越多,且呈现成倍增长的趋势,企事业单位更需要的是一个功能强大、可扩展的、灵活的内容管理技术来满足不断的信息更新、维护,这时如何保证信息的准确性和真实性将越来越显得重要。
(3) 企业内外网统一的需求增长。随着企事业单位信息化的建设,内联网和外联网之间的信息交互越来越多,优秀的内容管理系统对企业内部来说,能够很好地做到信息的收集和重复利用以及信息的增值利用, 对于外联网来说,更重要的是真正交互式和协作性的内容。
国外从事内容管理软件研发的主要厂商包括Vignette,Interwoven, BroadVision, Openmarket,ATG, Allaire, Documentum, Hummingbird等,这些公司CM产品和解决方案专业性很强,大多基于J2EE等平台,功能丰富,主要面向企业级用户,是CM市场的主要厂商。还有一些更窄的专业厂商提供内容管理某个阶段需要的功能,如Verity 提供知识检索,Micromedia 提供内容创作平台,Akamai和Inkitomi 提供内容分发管理技术等。与此相反,Microsoft, IBM, Oracle等公司提供通用平台性CM解决方案。但是目前CM市场仍有很多不完善的地方,包括:
在这个全新的市场中很难找到一个CMS满足用户的所有需求。
有些CMS只是单纯的信息发布工具而已,称不上内容的收集和再利用更谈不上知识管理的概念,最多只是一组网站建设工具软件而已。
所有产品的可视链接都非常差,只有极少数厂商能够提供可视软件,这些软件都不是交互式的,不能用作管理工具。
CMS都有可能包括些什么?

隐藏在内容管理系统(CMS)之后的基本思想是分离内容的管理和设计。页面设计存储在模板里,而内容存储在数据库或独立的文件中。 当一个用户请求页面时,各部分联合生成一个标准的 HTML 页面。

一个内容管理系统通常有如下要素:

文档模板
脚本语言或标记语言
与数据库集成
内容的包含物由内嵌入页面的特殊标记控制。这些标记对于一个内容管理系统通常是唯一的。 这些系统通常有对较复杂的操作的语言支持,如 Python, Perl, 或 Java 等。

内容管理系统对站点管理和创造编辑都有好处。这其中最大的好处是能够使用模板和通用的设计元素以确保整个网站的协调。 作者只需在他们的文档中采用少量的模板代码,然后即可把精力集中在设计之上的内容了。要改变网站的外观, 管理员只需修改模板而不是一个个单独的页面。

内容管理系统也简化了网站的内容供给和内容管理的责任委托。很多内容管理系统允许对网站的不同层面人员赋予不同等级的访问权限,这使得他们不必研究操作系统级的权限设置,只需用浏览器接口即可完成。

其他的特性如:搜索引擎、日历、Web 邮件等也会内置于内容管理系统 CMS 内,或允许以第三方插件的形式集成进来。

商业用户使用开源产品的好处

最近,一位IT界的朋友与我讨论使用开源项目的利与弊。我在这个行业干了有些年头,接触过许多的商业产品和开源产品,算是对其有一点认识。

很多人认为开源的最大特点(好处)是免费(当然,这是其中之一),但其实对于用户来说,开源软件就是免费软件的认识是不正确的。特别是很多人现在会对免费的东西表示怀疑,怀疑其质量,怀疑其安全性等,都为开源软件的使用蒙上不白之冤。

其实开源的产生并不是为了免费或者恶性竞争的目的,

比较商业非开源的软件来说,开源有这些特点:

  1. 源码开放,可自由修改;
  2. 可自由参与开源项目,并作出贡献和发挥影响力;
  3. 可自由的使用开源产品,你可以把整个或部分的开源资源包括到你的产品里,并提供给用户;
  4. 可自由地共享产品,不受任何公司或个人的控制;
  5. 可自由地选择不同的公司来对开源产品做升级或技术支持服务;
  6. 可自由地在开源项目基础上产生不同的版本,因应实际的需要;
  7. 开源产品因为没有许可费用,产品面对市场的压力大大减少。项目开发人员可以提供更好的性能优化,不必为了赶时间"deadline"而草草推出市场;
  8. 开源产品提供(一般情况下)一个透明开放的交流社区,可以供不同的人获取信息和参与开发;

总结一点,商业用户使用开源的最大好处是自由,你可以自由的决定使用的成本和时间,这是非开源产品所无法做到的。

当然,事情总是相对的,开源项目有利也有弊,就看你怎么去使用了。对于企业或商业用户而言,选择好的开源产品和相应的服务商是保证你安全和可靠的使用技术的关键,而不要轻易只是看到免费或者便宜的服务。

商业网站设计的经验之谈

做了大约5年的面向Web的系统设计,跟大家分享一下一些经验。

如今的 Web 设计已经吸取了前人的经验和教训。好的站点倾向于简化和快速,同时在功能上有所提高。

人们通常在花时间访问某个网站时,并未将它当作艺术作品来赞赏。而是为了获得有关产品的信息,或者有一些技术问题需要咨询,或是阅读有关开发商的期刊。所以网站的设计应该尽量清楚和有条理,以便他们能够容易地找到所需信息。

因此,建议在设计面向广大网络浏览者所使用的商业网站时,仔细地考虑下面的因素:

1.明确的流程
网站就是一本可以交互的书,你需要合理地安排网站的内容,并做到让浏览者理解你的流程。这样,当
浏览者首次接触新网站,也很容易学会使用。

2.了解您的观众
网站既然不是艺术品,就不要孤芳自赏。了解你的网站的“观众”,并有针对性地为他们的习惯设计网站,因为网站是给观众使用的。不要以为自己认为合理的东西,就一定适合你的“观众”。在设计初期,可以让目标观众评估一下你的设计。
3.为您的观众提供所需的信息
很多网站都野心勃勃,想把什么东西都做在网站上,这样只能是失去重点,信息堆砌而没有主次。“观众”并不需要找的东西放得太多,就会消磨他们的耐心。现在的数据分析表明,一个网站如果没有办法让“观众”在15-20秒内定为他们所需要的信息,就可能失去吸引“观众”的能力。

4.使用清楚易懂的内容
如果不是专业网站,尽量使用简单的词句,或者对于专业的词语赋予解释,这跟写一本科普手册一样的道理。文字和版式的设计尽量使用“清晰而明锐”的风格设计,容易吸引阅读和快速浏览。

5.保持简洁和一致性的风格
页面元素过多不是一个好的设计,“观众”容易产生视觉疲劳和无法留下统一印象。毕竟现在是一个资讯爆炸的时代。
6.牢记设计和测试站点的可用性
很多表面看上去设计不错的网站,在实际使用时有很多bug,并且有链接重复或导航不完善等问题,多做测试并尝试一些非正常操作,你会发现问题。一个网站的可用性是交互设计的表现,比美工设计更为重要。
7.尝试新的东西
任何好的设计都会过时,不要重复再重复原来的设计,应该大胆创新,给“观众”一点惊喜是网站吸引的另一大原因。但,这并非只是视觉的创意,而是交互性与美工的结合。
以上的几点都是在设计的网站在投入使用后,影响到实际效果的重要元素。

XML数据库开发网站的优缺点

使用XML数据库开发网站是一个很新的技术,需要掌握XML/XSL/XQuery/XUpdate等技术。
而且,由于基于XML数据库应用开发的例子还不多,因此,需要程序员做的工作很多。

与其他网站开发技术相比较,

[优点]
能够更接近业务的逻辑,使用树形结构组织网站的各种数据和多媒体资源
半结构化的XML数据可以比表格更加灵活,甚至无需定义字段属性,提高开发速度和伸缩性
强大的XQuery查询语言配合XSL可以产生任何你期望的输出(XML/HTML/WML/PDF等等)
XML数据本身也是一种文档(document),可以直接阅读和编辑,日常的数据维护可以很灵活(当然,某些人可能很反对这种既是数据又是文档的做法)
XML已经成为互联网的信息媒介,跨平台,被各种系统支持,对网站与外部系统的整合很有帮助

[缺点]
新技术,很多标准在制定中,技术派系众多
数据库的成熟度还有待提高,性能的考验需要时间
作为未来Web技术的主要基石,XML数据库已经成为众多数据库厂商的制胜法宝。

XML, 把文档数据化的魔棒

我给大家介绍一个应用XML的实践例子,供大家参考和讨论.
XML作为计算机处理文本文档(通常是指供人阅读的文本)的有力工具,它的"神奇"在于能够使计算机"读懂"文本文档.就拿以下一则我在地铁新快线杂志看到的一条信息为例:
--------------------------------------------------------------------------------
自 驾车到南沙客运港路线一:广州大道?洛溪桥?迎宾路--南沙港--沙湾大桥?南沙大道路线二:天河?华南快速干线?迎宾路?沙湾大桥?南沙大道?南沙港停 车:设有1000和500平方米两个停车场,费用预计5?10元/次,有夜保。航线/航班:除每天与香港对开12个白天航班外,还将加设2个夜间航班。同 时考虑开通南沙至澳门、香港新机场、香港迪斯尼乐园等航线。耗时(单程):约两小时。费用(单程):约120元。优点:耗时少、费用低,上船后有港币兑换 处,可直达中港城购物中心。中心内设中、西餐厅,服装、手表、通讯器材、化妆品、摄影器材、金饰,国际知名品牌一应俱全。缺点:公交配套未完善,必须自驾 车
-------------------------------------------------------------------------------
很明显,这是一则简单的旅游指引,游客可以很容易获得相关的信息数据, 包括线路一,线路二,停车,行程时间和优缺点.因为我们具有阅读的能力.
但是,计算机面对这样的文本却很笨.例如我想让机器找出线路一有几个站点和站点中是否有南沙港,你认为它能为你做吗?很明显,计算机一筹莫展,它除了告诉你文件大小,创建日期和属性外,没有更多的其他数据信息.而这就连我小学毕业的姑妈也能轻易回答.
原因很简单,
计算机需要你首先告诉它如何处理这份文本,才可以回答你的要求.(虽然我们都承认计算机发展惊人,但它处理数据的能力还是很幼稚)
现在,我使用标记,也就是XML,来帮助它"读懂"这份文本.改变如下:
----------------------------------------------------------------------------
<旅游指引><标题>自驾车到南沙客运港<路线>路线一:<站点>广州大道?<站点>洛溪桥?<站点>迎宾路--<站点>南沙港--<站点>沙湾大桥?<站点>南沙大道<路线>路线二:<站点>天河?<站点>华南快速干线?<站点>迎宾路?<站点>沙湾大桥?<站点>南沙大道?<站点>南沙港< 备注>停车:设有1000和500平方米两个停车场,费用预计5?10元/次,有夜保。航线/航班:除每天与香港对开12个白天航班外,还将加设2 个夜间航班。同时考虑开通南沙至澳门、香港新机场、香港迪斯尼乐园等航线。耗时(单程):约两小时。费用(单程):约120元。优点:耗时少、费用低,上 船后有港币兑换处,可直达中港城购物中心。中心内设中、西餐厅,服装、手表、通讯器材、化妆品、摄影器材、金饰,国际知名品牌一应俱全。缺点:公交配套未 完善,必须自驾车
--------------------------------------------------------------------------------

以上的修改并没有改变文档的结构和内容,只是增加了标记。之后,你再把它存成XML文档,就完成文档加工.你可以使用XML搜索引擎,来处理你的要求啦.我使用一个自己编写的XML工具来处理这些信息,使用XPath查询如下:

[XDS cmd]>search -c /tmp -d test01 -xl /旅游指引/路线 -xp //路线[text()="路线一:"]/站点<站点>广州大道<站点>洛溪桥<站点>迎宾路<站点>南沙港<站点>沙湾大桥<站点>南沙大道
^----找到了线路一有几个站点
[XDS cmd]>search -c /tmp -d test01 -xl /旅游指引/路线 -xp //路线[text()="路线一:"]/站点[text()="南沙港"]<站点>南沙港
^----找到了南沙港当然这只是一个简单的例子,使大家可以在实际商业应用上使用XML作更有意义的事。

我有理由相信XML是一根未知的魔棒。也希望我们能从实际应用出发来激发自己的创造力。为商业发展服务。

Saturday, July 12, 2008

Extjs使用与开发 - 面向对象编程

Extjs 是一款优秀的开源javascript+ajax框架,使用它你不但可以创建有丰富用户交换功能的网页(web-based rich client)应用,而且,你也可以通过它来实现面向对象编程,使得自己的代码具有高度的复用性(usability)。

也 许很多程序员不了解javascript的面向对象编程OOP,认为它跟C++或者Java相比,并不具有完全面向对象的能力 。其实,你完全可以运用许多面向对象的技术到javascrpt中,并使你的页面程序具备强大的能力。我最近就开始使用Extjs来为一套Web- based CRM(客户关系管理)系统开发一个强大而友好的操作界面,并且通过扩展Extjs创建新对象并重用到不同的功能中。下面就是一个例子。

首先,我打算创建一个对象Object,叫做EvaluationMasterScreen。这是一个带有下面这些东西的输入屏幕:

  • 一个用户数据输入表单form
  • 一个容器面板panel
  • 一些读取服务器上数据的store
  • 一些自带参数properties

我确定这是一个很简单的对象,可以扩展Ext.component对象

EvaluationMasterScreen = Ext.extend(Ext.Component, {

//自定义参数
locale: 'en',
allowSave: false,
allowDelete: false,

//初始化函数
initComponent: function(){
... ...

},

//表单下拉的数据,在服务器上读取
gradesStore: new Ext.data.Store({
... ...
})
});

基本的结构就是这样子,是不是很简单。这样就定义了一个用于产生一个标准屏幕的对象,当你想创建这个对象的实例时,

var evaluationScreen = new EvaluationMasterScreen({
id: 'evaluation-master-screen',
objectId: id,
locale: locale,
allowSave: myPermissions.check('candidate','save'),
allowDelete: false
});

创建将调用初始化函数,并赋予实例参数值。