首页 > 文档类型定义DTD

文档类型定义DTD

XML系列:文档类型定义DTD (转)

一,什么是DTD?

1,XMl是一种元标记语言,是描叙语言的语言,定义标记的语法结构,从而生成新标记。而DTD则是为新标记建立文档并进行规范说明。

也就是说XML定义标记的语法结构是通过DTD来定义,并指定文档结构的规范,而XML文档来使用标记。

2,自描述数据的规范。



二,DTD的作用

1,DTD定义了文档中的元素(标记和属性)和实体,以及相互关系。数据和结构分离。

2,通过DTD验证XML文档的有效性。DTD为解析器提供了解析XML文档的依据。所以每个XML文档必须指定对于哪个DTD有效。



三,DTD的结构

1,元素的声明:使用元素声明来声明XML文档中的元素



⑴,带有数据的元素:



数据类型:

#CDATA:指元素包含不通过解析器解析的字符数据。特殊字符和保留字不需要转义。

#PCDATA:指元素包括解析器可解析字符数据。特殊字符和保留字需要转义才可以通过解析器。

ANY:元素可以包含任何声明类型的子元素和字符数据。



⑵,带有子元素的元素:



多个子元素用逗号隔开。

在文档中的顺序和定义中的顺序一致。

子元素可以有自己的子元素。



①相同元素只出现一次:



②相同元素至少出现一次:+



③相同元素出现零次或多次:*



④相同元素出现零次或一次:?





⑶ ,空元素:



空元素可以有属性



⑷,混合声明

组可以是序列或选择子元素和/或子组:

①序列

: 元素A由单个子元素B组成.

:元素A由子元素B和C组成.

:元素A由子元素B ,E和选择子组(C或D中之一)组成.

②选择 子元素和/或子组

:元素A由子元素选择子组(B或C)组成.

:元素A由包括序列子组(D和E)的选择(B或C或D,E之一)组成.



2,属性的声明

⑴空属性



⑵非空属性



属性值:

①,Default属性值:指定一个默认值



DTD示例:



XML示例:

<售价 货币单位 = "人民币">10.90

②,Implied属性值:可以不提供该属性,该属性也没有默认值。



DTD示例:



XML示例:

<售价>10.90



③,Required属性值:必须提供该属性,但可以没有默认值。



DTD示例:



XML示例:

<售价 货币单位 = "美元">10.90



④,Fixed属性值:使属性具有固定值,不可以更改。



DTD示例:



XML示例:

<售价 货币单位 = "人民币">10.90



属性类型:

①,Enumerated属性类型:使默认值成为一组固定值中之一。



DTD示例:



XML示例:

<售价 货币单位 = "欧元">10.90



②,ID和IDREF属性类型

1,ID:用于搜索某个元素的特定实例,每个元素都可以具有ID类型的属性。



DTD示例:



XML示例:

<售价 ID = "BOOK1">10.90

<售价 ID = "BOOK2">10.90

<售价 ID = "BOOK3">10.90

2,IDREF:指向一个元素,引用其他元素中的一个元素。



DTD示例:







XML示例:

<售价 ID = "BOOK1" 货币单位 = "人民币">10.90

<售价 ID = "BOOK2" IDREF = "BOOK1">

③,IDREFS属性类型

指向多个元素ID,用空格分开。用于指向XML文档中的相关元素列表。





四,使用DTD



1,内部DTD

XML声明后在XDOCTYPE声明中编写内部DTD。


元素声明

。。。

]>

2,外部DTD

编写DTD文件,扩展名为DTD,在XML文档DOCTYPE声明中添加DTD引用,告诉解析器外部DTD信息,





3,DTD中的内部实体和外部实体和

参见:XML系列:XML文档结构 中的实体;



4,DTD中的参数实体

先用内部DTD声明,把参数实体设置为元素名 ,在XML文件中引用 外部DTD验证。



DTD文件

...







...



XML文件

...




]>

...



例子:不同元素的XML共同关联一个DTD文件



DTD文件

...







...



XML文件1

...




]>





张三学生

...







XML文件2

...




]>





王五老师

...





转载于:https://www.cnblogs.com/dkblog/archive/2009/05/07/1980751.html

更多相关:

  • 栈stack:stack 后入先出(LIFO) q.top()获取栈顶元素(并不删除)q.pop()删除栈顶元素q.push(x)向栈中加入元素q.empty()判断栈是否为空 队列queue:先入先出(FIFO)   q.front()获取队首元素(并不删除)q.pop()删除队首元素q.push(x)向队列中加入元素q....

  • resize(),设置大小(size); reserve(),设置容量(capacity); size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。 打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说...

  • v-for="(index,$i) in total" :key="$i":style="{left:`${itemWidth*((index-1)%rowItemCount)}px`,top:`${itemHeight*(Math.ceil(index/rowItemCount)-1)}px`}" //total是显示总数量 //l...

  •   技巧一(推荐指数★★★★★) 采用top、right、bottom、left,可以不在乎父元素的宽度和高度,对GPU损耗低于技巧三,但是对浏览器内存的消耗高于技巧三 .子元素 {/*父元素需要position: relative|absolute;*/position: absolute;margin: auto;to...

  • 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。 示例: MinStack minStack = new MinStack(); minStack...

  • 文档树Document Object Model (DOM) 为文档对象模型, 它使用对象的表示方式来表示对应的文档结构及其中的内容。下面为一个样例 p 元素在文档中的对象所包含的所有属性。控制台:p#domaccessKey: ""align: ""assignedSlot: nullattributeStyleMap: Style...

  • 1、封装 什么是封装?   1.对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口     注意:封装有隐藏的意思,但不是单纯的隐藏     学习封装的目的:就是为了能够限制外界对内部数据的访问   python中属性的权限分为两种:   1.公开的     没有任何限制,谁都可以访问   2.私有的     只有当前类本身能狗...

  • jquery:js框架; 主要区别在dom的操作 jq需要引入文件并且引入顺序在最上面; 找元素 操作元素 js:doucument.getElementById..classname,tagname,name jq:$(选择器) dom是js对象 jqDom是jquery对象 操作内容 js:dom.innerHTML(非表单元素)...

  • Mock.js 的语法规范包括两部分: 数据模板定义规范(Data Template Definition,DTD)数据占位符定义规范(Data Placeholder Definition,DPD)1.数据模板定义规范 DTD 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值: // 属性名 name // 生...

  • vue   vue.js 是用于构建交互式的 Web 界面的库。它提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单、灵活的 API。从技术上讲, Vue.js 集中在 MVVM 模式上的视图模型层,并通过双向数据绑定连接视图和模型。实际的 DOM 操作和输出格式被抽象出来成指令和过滤器。相比其它的 MVVM 框架,Vue.j...