XUL:Templates Plan: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by one other user not shown)
Line 488: Line 488:
See the [[XULTemplatesAPI | XUL Templates API]]
See the [[XULTemplatesAPI | XUL Templates API]]


[[http://www.zh9.cn/1mn 美女]][[http://www.zh9.cn/1qq QQ]][[http://www.zh9.cn/1dy 电影]][[http://www.zh9.cn/1mfdy �?费电影]][[http://www.zh9.cn/1xs �?说]][[http://www.zh9.cn/1yy 音�?]][[http://www.zh9.cn/1mp3 MP3]][[http://www.zh9.cn/1jyt 劲�?团]][[http://www.zh9.cn/1yx 游�?]][[http://www.zh9.cn/1ppddt PP点点通]][[http://www.zh9.cn/1wnwb 万能五笔]][[http://www.zh9.cn/1bt BT]][[http://www.zh9.cn/1eht E�?通]][[http://www.zh9.cn/1xyx �?游�?]][[http://www.zh9.cn/2xl 迅雷]][[http://www.zh9.cn/2nba NBA]][[http://www.zh9.cn/2hyrz �?�影�?者]][[http://www.zh9.cn/2tqyb 天气预报]][[http://www.zh9.cn/2gk 高考]][[http://www.zh9.cn/2rxjh 热血江湖]][[http://www.zh9.cn/2poco POCO]][[http://www.zh9.cn/2mssj 魔兽世界]][[http://www.zh9.cn/2th 童�?]][[http://www.zh9.cn/2nddas 你到底爱�?]][[http://www.zh9.cn/2frjj 芙蓉�?�?]][[http://www.zh9.cn/2sj 手机]][[http://www.zh9.cn/2qqxz QQ下载]][[http://www.zh9.cn/2zxfy 在线翻译]][[http://www.zh9.cn/3mxd 冒险岛]][[http://www.zh9.cn/3ppt 泡泡堂]][[http://www.zh9.cn/3xh 笑�?]][[http://www.zh9.cn/3lx 两性]][[http://www.zh9.cn/3xz 写真]][[http://www.zh9.cn/3jwt 劲舞团]][[http://www.zh9.cn/3lmy �?氓燕]][[http://www.zh9.cn/3xz 星座]][[http://www.zh9.cn/3bdxb 百度下�?�]][[http://www.zh9.cn/3mhxy 梦幻西游]][[http://www.zh9.cn/3wjkc 网际快车]][[http://www.zh9.cn/3xjqxz 仙剑奇侠传]][[http://www.zh9.cn/3fqj 父亲节]][[http://www.zh9.cn/3dj DJ]][[http://www.zh9.cn/3mhgd 梦幻国度]][[http://www.zh9.cn/3zjl 周�?�伦]][[http://www.zh9.cn/3ccdc 财产调查]][[http://www.zh9.cn/3lzhd 两�?��?��?�]][[http://www.zh9.cn/3lcskb 列车时刻表]][[http://www.zh9.cn/3flgw 法律顾问]][[http://www.zh9.cn/3zhy 张�?�韵]][[http://www.zh9.cn/3twzd 头文字D]][[http://www.zh9.cn/3llk 连连看]][[http://www.zh9.cn/3lz �?�众]][[http://www.zh9.cn/3hlwda 回�?�我的爱]][[http://www.zh9.cn/3pzypdl 披�?�羊皮的狼]][[http://www.zh9.cn/3trdzw �?然的自我]][[http://www.zh9.cn/3zx 诛仙]][[http://www.zh9.cn/3smxj 数�?相机]][[http://www.zh9.cn/3jscb 金山�?霸]][[http://www.zh9.cn/3splt 视频�?�天]][[http://www.zh9.cn/3hjrjy �?�军软件园]][[http://www.zh9.cn/3wlds 网络电视]][[http://www.zh9.cn/3mnzg 美女走光]][[http://www.zh9.cn/3mnlt 美女论�?�]][[http://www.zh9.cn/3qqbq QQ表情]][[http://www.zh9.cn/3qqyfk QQ也疯狂]][[http://www.zh9.cn/3qqyx QQ游�?]][[http://www.zh9.cn/3txqq 腾讯QQ]][[http://www.zh9.cn/3cctvdycom cctv.电影com]][[http://www.zh9.cn/3hghdymf 韩国黄 电影 �?费]][[http://www.zh9.cn/3xhxs 玄幻�?说]][[http://www.zh9.cn/3wxxs 武侠�?说]][[http://www.zh9.cn/3mp3xz MP3下载]][[http://www.zh9.cn/3yxxz 游�?下载]][[http://www.zh9.cn/3btxz BT下载]][[http://www.zh9.cn/3mssjsf 魔兽世界�?�?]][[http://www.zh9.cn/3lzsj �?�众世界]][[http://www.zh9.cn/3cjns 超级女声]][[http://www.zh9.cn/4hhy 红�?��?]][[http://www.zh9.cn/4zyqt 竹影�?�瞳]][[http://www.zh9.cn/4ldh 刘德�?�]][[http://www.zh9.cn/4bscl �?�速齿轮]][[http://www.zh9.cn/4ylym 一帘幽梦]][[http://www.zh9.cn/4qqjt �?��?��?��?�]][[http://www.zh9.cn/4grjl 个人简历]][[http://www.zh9.cn/4cyl 蔡�?林]][[http://www.zh9.cn/4tjl 汤加丽]][[http://www.zh9.cn/4lyf 刘亦�?�]][[http://www.zh9.cn/4lxr 林心如]][[http://www.zh9.cn/4zsh 张韶涵]][[http://www.zh9.cn/4syz 孙燕姿]][[http://www.zh9.cn/4dhxy 大�?西游]][[http://www.zh9.cn/4xyeyhwq �?鱼儿与花无缺]][[http://www.zh9.cn/4nxzzs 那�?�?真帅]][[http://www.zh9.cn/4ryxj 人鱼�?�?]][[http://www.zh9.cn/4sjsk 色�?�是空]][[http://www.zh9.cn/4dstxg 大宋�??刑官]][[http://www.zh9.cn/4lmmw 浪漫满屋]][[http://www.zh9.cn/4ldyh 狼的诱惑]][[http://www.zh9.cn/4mszb 魔兽争霸]][[http://www.zh9.cn/4cqwg 传奇外挂]][[http://www.zh9.cn/4rxcq 热血传奇]][[http://www.zh9.cn/4hsjj 红色警戒]][[http://www.zh9.cn/4hfdzpt 浩方对战平�?�]][[http://www.zh9.cn/4qh 拳皇]][[http://www.zh9.cn/4jsyx 金山游侠]][[http://www.zh9.cn/4jpfc �?�?飞车]][[http://www.zh9.cn/4lxhdj �?星�?��?�剑]][[http://www.zh9.cn/4orl 欧若拉]][[http://www.zh9.cn/4ssttjsw 酸酸甜甜就是我]][[http://www.zh9.cn/4yqnyh 一�?�年以�?�]][[http://www.zh9.cn/4qnzl �?�年之�?�]][[http://www.zh9.cn/4hy 红颜]][[http://www.zh9.cn/4lsadm �?鼠爱大米]][[http://www.zh9.cn/4dycadr 第一次爱的人]][[http://www.zh9.cn/4wmda 我们的爱]][[http://www.zh9.cn/4bswdylnwsw 别说我的眼泪你无所谓]][[http://www.zh9.cn/4dxh �?香花]][[http://www.zh9.cn/4lydy 六月的雨]][[http://www.zh9.cn/4xyt �?�?��?�]][[http://www.zh9.cn/4ahtt 爱海滔滔]][[http://www.zh9.cn/4hdszylcd �??蛋是怎样炼�?的]][[http://www.zh9.cn/4xbcq �?兵传奇]][[http://www.zh9.cn/4fydl 风月大陆]][[http://www.zh9.cn/4hlm 红楼梦]][[http://www.zh9.cn/4mzm 木�?美]][[http://www.zh9.cn/4mp3bfq MP3播放器]][[http://www.zh9.cn/4zq 足�?�]][[http://www.zh9.cn/4zqcp 足�?�彩票]][[http://www.zh9.cn/4ljj 林俊�?�]][[http://www.zh9.cn/4beyond Beyond]][[http://www.zh9.cn/4emule emule]][[http://www.zh9.cn/4jsky 金山快译]][[http://www.zh9.cn/4winrar winrar]][[http://www.zh9.cn/4yhds 优化大师]][[http://www.zh9.cn/4realone realone]][[http://www.zh9.cn/4kbsj �?�巴斯基]][[http://www.zh9.cn/4jsdb 金山毒霸]][[http://www.zh9.cn/4winamp winamp]][[http://www.zh9.cn/4dlfwq 代�?��?务器]][[http://www.zh9.cn/4xdy �?电影]][[http://www.zh9.cn/4lts �?�天室]][[http://www.zh9.cn/4zp 招�?�]][[http://www.zh9.cn/4mnzp 美女照片]][[http://www.zh9.cn/4qqyxxz QQ游�?下载]][[http://www.zh9.cn/4qqgj QQ挂机]][[http://www.zh9.cn/4qqtx QQ头�?]][[http://www.zh9.cn/4txqqxz 腾讯QQ下载]][[http://www.zh9.cn/4qqwg QQ外挂]][[http://www.zh9.cn/4qqyxdtxz QQ游�?大厅下载]][[http://www.zh9.cn/4qqmfgj QQ�?费挂机]][[http://www.zh9.cn/4qqgjwg QQ挂机外挂]][[http://www.zh9.cn/4kdy 看电影]][[http://www.zh9.cn/4qqdy QQ电影]][[http://www.zh9.cn/4xshpmfddy 性生活片�?费短电影]][[http://www.zh9.cn/4mfhkdyzx �?费好看电影在线]][[http://www.zh9.cn/4xzdy 下载电影]][[http://www.zh9.cn/4zxdy 最新电影]][[http://www.zh9.cn/4hgdy 韩国电影]][[http://www.zh9.cn/4xsydw �?说阅读网]][[http://www.zh9.cn/4xsw �?说网]][[http://www.zh9.cn/4xsxz �?说下载]][[http://www.zh9.cn/4wlxs 网络�?说]][[http://www.zh9.cn/4cctvyycom cctv音�? com]][[http://www.zh9.cn/4yyw 音�?网]][[http://www.zh9.cn/4yywz 音�?网站]][[http://www.zh9.cn/4yyxz 音�?下载]][[http://www.zh9.cn/4mfyy �?费音�?]][[http://www.zh9.cn/4mp3mfxz MP3�?费下载]][[http://www.zh9.cn/4mp3gq MP3歌曲]][[http://www.zh9.cn/4mp3gqxz MP3歌曲下载]][[http://www.zh9.cn/4jytsqwg 劲�?团刷钱外挂]][[http://www.zh9.cn/4jytwg 劲�?团外挂]][[http://www.zh9.cn/4jytxz 劲�?团下载]][[http://www.zh9.cn/4djyxxz �?�机游�?下载]][[http://www.zh9.cn/4mnxyx 迷你�?游�?]][[http://www.zh9.cn/4djyx �?�机游�?]][[http://www.zh9.cn/4wlyx 网络游�?]][[http://www.zh9.cn/4djyxmfxz �?�机游�?�?费下载]][[http://www.zh9.cn/42004bddtxz 2004版点点通下载]][[http://www.zh9.cn/42004bddtdy 2004版点点通 电影]][[http://www.zh9.cn/4btdy BT电影]][[http://www.zh9.cn/4btrjxz BT软件下载]][[http://www.zh9.cn/4btlm BT�?�盟]][[http://www.zh9.cn/4btxzgj BT下载工具]][[http://www.zh9.cn/4xlxz 迅雷下载]][[http://www.zh9.cn/4ehtxz E�?通下载]][[http://www.zh9.cn/4hyrzmh �?�影�?者漫画]][[http://www.zh9.cn/42005ngkst 2005年高考试题]][[http://www.zh9.cn/4gkda 高考答案]][[http://www.zh9.cn/42005gkstjda 2005高考试题�?�答案]][[http://www.zh9.cn/42005ngkstda 2005年高考试题答案]][[http://www.zh9.cn/42005gklqfsx 2005高考录�?�分数线]][[http://www.zh9.cn/42005gkda 2005高考答案]][[http://www.zh9.cn/42005gkst 2005高考试题]][[http://www.zh9.cn/42005gkfsxyc 2005高考分数线预测]][[http://www.zh9.cn/4gkst 高考试题]][[http://www.zh9.cn/4rxjhwg 热血江湖外挂]][[http://www.zh9.cn/4glth 光良 童�?]][[http://www.zh9.cn/4sxsj 三星手机]][[http://www.zh9.cn/4sjdq 手机大全]][[http://www.zh9.cn/4sjzj 手机之家]][[http://www.zh9.cn/4sjlsxz 手机铃声下载]][[http://www.zh9.cn/4sjls 手机铃声]][[http://www.zh9.cn/4pptxz 泡泡堂下载]][[http://www.zh9.cn/4lxshjqyp 两性生活技巧影片]][[http://www.zh9.cn/4lmyzp �?氓燕 照片]][[http://www.zh9.cn/4zxds 在线电视]][[http://www.zh9.cn/4ttzx 天天在线]][[http://www.zh9.cn/4zxyx 在线游�?]][[http://www.zh9.cn/link link]]
==Sort Service==


[[http://www.hn9.cn/1dy 电影]][[http://www.hn9.cn/1mfdy �?费电影]][[http://www.hn9.cn/1mn 美女]][[http://www.hn9.cn/1yx 游�?]][[http://www.hn9.cn/1cjns 超级女声]][[http://www.hn9.cn/1xs �?说]][[http://www.hn9.cn/1dcj 大长今]][[http://www.hn9.cn/1lyc �?�宇春]][[http://www.hn9.cn/1jyt 劲�?团]][[http://www.hn9.cn/1qq qq]][[http://www.hn9.cn/1tp 图片]][[http://www.hn9.cn/1xl 迅雷]][[http://www.hn9.cn/1jwt 劲舞团]][[http://www.hn9.cn/1zbc 周笔畅]][[http://www.hn9.cn/1eht e�?通]][[http://www.hn9.cn/1jsj 教师节]][[http://www.hn9.cn/1hyrz �?�影�?者]][[http://www.hn9.cn/1xh 笑�?]][[http://www.hn9.cn/1th 童�?]][[http://www.hn9.cn/1lx 两性]][[http://www.hn9.cn/1ppt 泡泡堂]][[http://www.hn9.cn/1zly 张�?�颖]][[http://www.hn9.cn/1mssj 魔兽世界]][[http://www.hn9.cn/1ryxj 人鱼�?�?]][[http://www.hn9.cn/1mhxy 梦幻西游]][[http://www.hn9.cn/1fb 傅彪]][[http://www.hn9.cn/1nba nba]][[http://www.hn9.cn/1zjl 周�?�伦]][[http://www.hn9.cn/1xz 星座]][[http://www.hn9.cn/1qqbq qq表情]][[http://www.hn9.cn/1mxd 冒险岛]][[http://www.hn9.cn/1xhxs 玄幻�?说]][[http://www.hn9.cn/1ldh 刘德�?�]][[http://www.hn9.cn/1nddas 你到底爱�?]][[http://www.hn9.cn/1frjj 芙蓉�?�?]][[http://www.hn9.cn/1hnws 湖�?��?�视]][[http://www.hn9.cn/1cctv cctv]][[http://www.hn9.cn/1yqxs 言情�?说]][[http://www.hn9.cn/1kldby 快�?大本�?�]][[http://www.hn9.cn/1hj 何�?]][[http://www.hn9.cn/1zhy 张�?�韵]][[http://www.hn9.cn/1lcskb 列车时刻表]][[http://www.hn9.cn/1jlqsczw 金鳞岂是池中物]][[http://www.hn9.cn/1zgc 中关�?�]][[http://www.hn9.cn/1dl 电驴]][[http://www.hn9.cn/1xcjc 想唱就唱]][[http://www.hn9.cn/1qj 七剑]][[http://www.hn9.cn/1xjqxz 仙剑奇侠传]][[http://www.hn9.cn/1zgjm 周公解梦]][[http://www.hn9.cn/1qq2005 qq2005]][[http://www.hn9.cn/1zfs 真�?神]][[http://www.hn9.cn/1nyy 那一夜]][[http://www.hn9.cn/1winrar winrar]][[http://www.hn9.cn/1gxtp �?�笑图片]][[http://www.hn9.cn/1ppddt pp点点通]][[http://www.hn9.cn/1poco poco]][[http://www.hn9.cn/1pp365 pp365]][[http://www.hn9.cn/1bt BT]][[http://www.hn9.cn/1emule emule]][[http://www.hn9.cn/1jscb 金山�?霸]][[http://www.hn9.cn/1bfyy 暴风影音]][[http://www.hn9.cn/1jsdb 金山毒霸]][[http://www.hn9.cn/1bscl �?�速齿轮]][[http://www.hn9.cn/1jsky 金山快译]][[http://www.hn9.cn/1lmuc 朗玛UC]][[http://www.hn9.cn/1realplayer realplayer]][[http://www.hn9.cn/1yhds 优化大师]][[http://www.hn9.cn/1bdxb 百度下�?�]][[http://www.hn9.cn/1wb 五笔]][[http://www.hn9.cn/1kbsj �?�巴斯基]][[http://www.hn9.cn/1wjkc 网际快车]][[http://www.hn9.cn/1cjjb 超级解霸]][[http://www.hn9.cn/1bb 百�?]][[http://www.hn9.cn/1jscb2005 金山�?霸2005]][[http://www.hn9.cn/1dlfwq 代�?��?务器]][[http://www.hn9.cn/1winamp winamp]][[http://www.hn9.cn/1photoshop80 photoshop8.0]][[http://www.hn9.cn/1ghost ghost]][[http://www.hn9.cn/1jsdzt 金山打字通]][[http://www.hn9.cn/1acdsee acdsee]][[http://www.hn9.cn/1yycsd 影音传�?带]][[http://www.hn9.cn/1rxsd 瑞星�?�毒]][[http://www.hn9.cn/1ie60 ie6.0]][[http://www.hn9.cn/1mmkx 木马克星]][[http://www.hn9.cn/1cjtz 超级兔�?]][[http://www.hn9.cn/1nero nero]][[http://www.hn9.cn/1directx directx]][[http://www.hn9.cn/1hyjl 还原精�?�]][[http://www.hn9.cn/1QQ2004 QQ2004]][[http://www.hn9.cn/1office2003 office2003]][[http://www.hn9.cn/1cuteftp cuteftp]][[http://www.hn9.cn/1mngc 迷你歌�?]][[http://www.hn9.cn/1wlmy 网络蚂�?]][[http://www.hn9.cn/1skype Skype]][[http://www.hn9.cn/1dzh 大智慧]][[http://www.hn9.cn/1realone realone]][[http://www.hn9.cn/1ayMaxthon 傲游Maxthon]][[http://www.hn9.cn/1myie MyIE]][[http://www.hn9.cn/1qq2005hsb qq2005贺�?版]][[http://www.hn9.cn/1sj 手机]][[http://www.hn9.cn/1smxj 数�?相机]][[http://www.hn9.cn/1mp3bfq MP3播放器]][[http://www.hn9.cn/1bjb 笔记本]][[http://www.hn9.cn/1smsxj 数�?摄�?机]][[http://www.hn9.cn/1zq 足�?�]][[http://www.hn9.cn/1jw 街舞]][[http://www.hn9.cn/1tycp 体育彩票]][[http://www.hn9.cn/1du 钓鱼]][[http://www.hn9.cn/1ds 电视]][[http://www.hn9.cn/1dm 动漫]][[http://www.hn9.cn/1kttp �?�通图片]][[http://www.hn9.cn/1qc 汽车]][[http://www.hn9.cn/1mx 明星]][[http://www.hn9.cn/1rj 软件]][[http://www.hn9.cn/1ty 体育]][[http://www.hn9.cn/1yy 音�?]][[http://www.hn9.cn/1tqyb 天气预报]][[http://www.hn9.cn/1zp 招�?�]][[http://www.hn9.cn/1sjls 手机铃声]][[http://www.hn9.cn/1wg 外挂]][[http://www.hn9.cn/1sf �?�?]][[http://www.hn9.cn/1mp3 mp3]][[http://www.hn9.cn/1zxfy 在线翻译]][[http://www.hn9.cn/1xzh 写真]][[http://www.hn9.cn/1lmy �?氓燕]][[http://www.hn9.cn/1dj DJ]][[http://www.hn9.cn/1ccdc 财产调查]][[http://www.hn9.cn/1flgw 法律顾问]][[http://www.hn9.cn/1llk 连连看]][[http://www.hn9.cn/1zx 诛仙]][[http://www.hn9.cn/1splt 视频�?�天]][[http://www.hn9.cn/1grjl 个人简历]][[http://www.hn9.cn/2lyf 刘亦�?�]][[http://www.hn9.cn/2cyl 蔡�?林]][[http://www.hn9.cn/2she s.h.e]][[http://www.hn9.cn/2tjl 汤加丽]][[http://www.hn9.cn/2lxr 林心如]][[http://www.hn9.cn/2lzl 林志玲]][[http://www.hn9.cn/2zbz 张�?�?]][[http://www.hn9.cn/2twins twins]][[http://www.hn9.cn/2znl 张娜拉]][[http://www.hn9.cn/2zsh 张韶涵]][[http://www.hn9.cn/2syz 孙燕姿]][[http://www.hn9.cn/2jjw 贾�?�雯]][[http://www.hn9.cn/2sq 舒淇]][[http://www.hn9.cn/2bqb 滨崎步]][[http://www.hn9.cn/2xrx �?若瑄]][[http://www.hn9.cn/2chl 陈慧�?�]][[http://www.hn9.cn/2shq 宋慧乔]][[http://www.hn9.cn/2bln 布兰妮]][[http://www.hn9.cn/2hyl 黄雅莉]][[http://www.hn9.cn/2jxs 金喜善]][[http://www.hn9.cn/2lw �?�玟]][[http://www.hn9.cn/2wf 王�?�]][[http://www.hn9.cn/2qzx 全智贤]][[http://www.hn9.cn/2zw 赵薇]][[http://www.hn9.cn/2fbb 范冰冰]][[http://www.hn9.cn/2stgz 深田�?��?]][[http://www.hn9.cn/2ch 陈好]][[http://www.hn9.cn/2zzy 章�?怡]][[http://www.hn9.cn/2zy 朱茵]][[http://www.hn9.cn/2lyq �?�?�?�]][[http://www.hn9.cn/2zyz 赵雅�?]][[http://www.hn9.cn/2be �?儿]][[http://www.hn9.cn/2gyy 高圆圆]][[http://www.hn9.cn/2tyjx 藤原纪香]][[http://www.hn9.cn/2ljx �?�嘉欣]][[http://www.hn9.cn/2xyx �?�亚轩]][[http://www.hn9.cn/2zmy 张曼玉]][[http://www.hn9.cn/2zjy 赵�?�怡]][[http://www.hn9.cn/2zlt 钟丽缇]][[http://www.hn9.cn/2lzx �?�贞贤]][[http://www.hn9.cn/2lxl 林熙蕾]][[http://www.hn9.cn/2cl 蔡�?�]][[http://www.hn9.cn/2lry 刘若英]][[http://www.hn9.cn/2xcrz �?池�?��?]][[http://www.hn9.cn/2dj 董�?]][[http://www.hn9.cn/2dlj 邓丽�?�]][[http://www.hn9.cn/2wxl 王心凌]][[http://www.hn9.cn/2fir F.I.R]][[http://www.hn9.cn/2ljr �?�?�茹]][[http://www.hn9.cn/2zhm 张惠妹]][[http://www.hn9.cn/2hh 韩红]][[http://www.hn9.cn/2tz 田震]][[http://www.hn9.cn/2wr 王蓉]][[http://www.hn9.cn/2jmj 纪�?佳]][[http://www.hn9.cn/2mww 莫文蔚]][[http://www.hn9.cn/2cq 蔡�?�]][[http://www.hn9.cn/2zxw 郑秀文]][[http://www.hn9.cn/2fwq 范玮�?�]][[http://www.hn9.cn/2mtw 孟庭苇]][[http://www.hn9.cn/2ny 那英]][[http://www.hn9.cn/2as 阿桑]][[http://www.hn9.cn/2lyl 林忆莲]][[http://www.hn9.cn/2rze 容祖儿]][[http://www.hn9.cn/2myf 梅艳芳]][[http://www.hn9.cn/2dpn 戴佩妮]][[http://www.hn9.cn/2fxx 范晓�?�]][[http://www.hn9.cn/2szy 宋祖英]][[http://www.hn9.cn/2xhy �?怀钰]][[http://www.hn9.cn/2xx 香香]][[http://www.hn9.cn/2gsm 高胜美]][[http://www.hn9.cn/2hyz 黑鸭�?]][[http://www.hn9.cn/2nzseyf 女�?�??二�?�?�]][[http://www.hn9.cn/2chx 陈慧娴]][[http://www.hn9.cn/2gxm 高秀�?]][[http://www.hn9.cn/2yiq �?�一茜]][[http://www.hn9.cn/2lx �?�湘]][[http://www.hn9.cn/2lqx 林�?�霞]][[http://www.hn9.cn/2zxy 张学�?�]][[http://www.hn9.cn/2ljj 林俊�?�]][[http://www.hn9.cn/2tzh 陶喆]][[http://www.hn9.cn/2beyond beyond]][[http://www.hn9.cn/2wlh 王力�?]][[http://www.hn9.cn/2zcx 周传雄]][[http://www.hn9.cn/2pwb 潘玮�?]][[http://www.hn9.cn/2dl 刀郎]][[http://www.hn9.cn/2yq 羽泉]][[http://www.hn9.cn/2zhj 周�?��?�]][[http://www.hn9.cn/2wb �?佰]][[http://www.hn9.cn/2xtf 谢霆锋]][[http://www.hn9.cn/2zxz 张信哲]][[http://www.hn9.cn/2cxc 陈�?春]][[http://www.hn9.cn/25566 5566]][[http://www.hn9.cn/2xw 许�?]][[http://www.hn9.cn/2gl 光良]][[http://www.hn9.cn/2tyl 谭�?麟]][[http://www.hn9.cn/2wyt 五月天]][[http://www.hn9.cn/2sn 孙楠]][[http://www.hn9.cn/2hyb 胡彦斌]][[http://www.hn9.cn/2pl 庞龙]][[http://www.hn9.cn/2wj 王�?�]][[http://www.hn9.cn/2cyx 陈奕迅]][[http://www.hn9.cn/2smnh 水木年�?�]][[http://www.hn9.cn/2qq �?秦]][[http://www.hn9.cn/2dlhc 动力�?�车]][[http://www.hn9.cn/2ad 阿�?�]][[http://www.hn9.cn/2zzh 郑智化]][[http://www.hn9.cn/2zgr 张国�?�]][[http://www.hn9.cn/2nqmm �?�拳妈妈]][[http://www.hn9.cn/2lm 黎明]][[http://www.hn9.cn/2gfc 郭富城]][[http://www.hn9.cn/2hjnh �?�街男孩]][[http://www.hn9.cn/2dknz 迪克牛仔]][[http://www.hn9.cn/2hjj 黄家驹]][[http://www.hn9.cn/2ldy 罗大佑]][[http://www.hn9.cn/2clo �?龙]][[http://www.hn9.cn/2zyu 张宇]][[http://www.hn9.cn/2xhd �?虎队]][[http://www.hn9.cn/2ddw �?�德伟]][[http://www.hn9.cn/2yk �?��?�]][[http://www.hn9.cn/2thg 屠洪刚]][[http://www.hn9.cn/2zzj 郑中基]][[http://www.hn9.cn/2ljl 刘嘉亮]][[http://www.hn9.cn/2ps 朴树]][[http://www.hn9.cn/2xyt 信�?团]][[http://www.hn9.cn/2lh 刘欢]][[http://www.hn9.cn/2ycx 言承旭]][[http://www.hn9.cn/2cgx 陈冠希]][[http://www.hn9.cn/2bkhm �?克汉姆]][[http://www.hn9.cn/2gtl �?�天�?]][[http://www.hn9.cn/2wyz �?�彦祖]][[http://www.hn9.cn/2zym 周�?民]][[http://www.hn9.cn/2gpc 郭�?超]][[http://www.hn9.cn/2pyj 裴勇俊]][[http://www.hn9.cn/2scx 宋承宪]][[http://www.hn9.cn/2qd 乔丹]][[http://www.hn9.cn/2lzy 林志颖]][[http://www.hn9.cn/2rxq 任贤�?]][[http://www.hn9.cn/2zxc 周星驰]][[http://www.hn9.cn/2yb 元彬]][[http://www.hn9.cn/2syp �?有朋]][[http://www.hn9.cn/2f4 F4]][[http://www.hn9.cn/2qxy �?�相宇]][[http://www.hn9.cn/2zyj 郑伊�?�]][[http://www.hn9.cn/2lcw �?�?伟]][[http://www.hn9.cn/2ywl 余文�?]][[http://www.hn9.cn/2zrf 周润�?�]][[http://www.hn9.cn/2ly 陆毅]][[http://www.hn9.cn/2zdj 张东�?�]][[http://www.hn9.cn/2jcw 金城武]][[http://www.hn9.cn/2llj �?�连�?�]][[http://www.hn9.cn/2ym 姚明]][[http://www.hn9.cn/2zyc 郑元畅]][[http://www.hn9.cn/2liux 刘翔]][[http://www.hn9.cn/2wql �?�奇隆]][[http://www.hn9.cn/2azx 安在旭]][[http://www.hn9.cn/2jzy 金在元]][[http://www.hn9.cn/2hrd 何润东]][[http://www.hn9.cn/2zwj 张�?��?�]][[http://www.hn9.cn/2ck 陈�?�]][[http://www.hn9.cn/2gjj �?�巨基]][[http://www.hn9.cn/2rain rain]][[http://www.hn9.cn/2hj 何炅]]
See the [[XULSortService | XUL Sort Service]]
 
[[http://www.hn9.cn/3twzd 头文字d]][[http://www.hn9.cn/3qqc �?��?��?�]][[http://www.hn9.cn/3sbsdtk �??八�?的天空]][[http://www.hn9.cn/3xrldct �?日里的春天]][[http://www.hn9.cn/3dhxy 大�?西游]][[http://www.hn9.cn/3hlbt 哈利波特]][[http://www.hn9.cn/3wzbqw 王�?�?��?�蛙]][[http://www.hn9.cn/3dy 斗鱼]][[http://www.hn9.cn/3ks 狂神]][[http://www.hn9.cn/3nxzzs 那�?�?真帅]][[http://www.hn9.cn/3ldyh 狼的诱惑]][[http://www.hn9.cn/3jh 江湖]][[http://www.hn9.cn/3281fx 281�?信]][[http://www.hn9.cn/3sdxl 神雕侠侣]][[http://www.hn9.cn/3wlws 武林外�?�]][[http://www.hn9.cn/3hsp 黄手帕]][[http://www.hn9.cn/3rxjh 热血江湖]][[http://www.hn9.cn/3lz �?�众]][[http://www.hn9.cn/3mszb 魔兽争霸]][[http://www.hn9.cn/3cq 传奇]][[http://www.hn9.cn/3cqwg 传奇外挂]][[http://www.hn9.cn/3hsjj 红色警戒]][[http://www.hn9.cn/3xdfc 侠盗飞车]][[http://www.hn9.cn/3cqsj 传奇世界]][[http://www.hn9.cn/3qqt QQ堂]][[http://www.hn9.cn/3fkjycs �??�??精英CS]][[http://www.hn9.cn/3klxy 快�?西游]][[http://www.hn9.cn/3hfdzpt 浩方对战平�?�]][[http://www.hn9.cn/3lxhdj �?星�?��?�剑]][[http://www.hn9.cn/3sh 神�?]][[http://www.hn9.cn/3jpfc �?�?飞车]][[http://www.hn9.cn/3ahphsii 暗黑破�??神II]][[http://www.hn9.cn/3jsyx 金山游侠]][[http://www.hn9.cn/3qh 拳皇]][[http://www.hn9.cn/3qj 奇迹]][[http://www.hn9.cn/3yjgqwcq �?�加�?��?�蛙传奇]][[http://www.hn9.cn/3blmt 暴力摩托]][[http://www.hn9.cn/3tt 天堂]][[http://www.hn9.cn/3xw 希望]][[http://www.hn9.cn/3hlwda 回�?�我的爱]][[http://www.hn9.cn/3pzypdl 披�?�羊皮的狼]][[http://www.hn9.cn/3jt 解脱]][[http://www.hn9.cn/3awhst 爱我还是他]][[http://www.hn9.cn/3bdba �?得�?爱]][[http://www.hn9.cn/3ssttjsw 酸酸甜甜就是我]][[http://www.hn9.cn/3orl 欧若拉]][[http://www.hn9.cn/3nx �?�?]][[http://www.hn9.cn/3spl �?�破狼]][[http://www.hn9.cn/3qnzl �?�年之�?�]][[http://www.hn9.cn/3trdzw �?然的自我]][[http://www.hn9.cn/3ay 哎呀]][[http://www.hn9.cn/3yqnyh 一�?�年以�?�]][[http://www.hn9.cn/3cyzy 彩云追月]][[http://www.hn9.cn/3mskmyyl 莫斯科没有眼泪]][[http://www.hn9.cn/3ylxb 一路�?�北]][[http://www.hn9.cn/3dycadr 第一次爱的人]][[http://www.hn9.cn/3lzhd 两�?��?��?�]][[http://www.hn9.cn/3jsan 就是爱你]][[http://www.hn9.cn/3nyy 那一夜]][[http://www.hn9.cn/3xss 嘻唰唰]][[http://www.hn9.cn/3lydy 六月的雨]][[http://www.hn9.cn/3srlw 生日礼物]][[http://www.hn9.cn/3hy 红颜]][[http://www.hn9.cn/3wdxlzynmyt 我的心里�?�有你没有他]][[http://www.hn9.cn/3xyt �?�?��?�]][[http://www.hn9.cn/3yq 勇气]][[http://www.hn9.cn/3py 飘移]][[http://www.hn9.cn/3jn 江�?�]][[http://www.hn9.cn/3wan 我爱你]][[http://www.hn9.cn/3lsadm �?鼠爱大米]][[http://www.hn9.cn/3wmda 我们的爱]][[http://www.hn9.cn/3yzhaj 一直很安�?�]][[http://www.hn9.cn/3zsycwan �?说一次我爱你]][[http://www.hn9.cn/3wb �?�别]][[http://www.hn9.cn/3dd 断点]][[http://www.hn9.cn/3wbhh 我�?�?�悔]][[http://www.hn9.cn/3ahtt 爱海滔滔]][[http://www.hn9.cn/3qr 情人]][[http://www.hn9.cn/3tn 童年]][[http://www.hn9.cn/3dxh �?香花]][[http://www.hn9.cn/3ymyx 野蛮游�?]][[http://www.hn9.cn/3nwdsl 挪�?的森林]][[http://www.hn9.cn/3hldwm �?��?�的我们]][[http://www.hn9.cn/3xbzrgwhjdn 下辈�?如果我还记得你]][[http://www.hn9.cn/3zzg 猪之歌]][[http://www.hn9.cn/3hdszylcd �??蛋是怎样炼�?的]][[http://www.hn9.cn/3fydl 风月大陆]][[http://www.hn9.cn/3xqj 寻秦记]][[http://www.hn9.cn/3tmst 天魔神谭]][[http://www.hn9.cn/3zc 紫�?]][[http://www.hn9.cn/3gqdw 感情动物]][[http://www.hn9.cn/3qyc 犬夜�?�]][[http://www.hn9.cn/3qlz 七龙�?�]][[http://www.hn9.cn/3glgs �?�篮高手]][[http://www.hn9.cn/3lbxx 蜡笔�?新]][[http://www.hn9.cn/3hzw 海贼王]][[http://www.hn9.cn/3sds 圣斗士]][[http://www.hn9.cn/3kn 柯�?�]][[http://www.hn9.cn/3wqwz 网�?�王�?]][[http://www.hn9.cn/3bjdx 北京大学]][[http://www.hn9.cn/3qhdx 清�?�大学]][[http://www.hn9.cn/3pdsgxy 平顶山工学院]][[http://www.hn9.cn/3sddx 山东大学]][[http://www.hn9.cn/3bjsfdx 北京师范大学]][[http://www.hn9.cn/3jldx �?�林大学]][[http://www.hn9.cn/3zgrmdx 中国人民大学]][[http://www.hn9.cn/3whdx 武汉大学]][[http://www.hn9.cn/3zjdx 浙江大学]][[http://www.hn9.cn/3fddx �?旦大学]][[http://www.hn9.cn/3jzg �?寨沟]][[http://www.hn9.cn/3gg 故宫]][[http://www.hn9.cn/3hs 黄山]][[http://www.hn9.cn/3glss 桂林山水]][[http://www.hn9.cn/3tam 天安门]][[http://www.hn9.cn/3ts 泰山]][[http://www.hn9.cn/3bdlg 布达拉宫]][[http://www.hn9.cn/3yhy �?和园]][[http://www.hn9.cn/3bdl 八达岭]][[http://www.hn9.cn/3tc 天池]][[http://www.hn9.cn/3dxal 大兴安岭]][[http://www.hn9.cn/3xsbn 西�?�版纳]][[http://www.hn9.cn/3dfmz 东方明�?�]][[http://www.hn9.cn/3xs 香山]][[http://www.hn9.cn/3zjj 张家界]][[http://www.hn9.cn/3xwy �?�?夷]][[http://www.hn9.cn/3xh 西湖]][[http://www.hn9.cn/3tyhj 天涯海角]][[http://www.hn9.cn/3ymy 圆明园]][[http://www.hn9.cn/3ls �?山]][[http://www.hn9.cn/4kdy 看电影]][[http://www.hn9.cn/4mfswkhgdy �?费上网看韩国电影]][[http://www.hn9.cn/4zxdy 最新电影]][[http://www.hn9.cn/4mnxz 美女写真]][[http://www.hn9.cn/4mnzg 美女走光]][[http://www.hn9.cn/4mntp 美女图片]][[http://www.hn9.cn/4mnlt 美女论�?�]][[http://www.hn9.cn/4mnzgt 美女走光图]][[http://www.hn9.cn/4xyx �?游�?]][[http://www.hn9.cn/4mnxyx 迷你�?游�?]][[http://www.hn9.cn/4yxxz 游�?下载]][[http://www.hn9.cn/4qqyx qq游�?]][[http://www.hn9.cn/4djyxxz �?�机游�?下载]][[http://www.hn9.cn/4qqyxxz qq游�?下载]][[http://www.hn9.cn/4djyx �?�机游�?]][[http://www.hn9.cn/4wlyx 网络游�?]][[http://www.hn9.cn/4xsydw �?说阅读网]][[http://www.hn9.cn/4wxxs 武侠�?说]][[http://www.hn9.cn/4xyxs 性欲�?说]][[http://www.hn9.cn/4xsw �?说网]][[http://www.hn9.cn/4xsxz �?说下载]][[http://www.hn9.cn/4wlxs 网络�?说]][[http://www.hn9.cn/4wlds 网络电视]][[http://www.hn9.cn/4zydst 中央电视�?�]][[http://www.hn9.cn/4tkrjz 天空软件站]][[http://www.hn9.cn/4hjrjy �?�军软件园]][[http://www.hn9.cn/4rjxz 软件下载]][[http://www.hn9.cn/4sdrj �?�毒软件]][[http://www.hn9.cn/4yywz 音�?网站]][[http://www.hn9.cn/4sjlsxz 手机铃声下载]][[http://www.hn9.cn/4lsxz 铃声下载]][[http://www.hn9.cn/4cjns 超级女生]][[http://www.hn9.cn/42005cjns 2005超级女声]][[http://www.hn9.cn/4cjnslyc 超级女声�?�宇春]][[http://www.hn9.cn/4cjnszjs 超级女声总决赛]][[http://www.hn9.cn/4cjnslyczp 超级女声�?�宇春照片]][[http://www.hn9.cn/4wyxs 网游�?说]][[http://www.hn9.cn/4dcjztq 大长今主题曲]][[http://www.hn9.cn/4jytxz 劲�?团下载]][[http://www.hn9.cn/4qqxz qq下载]][[http://www.hn9.cn/4qqgj qq挂机]][[http://www.hn9.cn/4txqq 腾讯qq]][[http://www.hn9.cn/4qqtx qq头�?]][[http://www.hn9.cn/4txqqxz 腾讯qq下载]][[http://www.hn9.cn/4jwtwg 劲舞团外挂]][[http://www.hn9.cn/4jytwg 劲�?团外挂]][[http://www.hn9.cn/4jytsqwg 劲�?团刷钱外挂]][[http://www.hn9.cn/4rxjhwg 热血江湖外挂]][[http://www.hn9.cn/4xlxz 迅雷下载]][[http://www.hn9.cn/4xl4 迅雷4]][[http://www.hn9.cn/4ehtxz e�?通下载]][[http://www.hn9.cn/4jsjsg 教师节诗歌]][[http://www.hn9.cn/4cqsf 传奇�?�?]][[http://www.hn9.cn/4cqsjsf 传奇世界�?�?]][[http://www.hn9.cn/4xkcqsf 新开传奇�?�?]][[http://www.hn9.cn/4cssf 传世�?�?]][[http://www.hn9.cn/4qjsf 奇迹�?�?]][[http://www.hn9.cn/4cqsfdlq 传奇�?�?登陆器]][[http://www.hn9.cn/4mssjsf 魔兽世界�?�?]][[http://www.hn9.cn/4mfrydsjgk �?费人鱼电视剧观看]][[http://www.hn9.cn/4fbqs 傅彪去世]][[http://www.hn9.cn/4zgczx 中关�?�在线]][[http://www.hn9.cn/42004bddtxz 2004版点点通下载]][[http://www.hn9.cn/4btxz bt下载]][[http://www.hn9.cn/4wnwb 万能五笔]][[http://www.hn9.cn/4sjzj 手机之家]][[http://www.hn9.cn/4sxsj 三星手机]][[http://www.hn9.cn/4sjdq 手机大全]][[http://www.hn9.cn/4njysj 诺基亚手机]][[http://www.hn9.cn/4sjbj 手机报价]][[http://www.hn9.cn/4mp3xz mp3下载]][[http://www.hn9.cn/4mp3mfxz mp3�?费下载]][[http://www.hn9.cn/4mp3gqxz mp3歌曲下载]][[http://www.hn9.cn/4mp3gq mp3歌曲]][[http://www.hn9.cn/4lzsj �?�众世界]][[http://www.hn9.cn/4xbcq �?兵传奇]][[http://www.hn9.cn/4rxcq 热血传奇]][[http://www.hn9.cn/4lts �?�天室]]

Latest revision as of 00:18, 23 April 2006

XUL 2.0 Templates

The goal here is improve the XUL template builder to be more useful to developers. Several proposals have been made, some simple and others more complex. None that I know of have been specified to any level of detail that would make them possible to implement. In this proposal, I provide specifics of how work on the template builder should proceed. It is primarily based on the other proposals.

Some specific things that have been desired include:

  • support for other types of data besides RDF
  • better logging and debugging
  • conditions which are more complex (negations, substring matching, etc...)

Some proposals have been large and difficult to implement quickly. While backwards compatibility with existing templates isn't a long term goal, it must be in the short term, since changing all the existing templates used in Mozilla is a lot of work. Instead, changes should be made incrementally. I've spent some time over the last while beginning the first of the steps outlined below and am quite sure that this is possible.

  1. Break the Template Builder into two components, one to do rule parsing and content generation, and the other to do query and result generation. The former is not dependant on RDF, while the latter is.
  2. Change the datasource handling to be able to handle different types of datasources and allow different Query Processors to be used.
  3. Add a better means of logging and debugging templates.
  4. Add a Query Processor that uses an XML datasource, probably using XPath queries.
  5. Add some default handling syntax for other types of datasources where the queries aren't as complex.
  6. Add more control over recursion
  7. Add any additonal syntax that anyone desires to the Template Builder.

In this last step we can add other features, like externally referenced blocks for parts of the template body, specifying more complex recursion, modifying the DOM generation, or any of the extras others have suggested.

There's also the sort service stuff which should eventually be simplified.

Templates

A template is a container element with a <template> inside it. The <template> is hidden, but its contents specify how to generate content from a Datasource. The content is inserted as siblings after the <template>. (This might later be changed to be anonymous siblings in step 6 above.)

The Datasource is specified using the datasources attribute on the container element. Any form of Datasource may be used, in general it will be a URL of something. The datasource retrieval process is described in detail later.

A Template Builder is responsible for generating content from the Datasource and template. Two subtypes, the Content Builder for normal content, and the Tree Builder for non-content trees are used. The only difference is that while the Content Builder generates DOM nodes from the template, the Tree Builder stores the output internally as a tree of results.

A second object, called a Query Processor, is responsible for generating results to be displayed. However, the Template Builder does the work of generating content from the results.

The Query Processor that is used will probably be dependant on the datasource, but one may specified explicitly in the template, including one implemented by an application in native code or JavaScript. This allows different Query Processors to be used, even for the same kind of data, although only one may be used per template. For instance, one might implement a Query Processor which processes XQuery on an XML datasource.

The Query Processor generally is expected to act as a layer between the Template Builder and the Datasource. The Template Builder doesn't interact with the data in the Datasource directly.

Template building consists of several steps:

The Compilation Step

The Template Builder compiles the queries and rules into an internal form. For the query this is done by calling the Query Processor.

The Query Processor takes a query node, compiles into into whatever form is necessary and then later uses it to generate a set of results.

The syntax of the query node designated by a <query> tag is determined by the Query Processor and has no predefined semantics. However, some form of default syntax will probably be available for simple cases so that Query Processors may be implemented easier.

In the RDF case, the query will contain the <content>, <member> and <triple> tags and will be compiled by the RDF Query Processor into a rule network, as is the case with the current template system.

The Query Step

Given an initial reference point and a query, generate a set of results. The actual specifics of the query and generation are left to a separate object called a Query Processor. The Query Processor takes a query node, compiles into into whatever form is necessary and then uses it to generate a set of results. The reference point may be used as a context for generating results. At the top level of the template, this is specified using the ref attribute.

Each result generated by the Query Processor consists of the following:

  • an id, which is unique for a set of results
  • an indication of whether a result is a container or not
  • an indication of whether a result is empty or not
  • a set of (variable -> value) pairs

How this information is determined is dependant on the Query Processor. For example, for an SQL processor, the variables might be the column names and the values of the variables are the values in those columns for each result.

Example:

 <query>
   select name, address from Users
 </query>

In this example, ?name and ?address will be available in each result. Naturally, for SQL output, there will be no containers. The id of each record might be constructed from the primary key.

Usually, one variable is designated as the member variable. This is typically used in the query to define what part of the query is most relevant to the results. For SQL, for instance, this would have little significance. For other types of data, for example a path-like query like XPath, it would be used to indicate what part of the navigation holds the results to separate it from parts which are used only to gather additional data.

The results from the Query Processor are expected to be returned in order and they will normaly be used in that order by the Template Builder, unless the Template Builder has been specified to use sorting in which case they will later be sorted.

The Query Processor itself may be a separate component, so one that is, for example, specific to SQL or mozStorage or web services would be included as part of those components instead of the template builder. Other simple Query Processors could even be implemented in XBL, for instance, for generating data from an array or JavaScript structure.

The Filter and Match Step

In this step, the Template Builder iterates through a set of rules, once for each result. For each result, an attempt is made to match the result to a set of rules. Each rule consists of three components:

  • a set of match criteria (conditions)
  • an additional set of (variable -> value) pairs to define (bindings)
  • an action section containing the output to generate on a match (action)

The result is first examined using the match criteria. This is defined inside a <conditions> block using various forms. The actual conditions syntax and semantics are defined by the template builder, so a common simple language will be used. Most likely, this will be fairly simple, involving only a set of relational steps (such as ?x < ?y, ?y startswith "A", etc...)

The user may add additional conditions by suppling a Rule Filter which takes as an argument a result and returns true or false if there is a match. This Rule Filter may be written in native code or script for more complex situations. This allows greater flexibility when defining complex rules. However if a separate Rule Filter is not supplied, the default conditional processing will occur.

If a result is determined not to match a rule's conditions, the next rule is examined for that result. This continues until a rule is found which matches. If no rule is found, the result is dropped and does not get used in the output. Only one rule will match a result at a time. Once a rule is found where the conditions are satisfied, the other rules are not examined. Naturally, a rule with empty conditions will match by default.

If a result matches a rule, the bindings (or optional assignments) part adds additional (variable -> value) pairs. This is used to avoid calculating complex values before a rule is found to match. The Template Builder parses the <bindings> block, but the Query Processor assigns the bindings.


The Content Generation Step

The <action> section is used to specify the content that gets generated for the match. This works similarly to the existing XUL template mechanism. Each rule may have a different action, so different content may generated for each rule. One element is expected to have a uri attribute. The content above this element will be generated only once per query, while that element and it descendants will be generated once for each matching result. Naturally, since the content above the element will be generated only for the first match, the action for whichever rule first matches will apply. Later matches will not generate this additional content even if it is different in a different rule.

The element with the uri attribute is given an id attribute equivalent to the id of the corresponding result. The content and its descendants are examined for variable substitution. References to variables in attributes will be replaced by their corresponding values from the result.

The content generation is done entirely by the Template Builder. The Tree Builder is a subtype of the Template Builder which stores the data in a more optimal manner for large sets of data.

Once content generation is complete, the process may recurse to generate nested data. The value of the id of the result is used as the reference point (the ref) of the next iteration. The nested content will be inserted inside the element with the uri attribute. Note that this is how the existing XUL template mechanism works. However, there will need to be more direct control over how the recursion works. In particular, whether it recurses or not, where the nested content is generated and if a different set of rules should be used.

Content Updating

Some Query Processors may wish to support dynamic updating. That is, when the underlying datasource changes, the generated content should update to reflect this. The Query Processor is expected to determine when an update should occur and call the Template Builder indicating that a result needs to be updated. This would be the case in four situations:

  • a new result is available
  • a result has been removed
  • a result has changed such that it may match a different rule
  • a result has changed such that it will still match the same rule. This case applies when only a binding has changed, since the same rule would match.

While the Query Processor is responsible for determining when and which type of change has occured, the Template Builder is responsible for actually generating and removing the necessary content and checking which rule matches.

Note: a Query Processor is not required to support dynamic updating. In fact, there should be a means of turning it off even when it is supported. For instance, it is expected that most XML sources will be loaded from remote sources. It is likely that one would simply request a new document rather than modify an existing one. In this case, in makes sense to disable updating to reduce overhead.


General Syntax

The syntax is intended to be fairly similar to the existing syntax, at least at first. The goal is to implement something that is similar and backwards compatible first to avoid a lot of unnessesary additional work. Here is the general syntax, where items in curly braces are placeholders:

 <vbox datasources="{datasource}" ref="{reference point}">
   <template>
     <query>
       {query}
     </query>
     <rule>
       <conditions>
         {conditions}
       </conditions>
       <bindings>
         {bindings}
       </bindings>
       <action>
         {action}
       </action>
     </rule>
     ...
   </template>
 </vbox>

The <conditions> and <bindings> tags are optional, however the <action> is required. Naturally, without any conditions, the rule will match every result. As a shorthand in this case where there is only one rule, the <action> may be promoted to a location directly inside the template (as a sibling of the <query> tag); the syntax otherwise is the same.

The <queryset> tag which is used to group rules and queries together such that multiple queries may be done in one template, each with its own set of rules.

 <vbox datasources="{datasource}" ref="{reference point}">
   <template>
     <queryset>
       <query> ... </query>
       <rule> ... </rule>
     </queryset>
     <queryset>
       <query> ... </query>
       <rule> ... </rule>
     </queryset>
   </template>
 </vbox>

The Template Builder will process each queryset in sequence, generating results and content as it goes. However, if a later queryset has a query which causes a result to be generated that has the same id as one from an earlier queryset, the later result will be ignored. This is how the existing RDF template generation occurs.

The queryset syntax is intended to be a more formal way of specifying this behaviour, so that is more clear. For backwards compatibility with existing templates, if no <queryset> or <query> tags are present, a queryset is implied for each <rule> and the <conditions> tag inside a <rule> is considered to be the query.

Backwards Compatible Forms

There are several syntax forms uses only for backwards compatibility with existing XUL templates. They are used only when no <query> tag or query attribute is present. Things are determined as follows:

Each <rule> is considered to be wrapped inside a <queryset>. If there are no rules, consider there to be an implied rule containing the contents of the template.

If a <rule> contains a <conditions> element as a child, the <conditions> tag is considered to be the <query> and what would have been the conditions is empty. The Template Builder will invoke the Query Processor in the same way but using a different node. The <bindings> and <action> work as in normal usage.

If a <rule> does not contain a <conditions> element, a default query is used which generates one result for each child of the reference point and uses attributes specified on the <rule> to further specify constraints and variables. The content inside the <rule> in considered to be the action.

Here is an example. A <queryset> is added around the rule, and the <conditions> becomes the <query>.

 <vbox datasources="{datasource}" ref="{reference point}">
   <template>
     <rule>
       <conditions> {query} </conditions>
       <bindings> {bindings} </bindings>
       <action> {action} </action>
     </rule>
     ...
   </template>
 </vbox>

Only the RDF Query Processor needs to support these syntax forms.

Syntaxes Summary

  • template with a <query> and a <rule>
-> Full syntax; the rule should have a <conditions> tag and an <action> tag and may optionally have a <bindings> tag.
  • template with no <query> and a <rule> with no <action>
-> Simplified syntax (backwards compatibility only)
  • template with no <query> and a <rule> with an <action>
-> Full syntax (backwards compatibility only)


Full Syntax

Here is a list of all the tags and attributes:

<vbox datasources="{datasource}"
     ref="{reference point}"
     flags="dont-test-empty dont-build-content dont-recurse"
     template="{template node}"
     containment="{containment predicates}"
     infer="{infer source}"
     sortDirection="ascending"
     sortActive="true"
     sort="?var">
 <template type="{query-processor-name}"
           container="?ref"
           member="?member"
           query="{query string}"/>
   <queryset>
     <query>
       {query}
     </query>
     <rule>
       <conditions>
         <where var="?var"
                rel="contains"
                value="value"
                ignorecase="true"
                negate="true"/>
         <filter expression="{script}"/>
       </conditions>
       <bindings>
         <binding subject="?ref"
                  predicate="{expr}"
                  object="?var"/>
         <assign var="?var"
                 ref="?ref"
                 expr="{expr}"/>
       </bindings>
       <action>
         <label uri="?member"/>
       </action>
     </rule>
     ...
   </queryset>
   ...
 </template>
</vbox>

I'm using some declarative tags for the conditions here. Another possibility is to use a simple expression language in an attribute. The disadvantage of that is that to a developer, one might just as well use JavaScript as the expression language rather than inventing some other language. I'd imagine that using script would be less efficient for simple comparison checks, so a simple <where> tag is used instead. However, the <filter> tag or Rule Filters allow script processing for more complex situations.

The <assign> tag inside the <bindings> tag is equivalent to the <binding> tag but uses a different set of attributes to be more clearer for non-RDF usage.

Conditions

Read about Template Conditions

Recursion

Recursion is controled in one of two ways. The 'dont-recurse' flag disables it for all generated results. If the flag is omitted, the results are queried for a default value. This allows RDF to still be recursive while other types are not. There should also be some determination based on the element tag used.

The second method is to add an element or attribute (to be determined) inside the action, pointing to another <template> via its id. The causes that template to be parsed and used for child generation.

It isn't clear at this point whether recursion which generates a result with the same id should be allowed or rejected. The current template builder doesn't handle this gracefully for the non-lazily built case (generation of things that aren't menus or trees) and the existing Tree Builder seems to drop the duplicated items. Maybe someone could come up with a reason to have duplicated items, but I don't think this needs to be supported.

Datasources

Datasources are specified using the datasources attribute (singular datasource may be better but might be confusing to switch to a similar name). It specifies the datasource to use in the template. The attribute is a URL or id reference.

A URL reference (<listbox datasources="http://www.example.com/data") will cause that URL to be retrieved and parsed into an XML document. This document is used as the datasource to the template builder. In some to-be-determined manner, the document might instead be parsed into an RDF datasource which would then be used by the template builder. For RDF, multiple URLs may be specified which will be combined into an nsIRDFCompositeDataSource. Non-RDF sources may only specify a single URL. For XML this isn't an issue since one could always append several documents or nodes together before using them in a template.

An id reference is a hash (#) followed by the id of a <datasource> element in the same document. The <datasource> element handles the datasource loading and supplies it to the template builder.

 <datasource id="thesource" type="xml" src="http://www.example.com/data"/>

The datasource element will look up a datasource loader of the given type (in the example "xml"), probably by appending the type to a contract id as rdf: datasources are currently done. This will retrieve the datasource from the src attribute and supply it to the template builder. Multiple templates may refer to the same <datasource> element; in this case the source is only loaded once and shared by all templates that refer to it. Datasources may load asynchronously and will callback to the template builder to start generation.

If there is no src attribute, the tag itself it used as the xml datasource.

An error event (onerror) may be used for error handling. Other attributes on the <datasource> tag may be used for datasource-specific purposes.


Examples

Here is an example for generating XML, assuming some simple query syntax. (note: people should be a different namespace -- there will be issues here)

 <datasource id="data" type="xml">
   <people>
     <person name="Fred" gender="male"/>
     <person name="Sarah" gender="female"/>
   </people>
 </datasource>
 <listbox datasources="#data">
   <template>
     <query>
       <results expr="person"/>
       <assign var="?name" expr="@name"/>
       <assign var="?gender" expr="@gender"/>
     </query>
     <rule>
       <conditions>
         <where var="?gender" rel="equals" value="male"/>
       </conditions>
       <action>
         <listitem uri="?" class="isMale" label="?name"/>
       </action>
     </rule>
     <rule>
       <action>
         <listitem uri="?" label="?name"/>
       </action>
     </rule>
   </template>
 </vbox>


An SQL example:

 <vbox datasources="{sql-datasource-reference}">
   <template>
     <query>
       select name, artist, cost from Albums
     </query>
     <action>
       <hbox uri="?">
         <label value="?name"/>
         <label value="?artist"/>
         <label value="?cost"/>
       </action>
     </rule>
   </template>
 </vbox>

API

See the XUL Templates API

Sort Service

See the XUL Sort Service