当前位置:网站首页>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"
边栏推荐
猜你喜欢
VS Code 这么牛,再次印证了一句名言
initramfs详解-----初识initramfs
【社媒营销】Facebook速推帖子如何运作?值得吗?
国标GB28181协议EasyGBS平台项目现场通知消息过多导致系统卡顿该如何解决?
2022-08-02:小红拿到了一个大立方体,该大立方体由1*1*1的小方块拼成,初始每个小方块都是白色。 小红可以每次选择一个小方块染成红色, 每次小红可能选择同一个小方块重复染色, 每次染色以后,
“蔚来杯“2022牛客暑期多校训练营4 补题题解(N)
236. The binary tree in recent common ancestor
提高测试覆盖率的四大步骤
.NET in-depth analysis of the LINQ framework (four: IQueryable, IQueryProvider interface details)
【SQL】—数据库操作、表操作
随机推荐
letcode 第20题-有效的括号
“蔚来杯“2022牛客暑期多校训练营4 补题题解(N)
和睦家私有化后换帅:新风天域吴启楠任CEO 李碧菁靠边站
1686. 石子游戏 VI
10. SAP ABAP OData 服务如何支持修改(Update)操作
什么情况下DigiCert证书会引起发生安全警报?
嵌入式开发:嵌入式基础——’ ’和” ”的区别
6-接口跨域处理
Latex-查看预收录在arXiv.org上论文的TeX源文件
2022/8/2 考试总结
flask-socketio实现websocket通信
”QSqlDatabasePrivate::removeDatabase: connection ‘test-connect‘ is still in use“数据库多次打开报错
怎么做postgrsql主备?
全栈---CORS
visual studio 2012 为啥这么优秀
GTK实现水波纹效果
[NCTF2019]SQLi-1||SQL Injection
全栈----跨域
apache-activemq-5.14.1
mysql容器数据卷持久化