苦尽甘来 一个月学通JavaWeb(二 XML)

夜光序言

 

平静是一种无所畏惧的满足~~

 

正文:夜光:我们继续XML~~,这在web中很重要,Jsp也要好好学~~

、XML约束

XML约束概述

  一个XML文档一旦有了约束,那么这个XML文档就只能使用约束中创建的元素及属性。如果约束没有创建<a>元素,那么XML文档就不能使用<a>元素~~~

1 什么是xml约束,有点意思的~

因为xml文档是可以自定义元素的,这会让使用xml文档的应用程序无法知道xml文档的真实结构。通常应用程序都会要求xml文件的结构是固定的,以满足自己的需求,这就说明,不同的应用程序要求自己的xml文档必须符合一定的要求。

例如,当使用xml文档作为某个Java swing应用程序的配置文件时,要求xml文档结构如下:

<frame title="test xml" layout="java.awt.BorderLayout">

  <bgcolor>

    <red>200</red>

    <green>0</green>

    <blue>0</blue>

  </bgcolor>

  <size>

    <width>300</width>

    <heigth>200</heigth>

  </size>

  <content>

    <label>

      <text>hello xml</text>

    <label>

  </content>

</frame>

 

当某个学生管理系统程序需要使用xml文档作为数据库时,要求xml文档结构如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<students>

<student number="1001">

<name>A</name>

<age>23</age>

<sex>male</sex>

</student>

<student number="1002">

<name>B</name>

<age>32</age>

<sex>female</sex>

</student>

<student number="1003">

<name>C</name>

<age>1111</age>

<sex>male</sex>

</student>

</students>

 

xml文档约束是用另一个文件来约束xml文档的结构,例如要求xml文档的根元素必须是<students>,在<students>元素下可以包含0~n个<student>元素,每个<student>元素必须有一个number属性,而且还要有三个子元素,分别为<name>、<age>、<sex>,这三个子元素的内容必须为文本内容,而不能是子元素。

 

2 XML文档约束的类型[嘿哈~~~有两种]

xml文档约束有两种类型:dtd和schema

  1. dtd:dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束;
  2. schema:schema本身也是xml文档,它比dtd要更加强大,通常扩展名为“.xsd”。它是新的xml文档约束,用来替代dtd。

 

DTD是老的XML约束

Schema是新的,用Schema替换掉DTD

 

会读即可~~

 

DTD有意思的,了解即可

 

1 什么是DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。例如要求xml文档的根元素必须是<students>,在<students>元素下可以包含0~n个<student>元素,每个<student>元素必须有一个number属性,而且还要有三个子元素,分别为<name>、<age>、<sex>,这三个子元素的内容必须为文本内容,而不能是子元素。

 

2 DTD展示

 

<!ELEMENT students (student+)>

<!ELEMENT student (name,age,sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

 

解读上面DTD:

  1. students元素中可以包含1~n个student元素;
  2. student元素中必须包含name、age、sex元素,而且顺序也是固定的;
  3. name元素内容为文本,即字符串;
  4. age元素内容为文本;
  5. sex元素内容为文本。

 

3 在XML文档中指定本地DTD

 

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<!DOCTYPE students SYSTEM "students.dtd">  //夜光,添加这行约束代码嗯~~

<students>

<student>

<name>Genius</name>

<age>23</age>

<sex>male</sex>

</student>

</students>

<!ELEMENT students (student+)>

<!ELEMENT student (name, age, sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

 

其中<!DOCTYPE students SYSTEM "students.dtd">,表示指定dtd文件。

指定DTD的语法:<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

  1. 指定DTD的语法,以“<!DOCTYPE”开头,以“>”结束;
  2. students表示根元素;
  3. SYSTEM表示dtd文件在本地;
  4. "students.dtd"表示DTD文件路径。

 

4 在XML文档中指定内部DTD

 

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<!DOCTYPE students [

<!ELEMENT students (student+)>

<!ELEMENT student (name, age, sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

]>

<students>

<student>

<name>Genius</name>

<age>23</age>

<sex>male</sex>

</student>

</students>

 

5 在XML文档中指定外部公共DTD

 

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<!DOCTYPE students PUBLIC "-//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">

<students>

<student>

<name>Genius</name>

<age>23</age>

<sex>male</sex>

</student>

</students>

 

外部公共DTD是说,DTD由某个公司或权威组织发布,例如如下:

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD网址">

当然你需要知道要使用的DTD的名称和网址。如果某个机构公布了DTD,那么一定也会公布DTD的名称和网址。

上面例子中的公共DTD是不存在的。

 

DTD定义元素

 

1 定义元素的语法

使用ELEMENT声明元素:<!ELEMENT 元素名 内容类型内容>

例如:<!ELEMENT name (#PCDATA)>

表示name元素的内容为文本数据

 

2 元素类型

元素类型可以是ANY或EMPTY

<!ELEMENT stu ANY>:表示stu元素的内容可以是任意元素,也可以是文本数据,也可以是文本数据+子元素,反正就是任意。

<!ELEMENT stu EMPTY>:表示stu不能有任何内容,即空元素。例如:<stu/>。

 

3 元素内容

元素内容可以是文本数据,也可以是子元素

<!ELEMENT stu (#PCDATA)>表示stu元素内容为文本,例如:<stu>hello</stu>

<!ELEMENT stu (name)>表示stu元素内容为name子元素,例如<stu><name></name><stu>,但要注意,如果<name>元素没有声明,那么就会出错。

 

4 子元素出现次数

可以使用“?”、“*”、“+”来指定子元素的出现次数

<!ELEMENT stu (name?)>表示stu元素可以有0~1个name子元素,即name子元素可有可无。

<!ELEMENT stu(name*)>表示stu元素可以有0~n个name子元素;

<!ELEMENT stu(name+)>表示stu元素可以有1~n个name子元素。

 

5 多个子元素

<!ELEMENT stu (name,age,sex)>表示stu必须有三个子元素,分别是name、age、sex,并且子元素出现的顺序也要与声明的顺序一致。

 

6 枚举子元素

<!ELEMENT stu (name | age | sex)表示stu只有一个子元素,可以是name、age、sex中的任意一个。

 

7 复合声明1

<!ELEMENT stu (name | age | sex)?>表示stu元素可以有0~1个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

<stu></stu>

<stu><name/></stu>

<stu><age/></stu>

<stu><sex/></stu>

 

8 复合声明2

<!ELEMENT stu (name | age | sex)*>表示stu元素可以有0~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

<stu></stu>

<stu><name/><name/></stu>

<stu><name/><age/><age/></stu>

<stu><name/><age/><name/><sex/><sex/></stu>

 

9 复合声明3

<!ELEMENT stu (name | age | sex)+>表示stu元素可以有1~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

<stu><age/></stu>

<stu><name/><name/></stu>

<stu><name/><age/><age/></stu>

<stu><name/><age/><name/><sex/><sex/></stu>

 

10 练习

 

 

<!DOCTYPE 课件 [

<!ELEMENT 章节 (简介, (标题, (段落 | 图片 | 表格 | 说明)+)+)>

<!ELEMENT 简介 (#PCDATA)>

<!ELEMENT 标题 (#PCDATA)>

<!ELEMENT 段落 (#PCDATA)>

<!ELEMENT 图片 (#PCDATA)>

<!ELEMENT 表格 (#PCDATA)>

<!ELEMENT 说明 (#PCDATA)>

<!ELEMENT 课件 (章节+)>

]>

 

  根据上面DTD写xml文档!!!

 

DTD属性定义

 

1 属性定义的格式

Attribute List

<!ATTLIST 元素名

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

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

...>

<!ATTLIST student number CDATA #REQUIRED>表示student元素的number为文本类型,这个属性是必须的。

最常见的属性类型:CDATA,表示文本类型;

最常见的设置说明1:#REQUIRED,表示属性是必须的。

最常见的设置说明2:#IMPLIED,表示属性是可选的。

 

2 属性类型

  1. CDATA:属性值为任意文本数据;
  2. Enumerated:属性值必须是枚举列表中的一个;
  3. ID:属性值必须是唯一的,并且属性值不能以数字开头;

 

3 CDATA属性类型

CDATA,即Character Data(字符数据)。表示属性的类型为字符类型!

<!ATTLIST student number CDATA #REQUIRED>表示student元素的number属性是字符数据类型,并且是必须属性。

<student number=”czbk_1001”>

 

4 Enumerated属性类型

Enumerated不是关键字,定义枚举类型的属性需要给出枚举列表。当属性值为枚举类型时,那么这个属性的取值必须是枚举列表中的一个值。

<!ATTLIST student sex (male | female) #IMPLIED> 表示student的sex属性取值必须是male或者是female。并且这个属性是可选的。

 

 

5 ID属性类型

  一个元素最多只能有一个ID 属性,ID属性用来表示元素唯一性的唯一标识。ID属性就相当与元素的身份证号,必须是唯一标识!

如果把student元素的number属性设定为ID类型,那么每个student元素的number属性值必须是唯一的,并且ID类型的属性值不能以数字开头。

<!ATTLIST student number ID #REQUIRED> 表示student的number属性值是ID类型,这说明student元素的number属性值必须是唯一的,不能和其他student的number属性值相同。

<student number=”czbk_1001”/>

<student number=”czbk_1002”/>

 

注意:不能以数字开头。

 

如果<a>元素有一个ID属性a

如果<b>元素有一个ID属性b

<a a=”abc”/>

<b b=”abc”/>

上面也是错误的,因为ID属性的值是不可以相同的。

 

 

6 设置说明

  1. #REQUIRED:表示属性是必须的;
  2. #IMPLIED:表示属性是可选的,即这个属性可以不给出;

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值