第Ⅰ部分 引言 2
第1章 什么是XML 2
1.1数据、文件和文本 2
1.1.1二进制文件 2
1.1.2文本文件 3
1.1.3标记语言的简史 4
1.2什么是XML 5
1.2.1 XML能给我们带来什么好处 7
1.2.2 HTML和XML——苹果与鲜艳可口的苹果 10
1.2.3信息的层级结构 11
1.2.4什么是文档类型 13
1.2.5究竟什么是文档类型 13
1.3 XML标准的诞生 14
1.3.1万维网联盟 14
1.3.2 XML的组成 14
1.4 XML的应用 15
1.4.1减轻服务器负荷 15
1.4.2 Web站点内容 16
1.4.3分布式计算 16
1.4.4电子商务 16
1.5小结 17
1.6习题 17
第2章 良构的XML文档 18
2.1解析XML文档 18
2.2标签、文本和元素 19
2.3属性 31
2.4注释 36
2.5空元素 39
2.6 XML声明语句 40
2.6.1 version属性 41
2.6.2 encoding属性 41
2.6.3 standalone属性 43
2.7处理指令 45
2.8非法的PCDATA字符 48
2.8.1转义字符 48
2.8.2 CDATA文本段 49
2.9 XML中的错误 51
2.10小结 51
2.11习题 52
第3章 XML名称空间 53
3.1为什么需要名称空间 53
3.1.1使用前缀 54
3.1.2为什么XML不直接使用这些前缀 56
3.2 XML名称空间的运行机制 57
3.2.1默认的名称空间 60
3.2.2不同的符号就一定不同吗 64
3.2.3名称空间和属性 66
3.3理解URI 69
3.3.1 URL 69
3.3.2 URN 70
3.3.3为什么用URL而不是URN表示名称空间 70
3.3.4名称空间URl的真实含义 71
3.3.5 RDDL 71
3.4什么时候使用名称空间 72
3.5小结 72
3.6习题 73
第Ⅱ部分 验证 75
第4章 文档类型定义 75
4.1运行实例 75
4.1.1准备工作 76
4.1.2文档类型声明 79
4.2词汇共享 82
4.3解剖一个DTD 83
4.3.1元素声明 83
4.3.2属性声明 95
4.3.3实体 104
4.4开发DTD定义 113
4.5 DTD的局限性 113
4.5.1 DTD语法 114
4.5.2 XML名称空间 114
4.5.3缺少数据分类 114
4.5.4受限的内容模型描述 114
4.6小结 115
4.7习题 115
第5章 XML Schema 116
5.1 XML Schema的优点 116
5.1.1 XML Schema使用XML语法 117
5.1.2 XML Schema支持名称空间 117
5.1.3 XML Schema的数据类型 117
5.1.4 XML Schema的内容模型 117
5.2我们还需要DTD吗 118
5.3 XML Schema 118
5.3.1 XML Schema文档 118
5.3.2实例运行 119
5.3.3 <schema>声明 122
5.3.4 <element>声明 124
5.3.5 <complexType>声明 132
5.3.6 <group>声明 134
5.3.7内容模型 135
5.3.8 <attribute>声明 142
5.3.9 <attributeGroup>声明 148
5.3.10用简单内容和属性创建元素 150
5.3.11数据类型 151
5.3.12 <simpleType>声明 156
5.4创建一个来自多个文档的模式 161
5.4.1 <import>声明 162
5.4.2 <include>声明 165
5.5 XML Schema的开发文档 167
5.5.1注释 167
5.5.2来自其他名称空间的属性 168
5.5.3注解 168
5.6小结 170
5.7习题 170
第6章 RELAX NG 171
6.1 XML与紧凑型语法 172
6.2 RELAX NG样式 172
6.3样式和语法的组合、重用 184
6.3.1命名样式 184
6.3.2组合命名的样式定义 187
6.3.3用include指令实现模式的模块化 188
6.3.4重定义插入的命名样式 189
6.3.5用notAllowed属性删除样式 189
6.3.6扩展和限制 190
6.3.7嵌套语法 191
6.4 RELAX NG的其他特性 192
6.4.1名称空间 192
6.4.2名称类 193
6.4.3数据类型 196
6.4.4表样式 199
6.4.5 注释与分区 199
6.5资源链接 200
6.6小结 200
6.7习题 200
第Ⅲ部分 处理过程 202
第7章 XPath 202
7.1 XML文档的表示方法 203
7.2 XML文档的模型 203
7.3可视化XPath 204
7.3.1理解上下文 205
7.3.2什么是XPath的结点 206
7.3.3 XPath 1.0的类型 209
7.4简写语法和详写语法 210
7.5 XPath 1.0轴 211
7.5.1子轴 211
7.5.2属性轴 212
7.5.3祖先轴 214
7.5.4祖先自身轴 215
7.5.5子孙轴 215
7.5.6子孙自身轴 215
7.5.7后继轴 216
7.5.8后继兄弟轴 217
7.5.9名称空间轴 218
7.5.10双亲轴 220
7.5.11前驱结点 220
7.5.12前驱兄弟轴 221
7.5.13自身轴 222
7.6 XPath 1.0的函数 222
7.6.1布尔函数 223
7.6.2结点集函数 223
7.6.3数值函数 223
7.6.4字符串函数 224
7.7谓词 225
7.8 XPath表达式的结构 226
7.9 XPath 2.0 228
7.9.1改进的XPath数据模型 228
7.9.2 W3C XML Schema数据类型 228
7.9.3 XPath 2.0新增的函数 228
7.9.4 XPath 2.0特性 228
7.10小结 232
7.11习题 232
第8章 XSLT 233
8.1什么是XSLT 233
8.1.1重构XML 234
8.1.2显示XML文档 234
8.2 XSLT处理器的处理过程 234
8.3实例运行 235
8.3.1 Saxon XSLT处理器简介 235
8.3.2 Saxon XSLT处理器的安装 235
8.4过程性语言与描述性语言 237
8.4.1过程性语言 237
8.4.2描述性语言 237
8.5 XSLT的基本元素 238
8.5.1 <xsl:stylesheet>元素 240
8.5.2 <xsl:template>元素 240
8.5.3 <xsl:apply-templates>元素 241
8.6从源树中读取信息 242
8.6.1 <xsl:value-of>元素 242
8.6.2 <xsl:copy>元素 243
8.6.3 <xsl:copy-of>元素 246
8.7用<xsl:output>元素控制输出 248
8.8条件处理 249
8.8.1 <xsl:if>元素 249
8.8.2 <xsl:choose>元素 251
8.9 <xsl:for-each>元素 253
8.10 <xsl:sort>元素 254
8.11 XSLT模式 256
8.12 XSLT变量和参数 260
8.13命名模板和<xsl:call-template>元素 262
8.14 XSLT函数 263
8.15 XSLT 2.0 263
8.15.1 XSLT 2.0的分组元素 264
8.15.2非XML输入源和字符串处理 266
8.15.3多文档输出 269
8.15.4用户自定义函数 271
8.15.5 xsl:value-of的变化 272
8.16小结 273
8.17习题 273
第Ⅳ部分 数据库 275
第9章 XML查询语言——XQuery 275
9.1为什么出现XQuery 275
9.1.1历史因素 275
9.1.2技术因素 276
9.1.3现状 276
9.2 XQuery工具 278
9.2.1 Saxon简介 278
9.2.2 X-Hive.com在线帮助 280
9.2.3 X-Hive数据库 280
9.2.4 Tamino数据库 280
9.2.5微软的SQL Server 2005 280
9.2.6 Oracle 281
9.3 XQuery实例 281
9.3.1输入函数 281
9.3.2检索结点 282
9.3.3元素构造器 285
9.3.4 XQuery序体 288
9.3.5 XQuery序体(续) 289
9.3.6 计算构造器 291
9.3.7语法 292
9.4 XQuery数据模型 293
9.4.1与XPath 2.0和XSLT 2.0共享的数据模型 293
9.4.2结点类型 293
9.4.3结点集序列 293
9.4.4文档顺序 293
9.4.5 项与结点的比较 294
9.4.6 XQuery的数据类型 294
9.4.7 XQuery的轴 294
9.5 XQuery的表达式 294
9.6 XQuery函数 300
9.6.1 concat()函数 300
9.6.2 count()函数 301
9.7在XQuery查询命令里使用参数 301
9.8用户自定义函数 302
9.9展望 303
9.9.1升级功能 303
9.9.2全文搜索 304
9.10小结 304
9.11习题 304
第10章 XML与数据库 305
10.1对有效的XML数据存储的需求 305
10.1.1日益增大的XML数据量 306
10.1.2比较基于XML的数据和关系数据 306
10.2存储XML的方法 307
10.2.1把XML保存到文件系统里 307
10.2.2 XML与传统数据库 309
10.2.3原生XML数据库 310
10.3原生XML数据库的使用 311
10.3.1获取并安装eXist 311
10.3.2交互操作exist 312
10.4 XML在商业化的RDBMS数据库里的作用 322
10.4.1 SQL Server 2000的XML功能 323
10.4.2支持Web服务 347
10.5在开放源代码RDBMS中使用XML 348
10.5.1安装MySQL 348
10.5.2在MySQL里添加信息 348
10.5.3 MySQL查询命令 351
10.5.4用MySQL更新XML数据 355
10.5.5在MySQL里使用XML 356
10.5.6客户端对XML的支持 356
10.6选择一个存储XML的数据库 357
10.7未来展望 358
10.8小结 358
10.9习题 358
第Ⅴ部分 程序设计 360
第11章 文档对象模型(DOM) 360
11.1 XML DOM的作用 360
11.2 W3C与文档对象模型 363
11.3显示DOM结点的两种方法 364
11.4运行实例的工具软件 365
11.5结点对象 372
11.5.1 Node对象的属性 373
11.5.2 Node对象的方法 376
11.5.3装入 XML文档 376
11.5.4文本结点的效果 381
11.5.5 NamedNodeMap对象 384
11.5.6 NodeList对象 388
11.5.7 DOMException对象 388
11.6 Document接口 390
11.7在InfoPath 2007中应用XML DOM 392
11.8小结 393
11.9习题 393
第12章 XML简单API 394
12.1 SAX的本质和作用 394
12.1.1 SAX简史 395
12.1.2从哪里下载SAX软件 395
12.1.3设置SAX 396
12.2接收SAX事件 396
12.2.1 ContentHandler接口 397
12.2.2 ErrorHandler接口 412
12.2.3 DTDHandler接口 416
12.2.4 EntityResolver接口 417
12.2.5 特性与属性 417
12.2.6扩展接口 420
12.3 SAX的利与弊 421
12.4消费者、生产者和过滤器 421
12.5其他语言 422
12.6小结 422
12.7习题 423
第Ⅵ部分 通信 425
第13章 RSS、Atom和内容聚合 425
13.1聚合与元数据 425
13.1.1聚合系统 426
13.1.2 RSS的起源 429
13.1.3 RSS-DEV和RSS 1.0 433
13.1.4 UserLand与RSS 2.0 434
13.1.5 Atom格式 436
13.2新闻feed 438
13.2.1新闻阅读器 439
13.2.2数据质量 439
13.3一个简单的聚合器 439
13.3.1 feed模型 439
13.3.2程序流程 442
13.3.3实现程序 442
13.3.4用XSLT转换RSS格式 457
13.4几个有用的网站地址 466
13.5小结 467
13.6习题 467
第14章 Web服务 468
14.1什么是远程过程调用 468
14.2 RPC协议 469
14.2.1 DCOM 469
14.2.2 IIOP 470
14.2.3 Java RMI 471
14.3新的RPC协议——Web服务 471
14.3.1 XML-RPC 472
14.3.2网络传输 475
14.4使用REST规范 489
14.5 Web服务的堆栈技术 493
14.5.1 SOAP 493
14.5.2 WSDL 494
14.5.3 UDDI 494
14.5.4 相关规范 495
14.6小结 497
14.7习题 497
第15章 SOAP和WSDL 498
15.1 SOAP基础 498
15.2在Windows 2003、XP和2000操作系统里运行实例 499
15.3 RPC新协议——SOAP 499
15.3.1使用REST 502
15.3.2基本的SOAP消息 503
15.3.3比较复杂的SOAP交互 509
15.4定义Web服务语言——WSDL 519
15.4.1 <definitions> 520
15.4.2 <types> 520
15.4.3 <messages> 521
15.4.4 <portTypes> 522
15.4.5 <binding> 522
15.4.6 <soap:body> 524
15.4.7 <service> 524
15.4.8其他绑定方式 527
15.5小结 530
15.6习题 530
第16章 Ajax 531
16.1异步更新的最初尝试 531
16.1.1微软与Mozilla之间的较量 532
16.1.2跨浏览器解决方案 533
16.2基本的发送步骤 534
16.3服务器的传输和处理过程 537
16.3.1 JSON 537
16.3.2信用卡验证程序 538
16.3.3 AutoSuggest下拉框 543
16.4服务器端的代理 563
16.5小结 567
16.6习题 568
第Ⅶ部分 显示 570
第17章 样式表(CSS) 570
17.1为什么使用样式表 570
17.2 CSS简介 571
17.2.1 CSS属性 572
17.2.2继承 573
17.2.3把样式表插入到XML文档 577
17.2.4选择符 577
17.3 CSS用于XML文档的布局 578
17.3.1盒模型 579
17.3.2样式表的定位 582
17.4设计表格数据 592
17.5 XML文档中的链接 594
17.5.1 Firefox对XLink的支持 594
17.5.2用XHTML名称空间建立超链接 597
17.6在XML文档里插入图像 597
17.7通过样式表给文档添加内容 598
17.8属性内容 600
17.8.1属性选择符 601
17.8.2在XML文档里使用属性值 601
17.9小结 603
17.10习题 603
第18章 XHTML语言 605
18.1样式与内容相互独立 606
18.2 XHTML 1.x 607
18.2.1 XHTML的文档类型定义 607
18.2.2设计XHTML文档的基本变化 609
18.2.3格式化XHTML文档 618
18.2.4严格型文档处理速度更快 619
18.2.5 XHTML工具 620
18.2.6验证XHTML文档 620
18.2.7文档验证存在的陷阱 622
18.2.8 MIME类型存在的陷阱 623
18.3 XHTML模块化 625
18.3.1模块实现程序 627
18.3.2 XHTML 1.1 627
18.3.3 XHTML基本型 627
18.4 XHTML的未来趋势 629
18.5小结 630
18.6习题 631
第19章 可缩放矢量图形(SVG) 632
19.1什么是SVG 632
19.1.1可缩放、矢量和图形 633
19.1.2启动SVG 633
19.1.3 SVG工具软件 634
19.2 SVG初步 635
19.2.1视图和单位 638
19.2.2画家模型 638
19.2.3组 640
19.2.4坐标变换 640
19.2.5路径命令 640
19.2.6 图像 643
19.2.7文本 644
19.2.8 注释(Comments)、说明(Annotation)和元数据(Metadata) 644
19.2.9脚本设计 646
19.2.10网站上的sVG 647
19.3 Tangram一个实例程序 648
19.3.1 XHTML包装器 648
19.3.2 SVG图形 649
19.3.3 Tangram脚本程序 653
19.4阅读材料 660
19.5小结 660
19.6习题 661
第20章 XForms 662
20.1 XForms对HTML表单的改进 662
20.2 XForms工具 663
20.3一个演示性的XForms实例 667
20.4 XForms表单控件 673
20.4.1 xforms:input元素 673
20.4.2 xforms:secret元素 674
20.4.3 xforms:textarea元素 674
20.4.4 xforms:output元素 674
20.4.5 xforms:upload元素 674
20.4.6 xforms:range元素 675
20.4.7 xforms:trigger元素 675
20.4.8 xforms:submit元素 675
20.4.9 xforms:select元素 676
20.4.10 xforms:selectl元素 677
20.5 XForms实例的约束条件 682
20.5.1 xforms:bind元素 682
20.5.2在XForms中使用W3CXML Schema 686
20.5.3 Schema或Bind元素:两者择其一 687
20.6 XForms事件 687
20.7 XForms动作模型 688
20.8其他方法 689
20.8.1微软的InfoPath 689
20.8.2 Adobe LiveCycle表单设计器 690
20.8.3 HTML表单 690
20.9小结 691
20.10习题 691
第Ⅷ部分 案例研究 693
第21章 案例研究——抵押贷款计算器 693
21.1抵押贷款计算 693
21.2准备工作 693
21.3在线贷款计算器 694
21.3.1嵌入Web计算服务 699
21.3.2用SVG改善贷款计算器的外观 713
21.3.3给主页添加框架 715
21.4小结 719
第22章 案例研究——基于Ruby onRails架构的抵押贷款计算器 720
22.1抵押计算器 720
22.2准备工作 721
22.3建立项目 721
22.4建立一个在线贷款计算器 722
22.4.1开发Web主页 723
22.4.2嵌入Web计算服务 729
22.4.3添加Ajax的支持 737
22.4.4用SVG改进显示效果 741
22.5小结 748
附录A 习题参考答案 749
附录B XPath参考 794
附录C XSLT参考 806
附录D XML文档对象模型 830
附录E XML Schema元素与属性参考手册 859
附录F XML Schema数据类型 883
附录G SAX 2.0.2参考手册 896