在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文件,这里就不再贴出代码。
分享到:
相关推荐
pugixml是一款轻量级、高性能的C++库,专为XML解析和操作而设计。这个库由Artemev开发,提供了简单易用的API,使得在C++项目中处理XML文档变得非常便捷。本示例将详细介绍如何使用pugixml进行XML的读取和写入操作。 ...
在PowerBuilder(简称PB)这个强大的开发环境中,处理XML文件是一项常见的任务。XML(Extensible Markup Language)是一种用于存储和传输数据的通用格式,尤其在跨平台和网络应用中广泛使用。本示例主要探讨如何在...
TinyXML和TinyXML2是两个小型的开源库,专门用于解析和操作XML(eXtensible Markup Language)文档。这两个库都是用C++编写的,为C++开发者提供了方便的接口来读取、写入和操作XML数据。下面将详细介绍这两个库的...
易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...
andxml汉化版是一个xml文件反编译工具,可与APKTOOL反编译配合使用,APK文件使用APKTool反编译生成XML文件后,就可以直接通过它进行汉化编辑 注意: 1、一键机器翻译会造成某些代码出现翻译错误现象,请人工识别。...
TinyXML-2 是一个简单、小型、高效的 C++ XML 解析器,可以被轻松集成到其他程序中。它使用文档对象模型(DOM)的方式解析XML,可解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型。 作为XML解析...
使用java工具xml2axml.jar反编译AndroidManafest文件 通过xml2axml.jar工具反编译AndroidManafest文件 还原AndroidManafest.xml详细过程: 1、获取到apk 2、解压获取里面的AndroidManifest.xml文件 3、在xml2axml....
**Pugixml详解:一个高效易用的XML解析库** 在编程中,XML(Extensible Markup Language)是一种被广泛使用的数据交换格式,特别是在跨平台通信、配置文件和数据存储等领域。为了处理XML文档,开发者通常需要依赖...
Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...
XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文...
TinyXML-2,通常以tinyxml2库的形式存在,是一个轻量级的C++库,专门用于解析和操作XML文档。这个库由李·斯坦普(Lee Stemp)开发,设计简洁,易于集成到各种项目中,特别是对于嵌入式系统和资源有限的环境。在给定...
在Qt框架中,XML文件是一种常见的数据存储格式,它提供了结构化的数据表示方式,便于程序读取和写入。QTreeWidget是Qt提供的一种用于显示树状结构数据的控件,它可以很好地展示XML文件的层次结构。QXml是Qt中的XML...
TinyXML2是一个小型、快速且易于使用的C++库,用于解析和生成XML文档。这个库的设计目标是简单、高效,并且适用于嵌入式系统。在本文中,我们将深入探讨如何使用TinyXML2来解析和创建XML文件,特别是涉及到CDATA区段...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、Web服务、配置文件等领域。本文将深入探讨XML与JavaBean之间的转换、XML标签的大小写规则、XML特殊符号的处理以及CDATA的生成。 ...
- 库的主要类包括`XMLDocument`(XML文档对象)、`XMLElement`(XML元素)、`XMLText`(XML文本)、`XMLComment`(XML注释)和`XMLAttribute`(XML属性)等。 2. **解析XML文件** - 使用`XMLDocument::LoadFile()...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于配置文件、数据交换、文档存储等领域。TinyXML2是轻量级的C++ XML解析库,它提供了简单、直接的方式来读写XML文档。本项目是基于tinyxml2...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。XML Schema(通常缩写为XSD)则是为XML文档定义结构和数据类型的规范,它允许我们对XML文档进行更严格...
XMLParser是一种用于解析XML文档的C++实现,它旨在提供简单、小巧且稳定的解决方案,以处理XML数据。XML,即可扩展标记语言,是用于存储和传输数据的标准格式,广泛应用于配置文件、数据交换和文档结构化等领域。XML...
XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、数据存储和网络通信等领域。Matlab作为一个强大的数值计算和数据分析环境,也提供了与XML交互的功能,这主要通过XML ...
(2) 解压Xml Tools 2.4.8 Unicode.zip,关闭Notepad++ (3) 将xmltools子文件夹下的XMLTools.dll拷贝至Notepad++的plugins子文件夹 (4) 将ext_libs子文件夹下的所有dll文件拷贝至Notepad++的根目录(与notepad++.exe...