`
code727
  • 浏览: 66746 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

XML文档约束之DTD

阅读更多

       在任何一个XML文档中应包括头部(header)和内容(content)这两部分。其中,头部除了要声明所遵循的标准和字符集编码之外,还可以通过引入相关的约束来保证整个文档结构的完整性。目前,比较常用的约束手段有如下三种方式:

       1)DTD:XML1.0规范的一部分,简单但不灵活;

       2)Schema:灵活但复杂;

       3)RELAX NG:针对XML Schema复杂性而产生的一种约束模式,融合了DTD的简单性和XML Schema的灵活性,但不具备XML Schema的全部特性。      

        DTD的约束主要涉及到元素和当前元素属性的定义,包括:元素的名称、元素所包含的内容、子元素的个数和顺序、元素所具有的属性、属性的数据类型和取值范围等,根据具体的应用,这里所述的内容不是都需在DTD中有所体现。

 

1.定义元素

       包括根元素在内的所有元素都需要利用关键字ELEMENT来定义,其语法如下:

        <!ELEMENT 元素名 内容模式 >

        其中红色部分的内容为固定不变的,而内容模式是定义当前元素应包含的子元素(组),子元素出现的个数和顺序,以及是否可包含文本内容等。

 

2.元素的内容模式

      即上述内容模式可能是由如下几种情况之一构成的:

       1)  (子元素1 | 子元素2 | 子元素n)   或 (子元素1,子元素2,子元素n)

       其中,“|”号表示元素之间“”的关系,即表示可以包含子元素1,或子元素2,或子元素3。另外,还可以用逗号“,”来分割,表示这些子元素出现在父元素中的先后次序。

       在这种情况下,还可以用“量词”来量化各子元素(组)出现的次数。

       ? :0次或1次(0|1)

       + :一次或多次(1...N)

       *  :0次或多次(0...N)

       无量词作用时,则默认表示有且必须出现一次

       例如:

       <!ELEMENT a(sa?) >表示子元素sa在元素a中那么不出现,要么只出现一次,而<!ELEMENT a(sa,sb,sc)+ >则表示sa、sb和sc至少依次嵌套在a元素中一次。

       2) (#PCDATA)

       表示当前元素只能包含纯文本内容。

       例如,针对元素a,

              <a>test</a>、<a></a>和</a>都是合法的,

              而<a><sa>test<sa></a>是非法的。

       3) EMPTY

       表示当前元素不能包含任何嵌套的子元素和文本内容。例如,针对元素a,只有在<a />和<a></a>这两种情况下是合法的。

       4) ANY

       表示当前元素可以包含任意数量和顺序的子元素和文本内容。在这种情况下,和没有引入DTD时是一样的效果,只要遵循XML文档结构的基本规则即可。

       在定义元素时,内容模式部分是不能被省略的。例如,当我们定义一个bean元素时,即使对它内部嵌套没有明确的内容约束时,也需要在最后加上ANY来加以说明:<!ELEMENT bean ANY >

       上述的内容模式还可以组合使用,例如<!ELEMENT bean (a|(b*,c)+)? >。

 

3.定义元素的属性

        定义元素的属性是通过关键字ATTLIST来进行的,其语法如下:

        <!ATTLIST 元素名 属性名 属性值类型/取值范围 是否可选>

        其中红色部分的内容为固定不变的,元素名是指拥有这些属性的元素,而“属性名 属性值类型/取值范围 是否可选”是定义某一个属性所必须具备的三要素,称为属性列表。另外,当前元素的所有属性都应该在同一个<!ATTLIST >中定义,这意味着当有n个属性时,则应该在同一个<!ATTLIST >中定义n个属性列表。

        

4.属性列表

        1)属性名

         即一般的文本值,只要符合XML基本的规范即可。

         2)属性值类型/取值范围         当某个属性无明确的取值范围时,则需指定该属性值的类型,一般就是一个文本类型CDATA;当某个属性有明确的取值范围时,则必须用括号“()”将所有备选值括起来,并且备选值之间用“|”分割,表示这是一个n选一的操作。例如:

         type (string | int | boolean)

         表示type属性值只能是string、int或boolean。

         3)是否可选

         可用#REQUIRED(必选)#IMPLIED(可选)来表示,根据实际的应用场景来设置即可。例如:                  type CDATA #REQUIRED

         表示必选的type属性的值为任意的文本字符。

 

5.定义DTD

    temple.dtd

 

<?xml version="1.0" encoding="UTF-8"?>

<!-- 定义XML根元素temple,其内有0个或多个bean元素  -->
<!ELEMENT templet (bean*)>

<!-- 
	1.定义bean元素,其内有0个或多个property元素  
	2.定义bean元素属性:
	  1)name  任意文本值  可选
	  2)class 任意文本值   必选
-->
<!ELEMENT bean (property*)>
<!ATTLIST bean 
    name    CDATA #IMPLIED
	class   CDATA #REQUIRED
>

<!-- 
	1.定义property元素,无任何嵌套的子元素和文本内容
	2.定义property元素属性:
	  1)name  任意文本值  必选
	  2)type  括号内所指定的某一个值  可选
	  3)ref   任意文本值  可选
-->
<!ELEMENT property EMPTY >
<!ATTLIST property 
    name    CDATA #REQUIRED
	type    (
			 java:boolean   |
			 java:byte      |
			 java:char      |
			 java:double    |
			 java:float     |
	         java:long      |
			 java:integer   |
			 java:short     |
			 java:string    
			) #IMPLIED
	ref     CDATA #IMPLIED 
>

 

6.引入DTD

       在某个XML件头中,可通过<!DOCTYPE来引入相应的DTD文件,它有两种引入方式:

       1)远程引入

        DTD文件可能是在一个公用的网络目录上,供若干个互联网用户共同使用。其语法如下:

        <!DOCTYPE DTD标识符 PUBLIC "DTD公共标识" "DTD系统标识" >

        其中红色部分为远程引入时的固定写法。

         DTD标识符:可以为任意字符串,不过一般就取名为DTD中定义的根元素名称;

         PUBLIC:远程引入的关键字        

         DTD公共标识以“-//”开头。

         DTD系统标识:一般就是用来指定DTD文件的URI。当公共标识无法解析时,则就用系统标识来进行。

         例如,Struts2的DTD引入如下:

         <!DOCTYPE struts PUBLIC
               "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
               "http://struts.apache.org/dtds/struts-2.0.dtd">

        2)本地引入

        即引入用户系统中定义的DTD文件,其语法如下:

        <!DOCTYPE DTD标识符 SYSTEM "DTD文件路径" >

        其中红色部分为远程引入时的固定写法。

        DTD标识符:(与远程引入的规则一样)

        SYSTEM:本地引入的关键字

        DTD文件路径:DTD相对于当前XML文件的路径

        例如,将第5部分定义的temple.dtd放到与temple.xml的同一个目录下后,在XML引入如下内容:

        

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入本地的DTD文件 -->
<!DOCTYPE temple SYSTEM "temple.dtd">

<temple>
	
	<bean name="user" class="com.daniele.appdemo.test.domain.User">
		<property name="id" type="java:long" />
		<property name="name" type="java:string" />
		<property name="age" type="java:integer"/>
		<property name="mail" type="java:string" />
	</bean>
	
</temple>
       在Eclipse中,当我们在文档的相应位置键入"Alt"+"/"组合键后,将会看到一系列的备选值,而这些备选值就是在temple.dtd定义的。

 

分享到:
评论

相关推荐

    xml约束[dtd,Schema].zip

    为了确保XML文档的结构正确性与一致性,XML约束技术应运而生,主要有两种形式:DTD(Document Type Definition)和XML Schema。 **DTD(Document Type Definition)** DTD是XML的早期约束和验证机制,它定义了XML...

    DTD约束 —— Xml文档 约束技术 学习笔记

    DTD约束是XML文档规范的一种方式,它允许我们定义元素、属性以及它们之间的关系,以实现对XML文档内容的有效控制。 DTD的主要组成部分包括: 1. 元素定义:在DTD中,每个元素都有一个唯一的名称,可以指定元素是否...

    实验二-基于DTD实现XML文档的有效性验证.doc

    2. tv-.xml和tv-.dtd:这两个文件展示了如何使用DTD来定义XML文档的结构和约束,并使用DTD来验证XML文档的有效性。 3. poems.xml和.dtd:这两个文件展示了如何使用DTD来定义XML文档的结构和约束,并使用DTD来验证...

    XML文档约束之Schema

    XML Schema是XML的一种标准化约束机制,用于定义XML文档的结构和数据类型,确保数据的准确性和一致性。 XML Schema提供了比早期的DTD(Document Type Definition)更强大的功能,例如支持复杂数据类型、命名空间和...

    优秀xml课程设计 完整代码 加完整dtd

    在这个“优秀xml课程设计”中,我们将会深入探讨XML的基础知识,包括其结构、语法以及如何使用DTD(Document Type Definition)来定义XML文档的结构。 XML的基本结构由元素(Element)、属性(Attribute)、文本...

    xml与DTD,xml与DTD

    - **外部DTD**:DTD作为单独的文件存在,并通过XML文档中的DOCTYPE声明来引用。适用于大型项目或多个文档共享相同的DTD规则的情况。 #### 五、DTD的声明 DTD声明总是以`&lt;!DOCTYPE&gt;`开头,后跟根元素的名称。内部...

    jdom解析xml、dtd约束xml文件

    这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...

    DTD的CHM帮助文档

    **DTD(Document Type Definition)** 是XML(Extensible Markup Language)文档类型定义的缩写,它是XML规范的一部分,用于定义XML文档的结构和元素。在XML文档中,DTD的作用是确保文档内容遵循预设的规则,即所有...

    spring和Mybatis的xml配置文件提示约束包

    DTD是一种元语言,用于定义XML文档的合法构建块。在Spring和Mybatis的XML配置文件中,DTD定义了可以使用的元素、属性以及它们的顺序和限制。这些约束确保了配置文件的正确性,避免了因语法错误导致的解析问题。 ...

    DTD(XML文档类型定义)教程

    XML文档类型定义(DTD)是XML文档结构的重要组成部分,它为XML文档设定了规范和约束,确保了数据的准确性和一致性。本教程旨在深入讲解DTD的概念、编写方式、使用方法,以及它与XML Schema的区别和联系。 XML的核心...

    XML与WEB Service技术(微软):实验二 在XML文档中使用DTD.doc

    DTD定义了XML文档的元素类型、元素之间的关系以及元素可能具有的属性,从而约束了XML文档的结构,防止因结构混乱导致的数据解析错误。通过使用DTD,可以对XML文档进行验证,检查文档是否符合预先设定的规则,这对于...

    DTD约束文档

    DTD(Document Type Definition)是XML文档的一个重要组成部分,它定义了文档结构和元素之间的关系,确保XML文件遵循一套预定义的规则。DTD约束文档的作用在于为XML文档提供了一个验证的标准,使得XML解析器能够检查...

    xml约束 xml经典之二

    编写DTD约束有两种方式:一是将DTD定义作为单独的文件,二是将DTD嵌入到XML文档本身中。在XML文档内部编写DTD时,使用`&lt;!DOCTYPE&gt;`声明,如示例所示,将DTD定义放在`&lt;?xml&gt;`声明之后,文档元素之前。 XML Schema是...

    XML Schema 与 XML DTD的技术比较与分析

    XML Schema 和 XML DTD 是两种用于定义XML文档结构和数据约束的语言。XML DTD(文档类型定义)是较早出现的规范,而XML Schema则在2001年成为W3C的正式推荐标准,旨在提供更强大和灵活的XML文档验证功能。 首先,...

    使用XmlDocumentXmlDataDocument类加载XML文件时如何忽略DTD验证

    DTD是XML的一个组成部分,用于定义XML文档的结构和元素约束,但并非所有情况下都需要进行验证。在这种情况下,我们可以采取一些策略来忽略DTD验证,从而避免`System.Xml.XmlException`的抛出。 首先,我们可以使用`...

    XML应用开发(软件品牌)-1期 2.3 课堂实践-XML文档引用外部DTD.doc

    在XML中,DTD(Document Type Definition)是用来定义XML文档结构和元素规则的规范,它允许我们声明元素类型、元素间的约束以及属性等,确保XML文档的数据结构正确无误。 本堂实践课的主题是“XML文档引用外部DTD”...

    XML.rar_dtd xml_xml dtd_xml schema_xml 设计

    在本主题中,我们将深入探讨如何利用DTD(Document Type Definition)和XML Schema来设计一个表示图书信息的XML文档。这两种方法都是为了确保XML文档结构的合法性与一致性。 首先,DTD是XML的早期验证机制,它定义...

    mybatis-dtd约束文件

    DTD是一种用于定义XML文档结构的机制,它定义了元素、属性以及它们之间的关系。在MyBatis的上下文中,DTD文件用于确保XML映射文件(mapper.xml)遵循特定的格式和规则,这样解析器在处理这些文件时就能正确理解其...

    XML学习文档(DTD Schema SAX DOM XSL XPATH)

    接下来是DTD(Document Type Definition),它是XML文档类型定义,用来规定XML文档的合法结构和元素。DTD通过一系列的元素声明、属性声明和实体定义,确保XML文档遵循特定的规则。例如,它可以定义元素是否可以嵌套...

    《XML》实验(1) -- XML Basics & DTD

    2、熟悉和掌握XML规范的基本内容,包括XML声明、注释、处理指令、元素、属性、CDATA段、预定义实体、命名空间的使用,以及如何进行XML文档良构和有效性验证;能够灵活地使用XML层次数据来表示各种信息。 3、掌握如何...

Global site tag (gtag.js) - Google Analytics