华's profile努力工作,享受简单的生活。PhotosBlogListsMore Tools Help

Blog


    March 15

    漫漫器材发烧路(转)

     

                                                          漫漫摄影发烧路

     

     

    原本题目是叫《漫漫摄影发烧路》,可想到几年来虽痴迷于摄影,但每天魂思梦绕的除了机身就是镜头,片子拍了不少,可是以砖墙和报纸居多(为了检验镜头的表现和机身的对焦/曝光精度)。在器材上的投入和所谓“作品”的产出极不成比例,所以一提到“摄影”二字就汗颜不止,干脆改到了现在这个题目。

    这几年在这条路上摸爬滚打过来,又看到周围无数的影友也在重复着和我一样的道路,未免还会碰到我原来的烦恼和痛苦。所以斗胆将我和我熟知的影友的发烧历程总结出来。希望要上路的影友能得到些借鉴。您如果已经是“过来人”了,而且文中所述和您的经历类似,请会心一笑,表明咱们产生了“共鸣”。

    另外要说明的非常重要的一点是,这里所说的影友或发烧友指的是和我一样的广大业余爱好者。咱们共同的特点是:第一,完全是自费发烧(花钱买罪受?);第二,经济并不十分宽裕。判断依据是您最近时常想念的机身或镜头的售价是您月收入的二至二十四倍。而且倍数越大,说明您发烧的度数越高。正是这两个特点,注定了我们广大的影友发的发烧路无比的曲折。如果您用的是公家的顶级器材,或者觉着开始就买“顶级”机身加一套专业镜头并不是很大负担的话,本篇文章肯定就不适用于您了。


    一、上路之前

    大多数人在正式发烧之前都有一定的拍照经验,或用过给家庭留影的“傻瓜”相机,或使用过家里的老式相机,或着借用过朋友的单反相机,甚至你本来就拥有一架带标准镜头的单反相机,但是从来没有想过后来会如此的痴迷。驱动你踏上这条路的动力是多种多样的,或看到了一次摄影展,或看到一本摄影画册,或仅仅看到了朋友拍到的一张风景,你好象一下就被感染了,就象得了流感一样。你开始想我是否也能“制造出”这样的相片。碰巧你刚丛一个旅游胜地归来。看着自己用“傻瓜”相机拍的惨不忍睹的照片,你暗下决心,一定要好好钻研一下“摄影”。


    二、单反相机,一定要单反相机才能搞“创作”

    大凡关于摄影的指南都是这么说的。只用过135“傻瓜”相机的你觉着以前拍的照片不行的原因归结于没有135单反机。买单反机之前你要经过一番考察。这“考察”使你慢慢推开了相机世界的大门,各种品牌型号林林总总,你肯定会感慨于这个世界的博大和你囊中的羞涩。经过了一番痛苦的抉择,你终于下定决心,把你能承受的最贵的一台国产或进口的带标准镜头或标准变焦镜头的或手动对焦/曝光或自动对焦/曝光的单反相机请了回家(***本文尽量没有提到相机的品牌,但“品牌”有可能是在以后使你苦恼的重要因素之一***)。你在不知不觉之中以把双脚踏上了这条发烧“不归路”。


    三、要配齐所有焦距段,最起码是28mm到200mm

    在你用你新买的单反机拍了几卷胶卷以后,发现要出“作品”远不是有单反机就行那么简单。回过头来看名家的作品,好象用的镜头要么是比你镜头广的广角镜头,要么是比你镜头焦距长的的长焦镜头。你恍然大误,原来如此。这是你发烧历程中又一次飞跃(发烧温度的攀升)---你开始关注镜头了,虽然你现在看到的只是镜头的焦距这一项。你开始挖空心思要“凑”齐所有“常用”的焦距段。不幸的是当你在开始买相机时并没有考虑到这一点,所以刚刚“放完血”的你更加苦恼于资金的不足。可配齐广角,中焦,长焦的迫切愿望是那么的强烈以至使你盯上了“便宜”的小口径变焦头。这些变焦头使你用有限的资金完成你的计划。你甚至为找到了这些大变焦比的镜头感到洋洋得意。

    果然,你在镜头上的投资没有白费,你的照片开始有别于你周围朋友拍的留念照了。虽然这可能仅仅是由于你镜头广角端给人的视觉冲击或长焦端较浅的景深给你的照片带来的“与众不同”的感觉。你周围人对你的“作品”的认同和夸赞无疑又给你增添了继续前进的动力。


    四、备用机身,要用专业的标准要求自己。

    再添一个机身的想法此时又滋生出来了。你说服自己的冠冕堂皇的理由是:

    1、频繁更换镜头太麻烦;

    2、可同时使用不同的胶卷;

    3、有一个备用的机身以防万一。

    你试图用这三个理由说服自己但又不愿意深究这三个理由是否成立。因为你心底深处真正的想法是要买一个更好的机身(时下叫机身升级)。可能在你买第一个机身时怎么也想不到会烧到现在这个程度或者当时确实财政吃紧,总之,你认为只有再买一个更高级的机身才能配齐你的“摄影系统”,而如果只有当前这一个机身的话肯定会妨碍你出“作品”。

    经过长时间的紧衣缩食,你终于又实现了你的这个愿望。有着两个机身的你终于有了点“专业”的自我感觉,特别是跟影友们一起去“采风”的时候。可是新鲜感一过,你才发现:

    1、同时带两个机身要远远比换镜头麻烦;

    2、你两个机身很少装不同的胶卷;

    3、好象只有胸前两个机身偶尔互相碰撞会让你感到心疼以外从来不用担心机身会有什么故障。

    慢慢地,你又开始只用一个机身了,当然是更高级的那个。原先的机身在摄影包的底层找到了自己的归宿。


    五、镜头除了焦距以外,还有最大光圈等重要参数。

    你原本以为在器材上的投资已经结束了,可不幸的是这只是你花钱高潮的序曲。

    随着你摄影水平的提高你开始有一些片子要放大一下。原本在五寸、七寸照片上看着很清楚的风景、人物,放大到十二寸左右就难以满足你越来越挑剔的眼光了。你现在也知道了“镜头素质”是怎么回事,越来越注意自己拍的片子色彩还原好不好、有没有暗角、逆光时眩光严不严重......你总是拿着五倍后来又换成十倍的放大镜看底片。你开始意识到刚开始买镜头时只考虑焦距范围可能是最不成熟的行为。虽然你的片子不清晰很有可能仅仅是因为手震或聚焦不实;你的片子色彩还原不好是因为扩片小姐刚跟男朋友分手心情太差,但你还是越来越不满足你那些“低素质”的变焦镜头了。

    这次你确实比原来成熟了,学会了在买镜头之前先找齐所有的资料,反复对比各项参数。还是由于资金的原因,你不得不考虑性能价格比。虽然开始你仍然觉着没有必要买恒定光圈大口径的变焦镜头去追求那大一至两级的光圈,但以拥有很多镜头资料的你后来慢慢发现恒定光圈大口径的的“专业”变焦镜头和那些“业余”镜头的差别不仅仅是大一至两级的光圈,而是镜头光学素质(最起码是在镜头的数据上的)和机械做工的不可比性。这一点在镜头的重量和价格上充分体现了出来。换句话说你觉着现在只有这种镜头才能满足你用十倍放大镜看底片这么高级别的需要。

    “要买恒定光圈大口径专业变焦镜头”的想法刚冒出来的时候着实下了你一跳,因为这将意味者你要用两倍以上于你花在机身上的资金投入去买镜头!这远远超出了你最初机身和镜头投入比例保持1:1的心理底线。况且这钱不是一下能赚的来的......

    然而你现在“中毒”已经太深,你开始每天晚上睡觉都梦到那一两只镜头。经常在陪家人逛街的时候跑到摄影器材商店,“爬在柜台上痴痴地看货架上的‘梦中情人’直到口水流出来”(一位坛友哼哼牛?的妙语)。你终于无法承受这一番痛苦折磨,痛下决心,砸锅卖铁也要买下这镜头。你首先想到的是把你原来的镜头出手。可到了二手器材店你才知道你悉心爱护下的足有九五成新的镜头店主最多能给你五成的价钱。你终于明白了“鸡肋”的确切含义。由于你太需要钱了,虽然你心里痛骂着“奸商”但还是把镜头留给了他......

    当你终于把“梦中情人”拿到手上以后自然是无比的欣喜,虽然欣喜中带有一丝心痛。试拍报纸和砖墙的结果表明这“高素质”的镜头果然不负众望,这使你心理得到了极大的安慰。可在以后的实拍中你越来越发现在80%到90%的条件下这贵了几倍的镜头和你原来的“低素质”镜头并没有明显的差别。毕竟平时拍摄风景而且光照好时小光圈用的多,聚焦不实的时候用什么镜头都不清楚,扩片小姐的心情仍然起伏不定......特别是当你扛着“梦中情人”翻过一个山坡累的气喘吁吁时,你甚至开始怀念起你原来那套已属于别人的轻便的镜头来了。


    六、定焦镜头,你真的需要了!虽然主要是在心理上。

    毕竟你在家看镜头资料和摄影杂志的时间要远远多于你扛镜头满山跑的时间多,而在家时你又忘却了镜头沉重给你带来的不便。不知从什么时候起你在看镜头数据资料和各种测评数据时下意识地转变了立场:你总是不自觉地想寻求你拥有镜头的缺点和不足。就象你爱一个人,她/他在你心目中太完美了,你害怕她/他会有一点点的瑕疵会影响到其在你心目中神圣的形象所以对她/他的缺点有一种神经质的敏感。

    果然,一篇镜头测评的文章把你彻底击垮了:“(此镜头)......拥有近乎完美的光学素质,特别是在......,然而比起定焦镜头来还是有一定的差距......一般严肃的摄影师是不会接受这种为寻求便利而做出的在作品质量上的妥协......”。

    你原来一直以为(特别是经过各种形式的广告的引导)变焦镜头是技术进步的结果,而且其素质已经赶超了原来的定焦镜头。孰不知现在所有镜头厂家设计镜头时用的还是数十年前甚至上百年前的光学公式,而变焦镜头由于其镜片组数多虽几经努力还不能做到象定焦镜头那样好。

    再对比一下定焦镜头的价格,就算买几只镜头也要低于你那支大光圈的变焦镜头。你现在脑子里完全充斥着你的镜头这个可能是唯一的但现在是你最介意的缺点。你越想越觉得你好象又犯了个错误。

    定焦镜头,你真的需要了。虽然主要是在心理上......


    七、中(画)幅,一个新的梦想的开始

    中幅相机一般指的是120相机。在“国产经典双(镜头)反(光)相机”网站( http://www.ChinaTLR.com )的首页有这样一段话:

    “你可能已拥有了一整套相当不错的135相机,这是你花了很长时间建立的系统,因为你买每个镜头前都要考察一番。你又买了坚实的脚架和云台。你使用遮光罩,快门线,反光镜锁。。。以保证像质。 你对你放大照片的结果非常满意。这时该发生的事情终于发生了--你看到一张放大到nXn (n>24) 寸的 一张作品,你知道你没戏了。 It's big, it's sharp, it's beautiful - 这就是中幅! -- 摘译自 photo.net, 原作者Doug Hughes”

    虽然你一年也没有几张要放大到24寸以上的照片,但这段话对发烧至此的你极具煽动性。你原来只知道120相机只有专业人员和影楼才会用,现在你终于明白了为什么他们会用120相机。虽然120相机系统单比镜头的分辩率等参数赶不上135相机的镜头,但其占据大底的优势。就连国字号的摄影杂志也发表了(在放大到一定尺寸以上时)国产的双反120相机比世界上最顶级的德国某牌号135相机怎么怎么样的言论。

    虽然由于120相机的产量小,不具备135相机的规模效益但你还是可以有多种选择。从一二百块的旧国产双反,到动辄上十万的欧洲顶级,你都可以量力而行,做出适合你的选择。而他们之间的差别从“象质”角度讲要小于120和135两种系统之间的差别。

    可当你真的投资买了中幅相机以后,你会发现比起135相机来讲120相机太麻烦了,还要负担比135高的多的胶卷和冲扩费用。这就是为“追求象质”而付出的代价。

    然而对“追求象质”是无止境的,比120底片还要大的多的是4X5, 比4X5底片大的多的 是8X10......这什么时候算到个头啊?


    八、你又需要一个“傻瓜”相机了!但你现在管它叫旁轴相机。

    虽然这条路上的每一步都伴随着痛苦,但走到现在你才理解什么是真正的痛苦:拥有这么多摄影器材的你每天还要为生计忙碌,每天上班下班,好容易赶个节假日还要打理家务,串亲访友。能出门旅游的机会一年也没几次,即使能出门了又很少是专为拍片。除了测试镜头外光剩空按快门了。真有英雄无用武之地的感觉。

    终于你受一些大师的启发,找到了一个解决办法:何不抓拍你周围的人和事呢?只要出家门都能拍,没准哪天能赶上个“决定性的瞬间”。好多大师不都是这么起家的吗?

    说干就干!你打量了你那些摄影器材,大摄影包是不能带的;硕大的变焦头更不能带。看来只能用轻便的小广角或标头了......

    不幸的是你这种“创作”的状态没坚持几天就夭折了,因为领导和同事每天都用异样的眼神看着你包里的这套单反机。虽然你只用了你最小体积的镜头,但你的领导和同事还是具有“单反相机就是专业相机”的认识水平的。不用开口你就能从眼神里看出他们心理的疑惑“莫非这小子有跳槽的想法......?”

    更让你觉得沮丧的是当你在上班途中好不容易碰到个“闪光点”,你的单反机总是引起被摄者的注意。落到底片上的大多是别人对你镜头怒目而视的脸。

    你终于明白为什么大师们都用旁轴相机了。

    符合你条件的旁轴相机并不难找。可现如今大部分旁轴相机都是程序曝光的。你想要的有光圈优先曝光的旁轴机大都价格不菲,随然现在的程序曝光功能的机子是从只有光圈优先曝光功能的机子进化来的。

    无奈,你只有选择一台程序快门,有电动卷片,装有定焦或变焦镜头的旁轴相机。虽然别人还是称之为“傻瓜机”,但你管它叫有自动功能的“旁轴相机”......


    九、没有列出的但使你猛掏银子的还有:

    三角架,你可能买到第三个才知道前两个的钱完全是应该省下的。黑白放大机,到时候你就会受人煽动,试图控制“摄影”的全过程。幻灯机,反转片......


    十、你现在可以算过来人了,但这条路是没有尽头的

    静下心来想一想,算一算,你在摄影器材上的花费可能是你们家除了住房以外最大的花费了。虽然你在尽量克制你的预算,可结果还会或多或少影响到了你家人的生活。你或许应该反省一下自从你有了这爱好以后,对家人的关爱是否少了许多?或许你现在仍然无怨无悔,那祝愿你能更加理智些,认清器材对摄影的作用,一步一个脚印地走下去。

    你可能要对于正要上路的或没有陷的太深的影友建议别买变焦头焦一步就照3个定焦计划,Xitek也大声疾呼“便宜买死人”,可他们没人能听的进去,就象当初的你一样。可能这发烧发的就是这个过程。

    是谁说来着:“让一个男人破产的最简单的办法是,给他一架相机。”

    December 01

    论放弃

    这个标题源自前段时间读了一下《圣经》之《马太福音》,当然这里没有里面的风格,
    我决定放弃.........
    我不得不放弃...........
     
    放弃其实很需要勇气,
    因为放弃一个自己喜欢的东西
    放弃一个自己为之付出了很多心血的东西——当然有时并不是一个可以量化的东西,比如感情
     
    而且
    放弃似乎表明自己无法应对挑战
    放弃似乎表明了一种无奈
     
    可是有些东西,或许本来就不是我们的
    可是有些事情,本来就是一种错误
     
    我无法证明我现在的想法是正确的
    但是我看不到明显的希望,或者说我看不到一个向着好的方向发展的迹象
    或许这就是我的理由,
    我想我不会后悔,我一定不会后悔
    就这样,写出来算是一种正式的公告................
    November 25

    说说计划

    说说计划,源于今天查找资料的时候看到一个人在BLOG上写的10年计划,说要花10年时间,将中国的古籍有计划的读一读,侧重历史。列了一些书目...................
     
    觉得这样的计划真不错....................
     
    然后突然想到,其实自己前不久也有这样的打算:计划用2年或者更长的时间,研读一下哲学。
     
    可是,可是................
    记得那应该是7月份的事情
    好像已经有4个月过去了,可是一本《中国哲学简史》,一本....,名字都不记得了,然后看了《圣经》里面的马太福音,这还是源于一篇文章。
     
    就做了这么一点事情,如果说理由,肯定很多:工作忙啊之类的
    但是我们好像不应该给自己这样找理由,
    因为很多时候也是在那里闲着无聊看电视
    因为有时候也是无聊的在那里跟别人调侃
    ..................
     
    有时候想想,
    生命中很多东西就是因为我们的不坚持而慢慢消失了
    生命中很多东西就是因为我们的不在意而不被我们发现
    ..................
     
    我并不是一个有很大目标的人,或许更多的是希望能够好好的享受生活
    但是生活也应该是丰富的,是能够留下很多美丽回忆的
    是在一段时间以后,没有感慨:这段时间怎么过的这么郁闷啊?这段时间怎么好像什么也没有做啊?
    是在若干年以后,没有遗憾:.......................
     
    说了这么多,是在上班时间,想到了,不得不发
    说出来,也算是留下一个见证:我要坚持我的计划:回去之后一定继续
    现广告天下,算是给自己一个压力
     
    努力工作,努力享受简单的生活...........
    看来我的BLOG名字得改改,呵呵.......................

    SyncML 简介

    SyncML 简介

    姜君
    蓝点软件北京研发中心工程师

    内容:


    SyncML协议简述
    SyncML 底层通讯
    SyncML同步协议
    SyncML表示协议
    SyncML 参考工具包
    相关资源
    作者


    目前在嵌入式系统与其他通信设备的数据同步方面,业界还没有统一的标准、协议。为了解决这个问题,IBM、Lotus、Motorola、Nokia、Palm Inc、Psion、Starfish Software已经形成了SyncML协议的标准草案。这个草案将会发展成为一个通用的可以被用在工业界的同步协议。本文简单介绍了SyncML协议与应用该协议的工具包。
    1 SyncML协议简述

    目前,移动计算和通信设备的流行很大部分原因是因为它们具有一些方便的功能,比如说在需要时可以发送信息给其他用户,用户希望随时随地都可以利用掌上设备访问信息和执行应用程序,甚至在飞行中也可以获得和更新信息。

    具有在一台掌上设备运行应用程序和处理信息、还可以将应用程序和信息的更新同步回到办公室的设备或者网上的这种能力对于普遍、离线计算的效用和流行是一个关键。

    遗憾的是,到今天为止还有两种方式没有实现:

    支持任何移动设备同步的网络数据
    支持同步人和网络数据的移动设备
    这样一来,需要为移动设备增加很多用来同步不同的,尽可能多的数据所需要的协议,这些协议中的每一个仅适用于在一个选定的设备子集上进行选定的传输和运行,并且可以访问一部分网络数据,单一同步标准的缺乏为最终用户、设备制造商、应用程序开发者和设备提供商制造了很多问题

    SyncML是一个新的标准,为了开发一个简单、通用的可以用于工业界方面的数据同步协议,推进这个标准的有IBM、Lotus、Motorola、Nokia、Palm Inc、Psion、Stafish Software。其他的公司、企业不断的被补充进来。

    1.1 通用同步协议的优点
    下面让我们看看适合工业界范围的数据同步协议对于每组角色的有益之处。

    1. 最终用户:今天移动设备用户可能在每一种设备上使用了不同的同步产品。这样就会,有一种程序用来在膝上电脑和网络数据之间同步文件,另一种用来同步掌上电脑的日历,还有远程email访问,每一种技术只能用来同步少数应用程序或者被限制成特殊类型的网络连接。这种安排安装昂贵、配置和操作复杂、管理昂贵。使用SyncML,用户可以购买可以使用广泛的数据类型的设备。

    2. 设备制造商:当每一个设备制造商想要支持这种能支持所有用户和服务提供商进行数据访问的技术。实际上一个设备会支持一种数据同步技术。这种选择迫使制造商压缩存储空间、内存、电源的用量和消耗。设备制造商会从通用的协议中获得好处,这种通用的协议使设备共同使用广泛的应用程序、服务、网络和传输技术。

    3. 服务提供商:正在进入快速增长的应用程序舞台的服务提供商非常关注这样一个现象,即同步技术的增多会使在有效的成本下扩展用户和支持用户成为不可能。现在服务提供商已经支持一定范围的数据类型和应用中的设备;还必须安装、配置多种服务的基础结构,维护和支持这些基础结构,并且保证兼容性和性能。现在可选的是利用单独的数据连通方案,陷入了避免紧密结合的私有解决方案。使用SyncML,将会使提供支持广阔的应用程序的连接成为可能。

    4. 应用程序开发者:选择支持多种同步技术可以使应用程序支持更多的设备类型 和网络数据,但是这种选择有一些浪费。为了保持向下兼容性开发者失去了选择网络数据仓库的灵活性,这也会增加程序开发的消耗和最终产品的复杂性。增加了复杂性的网络数据仓库对服务供应商的安装和采用是一个障碍。使用SyncML,可以开发能连接更多设备集合和网络数据的应用程序。

    1.2 通用同步协议的描述
    通用同步协议的目标是普遍适用,同步两端可以是任何一种类型、在任一种网络上面,这样会:

    同步网络数据与任一种移动设备
    同步移动设备与任一种网络数据
    数据同步协议会同步网络数据和很多不同的设备,包括掌上电脑、移动电话、自动计算机和桌面计算机。一个用户可以在不同的设备上访问、操作同样的数据集合,举个例子,用户可以使用掌上设备或者移动电话阅读电子邮件,还可以维护一个一致的、更新的纪录。

    同样的,同步两端可以使用任意类型,这使得移动设备可以支持更多数据类型,包括电子邮件、日历、事务管理信息、数据库中的企业数据和Web文档。这种功能使得想要通过电子邮件接收订单的用户可以在同样的设备上访问公司的目录清单系统,用来最后决定交付日期。

    实现这个目标,协议需要下列特性:

    可以有效的在有线和无线网络上运作
    支持多种传输协议
    支持任意的网络数据
    可由多种应用程序访问
    考虑到移动设备的资源限制
    构造于现有的全球互联网和Web技术之上
    协议最小功能就是赋予所有设备最常用的同步能力

    2 SyncML 底层通讯

    2.1 绑定Http

    2.1.1 Tcp 传输服务

    Http通信一般是在 Tcp连接之上的,这个绑定不是必需的,如果Http基于其它的协议,那么需求也和下面Tcp定义的相似

    2.1.1.1 连接
    在Http客户端连接到Http服务器端的时候,SyncML客户端建立一个Tcp连接在客户和服务器之间通过使用Tcp open操作,在超时的情况下还需要SyncML客户端从新建立连接。

    2.1.1.2连接选项
    关于端口和协议版本的一些选项。

    2.1.1.3 断开连接
    当连接不需要的时候,SyncML客户端负责使用tcp close操作结束连接。如果固定连接存在于Http请求中,Http连接的关闭有Http客户端来完成,当Http客户端接收到来自服务器的Http应答中指明这是最后一个SyncML的包。

    2.1.1.4 终止
    有时候非正常时间发生会要求应用程序中断Tcp连接,这种情况下,Tcp从新初始化来结束当前连接。

    2.1.1.5 超时
    当服务器超时,SyncML客户端需要重建一个新的HTTP会话并且Http服务器端会尝试从新发送当前的SyncML包

    2.1.2. SyncML信息交换
    一旦Http连接建立,一个或者多个SyncML消息会通过连接由SyncML客户端传输,它们存在于Http客户端的请求或者Http服务器端的应答中。

    在Http请求中POST方法用来传递SyncML消息。

    2.1.2.1 每包一个消息
    下面是Http请求的部分代码:
    POST ./servlet/syncit HTTP/1.1
    Host: www.datasync.org
    Content-Type: application/vnd.syncml-xml; charset="utf-8"
    Content0Length: 1023
    Accept: application/vnd.syncml-xml

    下面是Http应答的部分代码:
    HTTP/1.1 200 ok
    Content-Type: application/vnd.syncml-wbxml; charset="utf-8"
    Content-LengthL 1023
    --HTTP body---


    2.1.2.2 一个包里包含多个消息
    每一个Sync消息必须使用SyncML MIME媒体类型在HTTP请求或应答中传递,当每个包里有多个SyncML消息的时候,每一个消息是否在分离的HTTP请求或应答传递依赖于它是否是SyncML的请求和应答。可以根据每一个SyncML消息是否有最后一个元素来判断这个包中是否有更多的SyncML消息,如够有最后一个元素,那么这消息就是该包中最后一个消息。

    2.1.3 传输命令
    HTTP使用一系列的命令,包括传输方法,头部信息,请求的头部信息,应答的头部信息

    2.1.3.1 传输方法
    SyncML客户端必须使用POST方法或者可以使用CONNECT方法(如果支持的话)来给SyncML服务器发送SyncML请求。CONNECT方法用来初始化SSL会话以验证HTTP客户和服务器,其他的方法目前没有用在SyncML客户端。

    2.2 绑定Obex

    2.3 绑定Wsp

    3 SyncML同步协议

    3.1 动机:


    表示协议并不足够来实现信息的交互性
    可以在多种设备之间传输多种格式的数据

    3.2 设计原则

    满足网络延迟的需要
    满足各种设备
    满足现有的各种储存模式
    满足多种安全需求
    多种使用模式

    3.3 Sync 类型
    3.3.1双向同步

    客户端和服务器端双向传输信息
    在特殊情况下采用Slow sync 作为传输模式
    3.3.2 客户端单向同步

    只有客户端提出修改信息
    特殊情况下,数据可以被输出
    3.3.3 服务器端单向同步

    只有服务器端提出修改信息
    特殊情况下,数据可以被输入
    3.3.4 服务器端通告

    同步要求从服务器端传到客户端
    3.3.5 双向同步例子

    日历的同步传输
    客户端的认证请求被接受
    客户端传送两条信息
    服务器端传送一条信息
    服务器端和客户端的数据一致会立刻完成
    下面是一个例子,描述同步传输的大体过程。同步传输有七种方式,下面的例子是双向传输,最复杂的一种。首先进行初始的准备工作,然后进行传输,再进行确认。

    3.3.5.1客户端发出同步请求
    <SyncML>
    相当于同步的头文件,基本为固定模式
    <SyncHdr>
    <VerDTD>1.0</VerDTD>
    <VerProto>SyncML/1.0</VerProto>
    <SessionID>1</SessionID>
    <MsgID>1</MsgID>
    同步初始化时数值为一,相当于第几个回合
    目标地址
    <Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
    源地址
    <Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
    认证
    <Cred> <!--The authentication is optional.-->
    认证模式
    <Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta>
    相当于密码
    <Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"-->
    </Cred>
    <Meta> <!--The Meta is now used to indicate the maximum SyncML message size, which
    client can receive.-->
    <mi:MaxMsgSize xmlns:mi='syncml:metinf'>5000</mi:MaxMsgSize>
    </Meta>
    </SyncHdr>
    头文件结束
    <SyncBody>
    唤醒对方,相当于发出信号
    <Alert>
    <CmdID>1</CmdID>
    命令ID为1
    <Data>200</Data> <!-- 200 = TWO_WAY_ALERT -->
    共有七种连接方式,200代表其中一种
    <Item>
    <Target><LocURI>./contacts/james_bond</LocURI></Target>
    进行操作的目标和地址,相当于数据库
    <Source><LocURI>./dev-contacts</LocURI></Source>
    <Meta>
    相当于认证
    <Anchor xmlns='syncml:metinf'>
    <Last>234</Last>
    <Next>276</Next>
    </Anchor>
    </Meta>
    </Item>
    </Alert>
    上传
    <Put>
    <CmdID>2</CmdID>
    <Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
    固定的格式
    <Item>
    <Source><LocURI> devinf10</LocURI></Source>
    固定的格式
    <Data>
    <DevInf xmlns='syncml:devinf'>
    相当于本地的数据描述
    <Man>Big Factory, Ltd.</Man>
    <Mod>4119</Mod>
    <OEM>Jane's phones</OEM>
    <FwV>2.0e</FwV>
    <SwV>2.0</SwV>
    <HwV>1.22I</HwV>
    <DevId>1218182THD000001-2</DevId>
    <DevTyp>phone</DevTyp>
    <DataStore>
    <SourceRef>./contacts</SourceRef>
    <DisplayName>Phonebook</DisplayName>
    <MaxGUIDSize>32</MaxGUIDSize>GUID
    相当于索引
    <Rx-Pref>
    <CTType>text/x-vcard </CTType>
    <VerCT>2.1</VerCT>
    </Rx-Pref>
    <Tx-Pref>
    <CTType>text/x-vcard</CTType>
    <VerCT>2.1</VerCT>
    </Tx-Pref>
    数据存储能力
    <DSMem>
    <MaxMem>32650</MaxMem>
    <MaxID>250</MaxID>
    <FreeMem>22430</FreeMem>
    <FreeID>122</FreeID>
    </DSMem>
    </DataStore>
    <CTCap>
    <CTType>text/x-vcard</CTType>
    <PropName>BEGIN</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>END</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>VERSION</PropName>
    <ValEnum>2.1</ValEnum>
    <PropName>N</PropName>
    <PropName>TEL</PropName>
    <ParamName>VOICE</ParamName>
    <ParamName>CELL</ParamName>
    </CTCap>
    <SyncCap>
    <SyncType>01</SyncType>
    <SyncType>02</SyncType>
    </SyncCap>
    </DevInf>
    </Data>
    </Item>
    </Put>
    <Get>
    <CmdID>3</CmdID>
    <Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
    <Item>
    <Target><LocURI> devinf10</LocURI></Target>
    </Item>
    </Get>
    <Final/>
    </SyncBody>
    </SyncML>
    3.3.5.2服务器端发出同步请求
    <SyncML>
    头文件
    <SyncHdr>
    <VerDTD>1.0</VerDTD>
    <VerProto>SyncML/1.0</VerProto>
    <SessionID>1</SessionID>
    <MsgID>1</MsgID>
    <Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
    <Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
    <Cred> <!--The authentication is optional.-->
    <Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta>
    <Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"-->
    </Cred>
    </SyncHdr>

    <SyncBody>
    相当于回复客户端请求
    回复头文件
    <Status>
    <MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
    <TargetRef>http://www.syncml.org/sync-server</TargetRef>
    <SourceRef>IMEI:493005/10/059280/0</SourceRef>
    212代表正常
    <Data>212</Data> <!--Statuscode for OK, authenticated for session-->
    </Status>
    回复Alert
    <Status>
    <MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd>
    <TargetRef>./contacts/james_bond</TargetRef>
    <SourceRef>./dev-contacts</SourceRef>
    <Data>200</Data> <!--Statuscode for OK-->
    200代表正常
    把认证对上,对方请求的值
    <Item>
    <Data><Anchor xmlns='syncml:metinf'><Next>276</Next></Anchor></Data>
    </Item>
    </Status>
    <Status>
    回复Put
    <MsgRef>1</MsgRef><CmdRef>2</CmdRef><Cmd>Put</Cmd>
    <SourceRef> devinf10</SourceRef>
    <Data>200</Data> <!--Statuscode for OK-->
    </Status>
    返回值,请求对方
    <Results>
    <MsgRef>1</MsgRef><CmdRef>3</CmdRef>
    <Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
    固定格式
    <Item>
    <Source><LocURI>devinf10</LocURI></Source>
    固定格式
    <Data>
    相当于数据描述
    <DevInf xmlns='syncml:devinf'>
    <Man>Small Factory, Ltd.</Man>
    <Mod>Tiny Server</Mod>
    <OEM>Tiny Shop</OEM>
    <DevId>485749KR</DevId>
    <DevTyp>Server</DevTyp>
    <DataStore>
    <SourceRef>./contacts</SourceRef>
    <DisplayName>Addressbook</DisplayName>
    <Rx-Pref>
    <CTType>text/x-vcard </CTType>
    <VerCT>2.1</VerCT>
    </Rx-Pref>
    <Rx>
    <CTType>text/vcard </CTType>
    <VerCT>3.0</VerCT>
    </Rx>
    <Tx-Pref>
    <CTType>text/x-vcard</CTType>
    <VerCT>2.1</VerCT>
    </Tx-Pref>
    <Tx>
    <CTType>text/vcard</CTType>
    <VerCT>3.0</VerCT>
    </Tx>
    存储能力
    <DSMem>
    <MaxMem>132650</MaxMem>
    <MaxID>1250</MaxID>
    <FreeMem>122430</FreeMem>
    <FreeID>1122</FreeID>
    </DSMem>
    </DataStore>
    <CTCap>
    <CTType>text/x-vcard</CTType>
    <PropName>BEGIN</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>END</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>VERSION</PropName>
    <ValEnum>2.1</ValEnum>
    <PropName>N</PropName>
    <PropName>TEL</PropName>
    <ParamName>VOICE</ParamName>
    <ParamName>CELL</ParamName>
    <CTType>text/vcard</CTType>
    <PropName>BEGIN</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>END</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>VERSION</PropName>
    <ValEnum>3.0</ValEnum>
    <PropName>N</PropName>
    <PropName>TEL</PropName>
    <ParamName>VOICE</ParamName>
    <ParamName>FAX</ParamName>
    <ParamName>CELL</ParamName>
    <CTType>text/vcard</CTType>
    <PropName>BEGIN</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>END</PropName>
    <ValEnum>VCARD</ValEnum>
    <PropName>VERSION</PropName>
    <ValEnum>3.0</ValEnum>
    <PropName>N</PropName>
    <PropName>TEL</PropName>
    <ParamName>VOICE</ParamName>
    <ParamName>FAX</ParamName>
    <ParamName>CELL</ParamName>
    </CTCap>
    <SyncCap>
    <SyncType>01</SyncType>
    <SyncType>02</SyncType>
    <SyncType>07</SyncType>
    </SyncCap>
    </DevInf>
    </Data>
    </Item>
    </Results>
    进行双向传输,唤醒对方
    <Alert>
    <CmdID>1</CmdID>
    <Data>201</Data> <!-- 201 = TWO_WAY_ALERT -->
    <Item>
    <Target><LocURI>./dev-contacts</LocURI></Target>
    <Source><LocURI>./contacts/james_bond</LocURI></Source>
    <Meta>
    发送认证
    <Anchor xmlns='syncml:metinf'>
    <Last>200005021T081812Z </Last>
    <Next>200005022T093223Z </Next>
    </Anchor>
    </Meta>
    </Item>
    </Alert>
    <Final/>
    </SyncBody>
    </SyncML>
    3.3.5.3客户端提交数据
    <SyncML>
    <SyncHdr>
    <VerDTD>1.0</VerDTD>
    <VerProto>SyncML/1.0</VerProto>
    <SessionID>1</SessionID>
    <MsgID>2</MsgID>
    <Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
    <Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
    </SyncHdr>
    <SyncBody>
    回复服务器的请求
    <Status>
    <MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
    <TargetRef>IMEI:493005/10/059280/0</TargetRef>
    <SourceRef> http://www.syncml.org/sync-server </SourceRef>
    <Data>212</Data> <!--Statuscode for OK, authenticated for session-->
    </Status>
    回复服务器的请求
    <Status>
    <MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd>
    <TargetRef>./dev-contacts</TargetRef>
    <SourceRef>./contacts/james_bond</SourceRef>
    <Data>200</Data> <!--Statuscode for Success-->
    <Item>
    <Data>
    Anchor回复对方请求的<next>值
    <Anchor xmlns='syncml:metinf'><Next>200005022T093223Z </Next></Anchor>
    </Data>
    </Item>
    </Status>
    <Sync>
    <CmdID>1</CmdID>
    <Target><LocURI>./contacts/james_bond</LocURI></Target>
    <Source><LocURI>./dev-contacts</LocURI></Source>
    <Meta>
    存储能力
    <DSMem xmlns='syncml:devinf'>
    <FreeMem>8100</FreeMem>
    <!--Free memory (bytes) in Calendar database on a device -->
    <FreeId>81</FreeId>
    <!--Number of free records in Calendar database-->
    </DSMem>
    </Meta>
    <Replace>
    <CmdID>2</CmdID>
    <Meta><Type xmlns='syncml:metinf'>text/x-vcard</Type></Meta>
    <Item>
    <Source><LocURI>1012</LocURI></Source>
    数据项地址
    <Data><!--The vCard data would be placed here.--></Data>
    </Item>
    </Replace>
    </Sync>
    <Final/>
    </SyncBody>
    </SyncML>
    3.3.5.4服务器端提交数据
    <SyncML>
    <SyncHdr>
    <VerDTD>1.0</VerDTD>
    <VerProto>SyncML/1.0</VerProto>
    <SessionID>1</SessionID>
    <MsgID>2</MsgID>
    <Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
    <Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
    </SyncHdr>
    <SyncBody>
    回复客户请求
    <Status>
    <MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
    <TargetRef>http://www.syncml.org/sync-server</TargetRef>
    <SourceRef>IMEI:493005/10/059280/0</SourceRef>
    <Data>200</Data>
    </Status>
    回复Sync请求
    <Status><!--This is a status for the client modifications to the server.-->
    <MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd>
    <TargetRef>./contacts/james_bond</TargetRef>
    <SourceRef>./dev-contacts</SourceRef>
    <Data>200</Data> <!--Statuscode for Success-->
    </Status>
    回复Replace
    <Status>
    <MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd>
    <SourceRef>1012</SourceRef>
    <Data>200</Data> <!--Statuscode for Success-->
    </Status>
    发出同步请求
    <Sync>
    <CmdID>1</CmdID>
    <Target><LocURI>./dev-contacts</LocURI></Target>
    <Source><LocURI>./contacts/james_bond</LocURI></Source>
    <Replace>
    <CmdID>2</CmdID>
    <Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta>
    <Item>
    <Target><LocURI>1023</LocURI></Target>
    <Data><!--The vCard data would be placed here.--></Data>
    </Item>
    </Replace>
    <Add>
    <CmdID>3</CmdID>
    <Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta>
    <Item>
    <Source><LocURI>10536681</LocURI></Source>
    <Data><!--The vCard data would be placed here.--></Data>
    </Item>
    </Add>
    </Sync>
    <Final/>
    </SyncBody>
    </SyncML>
    3.3.5.5客户端显示数据更改情况
    <SyncML>
    <SyncHdr>
    <VerDTD>1.0</VerDTD>
    <VerProto>SyncML/1.0</VerProto>
    <SessionID>1</SessionID>
    <MsgID>3</MsgID>
    <Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
    <Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
    </SyncHdr>
    <SyncBody>
    回复同步请求
    <Status>
    <MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
    <TargetRef>IMEI:493005/10/059280/0</TargetRef>
    <SourceRef> http://www.syncml.org/sync-server </SourceRef>
    <Data>200</Data>
    </Status>
    <Status>
    <MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd>
    <TargetRef>./dev-contacts</TargetRef>
    <SourceRef>./contacts/james_bond</SourceRef>
    <Data>200</Data>
    </Status>
    <Status>
    <MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd>
    <TargetRef>1023</TargetRef>
    <Data>200</Data>
    </Status>
    <Status>
    <MsgRef>2</MsgRef><CmdRef>3</CmdRef><Cmd>Add</Cmd>
    <SourceRef>10536681</SourceRef>
    <Data>200</Data>
    </Status>
    <Map>服务器和客户端的数据保持同步
    <CmdID>1</CmdID>
    <Target><LocURI>./contacts/james_bond</LocURI></Target>
    <Source><LocURI>./dev-contacts</LocURI></Source>
    <MapItem>
    10536681和1024指的是同一个数据
    <Target><LocURI>10536681</LocURI></Target>
    <Source><LocURI>1024</LocURI></Source>
    </MapItem>
    </Map>
    <Final/>
    </SyncBody>
    </SyncML>
    3.3.5.6服务器端确认更改
    <SyncML>
    <SyncHdr>
    <VerDTD>1.0</VerDTD>
    <VerProto>SyncML/1.0</VerProto>
    <SessionID>1</SessionID>
    <MsgID>3</MsgID>
    <Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
    <Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
    </SyncHdr>
    <SyncBody>
    <Status>
    <MsgRef>3</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
    <TargetRef>http://www.syncml.org/sync-server</TargetRef>
    <SourceRef>IMEI:493005/10/059280/0</SourceRef>
    <Data>200</Data>
    </Status>
    证实数据已经做了更改
    <Status>
    <MsgRef>3</MsgRef><CmdRef>1</CmdRef><Cmd>Map</Cmd>
    <TargetRef>./contacts/james_bond </TargetRef>
    <SourceRef>./dev-contacts</SourceRef>
    <Data>200</Data>
    </Status>
    <Final/>
    </SyncBody>
    </SyncML>

    4 SyncML表示协议

    SyncML表示协议没有指定数据同步协议、同步引擎。而是指定了一些同步框架、格式使之适应不同的数据同步模型。SyncML指定了很多同步操作的结果。

    定义了一种格式
    注册为 MIME(多用途网际邮件扩充协议)媒体格式
    定义了独立的同步传输协议
    可以适合于多种同步传输方式的需要
    与后台数据存储无关
    与同步对象类型分离
    4.1 SyncML 命令

    4.1.1 请求的命令

    Add:允许发送者将数据元素加入到接收者可以识别的同步数据中去,该命令必须在Sync命令中指定。
    Alert:允许发送者通知接收者,通知可以作为应用程序和应用程序之间消息或者是接收用户接口的显示消息扩展。
    Atomic:允许发送者指明一个命令集合可在带有语义或者没有任何语义的执行。
    Copy:允许发送者复制可被接受者接收的数据。
    Delete:允许发送者删除可被接受者接收的数据。Delete命令可以包含一个请求魏实现数据存档,删除可以是回收删除或者实际删除。
    Exec:发送者可以要求接收者调用一个命名的、可执行的程序。
    Get:发送者可以从接收者那里申请数据元素,这个命令不能被Sync命令指定。
    Map:发送者可以接收者更新标识符在两个数据集合之间。
    Put:允许发送者发送数据给接收者,这个命令不能被Sync命令指定。
    Release:允许发送者对接收者可以接受的数据元素进行替换,这个命令不能被Sync命令指定。
    Search:允许发送者进行数据元素的查询。
    Sequence:允许发送者指定一系列按顺序执行。
    Sync:允许发送者指定包含的命令作为同步两个数据集合的部分。
    4.1.2 应答的命令

    Status:当处理前一个请求发生错误的时候,指明一个操作的完成状态。
    Results:用来返回Get或者Search命令的数据结果。
    4.2 SyncML数据格式

    SyncMl不但提供了通用的指令集合,还指明了一个小的通用的数据格式。数据格式提供了普通的为交换访问信息的媒体集合。例如通讯录、日历和消息。这三种数据格式是为了这个规范强制的,另外对于这些一般格式,SyncML允许鉴定其他的登记格式。SyncML利用MiME内容类型框架来鉴别数据格式。

    4.3 使用XML
    SyncML消息是使用一种标记语言,而SynML表示协议其实是一个XML应用。SyncML DTD定义了用来表示SyncML消息的XML文档。SyncML大量的使用了XML的名空间,名空间必须在第一个元素类型声明。在SyncML DTD中的元素类型被定义在一个URI为“http://www.syncml.org/docs/syncml_represent_v10_20001207.dtd或者URN为syncml:syncml。SyncML DTD也可以被ISO 9070标准公用标示符-//SYNCML//DTD SyncML 1.0//EN识别。任何XML 的标准属性可以被用在SyncML文档中。

    4.4使用 MIME
    互联网标准提供了一个工业界广泛接受的机制来鉴别不同的内容种类。SyncML消息用MiME媒体类型来鉴别,SyncML消息的媒体类型被登记在生产厂家列表中。目前有两个MIME内容可以用在SyncML消息中。applicattion/vnd.syncml+xml的MIME内容类型鉴别了SyncML消息基于文本的XML表达。applicattion/vnd.syncml+wbxml的MIME内容类型鉴别了SyncML消息基于文本的WBXML二进制表达。

    4.5 SyncML标记语言描述

    4.5.1 一般使用元素

    Archive、Chal、Cmd、CmdID、CmdRef、Cred、Final、Lang、LocURI、MsgID、MsgRef、NoResp、NoResult、RespURI、SessionID、SftDel、Source、SourceRef、Target、TargetRef、VerDTD、VerProto。
    4.5.2 消息容器元素

    SyncML、SyncHdr、SyncBody。
    4.5.3 数据描述元素

    Data、Item、Meta。
    4.5.4 协议管理元素

    Status。
    4.5.5 协议命令元素

    Add、Alert、Atomic、Copy、Delete、Exec、Get、Map、MapItem、Put、Replace、Result、Search、Sequence、Sync。
    详细内容请查阅相关文档。

    5 SyncML 参考工具包

    工具包在XML语言和SyncML之间起到桥梁的作用


    5.1使用 SyncML 工具包

    一个缓冲区,存储SyncML编码可以选择如下中一种 ...
    可以只使用一个工作空间
    可以为一个应用程序分配一个工作空间
    把 in 和 out 分成两个工作空间
    5.2 使用SyncML工具包的工作空间 当同步开始,工作空间被创建: instanceOptions.encoding = SML_WBXML;
    instanceOptions.workspaceName ="MyWorkspace";
    instanceOptions.workspaceSize =20000;
    callbacks.addCmdFunc = &handleAddCmdFunc;
    ...rc = smlInitInstance(callbacks,
    instanceOptions,
    &instanceID);


    5.3 使用SyncML工具包解析器

    体积小而且经过了优化处理(代替 DOM XML 解析器)支持以下格式:

    XML
    WBXML
    回调函数将把解析后的信息送到应用程序,开始解析SyncML :

    smlProcessData(instanceID, // pass the instance
    SML_ALL_COMMANDS, // parse entire Msg
    pUserData); // a void ptr

    5.4 使用工具包 编码器

    需要编码的信息要经过Toolkit.

    pAddStruct->elementType = SML_PE_ADD;
    pAddStruct->cmdID = ... ;
    pAddStruct->itemList = ... ;
    pAddStruct->cred = ... ;
    smlAddCmd(instanceID, pAddStruct);

    5.5 内容与通信

    5.5.1 整合负载

    解析、编码嵌入式数据格式

    vCard
    vCalendar
    ....
    数据库接口

    Lotus Domino
    Outlook
    DB2
    ...
    5.5.2 发布同步信息

    传输绑定
    HTTP
    OBEX (Infrared)
    WSP
    Floppy Disk
    相关资源

    下面的链接是SyncML标准的网站

    SyncML站点
    作者

    作者是蓝点软件公司北京研发中心工程师,对该方面感兴趣的读者可以和作者联系。
    邮件地址:kevin@bj.bluepoint.com.cn

    SyncML协议

    SyncML协议

    SyncML Initiative 由 Ericsson, IBM, Lotus, Motorola, Nokia, Palm Inc., Psion, Starfish Software 初创。

    SyncML Initiative 的目的在于与终端用户、设备开发商、数据提供商、基础构件开发商、应用软件开发商及服务提供商协同工作,发行 SyncML,以真正实现使用任何终端设备均可随时随地访问任何网络数据。

    SyncML协议文档
    http://www.openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html

    SyncML的典型应用是移动设备和网络服务之间的数据同步。除此之外,SyncML还可用于对等的数据同步,如两台PC之间。SyncML的同步过程是由同步双方相互发送一系列消息来完成,消息的格式都在SyncML表示协议中做了具体定义。

    SyncML的消息都是以XML格式的文档定义的,而XML是文本文档标记的工业标准,这必将极大地促进SyncML的推广和普及。

    有了SyncML,网络数据可以通过多种设备同步化,用户可以使用不同的设备(包括掌上电脑、移动电话、汽车计算机、台式机等)访问和操作同一网络数据。此外,用户的个人信息(如电子邮件、通讯录等)能够在用户的不同设备上同时得到更新,并保持一致。比如,用户在掌上电脑上阅读了一封新收到的邮件,那么在他的台式机中,也会自动地将这封邮件显示为已读邮件。有了SyncML,用户还可以在他的移动设备上更多地使用应用软件和信息,如果对这些软件和信息有所更新,可以随时将这些更新信息同步到办公室设备或网络。


    SyncML的总体框架

    SyncML的总体框架如后面的图中所示,其主要组成部分的功能如下:

    App A:是位于服务器端的应用,负责为其他应用提供数据同步服务。

    App B:是位于客户端的应用,请求并接受App A所提供的数据同步服务。

    Sync Engine:位于服务器端,负责在同步过程中分析数据集中所做的改动,检测和解决冲突。客户端也可以有部分类似的功能。

    Sync Server Agent和Sync Client Agent:调用在SyncML同步协议中提供的接口(SyncML I/F)与对方通信。

    SyncML I/F:即SyncML Interface,是SyncML同步协议中提供的接口,它建立在各种底层通信协议之上,与应用无关,由SyncML行动组织定义和发行。

    SyncML客户机通常是移动电话、PDA、PC等,而SyncML服务器可以是专门的服务器或PC。一般情况下是由客户机首先把自己的更改信息发送给服务器,并等待服务器的应答,而服务器在接收到更改信息后要进行同步分析以检测和解决冲突,然后把处理结果和更改要求返回给客户机。但也有些情况是由服务器首先开始同步过程。

    在SyncML同步协议中定义了七种同步类型:

    ●双向同步

    是最常见也最具有代表性的一种同步,其他同步过程都和它有很多相似之处。双向同步总是由客户机首先发起,然后客户端和服务器互换更新信息。同步过程如下:同步初始化;客户端准备要发送的数据;客户端发送自己的更新信息;服务器接收并进行分析处理;服务器返回处理的状态信息和自己的更新信息;客户端接收更新信息并对自己的数据库进行更新;客户端把更新的状态信息发送给服务器,其中包含插入记录的ID映射信息;服务器对客户端发送的映射信息做应答;客户端收到服务器的应答后,把同步结果通知用户。

    ●慢同步

    是双向同步的一种。在一般的双向同步中,客户机只是把自己在上次同步过程中所做的修改发送给服务器,而在慢同步中,客户机则把自己所有的数据都发给服务器,服务器逐一比较接收到的数据和自己的数据,以确定客户端哪些数据需要更新,然后把这些更新信息发送给客户端。需要慢同步的情况一般有:设备之间第一次同步;修改日志丢失;同步双方的同步标志不匹配。由于产生慢同步的原因很多,所以客户机和服务器双方都有可能发起慢同步。

    ●客户端单向同步

    只由客户机向服务器发送上次同步之后自己更新的信息,而服务器不把自己的更新信息发送给客户端。

    ●客户端刷新同步

    属于客户端单向同步的一种。客户机把自己所有的数据都发给服务器,并刷新服务器上的数据。

    ●服务器单向同步

    客户机从服务器那里得到上次同步之后服务器所有的更新信息,但不向服务器发送自己的更新信息。

    ●服务器刷新同步

    属于服务器单向同步的一种。服务器把所有的数据都发给客户端,并刷新客户端的数据。

    ●服务器发起的同步

    前面六种同步方式都是由客户机主动发起的同步过程,而这种同步方式是由服务器首先通知客户端,让其开始某种类型的同步。

    资料来源

    November 23

    说说好久

    好久没有来这里看看了,懒的写,
    好久没有出去逛逛了,也是懒的跑,
    ........................
    好久没有给她打电话了,不知道为什么,但绝对不是懒,也不是不想
    说不清,也就不说了...............
     
    或许也是不想让别人知道我的心情
    习惯了孤独,习惯了一个人的日子.......................
     
    或许..........,我想还是不要乱加猜测,算了,不说了
    习惯了孤独,习惯了一个人的日子
     
    其实也蛮好
    July 19

    其实我一直很喜欢写些东西的..........

    以前很喜欢写一些东西,可是好久好久了,都没有动过这个念头了
    说不清是为什么,因为工作,因为心情,
    都有吧...............
    其实很想写一些东西给一些人,可是肯定,肯定都不会被看到.........
    而又因为肯定不会被看到,是不是就可以随便的写写,反正怎么说也不会被看到.........
     
    被人不信任的感觉很不好,我想应该都有这种感觉
    于是我想,一段不被信任的感情是否还有继续坚持的必要........
    于是我想,我为什么没有放弃........
    于是我想,爱情到底是什么东西........
    于是我甚至去读哲学........
    于是反正我是乱七八糟...........
    于是我还是什么都搞不懂..........
    于是我就在这里胡乱的写一些东西.........
    于是也仅此而已......