当前位置:网站首页>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"
边栏推荐
猜你喜欢
随机推荐
【图像分类】2022-MPViT CVPR
关于提高企业网络安全意识
什么情况下DigiCert证书会引起发生安全警报?
暴力递归到动态规划 06 (剑指 Offer II 095. 最长公共子序列)
公司封装方式导出excel过程
js垃圾回收机制
7.29
11-security认证.md
爆款视频怎么做?这里或许有答案
pytest:如何调用 pytest
49. 字母异位词分组-排序法
一套开源的可快速搭建自己的物联网/智能家居系统源码
.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
新库上线 | CnOpenDataA股上市公司董监高信息数据
使用VSCode中遇到的问题及解决办法
中科磁业IPO过会:年营收5.5亿 吴中平家族持股85%
10大领域5大过程47子过程快速记忆
JS做一个接近无限时长的滚动条
一个循环,两个循环问题的思考及复现
UVM中SVA使用指南









