XML的DTD约束和Schema约束

ajax是什么?

如图:
在这里插入图片描述

XML是什么?

XML的两个约束:

  • DTD约束(详细做了介绍)
  • Schema约束(简单提一下)

什么是格式良好的XML

①:有且只有一个根元素,例如以下代码中: “persons” 就是根元素

在这里插入图片描述
②:区分大小写,例如以上代码中< persons >与< /persons >大小写必须一致

③:正确使用结束标签 就是: <></>

④:正确使用嵌套标签,例如以上代码中标签里面套标签

⑤:使用合法标签名,就是标签里面不能乱加特殊符号,但是可以用中文,一般最好用英文

⑥:定义它有效的属性

ps:自己定义写的文件没有约束,可以随便加

DTD约束是什么?:

DTD的定义:

举例,为XML文件写一个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 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>

以上代码解析:

  • !DOCTYPE 是定义约束的入口 persons是根元素 !ELEMENT是元素的意思

  • 元素定义的语法:<!ELEMENT element-name(type)>

  • 元素的分类:①空元素:<!ELEMENT element-name EMPTY>
    ②文本元素:<!ELEMENT element-name(#PCDATA)>
    ③混合元素:<!ELEMENT element-name(e1,e2)>

  • 第一步:按顺序定义全部的元素(在小括号外) 第二步:在小括号内写每一个元素里面的小元素
    例如age和name里面就是文本元素,而contact里面就有phone,email,再例如br就是EMPTY

  • 如果不写元素的限制会报错

  • 元素的限制:①:,逗号是必须要写的 例如name age contact br ②:|或者 例如contact 这样两个根元素里面都有的东西就用或者
    ③:次数+ +表示1~n个 *表示0~n ?表示0或1 默认有且只有一个

例:写一个DTD限制servlet相关标签

<?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>12</age>
		<contact>
			<phone>256546</phone>
		</contact>
		<br/>
	</person>
	<person>
		<name>李美女</name>
		<age>33</age>
		<contact>
			<email>2830298182@qq.com</email>
		</contact>
	</person>
</persons>

如何对属性进行约束?

代码如下:

<?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="1111" 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>

以上代码解析

  • #REQUIRED 的意思此属性(在根元素中)是必须要有的
  • #IMPLIED的意思是此属性(在根元素中)是可有可无的
  • pid 相当于数据库里面的主键是必须要有的
  • 如果不定义性别会自动默认为男
  • qq属于文本 文本都用 CDATA
  • parent 相当于数据库里面的外键
  • IDREF 有它的属性必须是指向别的person里面的id (意思是两个大persons里面的person的id必须一样 第一个指向第二个)

例:写config.xml的DTD约束

<?xml version="1.0" encoding="UTF-8"?>
	<!DOCTYPE config[
		<!ELEMENT config (action*)>
		<!ELEMENT action (forward*)>
		<!ELEMENT forword EMPTY>
	
	<!ATTLIST action
		path CDATA #REQUIRED
		type CDATA #REQUIRED
	>
	<!ATTLIST forword
		name CDATA #REQUIRED
		path CDATA #REQUIRED
		redirect (false | true) "false"	
	>
	]>
	<!--
		config标签:可以包含0~N个action标签
	-->
<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="/loginAction" type="test.action.LoginAction">
		<forward name="a" path="/index.jsp" redirect="false" />
		<forward name="b" path="/welcome.jsp" redirect="true" />
	</action>
</config>

Schema约束是什么?

schema约束同为xml文件的约束模式语言之一, 最大的作用是为了验证xml文件的规范性的.
是为了解决dtd约束不够的问题, 相应的他的配置就变得比较复杂
schema本身就是xml语言, 后缀名为xsd, 对命名空间的支持非常好
schema的根元素就为schema

XML中的特殊符号:

  • &(逻辑与) & amp;
  • <(小于) &l t;
  • 大于 & gt;
  • "(双引号) & quot;
  • '(单引号) & apos;

XML中有些符号是会报错的,所以要用以上几种转译字符

schema约束和dtd约束的区别:

  • Schema符合XML语法结构。
  • DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
  • Schema对名称空间支持得非常好。
  • Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
  • Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
  • Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值