基于xml的用户界面标记语言

 

http://www.infosecurity.org.cn/article/xmlsec/base/22720.html

http://www.infosecurity.org.cn/article/xmlsec/base/22722.html

 

基于xml的用户界面标记语言

 

文章出处:www.ccidnet.com 作者:张孟     发布时间:2004-12-31   点击:0
 

  基于xml的界面资源标记语言,允许用户使用xml技术,将界面元素(例如对话框,菜单,工具条等等)以及相关信息写入xml资源文件中,在程序运行时,动态载入。从而赋予了应用程序更为强大的界面处理能力。采用基于xml的界面标记语言,开发者可以获得如下的好处: 
  ◇当资源改变的时候,无需重新编译和链接应用程序 
  ◇将资源和代码分开的策略,使程序的设计和开发更具灵活性 
  ◇在运行时,可以动态地改变资源文件,从而改变应用程序的风格和外观 
  ◇使得用户界面程序可以跨平台运行 
  ◇实现外观,数据,以及程序逻辑的层次性划分 

  由上可知,基于xml的用户界面标记语言,能够为用户应用程序的开发模式带来近乎革命性的变革,尤其是微软在msdn网站上通告了自己的 xaml(xml application markup language)语言之后,更引起了大家对这项技术的广泛关注。 

  下文就针对目前最受关注的两种用户界面标记语言xul(xml user interface language)和xaml进行一些介绍和对比,希望能够引起大家对这项技术的分析和讨论。 

 
 1.什么是xul 
  xul也许是历史最久远也最广为人知的xml-based gui language,它由mozilla基金会创建,其目的是为了快速开发mozilla项目的界面工作,目前mozilla suit的界面都是由xul实现的,包括mozilla browser suite, 轻量级的浏览器firebird, 邮件客户端thunderbird 以及netscape browser suite。 safari 

  同样实现了 一些xul,另外还有一个项目(luxor toolkit)使用xul为 java swing定义用户接口,其他的xul实现可以参考xul alliance。 

  2.xul 简述 
  2.1 xul的结构 
  xul是一种标记语言,用来定义用户界面元素的布局,而界面的外观(颜色,字体等等)可以通过属性以及css和图片定义。 

  元素的行为则通过脚本ecmascript定义,也可以使用编译的从c++通过aom(是w3c的dom扩展)与元素交互。行为与xul元素的绑定是 通过xbl技术实现的,该技术是由mozilla发布的,并已经向w3c提交。因此通过css或者dom,便可为特定的元素绑定外观和行为。 

  目前xul还不支持svg,xforms,smil以及其他的ui相关的w3c技术,当然,没有理由以后还不支持,实际上目前已经有项目正在使 mozilla支持svg(要注意的是,在xaml中,微软使用了自己的矢量图像语言wvg,并且和svg并不兼容,同样,还有一个和smil很相像的动 画语言)。 

  xul语言的tags由下列四种元素组成: 

  ◇布局元素(比如hbox,vbox,grid以及stack等) 
  ◇构件widgets(比如menulist,menubar,toolbar以及button等) 
  ◇命令,加速键(比如command以及keyset) 
  ◇xul模板(为ui绑定后台数据,使用rdf) 

  在mozilla中处理xul文件的过程,与显示一个html页面的过程很相似(尽管没有surrounding window chrome),首先是xml文件被解析,将xul文件中的标签构建为一棵dom(document object model)树,在这个过程中,相关联的css将被用来定义标签的外观,在建立布局对象之后,便可以将结果显示给用户了,例如是一个对话框,或者是一个窗 体。 

  究其本质,xul的核心还是比较简单的,它的目的便是采用xml语言对对话框以及窗体上gui元素及其布局进行描述。 

  因此,要想真正地使用xul技术,便不可避免地需要下列技术的支持:css,dom,rdf,xml,xbl,js以及xpcom。 

  2.2 xul的装载 
  载入xul文件可以大致分为五个步骤: 
  ◇xml文件被用来构建了一棵dom树 
  ◇css被用来定义这棵dom树的外观 
  ◇xbl通过css被附加,用来定义构件(widgets)的实现。有些构件采用c++定义,有的采用xbl/js定义,还有一部分是两者的混合。 xbl对于构件的实现是非常重要的(除非你要自己设计自定义的构件)。 
  ◇js可以在xul文件中对事件进行处理,许多服务都可以通过xpcom封装被js调用。这也正是mozilla工具包定义的核心所在,包括文件i/o,网络装载,拖拽功能(drag and drop)等等。 
  ◇df提供了为用户界面绑定后台数据的功能。可以把它当作一个信息(也许存储于数据库中)与用户界面的胶水层。 

  mozilla还为xml文件和脚本提供了一种二进制的方式,从而避免了对xul文件进行不必要的多次解析,css的风格定义是极为快速的(也就是说 是高度优化的),而js也是不错的,速度也很快,主要被用来绑定用户界面和后台的服务(也许是c++实现的)。 

  当然,使用xml+css的引擎也有问题,那就是用户希望gui的窗体能够立即显示,与此对照的是,也许浏览器装载一个网页需要1到2秒的时间用户也 可以忍受。所以从这一点上来说,采用这种用户界面技术的应用程序需要足够快的机器来运行,以弥补构建用户界面所需的额外花销。 

  还有一点要注意的是,与采用预定义的构件相比,使用用户自定义的构件并不会增加系统显示窗口的时间,因为构建xml,dom,定义风格,以及布局等操作的消耗,都与是否采用了预定义的构件无关。 

  2.3 xul的实现 
  要实现xul,必须: 
  ◇建造一个xul+css+dom+js的布局引擎 
  ◇实现附加的布局基元(layout primitives),比如spring,strut模型以及popups等,这些附加的布局基元可以和标准的css定义的布局基元进行互操作。 
  ◇实现一个二进制的cache,以便加速xml和js的重载速度。 
  ◇实现一个组件/标签扩展模型,例如xbl,允许xml标签可以被定义为组件,并在其他的页面,窗口和对话框中复用。 
  ◇实现系统其他构件的xml标签支持,例如tree等等,这些构件在html中没有实现。 
  ◇通过某种数据绑定形式(mozilla采用的是rdf),提供后台数据与gui xml文件的绑定。 
  ◇除了本地语言格式之外,还要为js提供一套完整的sdk,支持文件i/o,网络等操作。 
  ◇实现基础构造支持,提供命令运行和命令更新的支持 
  ◇为css和xml实现一种高效的内存缓存,以便实现轻量级的原型复制和共享(可以使用类似“写时拷贝”的语义)。 

  3.什么是xaml 
  微软将在2006年推出的longhorn平台,包括多种技术更新,包括: 
  ◇与下一代sqlserver技术结合的文件存储系统winfs 
  ◇新的表现子系统(presentation subsystem)"avalon" 
  ◇号称是下一代soap的新的通讯子系统"indigo"等 

  而在其avalon子系统中最大的技术亮点便是其推出的界面声明语言xaml(发音为'zammel'), 微软在十月份的pdc(professional developers conference)上发布了该语言的声明,马上引起了广泛的关注,xml-based gui languages在过去几年内发展很快,尤其是mozilla平台的xul(发音‘zool’),被认为是界面声明语言的发展方向。而此次微软推出的 xaml,和mozilla平台的xul有着很多相似之处,因此我们有必要对xaml进行一些了解和对比。 

 

 4.xaml 简述 
  微软的xaml是进入xml-gui竞争的新成员,由于微软对自己产品技术的强力宣传,还是立即引起了众多的注意和评论。 
  由于微软的longhorn要等到2006年才发布,因此xaml也许会在此期间发生比较大的改动。 

  xaml通过xml的语法,使用微软新的基于矢量的图形库(vector-based drawing library)avalon。对于mac程序员来说,avalon和apple的quartz(基于pdf和opengl)很相像,而对于linux程 序员来说,会觉得这种xml+vectors的组合来自kde和gnome的桌面环境。因此可以说,xaml并没有什么新的或者独特的技术。相对新的东西 是,原始的xaml文件可以通过longhorn版本的ie进行浏览,这一点和xul可以通过mozilla浏览器浏览有几分相似。 

  xaml被用来创建画布(canvases,一个用来显示图像,文字以及widgets的区域)、widgets(比如一个button或者 menu)以及shapes(比如圆,直线,贝塞尔曲线等)等的实体,这些元素最初始的外观通过他们的属性来定义(就像xul和svg一样),或者使用一 个xaml特有的'style'元素(element)来定义。元素的行为可以使用任何.net兼容的语言来定义(目前支持c#, visualbasic.net or jscript.net),有两种方式可以将行为与界面元素绑定,一种是将行为的定义(代码)附加在xaml文件中的cdata段落中,另外一种是通过一 个和w3c的dom类似的树状结构对widget进行访问。 

  下面的例子是一个xaml文件的内容,其中包含了c#的代码,可以看到代码都在<def:code>标签中,并且 由<cdata[...]]> 包围,这样解析器便可以在解析xaml文件时忽略该代码段。 

<canvas id="root"
xmlns="http://schemas.microsoft.com/2003/xaml"xmlns:def="definition">
<button id="button1" click="clicked">click me!</button> 
<def:code> 
<![cdata void clicked(object sender, clickeventargs args)
{button1.content = "hello world"; }]]>
</def:code></canvas>


  用户还可以使用.net兼容的语言定义自己的widgets,并在xaml中进行复用。当使用xaml预定义的元素时,比如菜单,按钮等,你可以通过 两种方法进行预览,第一种是对其进行编译,并像其他windows程序一样运行;第二种方法是使用longhorn版的ie进行装载预览。 

  如果你使用c#为widget定义行为,那么不论这个widget是自己创建的还是xaml预定义的,那么这个widget必须要进行编译。也就是 说,如果你想在浏览器之外运行你的xaml widget,那么必须对xaml进行编译。 

  能否通过jscript.net定义构件行为,从而可以在ie中运行不需编译的xaml widget,目前还不明确。同样的,xaml的widget能否嵌入web页面中,xaml中的元素能否通过ecmascript 和 dom编写脚本,以及能否通过css进行样式控制,目前都不明确。唯一明确的事情是:微软避开了所有w3c的建议,比如smil,svg以及dom,而为 xaml实现了一些与上述建议相似但不兼容的技术。 

  在windows程序之外xaml能否获得成功目前还很难说,adobe目前为aftereffects提供了生成xaml的插件,其他厂商是否会跟 随,还需要时间的检验,但steve maine认为xaml将击败其他类似的技术,因为最终用户并不关心平台独立性。目前看来这种观点似乎是正确的,大多数用户并不关心应用程序能否在多种平 台上运行,他们只关心程序能够在他们的平台上运行。macos,linux以及其他的unix系统,甚至包括老版本的windows,都不能运行基于 xaml uis的应用程序。根据以前windows版本的更新情况来看,新版本要想被大多数用户使用,要经过一个很长的时间,在longhorn发布之后,估计还 需要大约3年的时间。因此,xaml要想成为web技术的扩展,还有很长的路要走。 

  

  5.xul与xaml的对比 
  通过上面的描述,可以看到微软的xaml结构是比xul大的多的,xul的初始目的是为了构建mozilla的用户界面以及面向web的应用程序,它 并没有被设计为一个可以写出类似adobe photoshop软件的语言,也就是说,从一开始,xul面向的便是web领域,所以自然而然地便采用了一系列地web技术,比如css和 javascript。web开发人员由于对这些技术都比较熟悉,因此转向xul技术是比较容易和平滑的。 

  而对于xaml,这种技术的转变仅仅影响.net的开发人员,因为xaml所涉及的几乎都是.net的技术,对于web开发人员,这种转变的面临着巨 大的技术鸿沟,因此要想在web领域使用xaml技术,不可避免存在很多困难。 

  目前,xaml和xul的讨论正在互联网上展开,并且这两种技术也都在发展的过程当中,因此要想对它们做一个比较完整的对比是比较困难的。下面仅列出当前状态下,这两种语言的一个简单对比,以供参考: 
         




  

  6.其他xml gui项目 

  目前还有很多xml gui的项目,例如xwt, java gui builder,用于gtk+ 工具包的glade(支持gnome桌面环境),以及支持kde桌面环境的xml gui builder,以及wxwindows的xrc等。 

  

  7.参考资源 
  ◇the joy of xul,peter bojanic 

  ◇www.mozilla.org/projects/xul/joy-of-xul.html 
  ◇introduction to a xul document, dan matejka 
  ◇http://www.mozilla.org/xpfe/xptoolkit/xulintro.html 
  ◇xbl - extensible binding language 1.0, david hyatt 
  ◇http://www.mozilla.org/projects/xbl/xbl.html 
  ◇xbl - xml binding language (w3c note), david hyatt 

  http://www.w3.org/tr/xbl/ 
  ◇xul overlays, ian oeschger and david hyatt 
  ◇http://www.mozilla.org/xpfe/xptoolkit/overlays.html 
  ◇xpcom part 1: an introduction to xpcom, rick parrish 
  ◇http://www-106.ibm.com/developerworks/webservices/library/co-xpcom.html 
  ◇xpconnect (scriptable components), john bandhauer 
  ◇http://www.mozilla.org/scriptable/ 
  ◇creating new packages for mozilla, ian oeschger 
  ◇http://www.mozilla.org/docs/xul/xulnotes/xulnote_packages.html 
  ◇mozilla calendar project page, maintained by mike potter 

  http://www.mozilla.org/projects/calendar/ 
  ◇a brief history of xaml,chris anderson 
  ◇http://www.simplegeek.com/commentview.aspx 
  ◇about creating, building, deploying, and launching applications, from msdn 
  ◇http://longhorn.msdn.microsoft.com/lhsdk/appcore/overviews/appmodel_life_cycle.aspx 
  ◇animation in "avalon", from msdn 
  ◇http://longhorn.msdn.microsoft.com/lhsdk/graphicsmm/overviews/animation1_ovw.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值