在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

为了能够编写一个格式良好且有效的XML文档,我们需要在XML文档之前添加DTD或者schema约束。

常用的约束有:

  1.DTD约束

  2.Schema约束

约束在XML文档中的作用:

  XML文档的约束可以规定该文档都有哪些标签,包括标签的属性等等,都可以在约束中进行规范编写。

这篇文章我们来认识与使用DTD约束。

  DTD约束(Document Type Definition),全称为文档类型定义。

  这种约束简单易用,但功能较弱,相对于schema来说简单些,schema使用起来会比较麻烦,但功能也相对强大,在早期的servlet2.x版本以及spring 1.x版本中都是采用DTD来编写其XML文档的约束的。

例如:

  

DTD对XML文档的约束包括哪几个方面?

  1.DTD可以定义XML的根元素、内容和结构。

  2.定义XML文档中可以接受哪些元素

  3.定义XML文档中每个元素接受的合法内容,比如说是否为空,是否可以是文本,可以接受哪些子元素,和子元素出现的顺序和子元素出现的次数,以及各元素的包含规则等等。

  4.定义XML文档中每个元素能接受哪些属性

  5.定义XML文档中每个属性的类型,能接受哪些值,以及元素对属性的约束等。

  6.定义属性的默认值和固定值。

  7.定义XML文档中或DTD中可以使用哪些实体。

DTD有哪些功能?

  DTD采用了非XML的语法来描述语义约束,可以实现如下的功能:

    1.通过使用DTD可以让每个XML文档带有一个有关自身的格式描述

    2.不同的企业或公司等组织一致的使用某个标准的DTD来交换数据

    3.应用程序也可使用某个标准的DTD验证所介绍的XML文档是否符合语义约束

    4.开发者也可以使用DTD来验证所创建的XML文档

引入DTD的方式:

  1.内部DTD

    使用DTD的最简单的方式,内部DTD就是指将语义约束与XML文档的内容放在同一个XML文档中。紧跟在XML生命和处理指令之后,以<!DOCTYPE[开始,以]>结束语法格式如下:

    

    在普通的JSP页面编码中,或者HTML页面代码中都会有DTD约束出现,但一般都不是内部DTD约束。

    DTD约束细节1:

      在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:

         <!ELEMENT 元素名称 元素类型>

      元素类型可以是元素内容、或类型

      如为元素内容:则需要使用()括起来,如

      <!ELEMENT 书架 (书名,作者,售价)>

      <!ELEMENT 书名 (#PCDATA)>

      如为元素类型,则直接书写,DTD规范定义了如下几种类型:

      EMPTY:用于定义空元素,例如<br/> <hr/>

      ANY:表示元素内容为任意类型。

    DTD细节约束2:

      元素内容中可以使用如下方式,描述内容的组成关系

      用逗号分隔,表示内容的出现顺序必须与声明时一致。<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>

      用|分隔,表示任选其一,即多个只能出现一个

      <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

      在元素内容中也可以使用+、*、?等符号表示元素出现的次数:

         +: 一次或多次 (书+)

            ?: 0次或一次 (书?)

          *: 0次或多次  (书*)

      也可使用圆括号( )批量设置,例

      <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

综合案例:

   

2.外部DTD

  外部DTD的引用:

    首先创建一个dtd文件,将DTD的约束写到文件中,然后在XML文档中按以下语法格式添加:

<!DOCTYPE (根元素名称)SYSTEM “外部DTD的URL地址”>

3.公用DTD

  引用公用的DTD的语法格式如下:

  <!DOCTYPE (根元素名称)PUBLIC “DTD的标识名” “公用DTD的URL地址”>

  具体写法可见JavaWEB项目中的web.xml文件,这里就不再贴出代码。

转载于:https://www.cnblogs.com/H_Razor/archive/2011/06/16/xml_05.html

【XML系列】----DTD约束(一)相关推荐

  1. XML的DTD约束和Schema约束

    ajax是什么? 如图: XML是什么? 可扩展标记语言,标记数据,定义数据类型 允许用户对自己的标记语言进行定义的源语言 xml详细介绍:(http://www.w3school.com.cn/xm ...

  2. XML内部DTD约束 Day24

    <?xml version="1.0" encoding="UTF-8"?> <!-- 内部DTD --> <!-- XML:ex ...

  3. JAVA XML 之 DTD约束

    什么是约束? 约束是用来限定xml文件中可使用的标签以及属性. 也就是告诉程序员,xml该怎么写. 约束分为DTD约束和Schema约束 DTD语法规则 复杂元素也就是有子元素的元素. 简单元素则是没 ...

  4. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  5. 第1天 XML和DTD、schema约束

    1.xml * 扩展名:*.xml * 作用:存储.配置 一个XML文件分为如下几部分内容:文档声明.元素.属性.注释  CDATA区.特殊字符.处理指令(processing instruction ...

  6. xml的应用与dtd约束

    1.xml的应用 *不同的系统之间的传输数据(qq消息传输) *用来表示生活中有关系的数据(省市区的包含关系) *经常用在文件配置 **比如现在连接数据库,肯定知道数据库的名称和密码及用户名.    ...

  7. web.xml引入web-app dtd约束

    常见的框架使用dtd约束的有struts2,hibernate等 1.新建一个java项目 2 在src下面新建一个包com.dxm.dtd 3 在该包上按快捷键ctrl+N新建其他文件,输入xml ...

  8. xml教程之dtd约束

    1.dtd作用 XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错.(如:Tomcat) XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为 ...

  9. Schama —— Xml文档约束技术 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  10. xml教程之约束schema

    1.简介 XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: XML Schema符合XML语法结 ...

最新文章

  1. 使用Redis分区将数据分割到多个Redis实例
  2. 思科光传输功率查询_各品牌网络设备的光功率查看方法(不完全统计)
  3. matlab中怎么求矩阵的特征值和特征向量
  4. jquery学习之1.20-获取同辈元素和子元素
  5. matlab车辆贪心作业调度,贪心算法-区间调度-Interval Scheduling
  6. 简单的二叉树创建与遍历
  7. P4296-[AHOI2007]密码箱【数论】
  8. 小红书去水印代码_小红书商家须知!小红书引流靠谱吗?
  9. (转)Bibtex使用方法
  10. NDK编译php,Android NDK编译常见错误及解决方案
  11. HDU 5933 2016CCPC杭州 A: ArcSoft's Office Rearrangement
  12. SDP在SIP协议中的应用
  13. 阿里巴巴实习生笔试研发工程师
  14. PyTorch中的pack_padded_sequence和pad_packed_sequence
  15. mux decoder selector详解
  16. 杏子语录(2020年12月)
  17. 激光电视和投影仪有什么区别
  18. 如何选择垃圾收集器?
  19. 怎么把图片文件转换成PDF文件
  20. 一点就分享系列(实践篇3-上篇)— 修改YOLOV5 之”魔刀小试“+ Trick心得分享+V5精髓部分源码解读

热门文章

  1. elasticsearch中head插件中的定制增加用户名密码范例
  2. Struts2报错异常Method setUser failed for object com.mikey.action.ConverterAction@dd34285
  3. 多线程等待/通知机制
  4. 【转】snort 笔记2 ----- 规则编写
  5. .NET反射 Type类
  6. 120 Python程序中的线程操作-队列
  7. 067 Pytohn文件的两种用途
  8. SQL注入盲注——布尔注入
  9. ubuntu 17.10 如何设置合盖不关机
  10. linux源码中的核心数据结构