XML基础--XML的约束之dtd约束

  • 为何XML需要约束?
<?xml version="1.0" encoding="utf-8"?>
<person>
	<name>zhangsan</name>
	<age>20</age>
	<>10</>
</person>

在这段代码中,人的属性有姓名,年龄,猫是人的属性显然是不合理的,由于XML的标签是自定义的,我们要通过相关约束技术来规定XML中只能出现的元素。

  • 如何进行约束?
    约束技术:dtd约束和schema约束。

    dtd约束(快速入门):

    1. 创建一个后缀名为dtd的文件
    2. 观察XML中有几个元素,就在dtd文件中写几个<!ELEMENT>
    3. 判断元素是简单元素还是复杂元素:
      简单元素:没有子元素
      <!ELEMENT 元素名称 (#PCDATA)>
      复杂元素:有子元素
      <!ELEMENT 元素名称 (子元素)>
    4. 需要在XML文件中引入dtd文件
      <!DOCTYPE 根元素 SYSTEM "dtd文件的路径">

book.dtd

<!ELEMENT 书架 (书+)>
	<!ELEMENT  (书名,作者,售价)>
	<!ELEMENT 书名 (#PCDATA)>
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>

book.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<>
		<书名>葵花宝典</书名>
		<作者>东方不败</作者>
		<售价>15.00元</售价>
	</>
	<>
		<书名>九阳神功</书名>
		<作者>张无忌</作者>
		<售价>56.00元</售价>
	</>
</书架>
  • dtd的三种引入方式:
  1. 外部引入:如上
  2. 内部引入:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person [
	<!ELEMENT person (name,age)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
]>
<person>
	<name>zhangsan</name>
	<age>20</age>
	<!-- <猫>10</猫>-->
</person>


3. 使用外面的dtd(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名称" “DTD文档的URL”>


  • 使用dtd定义元素:
    1. 语法:<!ELEMENT 元素名 约束>
    2. 简单元素:没有子元素的元素 <!ELEMENT 元素名 (子元素)>

约束
(#PCDATA):字符串
EMPTY:为空
ANY:可为空or不为空

复杂元素:有子元素的元素,子元素用英文逗号按照顺序分隔(用 | 分隔时表示子元素只能出现任意一个)<!ELEMENT 元素名称 (子元素+,/| 子元素1..)>

+:表示至少出现一个相关元素
?:表示出现一次或零次相关元素
*:表示零次或多次出现相关元素


  • 使用dtd定义属性:
    1. 语法:<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
    2. 属性的类型:
      CDATA:字符串
      枚举:值只能是列举的范围内出现的,且一次只能出现一个(如(aa|bb|cc))
      ID:值只能是字母或下划线开始
    3. 属性的约束:
      #REQUIRED:表示该属性必须出现
      #IMPLIED:表示该属性可有可无
      #FIXED:表示该属性只能是设置的值(写法:#FIXED “123”)
      直接值:不写属性,使用直接值,写了属性,使用写的值
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person [
	<!--元素-->
	<!ELEMENT person (name,age)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT height (#PCDATA)>
	<!ELEMENT weight (#PCDATA)>
	
	<!--属性 -->
	<!ATTLIST name ID1 CDATA #REQUIRED>
	<!--AA必须出现-->
	
	<!ATTLIST age ID2 (AA|BB|CC) #REQUIRED>
	<!--ID2的值只能是AA|BB|CC中的值-->
	
	<!ATTLIST height ID3 ID #IMPLIED>
	<!--ID3可有可无-->
	
	<!ATTLIST weight ID4 #FIXED "DD">
	<!--ID4只能是DD-->
]>
<person>
	<name ID1="AA">zhangsan</name>
	<age ID2="BB">20</age>
	<height ID3="_CC">178</height>
	<weight ID4="DD">77</weight>
</person>

浏览器只负责校验XML的语法,不负责校验,校验XML的约束需要使用工具(如myeclipse)。

>>下一页 Schema约束

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值