XML技术:与数据相关技术,在企业中xml技术常用来存储数据和传输数据。
xml与任何编程语言无关
xml 可用于 php、java、.net 任何编程语言
* 通过标签来 标记数据
什么是标记语言?
<xxx>adb</xxx> 典型标记语言 HTML ---- 用标记 修饰文本信息
XML标记随意定义 --- 可扩展
XML典型存储和传输应用:
1、XML 充当数据库 保存数据信息 --- 试题采用xml保存的 、google 数据信息通过xml格式保存
2、在AJAX传输数据 、WebService技术 网络中传输数据时,格式采用xml
在HTML中预定义了很多标记,每个标记都有相应显示效果,xml所有标记没有被预定义
在xml中 <name>Marco</name> ---- 想确定name标记含义 ,需要对xml 添加约束
XML语法
1、文档声明
2、元素
3、属性
4、注释
5、CDATA块
6、处理指令
任何xml必须具备文档声明 xml version="1.0"
XML是一种标记语言 存储和传输数据 --- 保存数据内容
没有指定xml 编码集 --- 默认采用ISO-8859-1 编码 (不支持中文数据)
* 注意问题 当xml 指定encoding="utf-8" 是浏览器查看编码集 ------ 浏览器查看编码集必须要和文件保存编码集一致
* 新建记事本程序采用系统默认编码集 --- 默认编码集gbk ---- 使用utf-8编码 另存为
当声明standalone = "yes" 该xml是独立xml 不依赖外面其它文件,standalone = "no" 该xml 依赖外部一些文件
XML 通过元素描述复杂关系模型数据
xml语法规范
1、所有xml元素必须结束
----- 在xml 文件中如果标签中没有内容 自结束
2、标签不允许交叉嵌套
3、有且仅有一个根元素
4、xml文件中 空格和换行 会被解析器进行解析的
5、严格区分大小写,元素和属性名称不能以数字开始
属性定义语法 元素名称 属性名称="属性值" 属性名称="属性值" ....
一个元素定义多个属性的,每个属性值必须使用单引号和双引号
6、属性的值必须用单引号或者双引号 引起来
7、xml注释与html注释相同 <!-- --> 注释不能嵌套
CDATA区域内 保留不被解析器解析的内容 ----通常存放特殊代码,这些代码造成xml格式混乱
CDATA和转义字符在哪些情况使用?区别?
* 优先使用CDATA XML技术存储数据,传输数据、解析数据
8、通过PI指令控制xml显示样式 (指令之前不能有注释)
当xml 使用pi指令 引用CSS --- 效果等同于HTML,进行页面数据展示
* 通过xml进行显示数据 ,通过XSLT 修饰xml数据显示 (类似CSS)
=============================================================================
XML 技术应用 两大类
1、传输和存储数据 ----- 程序员为了简化开发,不对xml使用约束技术
* 不使用xml约束技术,xml 格式不一定正确
* 所有xml 数据内容生成,解析过程 都是通过程序来完成的
2、使用xml 作为配置文件
Android SSH ----- 程序员为了保证xml元素准确性,通常xml文档使用约束技术的
----------------------------------------------------------------------------
什么xml使用约束? 使用约束xml文档 --- 元素内容格式更加规范
如果企业中xml没有使用约束 ------ 通过程序生成xml和解析xml时,不使用约束,代码更加简单
XML约束技术 DTD 和 Schema
DTD技术快速入门
1、编写数据xml --- books.xml
2、编写dtd文件
* 为文档每一个元素(不同名称) ELEMENT
语法 ELEMENT 元素名称 子元素
元素内部文本 #PCDATA
3、将xml文件与dtd文件关联起来
DTD与xml关联三种方式
1、内部DTD ----- 语法 DOCTYPE 根元素 []
2、外部DTD (引用本地DTD) ----- 语法 DOCTYPE 根元素 SYSTEM "本地DTD文件位置"
3、公共DTD (引用网络上DTD) DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL"
* 公共DTD 使用 名称 W3C规范官方组织规定的
******************************************
// 内部DTD
<?xml version="1.0" encoding="UTF-8"?>
<!-- 使用内部DTD约束XML [] 内部编写DTD内容-->
<!DOCTYPE books [
<!ELEMENT books (book+)>
<!ELEMENT book (name,(number|price),publish)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price EMPTY>
<!--ID属性 不能以数字开始 -->
<!ATTLIST book
bid ID #REQUIRED
author (Marco|Jill) "Marco"
>
<!ELEMENT publish (#PCDATA) >
<!-- 将公共的重复内容 提取实体-->
<!ENTITY marco "Marco JavaEE" >
]>
<books>
<book bid="b90" author="Marco">
<name>java</name>
<price />
<publish>&itcast;</publish>
</book>
<book bid="b96">
<name>java</name>
<price />
<publish>&marco;</publish>
</book>
</books>
//外部 DTD
//外部 DTD --books.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<name>XML</name>
<price>35</price>
</book>
</books>
//外部 DTD --books.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book)>
<!ELEMENT book (name,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
***************************************元素(ELEMENT)定义* 内容特点符合含义() 子元素、分组, 代表子元素顺序+ * ? ---- 正则表达式 + 1到多个 、* 任意个(0到多个)、 ? 0或者1个| 多选一特殊元素内容:文本类型内容 #PCDATA 子元素内容如果为空 EMPTY 属性(ATTLIST)定义语法:ATTLIST 元素名称 属性列表属性列表: 属性名称 类型 约束属性名称 类型 约束属性名称 类型 约束属性名称 类型 约束属性类型1、CDATA 文本类型属性2、(值1|值2|值3 ) 三个值选一个3、ID 表示属性值唯一约束1、#REQUIERD 属性必须2、#IMPLIED 属性可选3、fixed value 属性值固定4、default 默认值实体(ENTITY)定义对于xml数据内容重复,可以抽取实体语法:ENTITY 实体名称 "实体内容"-------------------------------------------------------------------------------------------XML Schema 使用一套预先定义好元素和属性 开发的 ----- 预先定义好元素和属性 规定了schema 结构和内容----- 定义schema 规定xml文档 格式和内容预先已经定义好元素和属性 ------ 定义schema ------- 定义xml实例Schema本身也是xml ,不像DTD使用单独语法将schema中定义元素,绑定URI地址(名称空间)上,用来唯一标识元素来自哪个schema 。* 为什么要有名称空间? 一个xml实例 引用多个Schema ,当两个schema定义同名元素,为了区分同名元素引用自哪个文档。Schema快速入门1、编写数据xml文件2、编写schema文件 .xsd 1) 引入 W3C 名称空间 xmlns="http://www.w3.org/2001/XMLSchema"每一个元素 对应 element区分复杂元素和简单元素2) 为schema定义元素指定名称空间 URI (URI可以是任何路径)3、在xml实例数据文件中 ,引用自定义SchemaelementFormDefault="unqualified"1、如果schema 将 elementFormDefault="unqualified" ,xml 实例文档 引用名称空间必须使用前缀 ---- 前缀修饰根元素2、当前xml实例文档所有子元素必须不能用前缀名称空间 作用 --- 唯一标识schema当中定义元素简单元素 直接编写type属性 、复杂元素 complexType
****************************************
//books.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="abcdefg"
elementFormDefault="qualified"
>
<!-- 每一个元素 对应 element -->
<element name="books">
<!-- 包含子元素和属性的元素 复杂元素 -->
<complexType>
<!-- 强调子元素出现顺序 -->
<sequence>
<!-- 让book元素出现多次 * -->
<element name="book" minOccurs="0" maxOccurs="unbounded">
<complexType>
<sequence>
<!-- 对于简单元素,编写type属性 -->
<element name="name" type="string"></element>
<element name="price" type="double"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
//books.xml
<?xml version="1.0" encoding="UTF-8"?>
<abc:books xmlns:abc="abcdefg"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="abcdefg books.xsd"
>
<abc:book>
<abc:name>Core Java</abc:name>
<abc:price>100</abc:price>
</abc:book>
<abc:book>
<abc:name>think in java</abc:name>
<abc:price>90</abc:price>
</abc:book>
</abc:books>
********************************************************