您的位置:首页 > 编程语言 > Java开发

02-JavaWeb-XML-xml语法-DTD语法

2013-08-12 21:56 281 查看
XML语言

一, 什么是XML

1,

Extensible Markup Language,翻译过来为可扩展标记语言。

Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范。

2,

在现实生活中大量存在有关系的数据,如图所示。



二, XML技术用于解决什么问题?

1,

XML语言出现的根本目标在于描述上图那种,在现实生活中经常出现的有关系的数据。

2,

在XML语言中,它允许用户自定义标签。

一个标签用于描述一段数据;

一个标签可分为开始标签和结束标签,

在开始标签和结束标签之间,又可以使用其它标签描述其它数据,

以此来实现数据关系的描述。例如:



三, XML常见应用

1,

XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,

以描述程序模块之间的关系。

2,

在一个软件系统中,为提高系统的灵活性,

它所启动的模块通常由其配置文件决定

例如一个软件在启动时,它需要启动A、B两个模块,

而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,

为了准确描述这种关系,此时使用XML文件最为合适不过。

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<soft>
    <A>
        <a1>中国</a1>
        <a2>美国</a2>
    </A>
    <B>
        <b1>法国</b1>
        <b2>英国</b2>
    </B>
</soft>




四, XML语法

1, 一个XML文件分为如下几部分内容:

文档声明

元素

属性

注释

CDATA区 、特殊字符

处理指令(processing instruction)

2, 文档声明

在编写XML文档时,需要先使用文档声明,声明XML文档的类型。

①最简单的声明语法(缺省是UTF-8编码):

<?xml version="1.0" ?>

②用encoding属性说明文档(存盘时使用)的字符编码:

<?xml version="1.0" encoding="GB2312" ?>

(xml文档以什么编码保存,就要以什么编码打开)

③用standalone属性说明文档是否独立:

<?xml version="1.0" encoding="GB2312" standalone="yes" ?>

3, 元素

(1)

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,

一个标签有如下几种书写形式,例如:

包含标签体:<a>www.itcast.cn</a>

不含标签体的:<a></a>, 简写为:<a/>

(2)

一个标签中也可以嵌套若干子标签。

但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:

<a>welcome to <b>www.it315.org</a></b>

(3)

格式良好的XML文档必须有且仅有一个根标签,

其它标签都是这个根标签的子孙标签。

(4)

对于XML标签中出现的所有空格和换行,

XML解析程序都会当作标签内容进行处理。

例如:下面两段内容的意义是不一样的。

第一段:

<网址>www.itcast.cn</网址>

第二段:trim()

<网址>

www.itcast.cn

</网址>

(5)

由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,

使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。

(6) 命名规范

一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:

区分大小写,例如,<P>和<p>是两个不同的标记。

不能以数字或"_" (下划线)开头。

不能以xml(或XML、或Xml 等)开头。

不能包含空格。

名称中间不能包含冒号(:)。

4, 属性

(1)一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:

<input name=“text”>

(2)属性值一定要用双引号(")或单引号(')引起来

(3)定义属性必须遵循与标签相同的命名规范

(4)多学一招:

在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:

<input>

<name>text</name>

</input>

5, 注释

(1) Xml文件中的注释采用:“<!--注释-->” 格式。

(2) 注意:

①XML声明之前不能有注释

②注释不能嵌套,例如:

<!--大段注释

……

<!--局部注释-->

……

-->

6, CDATA区

character data

(1)

在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。

遇到此种情况,可以把这些内容放在CDATA区里,

对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。

(2)

语法:<![CDATA[ 内容 ]]>

<![CDATA[

<itcast>

<br/>

</itcast>

]]>

7, 转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

特殊字符 替代符号

& &

< <

> >

" "

' '

8, 处理指令

(1)

处理指令,简称PI (processing instruction)。

处理指令用来指挥解析引擎如何解析XML文档内容。

(2)

例如,在XML文档中可以使用xml-stylesheet指令,

通知XML解析引擎,应用css文件显示xml文档内容。

<?xml-stylesheet type="text/css" href="1.css"?>

(3)

处理指令必须以“<?”作为开头,以“?>”作为结尾,

XML声明语句就是最常见的一种处理指令。

(4)举例

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="config.css" ?>
<soft>
    <A>
        <a1>中国</a1>
        <a2>美国</a2>
    </A>
    <B>
        <b1>法国</b1>
        <b2>英国</b2>
    </B>
</soft>


config.css

a1{
	font-size: 200px;
	color: red;
}
a2{
	font-size: 100px;
	color: green;
}
b1{
	font-size: 50px;
}
b2{
	font-size: 30px;
}


五, XML约束

XML约束概述

(1)什么是XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

(2)为什么需要XML约束

解析xml时, 必须以一定的规则解析.

因此, 需要约定一些书写规则.

(3)常用的约束技术

XML DTD

XML Schema

六, DTD 引入

1, DTD快速入门

(1)DTD(Document Type Definition),全称为文档类型定义。

(2)文件清单:book.xml

<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<书>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>39.00元</售价>
	</书>
	<书>
		<书名>JavaScript网页开发</书名>
		<作者>张孝祥</作者>
		<售价>28.00元</售价>
	</书>
</书架>


(3)文件清单:book.dtd

<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名, 作者, 售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>


注: DTD文件应使用UTF-8或Unicode

(4)说明

ELEMENT, 元素, 标签;

PCDATA , parsed character data

IE默认是不具备校验XML的功能的.

2, 编程校验XML文档正确性

(1) 说明

IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM.

开发人员可以编写javascript代码,利用这个解析工具装载xml文件,

并对xml文件进行dtd验证。

(2) 步骤

①创建xml文档解析器对象

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");

②开启xml校验

xmldoc.validateOnParse = "true";

③装载xml文档

xmldoc.load("book.xml");

④获取错误信息

xmldoc.parseError.reason; // 原因

xmldoc.parseError.line; // 行号

注: xmldoc.parseError 获取封转错误信息的对象

(3) validate.html

<html>
    <head>
        <title>validate xml</title>
    </head>
    <body>
        <script>
            // 创建 Microsort.XMLDOM 对象
            var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
            // 打开解析器开关
            xmldoc.validateOnParse = true;
            // 装载 要校验的 xml文档
            xmldoc.load("book.xml");
            
            // 打印错误信息
            document.write("error reason: " + xmldoc.parseError.reason + "</br>");            
            document.write("error line: " + xmldoc.parseError.line + "</br>");
        </script>
    </body>
</html>


3, 编写DTD约束的两种方式

(1)

DTD约束即可以作为一个单独的文件编写,

也可以在XML文件内编写。

(2) 在xml文件内编写DTD

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
	<!ELEMENT 书架 (书+)>
	<!ELEMENT 书 (书名,作者,售价)>
	<!ELEMENT 书名 (#PCDATA)>
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
	<书>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>39.00元</售价>
	</书>
	...
</书架>


(3) 引用DTD约束

XML文件使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,

DOCTYPE声明语句有两种形式:

①当引用的文件在本地时,采用如下方式:

<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">

例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。

②当引用的文件是一个公共的文件时,采用如下方式:

<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">

例如:<!DOCTYPE web-app PUBLIC

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

七, DTD约束语法细节

1, 概要

元素定义

属性定义

实体定义

2, 元素定义

(1) 格式

在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:

<!ELEMENT 元素名称 元素类型>

(2) 元素类型

元素类型可以是元素内容、或类型

①元素内容, 则需要使用()括起来,



<!ELEMENT 书架 (书名,作者,售价)>

<!ELEMENT 书名 (#PCDATA)>

②元素类型,则直接书写,DTD规范定义了如下几种类型:

EMPTY:用于定义空元素,例如<br/> <hr/>

ANY:表示元素内容为任意类型。

(3) 元素内容

元素内容中可以使用如下方式,描述内容的组成关系

①表示出现顺序没有要求

<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)* >

②用逗号分隔,表示内容的出现顺序必须与声明时一致。

<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>

③用|分隔,表示任选其一,即多个只能出现一个

<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

④在元素内容中也可以使用 +、*、? 等符号表示元素出现的次数:

+: 一次或多次 (书+)

?: 0次或一次 (书?)

*: 0次或多次 (书*)

也可使用圆括号( )批量设置,例

<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

3, 属性定义

(1) 格式

xml文档中的标签属性需通过ATTLIST为其设置属性

语法格式:

<!ATTLIST 元素名

属性名1 属性值类型 设置说明

属性名2 属性值类型 设置说明

……

>

(2) 属性声明举例

<!ATTLIST 商品

类别 CDATA #REQUIRED

颜色 CDATA #IMPLIED

>

对应XML文件:

<商品 类别="服装" 颜色="***">…</商品>

<商品 类别="服装">…</商品>

(3) 设置说明:

①#REQUIRED

必须设置该属性

②#IMPLIED

可以设置也可以不设置

③#FIXED

说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。

但需要为该属性提供这个值

④直接使用默认值

在 XML 中可以设置该值也可以不设置该属性值。

若没设置则使用默认值。

(4) 举例

<!ATTLIST 页面作者 
     姓名 CDATA #IMPLIED 
     年龄 CDATA #IMPLIED 
     联系信息 CDATA #REQUIRED 
     网站职务 CDATA #FIXED "页面作者" 
     个人爱好 CDATA "上网"
    >


(5) 常用属性值类型

①CDATA:表示属性值为普通文本字符串。

②ENUMERATED

③ID

④ENTITY(实体)

(6) 属性值类型-> ENUMERATED

①说明

属性的类型可以是一组取值的列表,

在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)

②举例

<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
	<!ELEMENT 肉 EMPTY>
	<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]> 
<购物篮>
	<肉 品种="鱼肉"/>
	<肉 品种="牛肉"/>
	<肉/>
</购物篮>


(7) 属性值类型->ID

①说明

表示属性的设置值为一个唯一值。

ID 属性的值只能由字母,下划线开始,不能出现空白字符

②举例

<?xml version = "1.0" encoding="GB2312" ?>

<!DOCTYPE 联系人列表[
	<!ELEMENT 联系人列表 ANY>
	<!ELEMENT 联系人 (姓名,EMAIL)>
	<!ELEMENT 姓名 (#PCDATA)>
	<!ELEMENT EMAIL (#PCDATA)>
	<!ATTLIST 联系人 编号 ID #REQUIRED>
]>
<联系人列表>
	<联系人 编号="a1">
		<姓名>张三</姓名>
		<EMAIL>zhang@it315.org</EMAIL>
     </联系人>
	<联系人 编号="a2">
		<姓名>李四</姓名>
		<EMAIL>li@it315.org</EMAIL>
	</联系人>
</联系人列表>


(8) 实体定义

①引入

A)实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

B)在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。

C)实体可分为两种类型:引用实体和参数实体。

②实体定义->引用实体

A) 引用实体主要在 XML 文档中被应用

B) 语法格式:

<!ENTITY 实体名称 “实体内容” >:直接转变成实体内容

C) 引用方式:

&实体名称;

D) 举例:

<!ENTITY copyright "I am a programmer">

……

©right;

③实体定义->参数实体

A) 参数实体被 DTD 文件自身使用

B) 语法格式:

<!ENTITY % 实体名称 "实体内容" >

C) 引用方式:

%实体名称;

D) 举例1:

<!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址">

    <!ELEMENT 个人信息 (%TAG_NAMES; | 生日)>
    <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>


举例2:

<!ENTITY % common.attributes
    " id ID #IMPLIED 
      account CDATA #REQUIRED "
    >
    ...
    <!ATTLIST purchaseOrder %common.attributes;>
    <!ATTLIST item %common.attributes;>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: