一.XML的历史介绍
1969:gml(general),为了计算机网络上交换数据
1985:sgml(standard),标准化
1993:html,www万维网使用
1998:xml(extensiable),为了弥补html缺陷推出
html缺陷:
1.标记不能自定义
2.标记没有含义
3.没有真正的国际化
二.XML使用场景
1.程序通讯
2.配置文件
3.小型数据库
4.表达能力(关系复杂)、扩展能力强的场景
三.XML快速入门与语法详解
XML语法分六部分
- 文档声明
- 元素
- 属性
- 注释
- CDATA区,特殊字符
- 处理指令
文档声明:开头要<?xml version="1.0" encoding="utf-8" standalone="yes"?> , 这个头部不可少,表明身份,文件编码,是否可以独立使用
文件保存格式要和encodig声明的一致
1.文档声明
<?xml version="1.0" encoding="编码格式" standalone="yes|no(默认no)"?>
2.元素
只能有一个根元素
元素也叫标签、节点,标签夹着标签体,没有标签体可以自闭和。标签可以嵌套,不能交叉嵌套。标签体里的空格换行都是被解析到的,不会忽略。
标签区分大小写,不能以数字或者_开头,不能包含冒号,不能包含空格
3.属性
属性值用单引号、双引号包住。值中真正的单引号双引号用转义字符(实体),比如"
属性值不能包含< & >这三个字符;可以有中文
属性名不能重复
属性键值对之间用空格分格
4.注释
<!--和-->表明注释
不能放在标记里
不能嵌套
注释内容不能有--
5.CDATA节
原始数据,不需要被解析的数据,比如图片
用<![CDATA[和]]>包起来
不能嵌套
不能包含]]>
6.指令
指挥解析引擎如何解析xml文档内容
用<?开头,?>结尾
指令有xml-stylesheet,
四.xml文件约束——dtd
dtd缩写是document type definition,文档类型定义元文件
主要用处是约束xml文件。dtd文件里定义规范,是个标准规范
另一种约束技术是Schema
xml引入dtd
<!DOCTYPE 根元素名称 dtd文件类型(PUBLIC代表网络,SYSTEM代表本地)“public时dtd名称” "dtd文件路径" >,路径可以是网络也可以是本地的
dtd文件定义
<!ELEMENT 父元素 (子元素+) (类型)>,+表示至少出现一次;有多个子元素,子元素可以用逗号分割;子元素和类型要用小括号包起来
类型里的#PCDATA代表任何文本
验证dtd工具
xmlspy
编程自行验证(ie用Microsoft.XMLDOM)
浏览器不会自动验证dtd对xml约束
dtd细节
DTD文档声明及引用
内部DTD,自定义内容在[]里
外部DTD,使用路径引用
内外部DTD,前二者结合
DTD引入
本地DTD
外部DTD
DTD元素
<! ELEMENT 自定义名称 内容类型>
类型可以有三种
EMPTY:空元素,可以有属性
ANY:放的标签要是在dtd里定义过的
#PCDATA:任意字符内容,不能有子标签嵌套
DTD无法约束具体类型(整数,字符等),Schema可以
DTD组合类型
+:至少有一个
*:0到多个
():分组
?:最多一次
,:出现顺序要一致
|:选择一个
引入了DTD,任何属性都要有定义,否则使用即为未定义
属性定义
<!ATTList 元素名称
属性名称 类型 属性特点
>
类型取值:
CDATA,任意字符
ID,不能重复,必须是合格的XML名字,不能以数字、下划线开头
IDREF/IDREFS,已经定义过的ID,加S代表多个ID(用空格分隔)
Emumerated,(value1|value2 |value3)
ENTITY/ENTITIES:为一段内容创建别名
实体(EnTITY)定义:
<!ENTITY>
引用实体:
xml里引用dtd里定义的
<!ENTITY 名称 "内容">
&名称; ,要这么引用,类似特殊字符
参数实体:
dtd里定义,dtd里使用
<!ENTITY % 名称 "内容">
引用方式: %名称;
属性特点取值:
#REAUIRED,必须有
#IMPLIED,可有可无
#FIXED value,如果有,必须是固定值
value,默认值
DTD现在基本已被XSD文档取代,但是,仍有个别在使用 比如 Mybatis mapper xml文件
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
上面用的是公共DTD,DTD名称格式为"注册//组织//类型 标签//语言"
"注册" 指示组织是否由国际标准化组织(ISO)注册,+表示是,-表示不是;
"组织" 即组织名称,如:mybatis.org;
"类型" 一般是DTD;
"标签" 是指定公开文本描述,即对所引用的公开文本的唯一描述性名称,后面可附带版本号,如Mapper 3.0。
"语言" EN指英语;
http://mybatis.org/dtd/mybatis-3-mapper.dtd 表示外部DTD文件URI,可以在此处下载,不过,Mybatis加载xml文件之前会在本地加载DTD代替从线上获取。
内部DTD 是使用<!DOCTYPE rootElement [xxx]> 来定义的,当然内部DTD也可以使用DTD文件,如<!DOCTYPE rootElement SYSTEM "URI">
<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
xml编程部分
五.XML解析技术概览
XML文件书写和解析
一.xml工具安装以及使用详解
XML Spy
二.
三.xml的Schema约束
Schema约束使用xsd文件存储
也叫作模式
XSD:XML Schema Definition
xml文件,定义新xml的文档结构
一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。
网上有生成xml schema的工具,输入xml信息就会生成xmlschema
引入Schema
使用别名xsi(XML Schema Instance)做引入的规范约束
xmlns:xsi,http://www.w3.org/2001/XMLSchema-instance
xsi:noNamepaceSchemaLocation,外部文件路径。可以用url编码
定义Schema,引入schema定义的文件,指定标签和属性的限定
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
</xs:schema>
xs下定义标签描述,每个定义标签可以带属性,见xml spy提示
element:对应标签。name:标签名,type:标签类型
complexType:自定义类型
sequence:complexType标签下的顺序标签
Schema数据类型
简单类型:
内置的
simpleType定义的
复杂类型:
complexType定义的
定义了以下标签
schema
element
attribute
group
attributeGroup
simpleType
simpleContent
complexType
choice
list
union
unique
sequence
restriction
schema:包含已经定义的schema
element:定义元素标签节点。属性有name,type,ref,minOccurs,maxOccurs,fixed,default,substitutionGroup
group:聚合一组element,所有element要一起出现。属性有name,ref
attribute:声明属性。属性有name,type,ref,use。attribute要放在复合类型里;被引用,通过ref为name指定
attributeGroup:聚合attribute,一组属性要同时出现。属性有name和ref
simpleType:简单类型,定义了约束,即可以有什么值。属性是name。
定制约束有三个标签
restriction:在某个范围。属性有base,下面的子标签可以有emunation,minExclusive,maxInclusive,minInclusive等等
union:从一个类型的集合中选一个,即限定类型,这几个类型混在一起同时限定。属性有memberTypes
l ist:从一个值型的集合中选一个,即限定类型,只能选一种类型。属性有itemType
complexType:当要定义子元素和属性时,用复合类型。属性值有name
simpleContent:对complexType做限制和拓展。子元素extension用来拓展。simpleContent定义的元素不能有子元素,只能有属性设置
choice:允许唯一的元素从一个组中被选择。属性有minOccurs和maxOccurs
sequence:一组元素按顺序出现
XML技术
19.命名空间
命名空间修饰限定元素。
xmlns:别名='uri',指定命名空间
使用:
别名:
通过xmlns属性引入命名空间
二十一.