您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > 第3章XML的有效性DTD
1第3章XML的有效性:DTD22DTD被用来规范XML文档DTD可以指定:可以在文档中存在的元素元素可以具有的属性在元素内部元素的层次结构以及元素在整个文档中出现的顺序等。33本章知识要点:理解DTD的基本概念掌握DTD声明XML元素的方法理解实体的概念及其作用掌握使用DTD的基本方式443.1DTD基本概念DTD是DocumentTypeDefinition(文档类型定义)的缩写。XML文档是一种可扩展标记语言,它可以由DTD来定义文档元素结构(如文档中的元素、属性等)。DTD指定XML文档必须遵守的一系列规则,从而确保XML文档的一致性和有效性。53.1.1DTD简介由于应用需求会发生变化,从而导致先前所编写的XML文档需要加以改变以适应需求的变化。而当文档结构改变时,就需要修改程序代码。在修改过程中,如何确保XML文档的有效性将直接影响程序运行结果。为了解决这一问题,就需要依靠逻辑清晰、语法准确的文档来对XML文档加以限制。DTD的主要用途就是确保XML文档的有效性。56数据模式与DTD数据模式:是指文档中的数据以何种结构进行组织。本章以DTD为例,说明如何为数据编写相应的模式,从而确保数据的有效性。7数据模式的用途1如果没有数据模式的约束,那么XML数据将具有以下特征:不受限制的词汇表:可以随意地使用任何元素、属性名称。没有任何语法规则:每个元素中都可以包含任意的内容(混合内容、子元素、文本、或者为空)。对于属性没有任何限制:每个元素都可以包含任意的属性。8数据模式的用途2因为XML树型模型的表达能力很强,对于相同的数据可能采取各种不同的表示方式,为信息的交换和处理带来极大的困难。所以需要通过某种方式,定义XML数据的词汇表(可能是针对某个领域),包括元素和属性的名称、甚至取值,并且需要通过语法规则控制XML元素的结构。实现这项任务的过程,通常将其称为“XML文档的数据模式设计”。9XML数据模式的示例通过预定义的数据模式,可以进行文档有效性验证(Validation)。10文档类型定义DTDDTD是一个面向SGML语言的规范,在XML规范出现之前就已经有了,DTD不仅仅用于XML,还可以用它为任何类型的SGML文档创建模式,包括HTML。DTD描述了一个标记语言的语法和词汇表,定义了文档的整体结构以及文档的语法。DTD是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来判断文档有效性,元素和属性使用是否正确。11使用DTD的优点在编程工具和解析器工具方面,受到广泛的支持。DTD是一种Web标准,任何能处理XML文档的浏览器都能对照DTD模式来验证XML文档的有效性。有很多已定义的DTD规范,比如MathDTD、MusicDTD、SVGDTD等等,几乎每个XML的实际应用领域,都存在已有的DTD规范。语法形式相对简单,容易学习。12DTD的局限性由于DTD本身并不是专门面向XML的数据模式语言,所以在对XML数据进行建模时,也存在一定的局限性。DTD没有采用XML的语法形式。DTD并不能完全满足XML自动化处理的要求,例如不支持XML中的命名空间、不能很好实现应用程序不同模块间的相互协调,缺乏对文档结构、属性、数据类型等约束的足够描述能力等等。13DTD基本语法在文档类型定义DTD中,通常需要完成下列工作:指定与XML数据相关的内部DTD规则、或者外部DTD文件;声明一组允许的元素(即能够出现在对应的XML文件中的元素);为每个元素定义内容模型(contentmodel);为每个元素声明一组允许的属性;声明各种实体,包括参数实体(ParameterEntities)和一般实体(GeneralEntities),并且在DTD中可能包括参数实体的引用。14为XML文档指定DTD规则DTD规则用于描述XML数据应该严格遵循的数据模型,而DTD规则本身可以出现在目标XML文档中,也可以作为一个单独的DTD文件关联于目标XML文档。换句话说,XML文档可以包含内部DTD规则(这些规则仅应用于当前XML文档),XML文档还可以建立与外部DTD文件之间的关联(这些规则除了应用于当前XML文档之外,还可以应用于其他的XML文档)。15内部DTD规则在XML文档中包含内部DTD规则的语法为:!DOCTYPEroot_element[......]?xmlversion=1.0standalone=yes?!DOCTYPEstudent[......]student....../student16外部DTD文件外部DTD的好处是,它可以方便高效地由多个XML文件所共享。只需要编写一个DTD文件,就可以被多个XML文件所引用。对于外部的DTD文件,又分为私有的外部DTD文件和公开的外部DTD文件。17引用外部DTD使用外部DTD时,要在DOCTYPE中使用关键字SYSTEM或PUBLIC。使用SYSTEM关键字主要用于引用一个作者或组织所编写的众多XML文件所通用的DTD文件。基本语法格式已经在3.1.2节中介绍过。在使用PUBLIC关键字引用外部DTD文件的基本语法格式中的DTD-URL被称为FPI(FormalPublicIdentifier,正式公用标识符),也称作实体的“publicld”。FPI有严格的形式,以保证它的全球唯一性。1718私有的外部DTD私有的外部DTD文件的声明方式如下所示:?xmlversion=1.0standalone=no?!DOCTYPEbookSYSTEMbook.dtdbook……/book!DOCTYPEroot_elementSYSTEMDTD_location为XML文档指定私有的外部DTD文件,必须使用关键字SYSTEM;表示这个外部DTD文件仅由某个开发人员、或者同属于某个小组的开发人员使用,其内容并不向外界公开。DTD_location表示获得这个DTD文件所需的相对的、或绝对的URL19公开的外部DTD这种DTD文件是由权威机构制订的、提供给特定行业或公众使用的DTD,甚至可能通过了国际标准化组织的批准,以便数据的提供者和使用者对所交互的数据进行有效性验证。公开的外部DTD文件的声明方式如下所示:!DOCTYPEroot_elementPUBLICDTD_nameDTD_location用于指定公开的外部DTD文件的名称,解析器可以根据这个名称选择相应DTD文件的最新版本如果解析器无法根据DTD_name找到相应的DTD文件,将进一步根据DTD_location(获得这个DTD文件所需的相对的、或绝对的URL)所指示的位置进行查找。为XML文档指定公开的外部DTD文件,必须使用关键字PUBLIC20DTD_name的语法第一部分prefix可以为ISO、+、或者-,分别表示通过批准的ISO标准、通过批准的非ISO标准、或者未通过批准的非ISO标准。第二部分owner_of_the_DTD表示发布该文档的机构。第三部分description_of_the_DTD表示对该文档的简短描述。第四部分Language_identifier则表示其语言版本。prefix//owner_of_the_DTD//description_of_the_DTD//language_identifier-//IETF//DTDHTMLStrictLevel1//EN-//W3C//DTDXHTML1.1//EN21DTD对元素声明XML元素是XML文档的基本组成部分。在有效的XML文档中的任何元素都必须在DTD中进行声明。元素声明指定了每个元素的名称、属性、内容以及在文档中出现的频率并且指定XML文档中元素的层次结构。使用关键字ELEMENT进行声明。2122元素及其内容模型的声明在DTD中,元素的声明语法如下:!ELEMENT(必须全部大写),然后是元素的名称element-name,接下来可以指定元素的类别、或者元素的内容模型,以及。所声明的元素可能包含有属性。!ELEMENTelement-namecategory!ELEMENTelement-name(element-content)23(1).空元素空元素声明的语法为:例如:!ELEMENTstudentEMPTY。这项声明表示student元素的内容为空,不包含子元素或者文本。!ELEMENTelement-nameEMPTY24(2).包含任意内容的元素要声明一个包含任意内容的元素,其语法为:例如:!ELEMENTstu_bakANY。这项声明表示stu_bak元素中可以包含任何内容(没有具体的限制)。!ELEMENTelement-nameANY25(3).只包含文本内容的元素要声明一个只包含文本内容的元素,其语法为:!ELEMENTstu_name(#PCDATA)。这项声明表示stu_name元素中只包含文本内容,不能够包含子元素。这里的PCDATA表示将被XML解析器进行解析的字符数据(ParsedCharacterDATA),其中不能够包含任何XML标记。!ELEMENTelement-name(#PCDATA)26(4).只包含子元素的元素要声明一个只包含子元素的元素,其语法为:其中,(child1,child2,...)表示一个序列,即内容模型。!ELEMENTstudent(stu_name,stu_no,stu_bak)。这项声明表示student元素中必须包含stu_name、stu_no、stu_bak三个子元素,并且它们的次序不能颠倒。!ELEMENTelement-name(child1,child2,...)27元素内容模型的示例①.!ELEMENTnote(to,from,header,(message|body))②.!ELEMENTarticle(title,subtitle?,author*,(para|table|list)+,bibliography?)28内容模型中各种符号29(5).包含指定的子元素以及文本内容的元素要声明一个包含指定的子元素以及文本内容的元素,其语法为:!ELEMENTpara(#PCDATA|emphasis|xref)*。这项声明表示para元素中可以包含文本内容、emphasis、xref的任意组合(任意个数、任意顺序),甚至什么都不包括。在DTD中只能严格按照上述的语法说明包含指定的子元素以及文本内容的元素(必须将#PCDATA放在最前面),无法实现进一步的约束。!ELEMENTelement-name(#PCDATA|child1|child2|...)*30元素内容类型元素内容有五种类型,即EMPTY、ANY、#PCDATA、子元素型和混合型。30313.5DTD对属性声明属性是描述元素的额外信息的,是对元素的修饰与补充。一般地,信息详实的XML文档都具有一个特点,元素通过属性来描述边缘信息。3132元素属性的声明DTD中某个元素的属性的声明语法如下:对于多个属性,比如:两个属性的声明也可以写成:!ATTLISTelement-nameattr-nameattr-typeattdesc!ATTLISTelement-nameattr1attr-type1attdesc1attr2attr-type2attdesc2!ATTLISTelement-nameattr1attr-type1attdesc1!ATTLISTelement-nameattr2attr-type2attdesc233ATTLIST中的属性类型类型描述CDATA字符数据“Characterdata”,不包括转义内容的纯文本内容。文本中的标签不会被当作标记,实体也将不会得到扩展。(value
本文标题:第3章XML的有效性DTD
链接地址:https://www.777doc.com/doc-2155552 .html