XML(XML概述、XML约束、XML解析)(二)

XML(XML概述、XML约束、XML解析)(二)

Part02:XML约束

1、XML约束概念:
  • 在XML技术中,可以编写一个文档来约束一个XML文档的书写规范,
2、XML约束分类:

常见的XML约束:DTD约束Schema约束

3、DTD约束
i、什么是DTD约束?
  • DTD(Document Type Definition)文档类型定义,用来约束xml文档。规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等等。
  • DTD 是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。
  • DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。
  • XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。
  • DTD文件是一个ASCII的文本文件,后缀名为.dtd
ii、DTD文档语法
1、创建一个以.dtd为文件后缀名的文件
2、dtd文档格式:
<!ELEMENT students (student*)>
<!ELEMENT student (name , age , gender , address)>
<!ELEMENT side (#PCDATA)>
<!ATTLIST student id CDATA #REQUIRED>
3、标签约束
<!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>

i、类别:

  • 空标签: EMPTY。 表示元素一定是空标签。
  • 普通字符串: (#PCDATA)。表示标签的内容一定是普通字符串(不能含有子标签)。
  • 任何内容: ANY。表示元素的内容可以是任意内容(包括子标签)

ii、顺序问题

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签

iii、子标签出现次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 0或n次。
标签? : 0 或1次。

代码演示:

<?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></age>
	<sex>女</sex>
	<sex>女</sex>
	<sex>女</sex>
	<census>
		<side>地球村</side>
		<!-- <country>银河系</country> //side和country只能出现一个 -->
	</census>
</person>

4、属性约束
<!ATTLIST 元素名称 属性名称 属性类型 默认值>

1、属性类型:控制属性值的
CDATA :表示普通字符串
(en1|en2|…): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
2、默认值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的

代码演示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE person[
<!ELEMENT person (student*)>
<!ELEMENT student (name,age,sex,galaxy)>
<!--<!ATTLIST 元素名称 
		属性名称 属性类型 约束条件>-->
<!--
	属性类型:
		CDATA:字符串类型
		枚举类型:(XX|XX|XX)只能在一定的范围内出现值,而且值只能出现一次
		ID:只能以字母或下划线开头
	约束条件:
		#REQUIRED:属性必须存在
		#IMPLIED:属性可有可无
		#FIXED:表示一个固定值 #FIXED "ABC"//没有#FIXED就表示默认值
-->
<!ATTLIST student
	name CDATA #REQUIRED
	age ID #IMPLIED
	sex (男|女) "男"
	galaxy CDATA #FIXED "地球"
	>
]>
 
 
<person>
	<student name="张三" age="ten" galaxy="地球"></student>
	<!-- 
		name: 字符串类型  是必须出现的 
		age: ID类型  age属性可有可无
		sex: 枚举类型 默认值是男
		galaxy: 字符串类型  固定值就是"地球"
	-->
</person>

iii.引入dtd文件到xml文档中三种方式
  • 内部dtd:将约束规则定义在xml文档中

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE 书架 [
        <!ELEMENT 书架 (书+)>
        <!ELEMENT  (书名,作者,售价)>
        <!ELEMENT 书名 (#PCDATA)>
        <!ELEMENT 作者 (#PCDATA)>
        <!ELEMENT 售价 (#PCDATA)>
        <!ATTLIST  id ID #REQUIRED>
    ]>
    <书架>
        < id="id1">
            <书名>Java就业培训教程</书名>
            <作者>张孝祥</作者>
            <售价>39.00元</售价>
        </>
        < id="id2">
            <书名>mySql</书名>
            <作者>王明</作者>
            <售价>28.00元</售价>
        </>
    </书架>
    
  • 外部dtd:将约束的规则定义在外部的dtd文件中

    • 本地:

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE 书架 SYSTEM "book.dtd">
      <书架>
          < id="id1">
              <书名>Java就业培训教程</书名>
              <作者>张孝祥</作者>
              <售价>39.00元</售价>
          </>
          < id="id2">
              <书名>mySql</书名>
              <作者>王明</作者>
              <售价>28.00元</售价>
          </>
      </书架>
      
          <!ELEMENT 书架 (书*)>
          <!ELEMENT 书 (书名,作者,售价)>
          <!ELEMENT 书名 (#PCDATA)>
          <!ELEMENT 作者 (#PCDATA)>
          <!ELEMENT 售价 (#PCDATA)>
          <!ATTLIST 书 id ID #REQUIRED>
      
    • 网络:< !DOCTYPE 根标签名称 PUBLIC".dtd文件的位置URL">

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QZP51ZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值