车东 chedong@netease.com Google XML接口的XSLT设计 车东 chedong@netease.com.

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
专题复习 --- 走进名著 亲近经典 读完《鲁滨孙漂流记》这本精彩的小说 后,一个高大的形象时时浮现在我的眼 前,他就是勇敢的探险家、航海家鲁滨 孙。他凭着顽强的毅力,永不放弃的精 神,实现了自己航海的梦想。 我仿佛看到轮船甲板上站着这样的一 个人:他放弃了富裕而又舒适的生活, 厌恶那庸庸碌碌的人生,从而开始了一.
高级服务器设计和实现 1 —— 基础与进阶 余锋
第六章 网页设计与制作基础.
控制方长投下的子公司,需要编制合并报表的演示思路
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
姻緣天注定 定婚店 李復言.
10-1 資料庫管理系統簡介 10-2 關聯式資料模式和查詢語言 10-3 Access 簡介 10-4 XML 簡介
企劃撰寫.
Web与信息检索 LJ JUFE-SIT.
通訊科技教育改進計畫 「網路應用與服務組」 行動電子商務課程 XML之簡介.
XML应用体系结构 Application DOM SAX DOM4J XPath XSL XLink XML Namespace
第8讲 HTML与PHP基础 静态网页 vs. 动态网页.
OrientX4.0系统开发报告 XML Group July 25, 2009.
DREAMWEVAER MX 2004入门 楼斌 BBS ID:lou 生命科学学院
信 息 与 软 件 工 程 学 院 实验室开放实验介绍.
XML 第05讲 使用CSS显示XML.
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
HTML簡介、文字的變化、超連結的使用 主講:朱漢琳.
第二章 網際網路網頁的設計.
《XML技术及其应用》 第1章 XML 基础知识 主讲教师:桂浩 武汉大学.
Ch1.認識全球資訊網 1.1 「網際網路」與「全球資訊網」 1.2 全球資訊網的基礎 – 網頁與超連結
第 2 章 必備的 HTML 與 CSS 重點.
第12章 XSL-FO格式化輸出PDF 12-1 XSL-FO的基礎 12-2 XSL-FO的文件架構 12-3 XSL-FO的頁面範本
EEI-XML 教學.
Ajax编程技术 第一章 Ajax简介.
第 3 章 XML文件的轉換 –XSLT與XPath
第二讲 搭建Java Web开发环境 主讲人:孙娜
学习前的准备工作 讲师:burning.
XSL: Extensible Stylesheet Language
扩展标记语言XML (Extensible Markup Language)
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
單元5-1:XSL XML的轉換語言 王豐緒 銘傳大學資工系.
XML基礎課程 5 數位芝麻網路公司 XML講師:蔡斐婷.
数据挖掘工具性能比较.
PaPaPa项目架构 By:Listen 我在这.
DevDays ’99 The aim of this mission is knowledge..
任务1-3 使用Dreamweaver创建ASP网页
实习前你需要知道的 PRESENTED BY Yisa.
WEB统一检索本地整合技术 中国农业大学图书馆 康实.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
编程作业3:网页正文抽取 (10分).
第三章 HTML相关技术基础知识 纵观各种动态页面开发技术,无论是JSP、ASP还是PHP都无 法摆脱HTML的影子。这些动态的页面开发技术无非是在静 态HTML页面的基础上添加了动态的可以交互的内容。HTML 是所有动态页面开发技术的基础。在接下来的章节将要详 细介绍的就是HTML相关的一系列技术,包括HTML、
第13章 CSS 通过CSS可以使用更丰富、更灵活的样式,更简单地 设计出更美观的网页。同时,也让网页的设计与维护 更有效率。CSS在网页设计中的作用尤为重要,是网 页设计师必备的知识。本章首先介绍什么是CSS、CSS 的基本语法等基础知识,接着学习利用“CSS”面板 管理规则,如何在Dreamweaver中创建与应用CSS样式.
C语言程序设计 主讲教师:陆幼利.
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
第 1 章 簡介XML.
$9 泛型基础.
第四章 团队音乐会序幕: 团队协作平台的快速创建
Drupal Dev 我想知道:什么时候、什么变化.
VisComposer 2019/4/17.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
關鍵字廣告工具、 搜尋引擎最佳化、 損益表實例
HTML大探索.
第4章 Excel电子表格制作软件 4.4 函数(一).
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
项目一 了解网站的概念 项目二 创建个人网站“鸿渐工作室” 项目三 制作“鸿渐工作室”的主页 项目四 HTML语言 项目五 制作“家乡特产”网页 项目六 制作“给我留言”网页 项目七 制作“应用技巧”网页 项目八 模板制作及应用.
WEB程序设计技术 数据库操作.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
西南科技大学网络教育系列课程 动态网页设计(JSP) 补充 JSP操作XML文件.
第17章 PHP應用實例探討 17-1 PHP應用實例探討 17-2 圖片版的訪客計數 17-3 訪客留言簿 17-4 聊天室
Presentation transcript:

车东 chedong@netease.com Google XML接口的XSLT设计 车东 chedong@netease.com

摘要 XML/XSLT的一些基本概念 XSLT和传统编程语言的比较 Google XML接口的XSLT设计中遇到的问题

传统开发中的问题 程序员/UI设计师职责不清晰,重复劳动很多 开发:UI和程序的开发无法并发进行 测试:无法区分数据/界面样式的错误 开发 维护:测试/更新 程序员 UI设计

XML设计意图:协作/分工/重用 程序员(数据) 用户输入数据校验 后台数据的正确性 调用XSLT模板转换XML数据源输出 结果:一劳永逸 UI设计师(形式) 模板设计 结果:工作难度提高 需要将XSLT当成一种编程语言来学习,日常维护可以独立进行 开发 维护:调试/更新 程序员 UI设计 较高的学习成本 较高的学习成本

XML 格式“象”HTML 主要面向:B2B的数据交换 更适于机器间的数据交换/绑定

XSLT XSL: eXtensible Stylesheet Language XSLT: XSL Transformations 是一种将XML转换成其他格式文档的编程语言 XSLT使用XPath在XML文档中定位节点

XML/XSLT的处理模式 网易 XSLT google 用户 xml html XSLT转换过程

XSLT对XML数据源转换过程 XML解析 xml:parse XSLT转换器: xslt:Transformer XML序列化 xml:Serializer 样式表树 XML解析 xml:parse XSLT输入: xslt:Source XSLT输出: xslt:Result 结果文档 xml XML数据源 结果文档 html 结果文档 text 数据源树 结果树 转换过程

XML:开发/调试工具 共同遵守的标准/规范:W3C Sun-JAXP 数据格式:google.dtd UI设计师:了解XSLT语法和调试方法 编辑工具:文本编辑器/XMLSpy… XSLT调试/测试工具:IE6/XT 程序员:了解工具包的使用 XSLT转换引擎:xalan XML解析器:xerces

Google/网易服务结构 1. HTTP GET 2. HTTP GET Round-Robin DNS Load balancing asia.google.com 亚洲数据中心 3. XML www.google.com 美国数据中心 Servlet Engine Web Server 4. HTML

提问? 后面将通过与传统编程类比方式,简单介绍一下XSLT语言

XSLT中的变量引用 xml: <Tag attr=“AttrValue”> Tag Value </Tag> xsl: <xsl:value-of select=“Tag” />  “Tag Value” <xsl:value-of select=“Tag/@attr" />  “AttrValue”

流程控制 <xsl:for-each> <xsl:if> <xsl:choose> <xsl:when> <xsl:otherwise>

匹配过程: match=“TAG”代替 m/^@?$#/ <xsl:template match=“TAG"> <!--do transfer…--> … </xsl:template> If ($line =~ /^TAG/) { #do transfer… … } vs.

匹配过程的模块化:函数重用 apply-templates代替sub function () Tag1(…); sub Tag1 () { if ($line =~ /^Tag2/ ) {… Tag2(…); } sub Tag2 () { … <xsl:template match="/"> <xsl:apply-templates select=“Tag1"/> </xsl:template> <xsl:template match="Tag1"> <xsl:apply-templates select=“Tag2"/> <xsl:template match=“Tag2"> … vs.

内置函数 XPath Functions number last() number position() number count(node-set) node-set id(object) string local-name(node-set) string namespace-uri(node-set) string name(node-set) string string(object) string concat(string1, string2, [string3, [string4], ...]) boolean starts-with(string1, string2) …… XSLT Functions node-set document(object, node-set?) node-set key(keyname, object) string format-number(number, formatstring, [decimalformat]) node-set current() string unparsed-entity-uri(string) string generate-id(node-set) object system-property(string) boolean element-available(string) ……

模板文件的模块化:函数库重用 <xsl:include href=“sub_module.xsl”/> <?xml version="1.0" encoding="GB2312"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:include href="style.xsl"/> <xsl:include href="header.xsl"/> <xsl:include href="footer.xsl"/> <xsl:include href="results.xsl"/> <xsl:include href="nav.xsl"/> <xsl:include href="ad.xsl"/> <xsl:include href="searchbox.xsl"/> … </xsl:stylesheet>

提问? 后面将具体介绍Google XML接口XSLT的模板设计过程中遇到的一些问题

忘掉HTML(常犯的错误常与HTML习惯有关) 如何将<NextPage>LinkValue</Next> 转成:<a href=“LinkValue”>下一页</a> 忘掉HTML(常犯的错误常与HTML习惯有关) <a href>…</a>在XML中和其他标记没有区别,都是符合XML标准的标记 最后问题归结为<a></a>是一个新的标记,标记的属性需要引用变量 正确的方法:<a href=“?q={Tag}”>上一页</a> {Tag} 是一种简化的<xsl:value-of>引用

最后序列化输出不想escaping 数据源中的标引:<b> <b> XSLT的转换结果首先是一个符合XML树,只是最后序列化成xml,html,text形式的文本 <xsl:text disable-output-escaping="yes"> <xsl:text>

其他常犯错误 正确 错误 <img src=”image.gif” /> “/”前需要空格 错误 <img src=”image.gif”> <a href=“?i=2&j=3”> <script src=“aa.js”></script> XSLT有IF,但没有 IF THEN ELSE… 正确 <img src=”image.gif” /> <a href= “?i=2&j=3” > 否则会将“&j=3”当成一个符号转义 <script src=“aa.js”><br /></script> 如果没有<br />就会序列化成:<script src=“” />这在html中是错误的 用xsl:choose xsl:when

XSLT引擎本身的一些限制 很多XSLT工具包都是按照IANA的规范设计的。规范定义中不包含GBK,因此序列化以后部分字符成为“??” http://www.iana.org/assignments/character-sets XSLT没有string_replace(因为是流式解析过程) “<b>” => “<d>” 可以 “<b>” => “<abc>” 不可以 用自定义函数=>比较复杂,而且会影响开发者的分工协作

Google接口的不足之处 通过固定参数顺序解决:Param[0]=>q Param[1]=>start 需要在程序里预先将字符串encoding好 通过style解决: blockquote b {color:red} 需要自己通过PARAM[]重新构造 肯定不能用小写(防止和html冲突),但大写缩写让客户比较难懂 使用xml_no_dtd接口 传递的参数用Param[]定义,构造搜索框,下一页时引用不方便 没有一个url encoded的query字段 不支持用户指定标引,缺省已经用“<b>key</b>”标引好了 数据有冗余:前页和后页的URL其实没用:命名方式的演化 命名方式的变化:GSP=>Suggestion 没有必要包含DTD声明,否则很多XSLT引擎的缺省设置会再向服务器端发一次请求要google.dtd

性能优化:XSLT的编译结果缓存 一个很好的例子:http://www.onjava.com/lpt/a//onjava/excerpt/java_xslt_ch5/index.html 序列化输出 解析数据源 解析XSL模板 模板编译

通用性设计 模板中的URL尽量使用 <a href=“?param=value”>… 可以模板和程序页面的名称无关 程序员和UI设计师的工作尽可能互不影响

提问? 个人感受 谢谢! 理解新标准的设计意图,但不要指望用新标准解决所有问题; 新标准往往只是用来解决旧标准不擅长解决的问题; 实际问题的解决往往是通过传统方法和新方法结合起来实现的。 谢谢!