文章目录 零、本讲学习目标 一、 XML基础 (一)XML概述 (二)XML语法 1、XML文档的声明 2、XML元素的定义 3、XML属性的定义 4、XML注释的定义 5、XML文件示例 (三)DTD约束 1、什么是XML约束 2、什么是DTD约束 3、DTD约束文档的解释 4、DTD的引入 (1)引入本地DTD文件 (2)引入公共的DTD文件 (3)采用内嵌方式实现DTD对XML的约束 5、DTD约束的语法 (1)元素定义 (2)元素内容 (3)元素内容包含的符号 (4)属性定义 (5)属性设置说明 (6)属性类型 (四)Schema约束 1、什么是Schema约束 2、Schema约束的优点 3、Schema约束的文档 4、名称空间 5、声明名称空间的格式 6、引入Schema文档 7、Schema语法 (1)元素定义 (2)属性定义 (3)简单类型 (4)复杂类型 二、程序开发体系架构 三、Tomcat服务器
零、本讲学习目标
了解XML的概念 掌握XML语法 掌握DTD约束 掌握Schema约束 了解C/S体系架构与B/S体系架构 熟悉Tomcat的安装与启动 掌握在IntelliJ IDEA中配置Tomcat服务器的方法
Java Web是使用Java技术解决相关Web互联网领域的技术栈,开发一个完整的Java Web项目涉及到静态Web资源、动态Web资源的编写以及项目的部署。在Java Web中,静态Web资源开发技术包括HTML、CSS、JavaScript、XML等;动态Web资源开发技术包括JSP/Servlet等。本节将针对Java Web开发所用到的XML技术以及项目部署服务器Tomcat进行详细地讲解。
一、 XML基础
(一)XML概述
目标:了解XML的概念,能够知道HTML用于做什么
1、XML
XML是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言 。XML用于提供数据描述格式,适用于不同应用程序之间的数据交换,而且这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。 在现实生活中,很多事物之间都存在着一定的层次关系,例如中国有很多省份,每个省份下又有很多城市,这些中国与所辖省、市之间的层次关系可以通过一张树状结构图描述。 在XML文档中,通过元素的嵌套关系可以很准确地描述具有树状层次结构的复杂信息,因此,越来越多的应用程序都采用XML格式存放相关的配置信息,以便于读取和修改配置信息。
2、XML与HTML的比较
(1)HTML用于显示数据,XML用于传输和存储数据。 (2)HTML标签不区分大小写,而XML标记严格区分大小写。 (3)HTML可以有多个根元素,而格式良好的XML有且只能有一个根元素。 (4)在HTML中,空格是自动过滤的,而在XML中,空格不会自动过滤。 (5)HTML中的标签是预定义的标签,而XML中的标记可以根据需要自己定义,并且可扩展。
(二)XML语法
目标:掌握XML的语法,包括文档声明、元素声明、属性定义和注释
1、XML文档的声明
从XML 1.1开始,在一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明必须位于文档的第一行。 XML文档声明的语法格式:<?xml version="version" encoding="value" standalone="value"?>
属性 说明 version 用于指定遵循XML规范的版本号。在XML声明中必须包含version属性,且该属性必须放在XML声明中其他属性之前。 encoding 用来指定XML文档所使用的编码集。 standalone 用来指定该XML文档是否和一个外部文档嵌套使用,取值为yes或no。如果设置属性值为yes,说明是一个独立的XML文档,与外部文件无关联;如果设置属性值为no,说明XML文档不独立。
2、XML元素的定义
XML文档中的主体内容都是由元素(Element)组成的,元素是以树形分层结构排列的,一个元素可以嵌套在另一个元素中。XML文档中有且仅有一个顶层元素,称为文档元素或根元素。元素一般是由开始标签、属性、元素内容和结束标签构成。
< 售价 单位 = " 元" > 100</ 售价>
3、XML属性的定义
在XML文档中,可以为元素定义属性。属性是对元素的进一步描述和说明。在一个元素中,可以自定义多个属性,属性是依附于元素存在的,并且每个属性都有自己的名称和取值。
< 售价 单位 = " 元" > 100</ 售价>
需要注意的是,在XML文档中,属性的命名规范与元素相同,属性值必须要用双引号(“”)或者单引号(‘’)引起来,否则被视为错误。
4、XML注释的定义
注释是为了便于阅读和理解,如果想在XML文档中插入一些附加信息,比如作者姓名、地址或电话等,这些信息是对文档结构或文档内容的解释,不属于XML文档的内容,因此XML解析器不会处理注释内容。XML文档的注释以字符串“<!--
”开始,以字符串“-->
”结束。
5、XML文件示例
<?xml version="1.0" encoding="UTF-8"?>
< breakfast> < food> < name> Belgian Waffles</ name> < price> $5.95</ price> < description> two of our famous Belgian Waffles with plenty of real maple syrup</ description> < calories> 800</ calories> </ food> < food> < name> Strawberry Belgian Waffles</ name> < price> $4.50</ price> < description> light Belgian waffles covered with strawberries and whipped cream</ description> < calories> 300</ calories> </ food> < food> < name> Berry-Berry Belgian Waffles</ name> < price> $8.95</ price> < description> light Belgian waffles covered with an assortment of fresh berries and whipped cream</ description> < calories> 900</ calories> </ food> < food> < name> French Toast</ name> < price> $4.50</ price> < description> thick slices made from our homemade sourdough bread</ description> < calories> 550</ calories> </ food> < food> < name> Homestyle Breakfast</ name> < price> $6.95</ price> < description> two eggs, bacon or sausage, toast, and our ever-popular hash browns</ description> < calories> 950</ calories> </ food>
</ breakfast>
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns = " http://maven.apache.org/POM/4.0.0" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion> 4.0.0</ modelVersion> < groupId> net.huawei.spring</ groupId> < artifactId> SpringDemo</ artifactId> < version> 1.0-SNAPSHOT</ version> < dependencies> < dependency> < groupId> org.springframework</ groupId> < artifactId> spring-core</ artifactId> < version> 5.3.25</ version> </ dependency> < dependency> < groupId> junit</ groupId> < artifactId> junit</ artifactId> < version> 4.13.2</ version> < scope> test</ scope> </ dependency> </ dependencies>
</ project>
(三)DTD约束
1、什么是XML约束
XML文档中的标签是可以随意定义的,同一本书出现了两种售价,如果仅根据标签名称区分哪个是原价,哪个是会员价,这是很难实现的。为此,在XML文档中,定义了一套规则对文档中的内容进行约束,这套规则称为XML约束 。对XML文档进行约束时,同样需要遵守一定的语法规则,这种语法规则就形成了XML约束语言 。
2、什么是DTD约束
DTD约束是早期出现的一种XML约束模式语言,根据它的语法创建的文件称为DTD文件。在一个DTD文件中,可以包含元素的定义、元素之间关系的定义、元素属性的定义以及实体和符号的定义。 通过一个案例简单认识一下DTD约束,创建book.xml
文件
<?xml version="1.1" encoding="UTF-8"?>
< 书架> < 书> < 书名> 徒然草</ 书名> < 作者> 吉田兼好</ 作者> < 售价> 34.00元</ 售价> </ 书> < 书> < 书名> 精通Spring框架</ 书名> < 作者> 魏赫布</ 作者> < 售价> 49.00元</ 售价> </ 书>
</ 书架>
创建book.dtd
文件
< !ELEMENT 书架 (书+) >
< !ELEMENT 书 (书名,作者,售价) >
< !ELEMENT 书名 (#PCDATA) >
< !ELEMENT 作者 (#PCDATA) >
< !ELEMENT 售价 (#PCDATA) >
book.dtd
是一个简单的DTD约束文档。每个元素都是按照book.dtd
文档所规定的约束进行编写的。
3、DTD约束文档的解释
(1)<!ELEMENT …>语句定义了一个元素,其中“书架”是元素的名称,“(书+)”表示书架元素中有一个或者多个名称为“书”的元素,其中字符“+ ”表示它所修饰的元素必须出现一次或者多次。 (2)“书”是元素名称,“(书名,作者,售价)”表示元素书包含书名、作者、售价这三个子元素,并且这些子元素要按照顺序依次出现。 (3)“书名”、“作者”和“售价”都是元素名称,“(#PCDATA)”表示元素中嵌套的内容是普通的文本字符串。
4、DTD的引入
第1种方式: <! DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI" >
第2种方式: <! DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI" >
第1种方式用来引用本地的DTD文件;第2种方式用来引用公共的DTD文件,其中“外部DTD文件的URI”指的是DTD文件在本地存放的位置,对于第1种方式,它可以是XML文档的相对路径,也可以是一个绝对路径,对于第2种方式,它是Internet上的一个绝对URL地址。
(1)引入本地DTD文件
对文件book.xml
进行修改,在XML文档中引入本地的DTD文件book.dtd
<?xml version="1.1" encoding="UTF-8"?>
<! DOCTYPE 书架 SYSTEM "book.dtd" >
< 书架> < 书> < 书名> 徒然草</ 书名> < 作者> 吉田兼好</ 作者> < 售价> 34.00元</ 售价> </ 书> < 书> < 书名> 精通Spring框架</ 书名> < 作者> 魏赫布</ 作者> < 售价> 49.00元</ 售价> </ 书>
</ 书架>
(2)引入公共的DTD文件
引入一个公共的DTD文件,则需要在DOCTYPE声明语句中使用PUBLIC属性
<! DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
其中"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
"是DTD名称,它用于说明DTD符合的标准、所有者的名称以及对DTD描述的文件进行说明,虽然DTD名称看上去比较复杂,但这完全是由DTD文件发布者去考虑的事情,XML文件的编写者只要把DTD文件发布者事先定义好的DTD标识名称进行复制就可以了。
(3)采用内嵌方式实现DTD对XML的约束
DTD对XML文档的约束,除了通过外部引入方式实现外,还可以采用内嵌的方式。 在XML中直接嵌入DTD定义语句的完整语法格式
<?xml version="1.1" encoding="UTF-8" standalone="yes"?>
<! DOCTYPE 根元素名 [ DTD定义语句……
] >
对book.xml
进行修改,在book.xml
文档中直接嵌入book.dtd
文件
<?xml version="1.1" encoding="UTF-8"?>
<! DOCTYPE 书架 [ < !ELEMENT 书架 (书+) > < !ELEMENT 书 (书名,作者,售价) > < !ELEMENT 书名 (#PCDATA) > < !ELEMENT 作者 (#PCDATA) > < !ELEMENT 售价 (#PCDATA) >
] >
< 书架> < 书> < 书名> 徒然草</ 书名> < 作者> 吉田兼好</ 作者> < 售价> 34.00元</ 售价> </ 书> < 书> < 书名> 精通Spring框架</ 书名> < 作者> 魏赫布</ 作者> < 售价> 49.00元</ 售价> </ 书>
</ 书架>
5、DTD约束的语法
在编写XML文档时,需要掌握XML语法。同理,在编写DTD文档时,也需要遵循DTD的语法。DTD的结构一般由元素类型定义、属性定义、实体定义、记号定义等构成,一个典型的DTD文档类型定义会把将来要创建的XML文档的元素结构、属性类型、实体引用等预先进行定义。
(1)元素定义
元素是XML文档的基本组成部分,在DTD定义中,每一条<!ELEMENT…>
语句用于定义一个元素 基本语法格式:<!ELEMENT 元素名称 元素内容>
在上面元素的定义语法格式中,包含了“元素名称”和“元素内容”。其中,“元素名称”是被约束的XML文档中的元素,“元素内容”是对元素包含内容的声明,其内容包括数据类型和符号两部分。
(2)元素内容
元素 说明 #PCDATA 表示元素中嵌套的内容是普通文本字符串,其中关键字PCDATA是Parsed Character Data的简写。 子元素 说明元素包含其他元素。通常用一对小括号()将元素中要嵌套的一组子元素括起来。 混合内容 表示元素既可以包含字符数据,也可以包含子元素。混合内容必须被定义零个或多个。 EMPTY 表示该元素既不包含字符数据,也不包含子元素,是一个空元素。如果在文档中元素本身已经表明了明确的含义,就可以在DTD中用关键字EMPTY表明空元素。 ANY 表示该元素可以包含任何字符数据和子元素。
(3)元素内容包含的符号
在定义元素时,元素内容可以包含一些符号,不同的符号具有不同的作用
符号 作用 问号[?] 表示该对象可以出现0次或1次 星号[*] 表示该对象可以出现0次或多次 加号[+] 表示该对象可以出现1次或多次 竖线[|] 表示列出的对象中选择1个 逗号[,] 表示对象必须按照指定的顺序出现 括号[()] 用于给元素进行分组
(4)属性定义
在DTD文档中,定义元素的同时,还可以为元素定义属性。 DTD属性定义的基本语法格式
< !ATTLIST 元素名 属性名1 属性类型 设置说明 属性名2 属性类型 设置说明 ......
>
在上面属性定义的语法格式中,“元素名”是属性所属元素的名字,“属性名”是属性的名称,“属性类型”则是用来指定该属性是属于哪种类型,“设置说明”用来说明该属性是否必须出现。
(5)属性设置说明
设置说明 含义 #REQUIRED 表示元素的该属性是必须的,例如,当定义联系人信息的DTD时,我们希望每一个联系人都有一个联系电话属性,这时,可以在属性声明时,使用REQUIRED #IMPLIED 表示元素可以包含该属性,也可以不包含该属性。例如,当定义一本书的信息时,发现书的页数属性对读者无关紧要,这时,在属性声明时,可以使用IMPLIED #FIXED 表示一个固定的属性默认值,在XML文档中不能将该属性设置为其他值。使用#FIXED关键字时,还需要为该属性提供一个默认值。当XML文档中没有定义该属性时,其值将被自动设置为DTD中定义的默认值 默认值 和FIXED一样,如果元素不包含该属性,该属性将被自动设置为DTD中定义的默认值。不同的是,该属性的值是可以改变的,如果XML文件中设置了该属性,新的属性值会覆盖DTD中定义的默认值
(6)属性类型
CDATA
是最常用的一种属性类型,表明属性类型是字符数据,与元素内容说明中的#PCDATA相同。当然,在属性设置值中出现的特殊字符,也需要使用其转义字符序列表示,例如,用“&
”表示字符“&
”,用“<
”表示字符“<
”等。Enumerated
(枚举类型),在声明属性时,可以限制属性的取值只能从一个列表中选择,这类属性属于Enumerated(枚举类型)一个ID
类型的属性用于唯一标识XML文档中的某个元素。ID类型的属性值必须遵守XML名称定义的规则。一个元素只能有一个ID
类型的属性,而且ID
类型的属性必须设置为#IMPLIED
或#REQUIRED
。因为ID类型属性的每一个取值都是用来标识一个特定的元素,所以为ID
类型的属性提供默认值,特别是固定的默认值是毫无意义的。 除了讲述的几种属性类型外,DTD约束中还有IDREF
、IDREFS
、NMTOKEN
、NMTOKENS
、NOTATION
、ENTITY
和ENTITYS
几种属性类型,由于篇幅有限,此处就不一一列举。
(四)Schema约束
目标:掌握Schema约束的名称空间,如何引入Schema文档,以及Schema语法
1、什么是Schema约束
同DTD一样,XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD 的局限性。
2、Schema约束的优点
(1)DTD采用的是非XML语法格式,缺乏对文档结构、元素、数据类型等全面的描述。XML Schema采用的是XML语法格式,而且它本身也是一种XML文档,因此,XML Schema语法格式比DTD更好理解。 (2)XML有非常高的合法性要求,XML DTD对XML的描述,往往也被用作验证XML合法性的一个基础,但是XML DTD本身的合法性却缺少较好的验证机制,必需独立处理。XML Schema则不同,它与XML有着同样的合法性验证机制。 (3)XML Schema对名称空间支持得非常好,而DTD几乎不支持名称空间。 (4)DTD支持的数据类型非常有限。 (5)DTD定义约束的能力非常有限,无法对XML实例文档作出更细致的语义限制。
3、Schema约束的文档
XML Schema的功能比DTD强大很多,但相应的语法也比DTD复杂很多。 看一个简单的Schema文档
<?xml version="1.0"?>
< xs: schema xmlns: xs= " http://www.w3.org/2001/XMLSchema" > < xs: element name = " root" type = " xs:string" />
</ xs: schema>
Schema文档,以xsd
作为后缀名,以xs:schema
作为根元素,表示模式定义的开始。
4、名称空间
一个XML文档可以引入多个约束文档,但是,由于约束文档中的元素或属性都是自定义的,所以在XML文档中,极有可能出现代表不同含义的同名元素或属性,导致名称发生冲突。为此,在XML文档中,提供了名称空间,它可以唯一标识一个元素或者属性。这就好比打车去小营,由于北京有两个地方叫小营,为了避免司机走错,我们就会说“去亚运村的小营”或者“去清河的小营”。这时的亚运村或者清河就相当于一个名称空间。
5、声明名称空间的格式
名称空间的声明就是在XML文档中为某个模式文档的名称空间指定一个临时名称,它通过一系列的保留属性来声明,这种属性的名字必须是以“xmlns
”或者以“xmlns:
”作为前缀。它与其他任何XML属性一样,都可以通过直接或者使用默认的方式给出。 名称空间声明的语法格式: <元素名 xmlns:prefixname="URI">
注意:元素名指的是在哪一个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性,以及该元素中嵌套的所有元素及其属性。xmlns:prefixname
指的是该元素的属性名 ,它所对应的值是一个URI引用,用来标识该名称空间的名称。需要注意的是,如果有两个URI并且其组成的字符完全相同,就可以认为它们标识的是同一个名称空间 。 创建book2.xml
,在book2.xml
文档中学习名称空间的使用。
<?xml version="1.1" encoding="UTF-8"?>
< lzy: 书架 xmlns: lzy= " http://www.lzy.org/xmlbook/schema" > < lzy: 书> < lzy: 书名> 徒然草</ lzy: 书名> < lzy: 作者> 吉田兼好</ lzy: 作者> < lzy: 售价> 34.00元</ lzy: 售价> </ lzy: 书> < lzy: 书> < lzy: 书名> 精通Spring框架</ lzy: 书名> < lzy: 作者> 魏赫布</ lzy: 作者> < lzy: 售价> 49.00元</ lzy: 售价> </ lzy: 书>
</ lzy: 书架>
注意:在声明名称空间时,有两个前缀是不允许使用的,它们是xml
和xmlns
。xml
前缀被定义为与名称空间名字http://www.w3.org/XML/1998/namespace
绑定,只能用于XML 1.0规范中定义的xml:space
和xml:lang
属性。前缀xmlns
仅用于声明名称空间的绑定,它被定义为与名称空间名字http://www.w3.org/2000/xmlns
绑定。
6、引入Schema文档
引入方式 说明 使用名称空间引入XML Schema文档 在使用名称空间引入XML Schema文档时,需要通过属性xsi:schemaLocation来声明名称空间的文档,xsi:schemaLocation属性是在标准名称空间“http://www.w3.org/2001/XMLSchema-instance”中定义的,在该属性中,包含了两个URI,这两个URI之间用空白符分隔。其中,第一个URI是名称空间的名称,第二个URI是文档的位置。 通过xsi:noNamespaceSchemaLocation属性直接指定 通过xsi:noNamespaceSchemaLocation属性直接指定,noNamespaceSchemaLocation属性也是在标准名称空间“http://www.w3.org/2001/XMLSchema-instance”中定义的,它用于定义指定文档的位置。
7、Schema语法
(1)元素定义
Schema和DTD一样,都可以定义XML文档中的元素。 在Schema文档中,元素定义的语法格式:<xs:element name="名称" type="类型"/>
element
用于声明一个元素,名称指的是元素的名称,类型指元素的数据类型。在XML Schema 中有很多内建的数据类型,最常用的类型如下表
类型 说明 xs:string 表示字符串类型 xs:decimal 表示小数类型 xs:integer 表示整数类型 xs:boolean 表示布尔类型 xs:date 表示日期类型 xs:time 表示时间类型
< lastname> Smith</ lastname>
< age> 28</ age>
< dateborn> 1980-03-27</ dateborn>
< xs: element name = " lastname" type = " xs:string" />
< xs: element name = " age" type = " xs:integer" />
< xs: element name = " dateborn" type = " xs:date" />
(2)属性定义
在Schema文档中,属性定义的语法格式:<xs:attribute name="xxx" type="yyy"/>
xxx
指的是属性名称
,yyy
指的是属性的数据类型
。其中,属性的常用数据类型与元素相同,都使用的是XML Schema中内创建的数据类型。
(3)简单类型
在XML Schema文档中,只包含字符数据的元素都是简单类型的。简单类型使用xs:simpleType
元素来定义。如果想对现有元素内容的类型进行限制,则需要使用xs:restriction
元素。接下来通过以下几种情况详细介绍如何对简单类型元素的内容进行限定。 xs:minInclusive和xs:maxInclusive元素对值的限定 例如,当我们定义一个雇员的年龄时,雇员的年龄要求是18~58周岁之间,这时,需要对年龄“age”这个元素进行限定,具体示例代码如下所示:
< xs: element name = " age" > < xs: simpleType> < xs: restriction base = " xs:integer" > < xs: minInclusive value = " 18" /> < xs: maxInclusive value = " 58" /> </ xs: restriction> </ xs: simpleType>
</ xs: element>
xs:enumeration元素对一组值的限定 如果希望将 XML 元素的内容限制为一组可接受的值,可以使用枚举约束(enumeration constraint),例如,要限定一个元素名为Car的元素,可接受的值只有:Audi、Golf、BMW,具体示例如下:
< xs: element name = " car" > < xs: simpleType> < xs: restriction base = " xs:string" > < xs: enumeration value = " Audi" /> < xs: enumeration value = " Golf" /> < xs: enumeration value = " BMW" /> </ xs: restriction> </ xs: simpleType>
</ xs: element>
xs:pattern元素对一系列值的限定 如果希望把 XML 元素的内容限制定义为一系列可使用的数字或字母,可以使用模式约束(pattern constraint)。例如,要定义一个带有限定的元素“letter”,要求可接受的值只能是字母a-z其中一个,具体示例如下:
< xs: element name = " letter" > < xs: simpleType> < xs: restriction base = " xs:string" > < xs: pattern value = " [a-z]" /> </ xs: restriction> </ xs: simpleType>
</ xs: element>
xs:restriction元素对空白字符的限定 在XML文档中,空白字符比较特殊,如果需要对空白字符(whitespace characters)进行处理,可以使用whiteSpace元素。whiteSpace元素有三个属性值可以设定,分别是preserve、replace和collapse。其中,preserve表示不对元素中的任何空白字符进行处理,replace表示移除所有的空白字符,collapse表示将所有的空白字符缩减为一个单一字符。接下来以preserve为例,学习如何对空白字符进行限定,具体示例如下:
< xs: element name = " address" > < xs: simpleType> < xs: restriction base = " xs:string" > < xs: whiteSpace value = " preserve" /> </ xs: restriction> </ xs: simpleType>
</ xs: element>
(4)复杂类型
在定义复杂类型时,需要使用xs:complexContent元素来定义。复杂类型的元素可以包含子元素和属性,这样的元素称为复合元素。在定义复合元素时,如果元素的开始标签和结束标签之间只包含字符数据内容,那么这样的内容是简易内容,需要使用xs:simpleContent元素来定义。反之,元素的内容都是复杂内容,需要使用xs:complexContent元素来定义。复合元素有4种基本类型,接下来针对这4种基本类型分别进行讲解。 空元素 这里的空元素指不包含内容,只包含属性的元素,具体示例如下:
< product prodid = " 2023001" />
在上面的元素定义中,没有定义元素“product”的内容,这时,空元素在XML Schema文档中对应的定义方式如下所示:
< xs: element name = " product" > < xs: complexType> < xs: attribute name = " prodid" type = " xs:positiveInteger" /> </ xs: complexType>
</ xs: element>
包含其他元素的元素 对于XML文档中包含其他元素的元素,例如下面的示例代码:
< person> < firstname> John</ firstname> < lastname> Smith</ lastname>
</ person>
元素person嵌套了两个元素,分别是“firstname”和“lastname”。这时,在Schema文档中对应的定义方式如下所示:
< xs: element name = " person" > < xs: complexType> < xs: sequence> < xs: element name = " firstname" type = " xs:string" /> < xs: element name = " lastname" type = " xs:string" /> </ xs: sequence> </ xs: complexType>
</ xs: element>
仅包含文本的元素 对于仅含文本的复合元素,需要使用“simpleContent”元素添加内容。在使用简易内容时,必须在“simpleContent”元素内定义扩展或限定,这时,需要使用“extension”或“restriction”元素来扩展或限制元素的基本简易类型。请看一个XML的简易例子,其中,“shoesize”仅包含文本,具体示例如下:
< shoesize country = " france" > 35</ shoesize>
元素“shoesize”包含了属性以及元素内容,针对这种仅包含文本的元素,需要使用extension来对元素的类型进行扩展,在Schema文档中对应的定义方式如下所示:
< xs: element name = " shoesize" > < xs: complexType> < xs: simpleContent> < xs: extension base = " xs:integer" > < xs: attribute name = " country" type = " xs:string" /> </ xs: extension> </ xs: simpleContent> </ xs: complexType>
</ xs: element>
包含元素和文本的元素 在XML文档中,某些元素经常需要包含文本以及其他元素,例如,下面的这段XML文档:
< letter> Dear Mr.< name> John Smith</ name> .Your order < orderid> 1032</ orderid> will be shipped on < shipdate> 2001-07-13</ shipdate> .
</ letter>
< xs: element name = " letter" > < xs: complexType mixed = " true" > < xs: sequence> < xs: element name = " name" type = " xs:string" /> < xs: element name = " orderid" type = " xs:positiveInteger" /> < xs: element name = " shipdate" type = " xs:date" /> </ xs: sequence> </ xs: complexType>
</ xs: element>
注意 :为了使字符数据可以出现在“letter”元素的子元素之间,使用了mixed属性,该属性用来规定是否允许字符数据出现在复杂类型的子元素之间,默认情况下mixed的值为false 。
二、程序开发体系架构
(一)C/S体系架构
C/S是Client/Server的缩写,即客户端/服务器架构。在开发的过程中,客户端需要安装相应的软件才能连接服务器,并且客户端软件承担所有的逻辑和运算,服务器只提供数据交互的一种体系架构。 - C/S架构的局限性
(二)B/S体系架构
B/S是Browser/Server的缩写,即浏览器/服务器架构。在开发过程中,客户端只需要一个浏览器,即可以实现与服务器交互,服务器承担所有的逻辑和计算,浏览器只负责将结果显示在屏幕上的一种体系架构。B/S架构最大的优点是客户机上无需安装专门的客户端程序,程序中的业务逻辑处理都集中到了Web服务器上,客户机只要安装一个浏览器就能通过Web服务器与数据库进行交互,并将交互的结果以网页的形式展现在浏览器中。 浏览器并不是直接与数据库服务器建立连接,而是通过Web服务器与数据库服务器需要建立连接。由此可见,B/S架构可以有效地解决数据库并发数量有限的问题。 B/S架构的工作原理
三、Tomcat服务器