XML之dtd

  • Post author:
  • Post category:其他




一、xml的作用

xml有两个作用,分别是:①数据交互 ②做配置



二,标准的xml格式

(1)有且只有一个根元素

错误演示:

在这里插入图片描述


注意:在出现两个根元素时,代码会出现报错


(2)xml标签大小写正确区分

错误演示:
在这里插入图片描述


注意:当前后代码的字母大小写不一致,会出现报错


(3)正确使用结束标签

(4)正确嵌套标签

错误演示:

在这里插入图片描述

注意:当根标签嵌套错误或者结束标签使用不正确,也会出现报错


(5)使用了合法的标签名

(6)定义有效的属性


注意:在代码中不能使用无效标签名,例如用“?”符号来当做标签,也会出现错误



三,在xml加入dtd声明

在xml中加入dtd声明需要用: !DOCTYPE root[]


注意



在加入声明时,要用<>括号括起来,所有的约束都在中括号中写,root为根元素



四,元素分类


<!ELEMENT element-name EMPTY > ——–空元素



<!ELEMENT element-name (#PCDATA) > ——–文本元素



<!ELEMENT element-name (e1,e2) > ——–混合元素



五,元素的限制


(,)与 (|)非

次数:


0或1:?


0-N:*


1-N:+


在建立xml约束时:首先分析xml结构

步骤:

1.根标签person

2.person有子标签 混合标签(有子标签)

3.person有子标签:name age content br 混合标签(有子标签)

4.name,age没有子标签但有内容 文本标签

5.contact有子标签

6.phone没有子标签 有内容 文本标签

7.br既没有子标签也没有内容 空标签

8.email没有子标签 有内容 文本便签



案例

<?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 phone (#PCDATA)>
	<!ELEMENT email (#PCDATA)>
	<!ELEMENT br EMPTY>
	
]>
 
 
 
<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>



在建立约束代码后,就需要按照约束条件来



效果图

在这里插入图片描述



六,属性定义


(1) 语法:<!ATTLIST element-name att-name type decs>

(2) 属性类型type:


ID 唯一标识


(男|女) 选择类


CDATA 字符串类(文本类)


IDREF 另一元素的id

reference

(3)属性描述


#REQUIRED 必填


#IMPLIED 非必要


‘默认值’ 注意:只有type为男女类型是,decs才可以用默认的方式


案例1:

pid代表唯一            ID
sex代表            选择类
qq                    文本类
parent              依赖类(idref)reference
<?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 phone (#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>


效果图:


在这里插入图片描述

此时我们可以看见,sex属性只能为男或者女(默认为男)也不能为空,如果在填写了其他内容后,会出现错误提示


案例2:

<?xml version="1.0" encoding="UTF-8"?>
 
 要求://config标签:可以包含0~N个action标签
<!-- 标签的约束 -->
<!DOCTYPE config [
	<!ELEMENT config (action+)>
	<!ELEMENT action (forward+)>
 
 
要求:// action标签:可以饱含0~N个forward标签
<!-- 属性约束 -->
	<!ATTLIST action
		path CDATA #REQUIRED
要求:// type:字符串,非空,子控制器的完整类名
		type CDATA #REQUIRED
	>
	
	<!ATTLIST forward
		name CDATA #REQUIRED
		path CDATA #REQUIRED 
		redirect CDATA #REQUIRED
	>
	
]>
 
	<action path="/registerAction2" type="test.action.RegisterAction">
		<forward name="success" path="/index.jsp" redirect="true" />
		<forward name="failed" path="/register.jsp" redirect="false" />
	</action>
	<action path="/loginAction" type="test.action.LoginAction">
		<forward name="a" path="/index.jsp" redirect="false" />
		<forward name="b" path="/welcome.jsp" redirect="true" />
	</action>
</config>


当违反约束时:


在这里插入图片描述


案例3

<?xml version="1.0" encoding="UTF-8"?>
 
<!-- 标签的约束 -->
<!DOCTYPE web-app [
	<!ELEMENT web-app (servlet,servlet-mapping)*>
	<!ELEMENT servlet (servlet-name,servlet-class)>
	<!ELEMENT servlet-name (#PCDATA)>
	<!ELEMENT servlet-class (#PCDATA)>
	<!ELEMENT servlet-mapping (servlet-name,url-pattern+)>
	<!ELEMENT url-pattern (#PCDATA)>
 
	
]>
<web-app>
  <servlet>
  	<servlet-name>jrebelServlet</servlet-name>
  	<servlet-class>com.zking.xml.JrebelServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>jrebelServlet</servlet-name>
  	<url-pattern>/jrebelServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>jrebelServlet2</servlet-name>
  	<servlet-class>com.zking.xml.JrebelServlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>jrebelServlet2</servlet-name>
  	<url-pattern>/jrebelServlet2</url-pattern>
  	<url-pattern>/jrebelServlet3</url-pattern>
  </servlet-mapping>
</web-app>

这时web里面含有的子便签数量都不少于一个

如图所示:

在这里插入图片描述

所以在写约束的时候需要注意正确的格式(正确格式如下)

在这里插入图片描述


在违反约束时:


在这里插入图片描述



版权声明:本文为zsm030616原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。