当前位置:网站首页>DTD约束和Schema约束
DTD约束和Schema约束
2022-08-03 01:07:00 【虽有嘉肴】
1.DTD概述
文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。它是标准通用标记语言(SGML)和可扩展标记语言(XML)1.0版规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则。文档类型定义也可用做保证标准通用标记语言、可扩展标记语言文档格式的合法性,可通过比较文档和文档类型定义文件来检查文档是否符合规范,元素和标签使用是否正确。文件实例提供应用程序一个数据交换的格式。其中,内部放到xml中,文档声明下,根元素上,以 “<!DOCTYPE 根元素名称[” 开头,以 “]” 结束
简而言之,DTD就是用来约束XML文档的,使其在一定的规范下使用,除了DTD技术外,还有Schema技术,也是用于约束XML文档的。
2.DTD的分类
DTD分为内部DTD和外部DTD,其中外部DTD又可以分为SYSTEM(本地的)的PUBLIC(网上的)
内部DTD
- 放到xml中,文档声明下,根元素上,以“<!DOCTYPE 根元素名称[开头,以]”结束
- 内部DTD只对当前×ml文件有效。
外部DTD
SYSTEM DTD
放到当前计算机中
语法:<!DOCTYPE 根元素 SYSTEM “dtd文件路径”>
PUBLIC DTD
放到网络上
语法:<!DOCTYPE 根元素 PUBLIC “dtd名称” “dtd路径”>
3.DTD语法之定义元素
定义元素语法:<!ELEMENT NAME CONTENT>
解释:
ELEMENT:关键字(必须大写)。
NAME:元素名称。
CONTENT:元素类型(元素描述),有四种,都必须大写。
1.EMPTY-该元素不能包含子元素和文本,但可以有属性(空元素)
2.ANY-该元素可以包含任何在DTD中定义的元素内容
3.#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素
4.其它类型(组合),可以是子元素,子元素与修饰符组合,基本元素与子元素与修饰符组合。
案例:
<!ELEMENT 班级 (学生+,作者)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 作者 (a,b,c)> -->子元素内容,必修按顺序出现
<!ELEMENT 名字 (#PCDATA)> -->文本内容
<!ELEMENT 年龄 (ANY)> -->对内容不做限制
<!ELEMENT 介绍 (EMPTY)> -->空元素
子元素出现次数
可以使用*
、+
、?
来指定子元素出现的次数:
*
:可以出现0~N次+
:可以出现1~N 次?
:可以出现0~1次
4.DTD语法之定义属性
(1)定义属性的语法
<!ATTLIST 元素名 属性名 属性类型 设置说明>
<!ATTLIST student number CDATA #REQUIRED>
(2)属性设置说明
- 给student元素定义属性number,类型为文本
- #REQUIRED说明属性是必须的
- #IMPLIED说明属性是可选的
- 在不给出属性时,使用默认值——可选的
(3)属性的类型
- CDATA:文本类型;
- Enumerated:枚举类型;
- ID:ID类型,ID类型的属性用来标识元素的唯一性,即元素的ID属性值不能与其他元素的ID属性值相同;
- IDREF:ID引用类型,用来指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID。
5.实体
实体分类
一般实体:定义在DTD中,实体引用在xml
参数实体:定义实体在DTD中,实体引用还在DTD(内部DTD不太好使)中。
(1)定义实体:定义变量
语法:
<!ENTITY 实体名 “实体值”>
<!ENTITY itcast "北京"
(2)引用实体:使用变量
<student number="ID_9012" name="wnagwu" friend="ID_4567" school="&itcast;"/>
(3)定义参数实体
<!ENTITY % 实体名 “实体值”> <!ENTITY % friend "student friend IDREF #IMPLIED">(4)引用参数实体
<!ATTLIST %friend;>
转换成
<!ATTLIST student friend IDREF #IMPLIED>
6.Schema约束
与DTD作用相同,区别:
- DTD约束文件扩展名dtd
- Schema约束文件扩展名xsd
- DTD不是xml
- Schema本身就是xml
- Schema要比DTD强大很多倍,它有更加详细的类型
1.填写xml文档的根元素
2.引入xsi前缀.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空间.
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.为每一个xsd约束声明一个前缀,作为标识
xmlns="http://www.itcast.cn/xml"
边栏推荐
猜你喜欢
随机推荐
个人开发者必备,免费 API 网关工具推荐
PAT甲级 1051 Pop Sequence
面试题整理1
【飞控开发高级教程2】疯壳·开源编队无人机-遥控整机代码走读、编译与烧写
阿里云增强版实人认证--银行卡要素核验
公司封装方式导出excel过程
线上交流丨稀疏神经网络:实践和理论(青源Talk第23期 汪张扬)
Linear DP
Kubernetes:(八)调度约束和故障排查
全栈---Proxy
暴力递归到动态规划 07(516. 最长回文子序列)
7.31
PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)基本配置
PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)配置自动连接WIFI无线网络
HCIP第十二天_二层MPLS实验
npm运行项目dependencies were not found: core-js/modules/es6.array.fill
Greenplum database failure analysis, can not listen to the port
企业云成本管控,你真的做对了吗?
做快乐的事情
麒麟信安邀您抢先看 | openEuler 志高远,开源汇智创未来-开放原子全球开源峰会欧拉分论坛最详细议程出炉