1. XML的起源 / XML与HTML的关系
XML - eXtensible Markup Language(可扩展的标记语言)
SGML (Standard General Markup Language)
通用标记语言
美国法律
英国 判例法 计算机化的表示法- 关系数据库
发明一种标记语言 --- 元语言
特点:能描述别的语言
SGML1.0 --- W3C (国际标准化组织) 互联网 怎么用这个标记语言??
简化:
<1> HTML (超文本的标记语言) HyperText Markup Language
特点:
a)表现格式
<h1>文字</h1>
b)标记是固定的
<h10></h10> 标记没有
c)弱点: html标记不具有扩展性
不支持自定义的标记
标记只代表格式 不能表示内容
能否有一个新的标记语言?
具有扩展性:标记可以自定义
标记能反映内容 但不表示格式
<2> XML (可扩展的标记语言)
具有扩展性:标记可以自定义
<姓名></姓名>
标记能反映内容 但不表示格式
<姓名>张三</姓名>
仍然用html来显示内容的样式
XML + Html新的标记语言的集合 -- 互相补充的
2.XMl的用途
XML特点:表示内容的一种标记语言
a)配置文件:
web.xml --- web应用
struts_config.xml ---- 配置struts应用
ejb-jar.xml --- 配置ejb的
Hibernate
hibernate.cfg.xml --- 配置Hibernate
user.hbm.xml --- 配置类user
b) 动态网站
jsp + 数据库
asp + 数据库
xml + 数据库 + XSL(xml 样式语言-描述格式)
cocoon 开源项目 --xml的动态网站
JBuilder中内置
c)ADO.net
离线数据存储 -- 数据缓存在客户端采用xml格式
d) 自定义标签
<jsp:useBean id="" class=""/>
产生新的语言的标记
<bean:write key=""/>
e) 数据交换的平台
Oracle数据库 Db2数据库
客户表 客户表
整合这2张表中的数据 放到sqlserver中
制定客户数据的格式--- XML格式
<客户姓名></客户姓名>
<客户地址></客户地址>
<客户的资金></客户的资金>
程序 能够读取和写这个XML文件
f) 可以自己设计它的用途
3. xml文件的构成????
a) xml文件是一个 简单的文本文件
.xml的后缀名结尾
b) xml的格式规范 --- xml是格式良好的XML文件
一定要保证格式良好
1) 声明语句 必须是第一句
<?xml version="1.0" encoding="UTF-8"?>
version 版本 1.0
encoding 编码格式 UTF-8(unicode编码 支持多国文字)
gb2312 中文编码
2) 由若干自定义的标记构成文件的主体
自定义标记的要求:
*标记成对出现 <通讯录></通讯录>
开始标记 <通讯录>
结束标记 </通讯录>
<通讯录/>
html
*标记可以嵌套 但是层次要正确
<员工>
<地址>
</员工>
</地址> 不正确的 嵌套不正确
*标记区分大小写
<email></email>
<Email></Email> 是2个不同的标记
* 整个XML文件要有一个根标记(元素)(有且仅有一个)
3) XML的标记可以带有属性
属性写在开始标记中
可以有多个属性 之间用空格分开
属性的值一定要带双引号或单引号
4) 空标记
<工资/> 自己把自己给关闭了
内容是没有
但是属性是可以有的
5) 标记取名字的时候
不要使用XML/xml/Xml字样的名字
名字中不要使用: --- 有特殊的用途
名字不能含有空格 (标记名字和属性名字)
其他的没有限制 自定义
XML是简单的文件 要求很少
IE浏览器来查看xml文件 ????
xml是不带有格式 在IE中就显示出一个层次关系
XML文件其他的元素标记???
1) 注释
html风格的注释
2) 实体
html中的 空格 所对应的实体
xml中的实体就5个分别是
& &
> >
< <
" "
' '
3) CDATA节
<![CDATA[
公司涨工资 >20%
]]>
在CDATA节中的内容 不是XML的一部份
文字原样显示 不被XMl所解析
dept表 -> XML文件(主键写成属性) -> 数据库表的数据
对XML文件进行有效性验证 -> 限制XML文件的书写格式的
DTD
Schema -> 表结构
最先出现DTD (Document Type Define)文档类型定义
如何写一个DTD文件???
.dtd 后缀
xml的标记 又称为元素
<!ELEMENT ...> 定义xml文件中的元素
+ 元素出现的次数>=1
? 元素出现的次数<=1
* 元素出现的次数>=0
不写 元素出现的次数=1
<!ELEMENT 部门表 (部门+)> 部门表元素至少由一个部门元素组成
, 分隔符,元素出现的顺序
<!ELEMENT 部门 (名称,地址)> 部门元素由1个名称和1个地址元素组成
并且名称在地址元素之前出现
<!ELEMENT 名称 (#PCDATA)> 名称元素是由文本组成的,不含有子元素
<!ATTLIST 部门 编号 CDATA #REQUIRED>
部门元素有属性编号 编号的数据类型是字符类型 (CDATA)
编号属性是必须的 (#REQUIRED)
工具XMLSPY
根据XML产生DTD
根据DTD产生XML的框架
为XML文件指定DTD
a) 自己根据XML文件 写出 DTD
b) 根据DTD 能写出XML文件
<!ElEMENT> 元素
定义元素的组成
<!ELEMENT 部门表 (部门+)>
<!ELEMENT 部门 (名称,地址)>
定义元素的数据类型,数据类型不多(不足)
<!ELEMENT 名称 (#PCDATA)>
定义元素是空元素(EMPTY)
<!ELEMENT 工资 EMPTY>
定义元素是空元素或由子元素组成(ANY)
<!ELEMENT 工资 ANY>
定义元素是文本和子元素的混合
<!ELEMENT 部门 (#PCDATA | 员工)*>
<!ELEMENT 员工 EMPTY>
<!ATTLIST> 属性 - 依赖于元素
定义某个属性的数据类型
<!ATTLIST 部门 编号 CDATA #REQUIRED>
属性的数据类型
CDATA 字符型
<!ATTLIST 部门 编号 CDATA #REQUIRED>
ID 唯一的字符值,值的内容的第一个字符必须是字母
<!ATTLIST 部门 编号 ID #REQUIRED>
NMTOKEN 字符,只能是英文字母或数字(不太严格)
<!ATTLIST 部门 编号 NMTOKEN #REQUIRED>
NMTOKERNS
<!ATTLIST 部门 编号 NMTOKENS #REQUIRED>
IDREF ID的引用(类似于外键)
<!ATTLIST 员工
编号 ID #REQUIRED
经理 IDREF #IMPLIED
>
IDREFS 引用多个ID值
<!ATTLIST 员工
编号 ID #REQUIRED
经理 IDREFS #IMPLIED
>
选择
<!ATTLIST 员工 性别 (男|女) #REQUIRED>
属性的约束
#REQUIRED 属性必须出现
#IMPLIED 属性是可有可无的
#FIXED "A7903" 固定值
<!ATTLIST 员工 经理 IDREF #FIXED "A7903">
default 缺省值
不写这个属性的时候的默认值
<!ATTLIST 员工 经理 IDREF "A7903">
<!ENTITY> 自定义实体 (在DTD中定义 在XML中使用)
<!ENTITY dev "开发部">
<!ENTITY sale "销售部">
在XML中 &dev;
&sale;
DTD a)
不是XML文件 是一个特有的格式 (是从SGML中带来的)
DTD逐渐会被SCHEMA技术取代
b) 支持的数据类型太少
schema支持的数据类型和sqlserver的数据类型是一样
<!NOTATION> 注解 需要使用外部软件的程序
<!NOTATION gif SYSTEM "C:/Program Files/ACD Systems/ACDSee/6.0/acdsee.exe">
gif 代表一个外部的程序 acdsee.exe
<!ATTLIST photo 看图软件 NOTATION (gif) #IMPLIED>
属性的值按照NOTATION的定义来解析的
<!ATTLIST photo 图片 ENTITY #IMPLIED>
属性是个实体的类型
<!ENTITY pic SYSTEM "zhangyin.gif" NDATA gif>
实体pic的含义 就是图片zhangyin.gif
使用gif所代表的软件来查看
<!DOCTYPE 根元素 SYSTEM "F:/dept.dtd">
SYSTEM 外部的DTD (自己用的)
<!DOCTYPE 根元素 PUBLIC "url">
公用的外部的DTD
<!DOCTYPE 根元素 [
]>
内部DTD --- XML和DTD写在一个文件中