您的位置:首页 > 其它

xml的概述和dtd的总结

2011-03-09 20:10 169 查看
xml的概述
xml的全称是Extensible Markup Language 可扩展标记语言。它是由SGML(Standard Gerneralized Markup language)发展而来的,允许开发者自定标签,可以将标签和内容有效的分离。
(可扩展):相对于标记语言来说它可以自定标签。
而html是一种标记语言,她的标签,如:<table> <h1> <p> 都是规定好的标签,我们才可以使用
xml与html的区别:
Xml用来传输和存储的数据的。它可以自定义标签.
Html:显示数据<p></p> <p><p>
所以说xml并不是用来代替html的,二者的为不同的目的而设计。
xml的优势:
1、 简单易用
2、 严格的格式
---xml的基本语法
Xml是平台无关的数据交换语言,Java是平台无关的编程语言,有人为:xml与Java就是天生一对。
3、 数据逻辑与显示逻辑分离
---看似MVC模式理解
xml和JavaEE
1、 配置描述
JavaEE 最开始接触的JSP技术,在web.xml中可以配置Servlet,Filter和Listener体现了xml的应用。
Struts1 struts-config.xml
Hibernate hibernate.cfg.xml xxx.hbm.xml
Struts2 struts.xml
Spring2.5 bean.xml
2、 Web Services
Web Services使用基于xml的消息处理作为数据通讯方式,消除了不同组件模型、操作系统和编程语言之间存在的差异,使异构系统能作为单个计算机网络协同运行。
Csdn webservice编程开发csdn网站
xml的竞争对手:
1、 Jdk1.5 –>Java的Annontation(注解)
2、 轻量级的数据交换格式------JSON(JavaScript Object Notation)

xml的文档
Xml文档的分类
1、 格式不良好(malformed)的xml文档:完全没有遵守xml文的基本规范的xml文档。
2、 格式良好(well-formed)的但无效的xml文档: 遵守xml文的基本规范,但没有使用dtd或schema定义语义约束的xml文档。
3、 有效(valid)的xml文档:遵守xml文的基本规范,并使用dtd或schema定义语义约束,而且也完全遵守了dtd或schema定义语义约束的xml文档。

Xml的语法
• 一个XML文件分为如下几部分内容:
– 文档声明
– 元素
– 属性
– 注释
– CDATA区 、特殊字符
– 处理指令(processing instruction)
Xml的声明
最简单声明
<?xml version=”1.0”?>

Encoding属性:字符编码 如果没有指定默认的是UTF-8编码
常见的字符集:
简体中文:GBK 或GB2312
繁体中文: BIG5
西欧字符:ISO8859-1
通用的国际编码:Unicode UTF-8
Standalone:指定该文档是否需要引用其它资源,属性值只有:yes或no
Xml元素的基本规则
元素是xml文档的基本单元,xml文档就是一个一个层层嵌套的元素组成的。整个的xml文档从根元素开始,根元素包含若干个子元素,而每个子元素又可以包含若干个子元素,从而可以组成一个xml文档。

Xml标签语法:
1、Xml的标签分为两类:
单标记:<商丘/>
双标记:<中国></中国>
2、xml标签的要求:
(1)、标签名可以有字母(包括非西欧字符)、数字、下划线(_)、中划线(-)、冒号(:)和点号(.)组成,但不能以数字、中划线和点号开头。
(2)、标签名不能包含<、>、,、$等符号
(3)、标签名种尽量不要出现英文的冒号(:),除非在使用命名空间。
(4)、标签名不能以字符xml、XML等任意大小写组合开始。
(5)、标签名不能包含空格。
(6)、标签名区分大小写

3、xml标签嵌套子元素:xml允许深度嵌套子元素,只要保证元素之间合理的嵌套即可.而且xml元素可以嵌套多个重名的子元素,这多个子元素之间是有序的。
4、空元素:空元素不可以接受子元素,也不可以接受字符串内容。
第三个xml:
<book>
<name>redarmy</name>
<content/> :备注:空元素 但可以接受属性,而且可以接受多个属性
</book>
5、字符数据
<book>
<computer>Struts2开发详解</computer>
<computer>
Struts2开发详解
</computer>
</book>
对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理

如果文本字符中包含了一些特殊的字符,例如<和&由于这些字符都有特殊的含义,因此直接在xml文档中使用该字符串将引起文档的混乱。
<表达式>
<比较符>1+3<6</比较符>
</表达式>



代表的是文本字符串中包含了特殊的字符

有以下两种方法解决:
1、 使用实体引用:用另一个特殊符号代替这些特殊符号
2、 使用CDATA标记:将整个文档定义成字符串。

1、 使用实体引用



解决如下:
<?xml version="1.0" encoding="UTF-8"?>
<表达式>
<比较符>1+3<6</比较符>
</表达式>
2、 使用CDATA标记
在特殊标记CDATA下,所有的特殊字符,甚至是有效的元素都将被当成简单的字符串处理。实体引用也会失去作用,变成直接的文本。
CDATA的语法格式如下:
<![CDATA[文本内容]]>
<?xml version="1.0" encoding="UTF-8"?>
<表达式>
<比较符>
<![CDATA[
1+3<6
]]>
</比较符>
</表达式>
备注:由于xml文档根本不会对CDATA标记内容进行任何解析,因此在CDATA内可以放置任何内容,其中的内容永远不会出错。

1、 注释
Xml文档还可以加入解释用的字符数据,这些解释用的字符串不会被xml解析器处理。这些解释用的文本称为注释。Xml的文档注释与html完全一致。
Xml注释的语法格式如下:
<!--注释字符串 -->
Xml的注释允许包含元素和标签。

注意:
1、 Xml的注释不能够放在标签体内。
2、 不要把xml文档放在xml文档声明之前 xml文档的声明永远在第一行
3、 不在注释中使用双中划线(--)
…..

2、 处理指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析
Xml处理指令的格式如下:
<?处理指令名 处理指令信息?>

3、 属性
xml属性的特征:
1、 xml元素的属性必须有属性值,属性值必须用引号引起来。
2、 同一个xml元素里不能有多个同名的属性
3、 Xml元素里的多个属性之间没有先后顺序。
<book>
<isbn>123456780</isbn>
<book_name>Java讲义</book_name>
<price>99</price>
</book>
比如说 这个book本身就有 isbn book_name price的属性
那么
<book isbn=”” book_name=”” price=””/>


Xml必须有一个根元素。

Xml文档的整体结构
1、 必须有一个根元素(有且只有一个)
2、 元素必须合理结束
3、 元素之间必须合理嵌套
4、 元素的属性必须有属性值

只要不满足上面的条件就是一个格式不良好的xml文档
只要满足上面的条件就是一个格式良好的xml文档
并且遵守了dtd或者schema就是一个有效的xml文档。

Xml文档是一种标准的结构化文档,可以转换成DOM(Document Object Model)树,其根节点对应DOM树的根节点。

<book>
<computer>
<name>网上介绍</name>
<author>redarmy</author>
</computer>

<computer>
<name>网上介绍</name>
<author>redarmy</author>

</computer>
</book>
DTD详解
目前有两种xml文档定义的语义约束
1、 Dtd document type definition
2、 xml schema

xml语义约束
web.xml
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
Dtd约束包括那几个方面
1、 定义xml的根元素、内容和结构
2、 定义xml文档中可以接受那些元素
3、 定义xml文档里每个元素接受的合法内容,包括是否为空,是可以是文本,可以接受那些子元素,子元素出现的顺序和子元素出现次数等。
4、 定义xml文档中每个元素能接受那些属性
5、 定义xml文档中每个属性的类型,能接受那些值,以及元素对属性的约束等。
6、 定义属性的固定值和默认值
7、 定义xml文档或dtd中可以使用的实体。
Dtd有作用
1、 Dtd采用了非xml的语法描述语义约束,可以提供如下功能
2、 通过使用dtd可以让每个xml文件带有一个有关其自身的格式描述
3、 不同的公司、组织可一致地使用某个标准的dtd来交换数据
4、 应用程序也可以使用某个标准的dtd验证所介绍的xml文档是否符合语义约束
5、 开发者也可以使用dtd来验证所创建的xml文档。

引入dtd的方式
1、 内部dtd
2、 外部dtd
3、 公用dtd
1、 内部dtd
语义约束与xml文档的内容放在同一个xml文档中。内部dtd紧跟在xml声明和处理指令之后,以<!DOCTYPE 开始,以]>结束。其语法格式如下
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名[
元素描述
]>
xml文档主体部分

2、 外部dtd
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名 SYSTEM "外部的DTD的URL地址">

3、 公用dtd

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名 PUBLIC "DTD的标识名" "公用的DTD的URL地址">

定义一个元素
<!ELEMENT 元素名(子元素,)>
<!ELEMENT 元素名(#PCDATA)>

DTD的文档结构如下:
第一行是DTD声明部分 该声明与xml文档的生命语法格式相同
0到多个注释部分,DTD注释与xml文档的注释完全相同
0到多个<!ELEMENT…..>定义 每个它就是一个xml元素
0到多个<!ATTLIST…..>定义每个它就是一个xml元素的属性
0到多个<!ENTITY…..>定义每个它就是一个实体
0到多个<!NOTATION…..>定义 每个它定义一个符号
彼此之间完全独立,无须相互嵌套。

1、 定义元素
元素类型的定义的全称是:Element Type Defintion,简称ETD,它不但会定义每个文件中可能存在的元素,给元素的名称,而且会定义元素的具体类型。
元素类型描述主要有5种:
1、 任意类型
可以是以下四种的内容
语法格式:
<!ELEMENT 元素名 ANY>
2、 字符串值

3、 空元素 <br/>
4、 包含子元素
5、 混合类型

<!--任意类型-->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book ANY>
]>

无效的xml文档但是格式良好的xml文档

<!--空元素-->
<!ELEMENT 元素名 EMPTY>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book EMPTY>
]>
有效的xml文档

<!--定义字符串内容的元素-->、
<!ELEMENT 元素名 (#PCDATA)>

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>

<!--定义混合内容-->
<!ELEMENT 父元素名(#PCDATA|子元素1|子元素2|子元素3|........)*> 并不是互斥
|无序的重复出现 出现的次数不受限制
注意:1、#PCDATA必须放在最前面
2、#PCDATA只能用|与各个子元素分隔
3、不要试图在各个子元素之后添加?、*、+等表示频率的修饰符
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (#PCDATA|book_name|price|author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>

<computer>

<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmy_chen</author>
</computer>


<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>
</book>

定义子元素
1、 有序的子元素(,)
(,)用于分隔有序的子元素
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>

<computer>

<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmychen</author>
</computer>


<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>

</book>
2、 互斥的子元素
互斥的子元素表明一系列的子元素中只能出现其中之一。
(|)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name|price|author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>

<computer>
<book_name>JavaWeb开发</book_name>
</computer>


<computer>
<price>30</price>
</computer>


<computer>
<author>redarmy_Chen</author>
</computer>

</book>

3、 子元素出现的频率

+: 一次或多次 (书+)
?: 0次或一次 (书?)
*: 0次或多次 (书*)
注意:混合类型的频率只能安如下方式加:
<!ELEMENT computer (#PCDATA|book_name|price|author)*>
//#PCDATA以它开头的是混合类型 频率只能在最后加
4、 组合子元素
<!ELEMENT computer (book_name|price|author)>
5、 无序的子元素
2、 定义属性
<!ATTLIST属性所属元素 属性名 属性类型[元素对属性的约束][默认值]>
元素对属性的约束|默认值是可选的对于它们的使用有如下的情况:
1、 在没有指定”元素对属性的约束”时,必须为该属性增加默认值。
2、 在元素对属性的约束是:#REQUIRED时,不能为该属性指定默认值。
3、 在元素对属性的约束是:#IMPLIED时,不能为该属性指定默认值
4、 在元素对属性的约束是:#FIXED时,必须为该属性指定默认值
#REQUIRED:必须的属性
#IMPLIED:可有可无
#FIXED:固定值
<水果 品名=”苹果” 颜色=”绿色”>关于水果的元素</水果>
属性类型
类型
说明
CDATA
字符串数据 character data
(e1|e2|e3)
该属性是一系列枚举值之一
ID
Id必须是唯一的
IDREF
引用自己已经定义的id
IDREFS
空格区分多个id
ENTITY
是一个外部的实体
ENTITIES
多个外部实体,多个外部实体之间用空格分隔
Xml:
预定义的xml值
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 购物车[
<!ELEMENT 购物车 (肉*,水果*,玩具)>
<!ELEMENT 肉 EMPTY>
<!ELEMENT 水果 EMPTY>
<!ELEMENT 玩具 EMPTY>
<!ATTLIST 肉 类型 (鸡肉|牛肉|狗肉) #REQUIRED>
<!ATTLIST 水果 类型 (苹果|梨|香蕉) #IMPLIED>
<!ATTLIST 玩具 类型 CDATA #FIXED "地雷">
]>

<购物车>
<肉 类型="狗肉"/>
<水果/>
<玩具 类型="地雷"/>
</购物车>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: