四、mybatis关联映射(多表联合查询)

多个表的联合查询操作

案例:联合查询用户表,身份编码表,订单表,商品表

其中:

  • 用户与身份编号表,一对一关系,一个用户对应一个编码,一个编码对应唯一一个用户。
  • 用户与订单,一对多关系,一个用户对应多个订单,一个订单对应一个用户。
  • 订单表与商品表,多对多关系,一个订单对应多个商品,一个商品可以对应多个订单。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    在这里插入图片描述

1 环境准备

1.1 新建数据库表

use mybatis;
# 创建一个编码表
CREATE TABLE  tb_idcard( 
     id INT PRIMARY KEY AUTO_INCREMENT,
     CODE VARCHAR(18)
);
INSERT INTO tb_idcard(CODE) VALUES('111111111111111');
INSERT INTO tb_idcard(CODE) VALUES('22222222222222');
INSERT INTO tb_idcard(CODE) VALUES('33333333333333');
# 创建一个用户表
create table tb_user(
     uid INT PRIMARY KEY AUTO_INCREMENT,
     uname VARCHAR(32),
     uage INT,
     usex VARCHAR(8),
     ucard_id INT UNIQUE,  
     FOREIGN KEY(ucard_id) REFERENCES tb_idcard(id)
);
insert into tb_user(uname,uage,usex,ucard_id) values('张三',20,'男',2);
insert into tb_user(uname,uage,usex,ucard_id) values('李四',18,'男',3);
insert into tb_user(uname,uage,usex,ucard_id) values('王五',22,'女',1);

# 创建一个订单表表
CREATE TABLE tb_orders (
  or_id int(32) PRIMARY KEY AUTO_INCREMENT,
  order_num varchar(32) NOT NULL,
  user_id int(32) NOT NULL,
  FOREIGN KEY(user_id) REFERENCES tb_user(uid)
);

INSERT INTO tb_orders(order_num,user_id) VALUES('20211111',1);
INSERT INTO tb_orders(order_num,user_id) VALUES('202222222',1);
INSERT INTO tb_orders(order_num,user_id) VALUES('202233333',2);
INSERT INTO tb_orders(order_num,user_id) VALUES('2022444444',3);

#创建一个商品表
CREATE TABLE tb_product (
  pd_id INT(32) PRIMARY KEY AUTO_INCREMENT,
  book_name VARCHAR(32),
  price DOUBLE 
 );
INSERT INTO tb_product(book_name,price) VALUES ('Java基础', '20');
INSERT INTO tb_product(book_name,price) VALUES ('前端技术', '30');
INSERT INTO tb_product(book_name,price) VALUES ('SSM框架', '4');

# 创建一个中间表
CREATE TABLE tb_ordersitem (
    id INT(32) PRIMARY KEY AUTO_INCREMENT,
    or_id INT(32),
    pd_id INT(32),
    FOREIGN KEY(or_id) REFERENCES tb_orders(or_id),
FOREIGN KEY(pd_id) REFERENCES tb_product(pd_id)
);
INSERT INTO tb_ordersitem(or_id,pd_id)  VALUES ('1', '1');
INSERT INTO tb_ordersitem(or_id,pd_id)  VALUES ('1', '3');
INSERT INTO tb_ordersitem(or_id,pd_id)  VALUES ('2', '2');
INSERT INTO tb_ordersitem(or_id,pd_id)  VALUES ('3', '1');
INSERT INTO tb_ordersitem(or_id,pd_id)  VALUES ('3', '2');
INSERT INTO tb_ordersitem(or_id,pd_id)  VALUES ('3', '3');

1.2 新建实体类

1 用户类

public class TUser {
    int uid;
    String uname;
    int uage;
    String usex;
    Idcard uidcard;
    List<Order> orderList;
}

2编码类

public class Idcard {
    private Integer id;
    private String code;
}

3 订单类

public class Order {
    int or_id;
    String order_num ;
    int user_id;
    List<Product> productList;
}

4 商品类

public class Product {
   int  pd_id;
   String book_name;
   double price;
   List<Order> orderList;
}

2 一对一查询

根据用户ID,查询用户信息,包括用户编号,需要用到tb_user与tb_idcard两张表

2.1 分步查询

嵌套查询的方式

1. 接口文件

public interface IdCardMapper {
    Idcard findIdcardById(int id);
}
public interface TUserMapper {
    TUser findTUserById(int id);
}

2. 映射文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yiwu.mapper.TUserMapper">
    <select id="findTUserById" resultMap="findIdCardByIDMapper">
        select * from tb_user where uid = #{uid}
    </select>
    <resultMap id="findIdCardByIDMapper" type="com.yiwu.pojo.TUser">
        <association property="uidcard" column="ucard_id" select="com.yiwu.mapper.IdCardMapper.findIdcardById"/>
    </resultMap>
</mapper>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yiwu.mapper.IdCardMapper">
<select id="findIdcardById" resultType="com.yiwu.pojo.Idcard">
    select * from tb_idcard where id = #{id}
</select>
</mapper>

2.2 同步查询

嵌套结果查询

1 接口文件

public interface TUserMapper {
    TUser findTUserById2(int id);
}

2 映射文件

<select id="findTUserById2" resultMap="findIdCardByIDMapper2">
    select u.*,card.id as cardID,card.code as ucard 
    from tb_user u,tb_idcard  card 
    where u.uid = #{uid} and u.ucard_id = card.id
</select>

<resultMap id="findIdCardByIDMapper2" type="com.yiwu.pojo.TUser">
    <id property="uid" column="uid"/>
    <result property="uname" column="uname"/>
    <result property="uage" column="uage"/>
    <result property="usex" column="usex"/>
    <association property="uidcard" javaType="com.yiwu.pojo.Idcard">
        <id property="id" column="cardID"/>
        <result property="code" column="ucard"/>
    </association>
</resultMap>

2.3 测试方法

@Test
public void test01(){
    TUser tUser = mapper.findTUserById2(1);
    System.out.println(tUser);
}

3 一对多查询

  • 使用用户表(tb_user)与订单表(tb_orders),通过用户id查询该用户的信息,及其关联的订单信息

  • 一个用户包含0条或多条订单信息。

3.1 分步查询

嵌套结果查询的方式

1. 接口文件

OrderMapper.java

package com.yiwu.mapper;
import com.yiwu.pojo.Order;
import java.util.List;
public interface OrderMapper {
    List<Order> findOrdersByUserId(int id);
}

TUserMapper.java

public interface TUserMapper {

    TUser findUserOrders(int id);
}

2 映射文件

orderMapper.xml

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yiwu.mapper.OrderMapper">

    <select id="findOrdersByUserId" resultType="com.yiwu.pojo.Order">
        select *
        from tb_orders
        where user_id = #{uid};
    </select>
</mapper>

TUserMapper.java

<select id="findUserOrders" resultMap="finUserOrderMapper">
        select *
        from tb_user
        where uid = #{uid};
</select>

<resultMap id="finUserOrderMapper" type="com.yiwu.pojo.TUser">
    <id property="uid" column="uid"/>
    <result property="uname" column="uanme"/>
    <result property="uage" column="uage"/>
    <result property="usex" column="usex"/>
    <collection property="orderList" column="uid" select="com.yiwu.mapper.OrderMapper.findOrdersByUserId"/>
</resultMap>

3.2 同步查询

嵌套结果查询

1. 接口文件

TUserMapper.java

package com.yiwu.mapper;

import com.yiwu.pojo.TUser;
public interface TUserMapper {

    TUser findUserOrders(int id);
    TUser findUserOrders1(int id);
}

2 映射文件

TUserMapper.xml

<select id="findUserOrders1" resultMap="finUserOrderMapper2">
    select u.*,o.*
    from tb_user u,tb_orders o
    where u.uid = #{id} and o.user_id = u.uid
</select>

<resultMap id="finUserOrderMapper2" type="com.yiwu.pojo.TUser">
    <id property="uid" column="uid"/>
    <result property="uname" column="uanme"/>
    <result property="uage" column="uage"/>
    <result property="usex" column="usex"/>
 <collection property="orderList" ofType="com.yiwu.pojo.Order">
     <id property="or_id" column="or_id"/>
     <result property="order_num" column="order_number"/>
 </collection>
</resultMap>

3.3 测试方法

@Test
public void test02(){
    //TUser tUser = mapper.findUserOrders1(1);
    TUser tUser = mapper.findUserOrders(1);
    System.out.println(tUser);
}

4 多对多查询

使用订单表(tb_orders)与商品表(tb_product)借助中间表(tb_ordersitem)

实现多对多查询,根据产品订单,查询该订单所包含的商品。

4.1 分步查询

嵌套结果查询的方式

1. 接口文件

ProductMapper.java

public interface ProductMapper {
    Product findProductbyId(int pdId);
}

OrderMapper.java

public interface OrderMapper {
    List<Order> findOrdersByUserId(int id);

    Order findOrderById(int id);
}

2 映射文件

ProductMapper.xml

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yiwu.mapper.ProductMapper">

    <select id="findProductbyId" resultType="com.yiwu.pojo.Product">
        select *
        from tb_product
        where pd_id in (select pd_id from tb_ordersitem where or_id = #{or_id})
    </select>
</mapper>

OrderMapper.xml

<select id="findOrderById" resultMap="FindOrderByIdMap">
    select *
    from tb_orders
    where or_id = #{id};
</select>
<resultMap id="FindOrderByIdMap" type="com.yiwu.pojo.Order">
    <id property="or_id" column="or_id"/>
    <result property="order_num" column="order_num"/>
    <collection property="productList" column="or_id" select="com.yiwu.mapper.ProductMapper.findProductbyId"/>
</resultMap>

4.2 同步查询

嵌套结果查询

1 接口文件

package com.yiwu.mapper;
import com.yiwu.pojo.Order;
import java.util.List;

public interface OrderMapper {
    //List<Order> findOrdersByUserId(int id);
   // Order findOrderById(int id);
    Order findOrderById2(int id);
}

2 映射文件

<select id="findOrderById2" resultMap="findOrderById2Map">
        select o.*,p.*
        from tb_orders o,tb_product p,tb_ordersitem  op
        where o.or_id = #{id} and op.or_id = o.or_id and op.pd_id = p.pd_id
</select>

<resultMap id="findOrderById2Map" type="com.yiwu.pojo.Order">
    <id property="or_id" column="or_id"/>
    <result property="order_num" column="order_num"/>
   <collection property="productList" ofType="com.yiwu.pojo.Product">
       <id property="pd_id" column="pd_id"/>
       <result property="book_name" column="book_name"/>
       <result property="price" column="price"/>
   </collection>
</resultMap>

4.3 测试方法

public void test03(){
    SqlSession sqlSession = MyBatisUtils.geSqlSession();
    OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
    //Order order = mapper.findOrderById2(2);
    Order order = mapper.findOrderById(2);
    System.out.println(order);
}

mybatis基础教程【5小时36讲全套】

重录版-推荐(36讲,无法分享组,点击前往bilibili查看全集)

19关联映射测试表的介绍

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第1章 XML简介 1.1 标记语言 1.2 XML的起源和目的 1.3 Web体系结构:过去与未来 1.3.1 传统Web体系结构 1.3.2 XML下的Web体系结构 1.4 XML基本特征 1.5 词汇表 1.5.1 科学词汇表 1.5.2 商业词汇表 1.5.3 法律词汇表 1.5.4 医学词汇表 1.5.5 计算机词汇表 1.6 XML技术的主要特性 1.6.1 格式正规的XML 1.6.2 文档类型定义 1.6.3 数据建模 1.6.4 文档对象模型 1.6.5 XML 简单API 1.6.6 命名空间和模式 1.6.7 链接和查询 1.6.8 转换XML 1.6.9 XML和数据库 1.6.10 服务器到服务器 1.6.11 电子商务与XML 1.6.12 使用样式 1.6.13 无线应用程序协议和WML 1.7 XML的应用程序举例 1.8 小结 第2章 XML语法 2.1 标记语法 2.1.1 字符 2.1.2 命名 2.2 文档部分 2.3 元素 2.3.1 起始标记 2.3.2 结束标记 2.3.3 空元素标记 2.3.4 标记:一个简单的例子 2.3.5 文档元素 2.3.6 子元素 2.3.7 元素嵌套 2.3.8 字符串 2.4 字符数据 2.5 属性 2.5.1 特殊属性 2.5.2 空白 2.5.3 行尾的处理 2.6 字符引用和实体引用 2.6.1 字符引用 2.6.2 实体引用 2.7 处理指令 2.8 注释 2.9 CDATA部分 2.10 文档结构 2.10.1 序言 2.10.2 尾声 2.11 XML语法小结 2.12 格式正规的文档 2.13 解析器 2.13.1 事件驱动的解析器 2.13.2 基于树的解析器 2.13.3 解析器基准测试 2.14 书籍目录应用程序 2.15 小结 第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 3.3.3 属性 3.3.4 条件部分 3.4 DTD的缺点 3.5 用于图书目录问题的DTD 3.5.1 图书目录问题的正式定义 3.5.2 对象关系问题 3.5.3 进一步讨论 3.6 小结 第4章 数据建模与XML 4.1 信息建模 4.1.1 静态模型和动态模型 4.1.2 文档和数据 4.1.3 从何处开始 4.1.4 静态信息模型 4.1.5 动态建模:对数据进行哪些处理? 4.2 设计XML文档 4.2.1 XML的两种角色 4.2.2 将信息模型映射到XML 4.3 模式语言和表示法 4.3.1 模式的作用 4.3.2 将DTD作为模式 4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX 1.0: XML简易API 6.1 事件驱动接口 6.2 SAX的由来 6.3 SAX的高级特性 6.3.1 可选择的源输入 6.3.2 处理外部实体 6.3.3 选择解析器 6.4 一些SAX设计模式 6.5 SAX 2.0 6.5.1 可配置的接口 6.5.2 核心的特性和属性 6.6 小结 第7章 命名空间和模式 7.1 混合词汇表 7.1.1 分解问题 7.1.2 重用 7.1.3 二义性与名称冲突 7.2 命名空间 7.3 定义和声明命名空间 7.3.1 声明一个命名空间 7.3.2 限定名 7.3.3 范围 7.4 在格式正规的书籍里使用命名空间 实例 7.5 模式 7.5.1 与DTD有关的问题 7.5.2 一个对创建模式的帮助 7.6 W3C在XML 模式方面的工作 7.6.1 DTD与XML 模式的比较 7.6.2 结构 7.6.3 数据类型 7.7 简化了的XML Data 7.7.1 MSXML对命名空间和模式的支持 7.7.2 数据类型 7.8 图书目录中的变化 7.8.1 为什么烦恼 7.8.2 重铸DTD 7.8.3 模式协调 7.9 小结 第8章 链接和查询 8.1 XML 信息集合 8.1.1 信息类型 8.1.2 信息集合的重要性 8.1.3 小结 8.2 链接 8.2.1 什么是链接? 8.2.2 W3C规范:XLink 8.3 Xpointer 8.3.1 HTML指针 8.3.2 Xpointer 规范 8.4 W3C Xpath推荐标准 8.4.1 Location Step 8.4.2 XPointer对XPath的扩展 8.4.3 Xpointer错误 8.4.4 小结 8.5 XML片段交换 8.5.1 什么是文档片段 8.5.2 文档片段的一些用途 8.5.3 问题:Bare文档片段并不总 是充分的 8.5.4 解决办法:环境信息 8.5.5 回顾实例 8.5.6 如何传输片段 8.5.7 小结 8.6 查询 8.6.1 什么是查询语言 8.6.2 关系型数据库和XML文档之间的区别 8.6.3 XML查询语言的发展历史 8.6.4 使用Xpath和XSLT查询XML文档 8.6.5 查询语言展望 8.7 小结 第9章 转换 XML 9.1 为什么转换 XML 9.1.1 在不同词汇表之间转换 9.1.2 动态转换 9.1.3 不同的浏览器 9.2 XSL 9.3 XSLT 样式表结构 9.3.1 创建模板 9.3.2 处理空白 9.3.3 输出格式 9.3.4 合并样式表 9.3.5 嵌入样式表 9.4 使用XSLT的例子 9.4.1 结构的转换 9.4.2 循环 9.4.3 排序 9.4.4 条件处理 9.4.5 名称模板 9.4.6 编号方式 9.4.7 拷贝 9.5 使用DOM进行XML文档的转换 9.5.1 用DOM进行结构的转换 9.5.2 在运行时修改一个XSLT文档 9.6 XSL转换与DOM转换的比较 9.7 小结 第10章 XML和数据库 10.1 存储XML 10.1.1 持续性问题 10.1.2 文档管理 10.1.3 XML存储和数据库 10.1.4 结论 10.2 XML的交换 10.2.1 数据标准 10.2.2 查询标准 10.2.3 结论 10.2.4 你可能需要的标准 10.3 图书目录的例子 10.3.1 处理存在的数据和应用 10.3.2 图书目录模式 10.4 结论 第11章 服务器到服务器 11.1 XML的传送 11.1.1 基于FTP的XML传送 11.1.2 XML和消息队列 11.1.3 基于HTTP的XML 11.1.4 基于SMTP的XML 11.2 作为一种分布式组件模式的XML 11.2.1 消息传送和串行化 11.2.2 紧耦合系统和松耦合系统 11.2.3 通信方式 11.3 XML-RPC 11.3.1 为什么使用XML-RPC 11.3.2 XML-RPC适用于何处 11.3.3 XML-RPC规范—技术全瞻 11.3.4 XML-RPC的实现 11.3.5 书籍应用例子 11.3.6 到哪里去 11.4 SOAP 11.4.1 XML-RPC++ 11.4.2 实现 11.4.3 结论 11.5 WebDAV 11.6 小结 第12章 电子商务和XML 12.1 什么是电子商务 12.1.1 对客户直接销售 12.1.2 企业对企业交易 12.1.3 信息共享和内容联合 12.1.4 EDI—电子数据交换 12.2 在电子商务中应用XML 12.2.1 通常的错误概念 12.2.2 在电子商务中使用XML的感受 12.3 展望未来 12.3.1 发现和调解 12.3.2 容器 12.3.3 代理 12.3.4 模板 12.4 理论转化为实现 12.5 电子商务解决方案 12.6 行业方案 12.6.1 纵向行业解决方案的关键 12.6.2 旅游 12.7 人力资源 12.7.1 HR-XML 12.7.2 健康 12.8 cXML—纵向行业的一个详细 例子 12.8.1 为什么有cXML 12.8.2 cXML协议规范 12.8.3 消息传输 12.9 第1步—横向行业 12.9.1 ASC X12 12.9.2 XML-EDIFACT 12.9.3 电子商务XML工作组 12.10 第1个横向步骤 12.10.1 BizTalk标记规范 12.10.2 规范的目标和当前的限制 12.10.3 文档结构 12.10.4 一个用于Wrox书店的BizTalk 文档 12.10.5 BizTalk Jumpstart工具包简介 12.10.6 BizTalk服务器 12.11 小结 第13章 样式XML 13.1 解释的位置 13.2 客户端的XML转换 13.3 解释模型 13.3.1 视觉解释 13.3.2 语音解释 13.3.3 如何将样式表链接到XML文档上 13.3.4 规则语言 13.3.5 CSS 13.3.6 XSL 13.3.7 用XSL解释XML 13.3.8 DSSSL 13.3.9 Omnimark 13.4 小结 第14章 无线应用协议 14.1 新客户介绍 14.2 了解无线环境 14.2.1 服务 14.2.2 无线网络 14.2.3 WAP如何解决无线网络应用遇到 的问题 14.3 介绍WML 14.3.1 怎样将第一份文档传送到电话上 14.3.2 WML文档的结构 14.3.3 通用属性 14.3.4 WML包括什么 14.3.5 Meta信息 14.3.6 基本字符、表格和演示 14.3.7 使用计时器 14.3.8 事件处理器 14.3.9 使用变量 14.3.10 任务和菜单 14.3.11 客户端模板 14.3.12 表单数据 14.3.13 图像 14.4 在服务器上生成WML 14.5 WROX的WML应用 14.6 WML脚本 14.6.1 基本概念 14.6.2 字节码 14.6.3 如何从WML上调用脚本函数 14.7 脚本库 14.7.1 决定浏览器的状态—WMLBrowser 脚本库 14.7.2 Dialogs库 14.7.3 特定的语言函数 14.7.4 浮点数 14.7.5 字符串 14.7.6 URL 14.8 如何得到更多的信息 14.9 小结 第15章 实例研究1─数据双重性 15.1 商业需求 15.2 系统要求 15.3 设计时间:让我们开始吧 15.4 实现方法概述 15.5 建立数据库 15.6 提供XML功能的ASP 15.7 客户端页面 15.8 “以编号浏览”XSL样式表 15.9 “以名字浏览”XSL样式表 15.10 激活XSL样式表 15.11 问题:保持树的同步 15.12 小结 第16章 实例研究2—XML和分布式 应用程序 16.1 目前的弱点 16.2 构建网络应用程序的五条原则 16.2.1 从粗粒度服务构建应用程序 16.2.2 通过查询目录发现服务 16.2.3 将服务提供为自描述数据 16.2.4 服务是短暂的 16.2.5 服务必须可扩展,且能够降低对 外部的要求 16.3 商业实例 16.4 应用程序设计 16.4.1 应用程序的组织 16.4.2 程序员服务客户端 16.4.3 服务 16.4.4 交换词汇表 16.5 实现 16.5.1 定位服务 16.5.2 管理数据绑定 16.6 输入和编辑程序员信息 16.6.1 客户端 16.6.2 服务器端 16.6.3 用于插入程序员信息的完整客户端 代码 16.6.4 用于插入程序员信息的完整服务器端 代码 16.7 搜索程序员信息 16.7.1 客户端 16.7.2 服务器端 16.8 清除程序员表单 16.9 输入程序员成果报告 16.9.1 客户端 16.9.2 服务器端 16.10 清除成果报告历史表单 16.11 获取程序员的成果历史 16.11.1 客户端 16.11.2 服务器端 16.12 经验教训 16.12.1 违反的开发原则 16.12.2 组件 16.12.3 重用的可能性 16.13 小结 第17章 实例研究3—图书目录信息服务 17.1 图书目录信息服务 17.1.1 系统概述 17.1.2 创建BCIS 17.2 小结 第18章 实例研究4--SOAP 18.1 追根溯源 18.2 SOAP Opera 18.2.1 OPERA客户端 18.2.2 OPERA服务器 18.2.3 订单输入应用程序 18.2.4 对象 18.3 小结 附录A 可扩展标记语言(XML)1.0 规范 附录B IE 5 XML文档对象模型 附录C SAX 1.0:XML简单API 附录D IE 5 XML模式和数据类型 附录E IE 5 XSL引用 附录F CSS属性 附录G 安装XT 附录H 支持与勘误
目 录 译者序 作者简介 前言 第1章 XML简介 1.1 标记语言 1.2 XML的起源和目的 1.3 Web体系结构:过去与未来 1.3.1 传统Web体系结构 1.3.2 XML下的Web体系结构 1.4 XML基本特征 1.5 词汇表 1.5.1 科学词汇表 1.5.2 商业词汇表 1.5.3 法律词汇表 1.5.4 医学词汇表 1.5.5 计算机词汇表 1.6 XML技术的主要特性 1.6.1 格式正规的XML 1.6.2 文档类型定义 1.6.3 数据建模 1.6.4 文档对象模型 1.6.5 XML 简单API 1.6.6 命名空间和模式 1.6.7 链接和查询 1.6.8 转换XML 1.6.9 XML和数据库 1.6.10 服务器到服务器 1.6.11 电子商务与XML 1.6.12 使用样式 1.6.13 无线应用程序协议和WML 1.7 XML的应用程序举例 1.8 小结 第2章 XML语法 2.1 标记语法 2.1.1 字符 2.1.2 命名 2.2 文档部分 2.3 元素 2.3.1 起始标记 2.3.2 结束标记 2.3.3 空元素标记 2.3.4 标记:一个简单的例子 2.3.5 文档元素 2.3.6 子元素 2.3.7 元素嵌套 2.3.8 字符串 2.4 字符数据 2.5 属性 2.5.1 特殊属性 2.5.2 空白 2.5.3 行尾的处理 2.6 字符引用和实体引用 2.6.1 字符引用 2.6.2 实体引用 2.7 处理指令 2.8 注释 2.9 CDATA部分 2.10 文档结构 2.10.1 序言 2.10.2 尾声 2.11 XML语法小结 2.12 格式正规的文档 2.13 解析器 2.13.1 事件驱动的解析器 2.13.2 基于树的解析器 2.13.3 解析器基准测试 2.14 书籍目录应用程序 2.15 小结 第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 3.3.3 属性 3.3.4 条件部分 3.4 DTD的缺点 3.5 用于图书目录问题的DTD 3.5.1 图书目录问题的正式定义 3.5.2 对象关系问题 3.5.3 进一步讨论 3.6 小结 第4章 数据建模与XML 4.1 信息建模 4.1.1 静态模型和动态模型 4.1.2 文档和数据 4.1.3 从何处开始 4.1.4 静态信息模型 4.1.5 动态建模:对数据进行哪些处理? 4.2 设计XML文档 4.2.1 XML的两种角色 4.2.2 将信息模型映射到XML 4.3 模式语言和表示法 4.3.1 模式的作用 4.3.2 将DTD作为模式 4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX 1.0: XML简易API 6.1 事件驱动接口 6.2 SAX的由来 6.3 SAX的高级特性 6.3.1 可选择的源输入 6.3.2 处理外部实体 6.3.3 选择解析器 6.4 一些SAX设计模式 6.5 SAX 2.0 6.5.1 可配置的接口 6.5.2 核心的特性和属性 6.6 小结 第7章 命名空间和模式 7.1 混合词汇表 7.1.1 分解问题 7.1.2 重用 7.1.3 二义性与名称冲突 7.2 命名空间 7.3 定义和声明命名空间 7.3.1 声明一个命名空间 7.3.2 限定名 7.3.3 范围 7.4 在格式正规的书籍里使用命名空间 实例 7.5 模式 7.5.1 与DTD有关的问题 7.5.2 一个对创建模式的帮助 7.6 W3C在XML 模式方面的工作 7.6.1 DTD与XML 模式的比较 7.6.2 结构 7.6.3 数据类型 7.7 简化了的XML Data 7.7.1 MSXML对命名空间和模式的支持 7.7.2 数据类型 7.8 图书目录中的变化 7.8.1 为什么烦恼 7.8.2 重铸DTD 7.8.3 模式协调 7.9 小结 第8章 链接和查询 8.1 XML 信息集合 8.1.1 信息类型 8.1.2 信息集合的重要性 8.1.3 小结 8.2 链接 8.2.1 什么是链接? 8.2.2 W3C规范:XLink 8.3 Xpointer 8.3.1 HTML指针 8.3.2 Xpointer 规范 8.4 W3C Xpath推荐标准 8.4.1 Location Step 8.4.2 XPointer对XPath的扩展 8.4.3 Xpointer错误 8.4.4 小结 8.5 XML片段交换 8.5.1 什么是文档片段 8.5.2 文档片段的一些用途 8.5.3 问题:Bare文档片段并不总 是充分的 8.5.4 解决办法:环境信息 8.5.5 回顾实例 8.5.6 如何传输片段 8.5.7 小结 8.6 查询 8.6.1 什么是查询语言 8.6.2 关系型数据库和XML文档之间的区别 8.6.3 XML查询语言的发展历史 8.6.4 使用Xpath和XSLT查询XML文档 8.6.5 查询语言展望 8.7 小结 第9章 转换 XML 9.1 为什么转换 XML 9.1.1 在不同词汇表之间转换 9.1.2 动态转换 9.1.3 不同的浏览器 9.2 XSL 9.3 XSLT 样式表结构 9.3.1 创建模板 9.3.2 处理空白 9.3.3 输出格式 9.3.4 合并样式表 9.3.5 嵌入样式表 9.4 使用XSLT的例子 9.4.1 结构的转换 9.4.2 循环 9.4.3 排序 9.4.4 条件处理 9.4.5 名称模板 9.4.6 编号方式 9.4.7 拷贝 9.5 使用DOM进行XML文档的转换 9.5.1 用DOM进行结构的转换 9.5.2 在运行时修改一个XSLT文档 9.6 XSL转换与DOM转换的比较 9.7 小结 第10章 XML和数据库 10.1 存储XML 10.1.1 持续性问题 10.1.2 文档管理 10.1.3 XML存储和数据库 10.1.4 结论 10.2 XML的交换 10.2.1 数据标准 10.2.2 查询标准 10.2.3 结论 10.2.4 你可能需要的标准 10.3 图书目录的例子 10.3.1 处理存在的数据和应用 10.3.2 图书目录模式 10.4 结论 第11章 服务器到服务器 11.1 XML的传送 11.1.1 基于FTP的XML传送 11.1.2 XML和消息队列 11.1.3 基于HTTP的XML 11.1.4 基于SMTP的XML 11.2 作为一种分布式组件模式的XML 11.2.1 消息传送和串行化 11.2.2 紧耦合系统和松耦合系统 11.2.3 通信方式 11.3 XML-RPC 11.3.1 为什么使用XML-RPC 11.3.2 XML-RPC适用于何处 11.3.3 XML-RPC规范—技术全瞻 11.3.4 XML-RPC的实现 11.3.5 书籍应用例子 11.3.6 到哪里去 11.4 SOAP 11.4.1 XML-RPC++ 11.4.2 实现 11.4.3 结论 11.5 WebDAV 11.6 小结 第12章 电子商务和XML 12.1 什么是电子商务 12.1.1 对客户直接销售 12.1.2 企业对企业交易 12.1.3 信息共享和内容联合 12.1.4 EDI—电子数据交换 12.2 在电子商务中应用XML 12.2.1 通常的错误概念 12.2.2 在电子商务中使用XML的感受 12.3 展望未来 12.3.1 发现和调解 12.3.2 容器 12.3.3 代理 12.3.4 模板 12.4 理论转化为实现 12.5 电子商务解决方案 12.6 行业方案 12.6.1 纵向行业解决方案的关键 12.6.2 旅游 12.7 人力资源 12.7.1 HR-XML 12.7.2 健康 12.8 cXML—纵向行业的一个详细 例子 12.8.1 为什么有cXML 12.8.2 cXML协议规范 12.8.3 消息传输 12.9 第1步—横向行业 12.9.1 ASC X12 12.9.2 XML-EDIFACT 12.9.3 电子商务XML工作组 12.10 第1个横向步骤 12.10.1 BizTalk标记规范 12.10.2 规范的目标和当前的限制 12.10.3 文档结构 12.10.4 一个用于Wrox书店的BizTalk 文档 12.10.5 BizTalk Jumpstart工具包简介 12.10.6 BizTalk服务器 12.11 小结 第13章 样式XML 13.1 解释的位置 13.2 客户端的XML转换 13.3 解释模型 13.3.1 视觉解释 13.3.2 语音解释 13.3.3 如何将样式表链接到XML文档上 13.3.4 规则语言 13.3.5 CSS 13.3.6 XSL 13.3.7 用XSL解释XML 13.3.8 DSSSL 13.3.9 Omnimark 13.4 小结 第14章 无线应用协议 14.1 新客户介绍 14.2 了解无线环境 14.2.1 服务 14.2.2 无线网络 14.2.3 WAP如何解决无线网络应用遇到 的问题 14.3 介绍WML 14.3.1 怎样将第一份文档传送到电话上 14.3.2 WML文档的结构 14.3.3 通用属性 14.3.4 WML包括什么 14.3.5 Meta信息 14.3.6 基本字符、表格和演示 14.3.7 使用计时器 14.3.8 事件处理器 14.3.9 使用变量 14.3.10 任务和菜单 14.3.11 客户端模板 14.3.12 表单数据 14.3.13 图像 14.4 在服务器上生成WML 14.5 WROX的WML应用 14.6 WML脚本 14.6.1 基本概念 14.6.2 字节码 14.6.3 如何从WML上调用脚本函数 14.7 脚本库 14.7.1 决定浏览器的状态—WMLBrowser 脚本库 14.7.2 Dialogs库 14.7.3 特定的语言函数 14.7.4 浮点数 14.7.5 字符串 14.7.6 URL 14.8 如何得到更多的信息 14.9 小结 第15章 实例研究1─数据双重性 15.1 商业需求 15.2 系统要求 15.3 设计时间:让我们开始吧 15.4 实现方法概述 15.5 建立数据库 15.6 提供XML功能的ASP 15.7 客户端页面 15.8 “以编号浏览”XSL样式表 15.9 “以名字浏览”XSL样式表 15.10 激活XSL样式表 15.11 问题:保持树的同步 15.12 小结 第16章 实例研究2—XML和分布式 应用程序 16.1 目前的弱点 16.2 构建网络应用程序的五条原则 16.2.1 从粗粒度服务构建应用程序 16.2.2 通过查询目录发现服务 16.2.3 将服务提供为自描述数据 16.2.4 服务是短暂的 16.2.5 服务必须可扩展,且能够降低对 外部的要求 16.3 商业实例 16.4 应用程序设计 16.4.1 应用程序的组织 16.4.2 程序员服务客户端 16.4.3 服务 16.4.4 交换词汇表 16.5 实现 16.5.1 定位服务 16.5.2 管理数据绑定 16.6 输入和编辑程序员信息 16.6.1 客户端 16.6.2 服务器端 16.6.3 用于插入程序员信息的完整客户端 代码 16.6.4 用于插入程序员信息的完整服务器端 代码 16.7 搜索程序员信息 16.7.1 客户端 16.7.2 服务器端 16.8 清除程序员表单 16.9 输入程序员成果报告 16.9.1 客户端 16.9.2 服务器端 16.10 清除成果报告历史表单 16.11 获取程序员的成果历史 16.11.1 客户端 16.11.2 服务器端 16.12 经验教训 16.12.1 违反的开发原则 16.12.2 组件 16.12.3 重用的可能性 16.13 小结 第17章 实例研究3—图书目录信息服务 17.1 图书目录信息服务 17.1.1 系统概述 17.1.2 创建BCIS 17.2 小结 第18章 实例研究4--SOAP 18.1 追根溯源 18.2 SOAP Opera 18.2.1 OPERA客户端 18.2.2 OPERA服务器 18.2.3 订单输入应用程序 18.2.4 对象 18.3 小结 附录A 可扩展标记语言(XML)1.0 规范 附录B IE 5 XML文档对象模型 附录C SAX 1.0:XML简单API 附录D IE 5 XML模式和数据类型 附录E IE 5 XSL引用 附录F CSS属性 附录G 安装XT 附录H 支持与勘误
译者序 作者简介 前言 第1章 XML简介 1 1.1 标记语言 1 1.2 XML的起源和目的 2 1.3 Web体系结构:过去与未来 4 1.3.1 传统Web体系结构 4 1.3.2 XML下的Web体系结构 5 1.4 XML基本特征 6 1.5 词汇表 8 1.5.1 科学词汇表 8 1.5.2 商业词汇表 9 1.5.3 法律词汇表 10 1.5.4 医学词汇表 11 1.5.5 计算机词汇表 11 1.6 XML技术的主要特性 12 1.6.1 格式正规的XML 12 1.6.2 文档类型定义 13 1.6.3 数据建模 14 1.6.4 文档对象模型 14 1.6.5 XML 简单API 14 1.6.6 命名空间和模式 14 1.6.7 链接和查询 15 1.6.8 转换XML 15 1.6.9 XML和数据库 16 1.6.10 服务器到服务器 16 1.6.11 电子商务与XML 17 1.6.12 使用样式 18 1.6.13 无线应用协议和WML 18 1.7 XML的应用程序举例 19 1.8 小结 19 第2章 XML语法 20 2.1 标记语法 20 2.1.1 字符 20 2.1.2 命名 21 2.2 文档部分 22 2.3 元素 23 2.3.1 起始标记 24 2.3.2 结束标记 24 2.3.3 空元素标记 24 2.3.4 标记:一个简单的例子 25 2.3.5 文档元素 25 2.3.6 子元素 26 2.3.7 元素嵌套 27 2.3.8 字符串 29 2.4 字符数据 29 2.5 属性 30 2.5.1 特殊属性 31 2.5.2 空白 33 2.5.3 行尾的处理 34 2.6 字符引用和实体引用 34 2.6.1 字符引用 34 2.6.2 实体引用 34 2.7 处理指令 35 2.8 注释 36 2.9 CDATA部分 37 2.10 文档结构 38 2.10.1 序言 38 2.10.2 尾声 43 2.11 XML语法小结 43 2.12 格式正规的文档 44 2.13 解析器 45 2.13.1 事件驱动的解析器 45 2.13.2 基于树的解析器 46 2.13.3 解析器基准测试 46 2.14 书籍目录应用程序 47 2.15 小结 49 第3章 文档类型定义 51 3.1 为何需要正式的结构 51 3.1.1 文档域 52 3.1.2 验证文档的有效性 52 3.2 编写DTD:通用原则 52 3.2.1 将DTD与XML文档相关联 53 3.2.2 基本标记声明 55 3.3 正式的DTD结构 55 3.3.1 实体 56 3.3.2 元素 58 3.3.3 属性 61 3.3.4 条件部分 67 3.4 DTD的缺点 69 3.5 用于图书目录问题的DTD 70 3.5.1 图书目录问题的正式定义 70 3.5.2 对象关系问题 77 3.5.3 进一步讨论 78 3.6 小结 79 第4章 数据建模与XML 80 4.1 信息建模 80 4.1.1 静态模型和动态模型 81 4.1.2 文档和数据 82 4.1.3 从何处开始 82 4.1.4 静态信息模型 83 4.1.5 动态建模:对数据进行哪些处理 87 4.2 设计XML文档 90 4.2.1 XML的两种角色 90 4.2.2 将信息模型映射到XML 93 4.3 模式语言和表示法 101 4.3.1 模式的作用 101 4.3.2 将DTD作为模式 103 4.3.3 XML模式建议 109 4.4 小结 110 第5章 文档对象模型 111 5.1 什么是文档对象模型 111 5.1.1 XML文档结构 111 5.1.2 为何使用DOM 113 5.1.3 DOM规范 115 5.1.4 现实世界中的DOM 116 5.1.5 特殊的XML DOM实例— HTML DOM 117 5.2 使用DOM 120 5.2.1 DOM API 120 5.2.2 客户端和服务器端 121 5.2.3 DOM在出版过程中的应用 122 5.3 使用DOM和XML的应用实例 125 5.3.1 简单的客户端实例 125 5.3.2 更复杂的编程实例 133 5.4 DOM和XML的未来 143 5.4.1 W3C的工作 143 5.4.2 应用 144 5.4.3 数据库、模式和DOM 144 5.5 小结 144 第6章 SAX 1.0: XML简易API 145 6.1 事件驱动接口 145 6.2 SAX的由来 148 6.3 SAX的高级特性 165 6.3.1 可选择的源输入 166 6.3.2 处理外部实体 168 6.3.3 选择解析器 169 6.4 一些SAX设计模式 171 6.5 SAX 2.0 187 6.5.1 可配置的接口 187 6.5.2 核心的特性和属性 188 6.6 小结 189 第7章 命名空间和模式 191 7.1 混合词汇表 192 7.1.1 分解问题 193 7.1.2 重用 193 7.1.3 多义性名称冲突 193 7.2 命名空间 195 7.3 定义和声明命名空间 196 7.3.1 声明一个命名空间 196 7.3.2 限定名 196 7.3.3 范围 197 7.4 在格式正规的书籍里使用命名空间 实例 199 7.5 模式 201 7.5.1 与DTD有关的问题 201 7.5.2 一个对创建模式的帮助 203 7.6 W3C在XML 模式方面的工作 209 7.6.1 DTD与XML 模式的比较 210 7.6.2 结构 211 7.6.3 数据类型 219 7.7 简化了的XML Data 222 7.7.1 MSXML对命名空间和模式的支持 228 7.7.2 数据类型 229 7.8 图书目录中的变化 230 7.8.1 为什么烦恼 230 7.8.2 重铸DTD 231 7.8.3 模式协调 236 7.9 小结 240 第8章 链接和查询 241 8.1 XML 信息集合 241 8.1.1 信息类型 241 8.1.2 信息集合的重要性 248 8.1.3 小结 250 8.2 链接 250 8.2.1 什么是链接 250 8.2.2 W3C规范:XLink 252 8.3 Xpointer 266 8.3.1 HTML指针 266 8.3.2 Xpointer 规范 267 8.4 W3C Xpath推荐标准 269 8.4.1 Location Step 269 8.4.2 XPointer对XPath的扩展 276 8.4.3 Xpointer错误 277 8.4.4 小结 277 8.5 XML程序段交换 278 8.5.1 什么是文档程序段 278 8.5.2 文档程序段的一些用途 279 8.5.3 问题:Bare文档程序段并不总 是充分的 281 8.5.4 解决办法:环境信息 283 8.5.5 回顾实例 285 8.5.6 如何传输程序段 287 8.5.7 小结 289 8.6 查询 289 8.6.1 什么是查询语言 289 8.6.2 关系型数据库和XML文档之间 的区别 291 8.6.3 XML查询语言的发展历史 295 8.6.4 使用Xpath和XSLT查询XML文档 298 8.6.5 查询语言展望 309 8.7 小结 309 第9章 转换 XML 310 9.1 为什么转换 XML 311 9.1.1 在不同词汇表之间转换 311 9.1.2 动态转换 312 9.1.3 不同的浏览器 312 9.2 XSL 313 9.3 XSLT 样式表命令 325 9.3.1 创建模板 325 9.3.2 处理空白 326 9.3.3 输出格式 326 9.3.4 合并样式表 327 9.3.5 嵌入样式表 328 9.4 使用XSLT的例子 328 9.4.1 命令的转换 329 9.4.2 循环 335 9.4.3 排序 336 9.4.4 条件处理 338 9.4.5 名称模板 341 9.4.6 编号方式 342 9.4.7 拷贝 344 9.5 使用DOM进行XML文档的转换 345 9.5.1 用DOM进行命令的转换 346 9.5.2 在运行时修改一个XSLT文档 349 9.6 XSL转换与DOM转换的比较 353 9.7 小结 354 第10章 XML和数据库 355 10.1 存储XML 355 10.1.1 持续性问题 355 10.1.2 文档管理 360 10.1.3 XML存储和数据库 362 10.1.4 结论 376 10.2 XML的交换 377 10.2.1 数据标准 377 10.2.2 查询标准 380 10.2.3 结论 388 10.2.4 你可能需要的标准 388 10.3 图书目录的例子 389 10.3.1 处理存在的数据和应用 389 10.3.2 图书目录模式 395 10.4 结论 420 第11章 服务器到服务器 421 11.1 XML的传送 421 11.1.1 基于FTP的XML传送 422 11.1.2 XML和消息队列 422 11.1.3 基于HTTP的XML 423 11.1.4 基于SMTP的XML 423 11.2 作为一种分布式组件模式的XML 424 11.2.1 消息传送和串行化 424 11.2.2 紧耦合系统和松耦合系统 428 11.2.3 通信方式 430 11.3 XML-RPC 431 11.3.1 为什么使用XML-RPC 432 11.3.2 XML-RPC适用于何处 433 11.3.3 XML-RPC规范—技术全瞻 434 11.3.4 XML-RPC的实现 440 11.3.5 书籍应用例子 444 11.3.6 到哪里去 464 11.4 SOAP 465 11.4.1 XML-RPC++ 465 11.4.2 实现 478 11.4.3 结论 493 11.5 WebDAV 493 11.6 小结 494 第12章 电子商务和XML 495 12.1 什么是电子商务 496 12.1.1 对客户直接销售 496 12.1.2 企业对企业交易 497 12.1.3 信息共享和内容联合 497 12.1.4 EDI—电子数据交换 498 12.2 在电子商务中应用XML 503 12.2.1 通常的错误概念 509 12.2.2 在电子商务中使用XML的感受 512 12.3 展望未来 513 12.3.1 发现和调解 514 12.3.2 容器 517 12.3.3 代理 519 12.3.4 模板 520 12.4 理论转化为实现 521 12.5 电子商务解决方案 521 12.6 行业方案 521 12.6.1 纵向行业解决方案的关键 522 12.6.2 旅游 523 12.7 人力资源 524 12.7.1 HR-XML 524 12.7.2 健康 532 12.8 cXML—纵向行业的一个详细 例子 535 12.8.1 为什么有cXML 535 12.8.2 cXML协议规范 536 12.8.3 消息传输 540 12.9 第1步—横向行业 546 12.9.1 ASC X12 546 12.9.2 XML-EDIFACT 547 12.9.3 电子商务XML工作组 549 12.10 第一个横向步骤 549 12.10.1 BizTalk标记规范 550 12.10.2 规范的目标和当前的限制 550 12.10.3 文档结构 551 12.10.4 一个用于Wrox书店的BizTalk 文档 557 12.10.5 BizTalk Jumpstart工具包简介 561 12.10.6 BizTalk服务器 562 12.11 小结 565 第13章 样式XML 567 13.1 解释的位置 567 13.2 客户端的XML转换 568 13.3 解释模型 568 13.3.1 视觉解释 569 13.3.2 语音解释 570 13.3.3 如何将样式表链接到XML文档上 571 13.3.4 规则语言 571 13.3.5 CSS 572 13.3.6 XSL 592 13.3.7 用XSL解释XML 594 13.3.8 DSSSL 611 13.3.9 Omnimark 614 13.4 小结 616 第14章 无线应用协议 617 14.1 新客户介绍 617 14.2 了解无线环境 621 14.2.1 服务 621 14.2.2 无线网络 622 14.2.3 WAP如何解决无线网络应用遇到 的问题 624 14.3 介绍WML 626 14.3.1 怎样将第一份文档传送到电话上 626 14.3.2 WML文档的结构 627 14.3.3 通用属性 629 14.3.4 WML包括什么 630 14.3.5 Meta信息 630 14.3.6 基本字符、表格和演示 631 14.3.7 使用计时器 633 14.3.8 事件处理器 634 14.3.9 使用变量 635 14.3.10 任务和菜单 637 14.3.11 客户端模板 641 14.3.12 表单数据 643 14.3.13 图像 646 14.4 在服务器上生成WML 646 14.5 WROX的WML应用 648 14.6 WML脚本 651 14.6.1 基本概念 652 14.6.2 字节码 652 14.6.3 如何从WML上调用脚本函数 652 14.7 脚本库 653 14.7.1 决定浏览器的状态—WMLBrowser 脚本库 653 14.7.2 Dialogs库 654 14.7.3 特定的语言函数 655 14.7.4 浮点数 655 14.7.5 字符串 656 14.7.6 URL 657 14.8 如何得到更多的信息 660 14.9 小结 660 第15章 实例研究1─数据双重性 662 15.1 商业需求 662 15.2 系统要求 662 15.3 设计时间:让我们开始吧 662 15.4 实现方法概述 663 15.5 建立数据库 665 15.6 提供XML功能的ASP 665 15.7 客户端页面 668 15.8 “以编号浏览”XSL样式表 676 15.9 “以名字浏览”XSL样式表 678 15.10 激活XSL样式表 679 15.11 问题:保持树的同步 680 15.12 小结 683 第16章 实例研究2—XML和分布式 应用程序 684 16.1 目前的弱点 684 16.2 构建网络应用程序的五条原则 685 16.2.1 从粗粒度服务构建应用程序 686 16.2.2 通过查询目录发现服务 687 16.2.3 将服务提供为自描述数据 688 16.2.4 服务是短暂的 689 16.2.5 服务必须可扩展,且能够降低对 外部的要求 690 16.3 商业实例 691 16.4 应用程序设计 692 16.4.1 应用程序的组织 694 16.4.2 程序员服务客户 694 16.4.3 服务 695 16.4.4 交换词汇表 696 16.5 实现 697 16.5.1 定位服务 698 16.5.2 管理数据绑定 699 16.6 输入和编辑程序员信息 700 16.6.1 客户端 700 16.6.2 服务器端 701 16.6.3 用于插入程序员信息的完整客户 端代码 704 16.6.4 用于插入程序员信息的完整服务器 端代码 705 16.7 搜索程序员信息 707 16.7.1 客户端 707 16.7.2 服务器端 709 16.8 清除程序员表单 710 16.9 输入程序员成果报告 711 16.9.1 客户端 711 16.9.2 服务器端 712 16.10 清除成果报告历史表单 714 16.11 获取程序员的成果历史 714 16.11.1 客户端 714 16.11.2 服务器端 716 16.12 经验教训 718 16.12.1 违反的开发原则 718 16.12.2 组件 718 16.12.3 重用的可能性 718 16.13 小结 719 第17章 实例研究3—图书目录信息 服务 720 17.1 图书目录信息服务 721 17.1.1 系统概述 721 17.1.2 创建BCIS 732 17.2 小结 764 第18章 实例研究4—SOAP 765 18.1 追根溯源 765 18.2 SOAP Opera 770 18.2.1 OPERA客户端 771 18.2.2 OPERA服务器 780 18.2.3 订单输入应用程序 793 18.2.4 对象 796 18.3 小结 809 附录A XML 1.0规范 810 附录B IE 5 XML文档对象模型 847 附录C SAX 1.0:XML简单API 887 附录D IE 5 XML模式和数据类型 906 附录E IE 5 XSL引用 915 附录F CSS属性 927 附录G 安装XT 939 附录H 支持与勘误 940
目 录 译者序 作者简介 前言 第1章 XML简介 1.1 标记语言 1.2 XML的起源和目的 1.3 Web体系结构:过去与未来 1.3.1 传统Web体系结构 1.3.2 XML下的Web体系结构 1.4 XML基本特征 1.5 词汇表 1.5.1 科学词汇表 1.5.2 商业词汇表 1.5.3 法律词汇表 1.5.4 医学词汇表 1.5.5 计算机词汇表 1.6 XML技术的主要特性 1.6.1 格式正规的XML 1.6.2 文档类型定义 1.6.3 数据建模 1.6.4 文档对象模型 1.6.5 XML 简单API 1.6.6 命名空间和模式 1.6.7 链接和查询 1.6.8 转换XML 1.6.9 XML和数据库 1.6.10 服务器到服务器 1.6.11 电子商务与XML 1.6.12 使用样式 1.6.13 无线应用程序协议和WML 1.7 XML的应用程序举例 1.8 小结 第2章 XML语法 2.1 标记语法 2.1.1 字符 2.1.2 命名 2.2 文档部分 2.3 元素 2.3.1 起始标记 2.3.2 结束标记 2.3.3 空元素标记 2.3.4 标记:一个简单的例子 2.3.5 文档元素 2.3.6 子元素 2.3.7 元素嵌套 2.3.8 字符串 2.4 字符数据 2.5 属性 2.5.1 特殊属性 2.5.2 空白 2.5.3 行尾的处理 2.6 字符引用和实体引用 2.6.1 字符引用 2.6.2 实体引用 2.7 处理指令 2.8 注释 2.9 CDATA部分 2.10 文档结构 2.10.1 序言 2.10.2 尾声 2.11 XML语法小结 2.12 格式正规的文档 2.13 解析器 2.13.1 事件驱动的解析器 2.13.2 基于树的解析器 2.13.3 解析器基准测试 2.14 书籍目录应用程序 2.15 小结 第3章 文档类型定义 3.1 为何需要正式的结构 3.1.1 文档域 3.1.2 验证文档的有效性 3.2 编写DTD:通用原则 3.2.1 将DTD与XML文档相关联 3.2.2 基本标记声明 3.3 正式的DTD结构 3.3.1 实体 3.3.2 元素 3.3.3 属性 3.3.4 条件部分 3.4 DTD的缺点 3.5 用于图书目录问题的DTD 3.5.1 图书目录问题的正式定义 3.5.2 对象关系问题 3.5.3 进一步讨论 3.6 小结 第4章 数据建模与XML 4.1 信息建模 4.1.1 静态模型和动态模型 4.1.2 文档和数据 4.1.3 从何处开始 4.1.4 静态信息模型 4.1.5 动态建模:对数据进行哪些处理? 4.2 设计XML文档 4.2.1 XML的两种角色 4.2.2 将信息模型映射到XML 4.3 模式语言和表示法 4.3.1 模式的作用 4.3.2 将DTD作为模式 4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM 5.2.1 DOM API 5.2.2 客户端和服务器端 5.2.3 DOM在出版过程中的应用 5.3 使用DOM和XML的应用实例 5.3.1 简单的客户端实例 5.3.2 更复杂的编程实例 5.4 DOM和XML的未来 5.4.1 W3C的工作 5.4.2 应用 5.4.3 数据库、模式和DOM 5.5 小结 第6章 SAX 1.0: XML简易API 6.1 事件驱动接口 6.2 SAX的由来 6.3 SAX的高级特性 6.3.1 可选择的源输入 6.3.2 处理外部实体 6.3.3 选择解析器 6.4 一些SAX设计模式 6.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老去的90后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值