JavaWeb——XML基础
来源:互联网 发布:51单片机蜂鸣器电路 编辑:程序博客网 时间:2024/05/19 02:43
XML基础
本文总结XML,DTD和Schema部分内容, 其中包括核心思想和便于理解的语法规范, 在XML解析部分中, 将介绍Java解析XML文件的基本方法
1. 什么是XML? XML相对于HTML/XHTML的最大不同点什么?
a. XML= Extensible Markup Languageb. XML和HTML/XHTML最大的却别在于可以自定义标签
c. XML设计的宗旨是为了传输数据而不是显示数据, 而HTML则恰恰相反
d. XML 的优势之一,就是可以经常在不中断应用程序的情况进行扩展
2. XML有哪些应用方面?
a. 保存关系数据
b. 作为配置文件
c. 作为一个小型的数据库
d. 跨平台数据的传输
e. RSS订阅器
3. XML的结构是什么样的, 主要由几个部分组成?
a. 文件声明
b. 处理指令(很少用,可以传入一个CSS|XSL样式表)
c. 根标签
d. 标签
e. 属性f. 数据
4. XML的语法规范是什么?
a. 文档声明:
- eg. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
a.1 version = "1.0/1.1"
a.2 encoding= "uft-8/*"
a.3 standalone= "yes/no" (是否需要导入其它文档)
b. 元素:
b.1 标签封闭
b.2 命名规范:
- 区分大小写
- 不能以数字或者标点符号开头
- 不能以xml(如何大小写的变形)开头
- 不能包含空格和":" 于命名空间冲突
- 避免用"." 会误解成对象属性
- 避免用"-",软件读取冲突
b.3 空格换行是有效字符
c. 属性:
c.1 属性必须用" "或者' '
c.2 尽量使用元素来描述数据,仅仅使用属性来提供与数据无关的信息
d. 注释:
d.1 <!--注释内容-->
d.2 注释不能嵌套
e. CDATA区,特殊字符:
e.1 CharacterDATA: 字符数据, 内部的数据被以字符串的形式解析
e.2 CDATA格式: <![CDATA[<itcast>hahahaha</itcast>]]>
e.3 特殊字符: > < & " '
e.4 其他字符: 需要查映射表 &#xOOOO;
f. 处理指令: (Processing Instruction)
f.1 PI用于引入文件
f.2 <?xml-stylesheet type="text/css" href="1.css"?>
5. XML的样式太灵活, 不方便Java用一个统一的程序对其进行调用, 那么可以用什么方式约束XML?
a. 两种方式: DTD和Schema来约束XML
b. DTD语法简单, 功能较弱; Schema语法复杂, 功能强大
6. DTD是什么, 他是如何对XML进行约束的?
a. DTD= Document Type Definition
b. DTD中可以构建模块: ELEMENT+ATTLIST+ENTITY+PCDATA+CDATA
c. 限定ELEMENT的子标签+限定ELEMENT的定义顺序+限定ELEMENT的ATTLIST即可限定XML的类型
d. ENTITY可以定义一些重用信息, 简化书写
e. DTD语法中有定义了一些操作符号来简化DTD文件的书写
f. 定义好的DTD文件可以通过两种方式作用于XML文件: 在XML内部中定义这些DTD构建模块+通过地址导入一个DTD文件
g. b,e,f的具体操作参看7
7. DTD的语法规则是什么?
a. ELEMENT
a.1 <子标签>
<!ELEMENT 父标签 <有空格> ( 下级子标签 ) >
a.2 <特殊标签>
- EMPTY 表示无下级子标签 <!ELEMENT root EMPTY>
- ANY 表示下级可以有仁义的子标签<!ELEMENT root ANY>
- 尽管ANY表示可以有任意子标签, 但是这些标签必须是定义过的
a.3 <元素间关系>
- , 表示并列全取关系 <!ELEMENT student (name,age)>, 子标签必须按顺序定义
- | 表示并列单取关系 <!ELEMENT grade(A|B|C|D|F)>
a.4 <单元素修饰>
- + 出现至少1次
- * 出现至少0次
- ?出现最多1次
- 出现且仅出现1次
a.5 <混合使用+整体打包>
- <!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)* | COMMENT)>
b. ATTLITST
b.1 <!ATTLIST car(元素名) color(属性名) CDATA(属性类型) #REQUIRED(属性值要求)>
b.2 属性类型:
- CDATA: 字符数据
- (em1 | em2 | ...) : 枚举值, 只能取其中一个
- ID: ID类型——只能以字母或_开头
b.3 属性值要求:
- #REQUIRED: 必须要制定的
- #IMPLED: 可规定也可不规定的
- #FIXED 值: 固定值 (如果写出此属性, 必须是给定值)
- default值: 不设置则为此default值
c. ENTITY:
c.1 内部实体: <!ENTITY 实体名称 “实体值”>
c.2 外部实体: <!ENTITY 实体名称 SYSTEM "URI/URL">
c.3 文件中引用内部/外部实体: &实体名称;
c.4 DTD中引用参数实体: <!ENTITY % 实体名称 “参数实体部分”>
- <!ENTITY % TIP “(TITLE*,AUTHOR?,EMAIL)”>
<!ELEMENT MYFILE (%TIP;* | COMMENT)>
d. 声明引入DTD (内部/本地/网络)
d.1 <!DOCTYPE 根元素 [ DTD文件中内容]>
d.2 <!DOCTYPE 根元素 SYSTEM "路径">
d.3 <!DOCTYPE 根元素 PUBLIC "DTD名称" "路径">
8. Schema是什么, 它有什么好处?
a. Schema是基于XML语法规则的对XML文档的一种描述
b. Schema要通过更高级的类型限定来检测XML的定义/数据类型错误
c. Schema可作为XSD(XML Schema Definition) 导入XML并对改XML进行约束
d. Schema的好处是:
d.1 基于XML编写, 无需另外的解析器
d.2 支持数据类型, 更方便监测数据错误
d.3 支持命名空间, 避免命名冲突
d.4 可以针对未来的需求进行扩展, 兼容未知, 或暂未定义的标签
9. Schema的语法结构是什么?
a. Schema的一些规范标签定义在 xmlns: xs= “http://www.w3.org/XMLSchema” 内
b. 应用这些标签的合理组合, 并基于XML的基本语法就可以进行Schema的编写
c. Schema的基本标签是<xs:element name type>; element包括: simpleType | complexType
c.1 simpleType: 只包含文本, 不包含element/attribute子元素 (simpleType一般不用书写标签, 而且simpleType的元素可以单标签封闭)
c.2 complexType: 包含element/attribute子元素(文本有无均可)
c.2.1 其中限定不包括element子元素的需要被定义为<xs:simpleComponent>
<xs:schema> <xs:complexType> <xs:simpleComponent> <xs:element name="price" type="xs:double"> <xs:attribute name="kind" type="xs:string"> </xs:attribute> </xs:element> </xs:simpleComponent> </xs:complexType></xs:schema>
c.2.2 其中包括element子元素的是<xs:complexComponent>, complexType下默认是complexComponent
c.2.3 同时包含文本和element/attribute子元素, 需要标记 <xs:complexType mixed="true“>
c.3 simpleType/complexType是XSD中书写是否有子元素来区分的(element/attribute子元素)
c.4 simpleComponent/complexComponent 是XSD限定的元素在XML是否有子元素来区别的(各种XSD中定义的子元素)
d. Schema定义属性的标签是 <xs:attribute name type>
e. Schema对类型的限定标签是 <xs:restriction base>
f. Schema-restriction内的数据类型限定标签: enumeration+length+pattern+whiteSpace+ ....
g. Schema提供了指示器来实现对单个元素或多个元素的控制
g.1 多个元素Order指示器: <xs:sequence> <xs:choice> <xs:all> (注意没有enumeration, 是choice)
g.2 单个元素Occurrence指示器: <xs:maxOccurs> <xs:minOccurs>
g.3 多个元素/属性打包Group指示器: <xs:group name> <xs:attributeGroup name>
h. Schema提供了<xs:any> <xs:anyAttribute>来可以兼容/扩展未定义元素和属性
i. Schema提供了定义元素的名称替换属性substitutionGroup:
- <xs:element name="alias" substitutionGroup="orignal">
j. Schema提供了 ref这个属性可以指向一个定义过了的元素/属性:
- <xs:element name="original"> ... ... ... </ xs:element>
- <xs:element ref="original"/> (Schema文档定义模式2)
k. Schema可以将type抽离出element, 这种定义也可以使文档看起来更清晰
- <xs:complexType name="OneType"> ... ... ... </xs:complexType>
- <xs:element name="OneElement" type="OneType"/>(Schema文档定义模式3)
l. Schema还提供了一种类似继承的功能:
- <xs: extension base="baseName"> 基于一个定义了的type创建一个新的type可以添加新的元素或属性
10. 基于以上的语法, 如何用Schema定义XSD文档?
a. 有三种模式可以定义XSD文档
a.1 按照DTD的模式: 从头到尾依次定义
a.2 利用 ref属性:
a.2.1 先定义好simpleType的<element name="simpleLeafElement" />
a.2.2 利用ref加载simpleType于complexType (利用对name的引用)
a.2.3 在将简单的complexType装配到复杂的rootElement上最终合成根元素的complexType组装体
a.2.4 特点是逆向元素组装
<xs:element name="rootElement"><xs:complexType><xs:element ref="xxx" /><xs:element ref="xxx" /> ... ... ...</xs:complexType></xs:element>
a.3 利用Type的组装简化ref的过程, 将所有的element都变成simpleType的element
a.3.1 先定义好叶元素的type<simpleType name="simpleLeafType">
a.3.2 再定义complexType, 组装应用了前面定义过的tpye赋值给<element name="xxx” type="definedType"/> (注意: 此时就可以把所有的element都转化成simpleType的)
a.3.3 组装type直到得到得到根类型的rootTpye
a.3.4 最后将rootType赋给根元素rootElement
a.3.5 特点是类型抽离,类型逆向组装, 所有元素最简,单便签封闭
<xs:complexType name="rootType"><xs:element name="xxx" type="xxx" /><xs:element name="xxx" type="xxx" /> ... ... ...</xs:complexType><xs:element name="rootElement" type="rootType" />
b. 推荐使用a.3的模式, 其优点是:
- 将元素和类型分离, 元素全部变成但标签的simpleTpye类型, 文档十分清晰
- 相比较a.2省去了ref和大量书写<xs:complexTpye></xs:complexType>的过程
- 便于修改和维护代码
参考资料:
[1] w3cschool教程 http://www.w3school.com.cn/x.asp
[2] 传智博客赵君JavaWeb视频教程
- JavaWeb——XML基础
- day01-Javaweb xml基础
- JavaWeb学习之XML基础
- JavaWeb —— Web基础
- JavaWeb——Servlet基础
- JavaWeb——JSP基础
- javaWeb学习之——XML
- JavaWeb学习笔记——XML
- JavaWeb基础(3)—— JavaWeb 开发基础知识
- Javaweb-xml基础1(学习笔记)
- Javaweb-xml基础2(学习笔记)
- Javaweb-xml基础3(学习笔记)
- JavaWeb基础——细节知识汇总
- JavaWeb开发技术——过滤器基础
- JavaWeb开发基础——html
- javaweb 基础(1)—— servlet
- javaweb 基础(2)—— cookie
- JavaWeb学习总结(二)——XML文件读取
- 结构体字节对齐
- 计算机科学中最重要的32个算法
- 解决MySQL乱码问题
- 安卓中的对话框通知---简单的对话框入门
- ecshop 批量添加商品
- JavaWeb——XML基础
- Android深入浅出之Zygote[1]
- 在Ubuntu下安装配置Hadoop
- VS2012下基于Glut OpenGL glEdgeFlag示例程序:
- java中参数传递的方式
- ecshop的相关配件中添加购买的按钮
- 高质量C++编程(三)常量
- android、ios动态抓包(全gui操作,不需命令行)
- oracle与mysql实现时间差小于一定值语句