JavaWeb(8)-XML的约束dtd、schema

XML的约束

约束技术:dtd约束, schema约束

dtd约束技术

创建一个文件,后缀.dtd
步骤:
1.看xml中有多少个元素,就在dtd文件中写几个<!ELEMENT>
2.判断元素是简单元素(没有子元素)还是复杂元素(有子元素)
简单元素:<!ELEMENT 元素名称 (#PCDATE)>
复杂元素:<!ELEMENT 元素名称 (子元素,子元素)>
3.在xml中引入dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

浏览器只校验语法,不校验约束,因此需要用工具(如eclipse等)

三种dtd引入方式

1.引入外部的dtd

<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

2.引入内部的dtd

<!DOCTYPE 根元素名称 [dtd内容]>

3.使用外部(网络上)的dtd文件

<!DOCTYPE 根元素名称 PUBLIC "dtd名称" "dtd文档的url">
使用dtd定义元素

语法:<!ELEMENT 元素名 约束>

简单元素:<!ELEMENT name (#PCDATA)>
(#PCDATA):约束name是字符串类型
EMPTY:元素为空
ANY:任意

复杂元素:<!ELEMENT person(name+,sex?,age*)>
子元素只能出现一次
+:表示一次或者多次
?:表示出现0次或者1次
*:表示出现0次或者多次
用逗号,子元素顺序必须相同。用竖线隔开,子元素只能出现其中任意一个。

使用dtd定义属性

语法:

!ATTLIST 元素名称
属性名称 属性类型 属性的约束
>

类型:
CDATA:字符串
枚举:表示只能在一定的范围内出现值,但是每次只能出现一个(aa|bb|cc)
ID:值只能是字母或者下划线开头

约束:
#REQUIRED:属性必须要存在
#IMPLIED:属性可有可无
#FIXED:表示一个固定值 #FIXED "a"
直接值:不写属性,直接使用直接值,写了属性,使用设置的值

使用dtd定义实体
<!ENTITY 实体名称 "实体的值">

使用实体: &实体名称;
定义实体需要卸载内部dtd里面,如果写在外部的dtd,某些浏览器取不到内容。

schema约束技术

符合xml的语法,xml语句

dtd与schema比较

一个xml中只能有一个dtd,但是可以有多个schema,多个schema使用名称空间区分(类似于Java包名)
dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型
schema语法更加复杂,因此不能替代dtd

schema文件

创建一个schema文件,后缀.xsd
根节点是<schema>
在一个schema文件中,有属性:
xmlns=“http://www.w3.org/2001/XMLSchema”,表示当前xml文件是一个约束文件;
targetNamespace=“http://www/itcast.cn/0219”:使用schema约束文件,直接通过这个地址引入约束文件;
elementFormDefault=“qualified”
步骤:
1.看xml中有多少个元素
2.看简单元素和复杂元素
如果复杂元素

<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www/itcast.cn/0219"
elementFormDefault="qualified">
<element name="person">
	<complexType>
		<sequence>
			子元素
		</sequence>
	</complexType>
</element>

3.简单元素写在复杂元素的sequence中

<element name="person">
	<complexType>
		<sequence>
			<element name="name" type="string"></element>
			<element name="age" type="int"></element>
		</sequence>
	</complexType>
</element>

4.在被约束文件里面引入约束文件
在根元素上

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www/itcast.cn/0219"
xsi:schemaLocation="http://www/itcast.cn/0219 1.xsd">
<name>zhang</name>
<age>13</age>
</person>

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"表示xml是一个被约束文件
xmlns="http://www/itcast.cn/0219"是约束文档里面targetNamespace
xsi:schemaLocation="http://www/itcast.cn/0219 1.xsd"是targetNamespace 空格 约束文档地址

sequence:表示元素的出现的顺序
all:表示属性只能出现一次
choice:表示只能出现其中的一个
maxOccurs="unbounded"表示元素的出现的次数
<any></any>表示任意元素
可以约束属性,写在复杂元素里面</complexType>之前<attribute name="id1" type="int" use="required"></attribute>,name属性名称,type属性类型int\string,use属性是否必须出现

复杂的schema约束

引入多个schema文件,可以给每个schema起一个别名

<company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dept="http://www.example.org/department"
xmlns="http://www.example.org/company"
xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd">

	<employee>
		<dept:name>a</dept:name>
		<name>zhang</name>
	</employee>
</company>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值