XML中的DTD约束和Schema约束xml

什么是DTD约束:

DTD(Document Type Definition)文档类型定义,用来约束xml文档。
规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等等。
1. 什么是格式良好XML
1.1 有且只有一个根元素
1.2 XML标签大小写正确区分
1.3 正确使用结束标签
1.4 正确嵌套标签
1.5 使用了合法的标签名
1.6 定义有效的属性
这是一个完整的XML

<persons>
 <person>
  <name>张小明</name>
  <age>10</age>
  <contact>
   <phone>1234567</phone>
  </contact>
  <br/>
 </person>
 <person >
  <name>张大明</name>
  <age>35</age>
  <contact>
   <email>123@qq.com</email>
  </contact>
 </person>
</persons>

2、创建一个以.dtd为文件后缀名的文件。
2.2 步骤:
看xml中有多少元素,有多少元素就 写几个<!ELEMENT>
判断元素是简单元素还是复杂元素。
简单元素:没有子元素的元素。<!ELEMENT 元素名称 (子元素) 复杂元素:拥有子元素的元素。<!ELEMENT 元素名称 (#PCDATA)>

在这里插入图片描述

3、关于使用dtd定义元素:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE person[
<!-- 复杂元素 -->
<!--
<!ELEMENT person (name,age,sex)>:子元素只能出现一次
表示子元素可以出现的次数:
+:表示只能出现一次或者多次
?:表示零次或者一次
*:表示出现任意次
<!ELEMENT person (name+,age?,sex*)>
子元素列表以逗号隔开,表示出现的顺序子元素用|隔开,
表示只能出现一个
-->
<!ELEMENT person (name+,age?,sex*,census)>
<!--//简单元素-->
!ELEMENT name (#PCDATA)><!--//(#PCDATA)表示name是字符串类型-->
<!ELEMENT age EMPTY><!--//EMPTY表示age约束为空,不能有值-->
<!ELEMENT sex ANY><!--//ANY表示任意,可有值,可无值-->
<!ELEMENT census (side|country)>
<!ELEMENT side (#PCDATA)>
<!ELEMENT country (#PCDATA)>
]>
<person>	
<name>小辣椒</name>	
<name>小李子</name>	
           <age>17</age>	
           <sex>女</sex>	
           <sex>女</sex>	
           <sex>女</sex>	
<census>
<side>地球村</side>		
<!-- <country>太阳系</country> //side和country只能出现一个 -->	
</census>
</person>

4. 使用DTD定义属性:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons[
<!ELEMENT persons (person+)>
      <!ELEMENT person (name,age,contact,br?)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
   <!ELEMENT contact (phone|email)>
      <!ELEMENT phon (#PCDATA)>
      <!ELEMENT email (#PCDATA)>
      <!ELEMENT br EMPTY>
 <!ATTLIST person
            pid ID #REQUIRED
            sex (男|女) "男"
            qq CDATA #IMPLIED
            parent IDREF #IMPLIED 
       >   
]>
<persons>
 <person pid="p1" sex="男" qq="aaa" parent="p2">
  <name>张小明</name>
  <age>10</age>
  <contact>
   <phone>1234567</phone>
  </contact>
<br/>
</person>
<person pid="p2">
		<name>张大明</name>
		<age>35</age>
		<contact>
			<email>123@qq.com</email>
		</contact>
	</person>
</persons>



对应的xml文件:

在这里插入图片描述

5.DTD对config.xml限制


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
     <!ELEMENT config (action+)>
     <!ELEMENT action (forward+)>
     <!ELEMENT forward EMPTY>
     <!ATTLIST action
         path CDATA #REQUIRED
         type CDATA #REQUIRED
     >
 <!ATTLIST forward
         name CDATA #REQUIRED
         path CDATA #REQUIRED
         redirect (false|true) "false"
     >
]>	
<config>
<!--
action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径
type:字符串,非空,子控制器的完整类名
	-->
<action path="/registerAction" type="test.action.RegisterAction">
  <forward name="success" path="/index.jsp" redirect="true" />
  <forward name="failed" path="/register.jsp" redirect="false" />
 </action>
<action path="/registerAction" type="test.action.RegisterAction">
  <forward name="success" path="/index.jsp" redirect="true" />
  <forward name="failed" path="/register.jsp" redirect="false" />
 </action>




6. 元素的分类

<!ELEMENT element-name EMPTY>//空元素 <!ELEMENT element-name (#PCDATA)>//文本元素 <!ELEMENT element-name (e1,e2)>//混合元素

7. XML中的特殊符号

在这里插入图片描述

8. 我们学习XML中DTD的约束有什么作用勒?

DTD文件对当前XML文档中的节点进行了定义,这样我们加载配置文件之前,可通过指定的DTD对当前XML中的节点进行检查,确定XML结构和数据类型是否合法。

9. Schema约束xml

9.1、xml Schema介绍
Schema它也来约束xml文件的,DTD在约束xml的时候一个xml中只能引入一个DTD,同时DTD它无法对属性以及标签中的数据做数据类型的限定。
Schema它是用来代替DTD来约束xml。
Schema文件本身就是使用xml文件书写的,同时它对需要约束的xml中的数据有严格的限定。学习Schema主要来学习W3C组织定义的如何在Schema中去约束xml的标签以及属性,还有属性的数据类型,以及标签中子标签的顺序。
要定义一个Schema文件,这时它的扩展名必须是.xsd。在这个文件中根元素必须是schema。
使用Schema来约束xml,Schema在书写的时候,只需要使用W3C组织提前定义的限定标签的,以及限
9.2、Schema快速入门
第一步:书写xml文件
在这里插入图片描述
 第二步:定义schema文件
 在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
在Schema文件中需要提前引入进来在根标签中使用属性进行进入:
<schema xmlns=“http://www.w3.org/2001/XMLSchema” 引入W3C定义的schema书写的规范
targetNamespace=“http://www.itcast.org/book” 给当前的Schema文件起名字(命名空间)
作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入

在这里插入图片描述
第三步:在xml文件中引入当前的这个Schema
在这里插入图片描述
9.3、Schema的名称空间
在这里插入图片描述
9.4、Schema中的标签解释
在这里插入图片描述
Name.xsd
在这里插入图片描述
Book2.xml
在这里插入图片描述
10.2、DOM解析
 Xml文档的属性结构
 在这里插入图片描述
 在这里插入图片描述
 10.3、DOM获取节点、属性、文本数据
 在这里插入图片描述
 10.4、修改xml中的数据
 在这里插入图片描述
 当要把修改后的xml中的数据保存到xml中需要使用Transformer 类中的transform方法
TransformerFactory这个工厂负责生产一个把dom树写到文件中的对象
Transformer 负责把一个dom写到文件中。
总结:
Java提供的dom操作方式:
第一步:需要获取到相应的工厂
第二步:根据工厂获取相应的工具或者解析器对象
第三步:根据解析器获取dom对象,再操作dom树中的节点,或者是获取到相应的工具,然后使用工具对dom树进行保存等操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值