【XML系列】----DTD约束(一)

在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文档的约束的。

例如:

    2011061611251639.png

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[开始,以]>结束语法格式如下:

    2011061611260564.png

    在普通的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)>

综合案例:

   2011061611263655.png

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

猜你喜欢

转载自blog.csdn.net/weixin_33895475/article/details/93795394