您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > XML实用教程_第4章_XML文档类型定义
XML实用教程丁跃潮张涛叶文来刘韵华程旭曼丁潇张天桥北京大学出版社教学提示:XML的可扩展性表现在用户可以自己定义标记和标记之间的嵌套关系,而DTD就是进行这种定义的语言。它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。根据DTD可检查XML文档中的数据,以验证其是否符合规定和要求,这可以保证XML文档数据的正确性和有效性。本章介绍DTD的语法,包括元素、属性和实体的语法,结合例子给出DTD的使用方法并给出综合实例。教学目标:了解DTD的作用,熟悉元素、属性及实体的运用,掌握引用DTD的方法,能够为特定的系统设计标记语言。第4章XML文档类型定义教学内容:4.1DTD的作用4.2DTD元素4.3DTD属性4.4DTD中的实体4.5使用DTD4.1DTD的作用XML文档是一种元标记语言,即一种定义标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(DocumentTypeDefinitions,DTD)来定义。DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法符,DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档。DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。其作用主要表现在以下几个方面:(1)使用DTD可以提供一种统一的格式。XML的可扩展性为文档的作者提供了很高的灵活性,可有时候需要的是统一,要求某一类文档具有相同的结构。(2)使用DTD可以保证数据交流和共享的顺利进行。(3)DTD使用户能够不依赖具体的数据就知道文档的逻辑结构。在没有XML文档的时候,也可以根据DTD为XML文档编写样式单,编写处理程序,这样可以有效地提高工作效率。(4)使用DTD可以验证数据的有效性。DTD对文档的逻辑结构进行了约束,这种约束可以比较宽松,也可以十分严格。可以根据DTD检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。4.2DTD元素DTD中描述的基本部件是元素和属性,它们负责确定XML文档的逻辑结构。元素表示一个信息对象,而属性表示这个对象的性质。所有元素中有且只有一个根元素,其他的元素都是它的子元素,除根元素外,每个元素都被其他元素包含,一个元素可以有几个不同类型的子元素。4.2.1元素的基本类型元素的基本类型大致可分为两种,一种称为简单型,另一种称为复合型。简单型具有文本数据,即可析字符数据,该类型也称为上下文中的“#PCADTA”;复合型可以包含其他元素和文本数据。1.简单型“#PCDATA”(ParsedCharacterData)表示标记的内容是可解析文本,所谓的可解析文本就是非标记文本。用“#PCDATA”规范了的元素不能再包含子元素。例如Howdoyoudo是不包含标记的文本,而Howdoyoulistdo/list就不是可解析的数据类型,因为其中包含有标记list和/list。另外DTD文档中不同元素定义的次序没有先后关系,但文档的语法对大小写敏感。“#PCDATA”的声明格式:!ELEMENTElement_Name(#PCDATA)2.复合型复合型元素与简单型元素相对,复合型元素可包含其他元素。4.2.2元素的声明1.元素声明的基本语法元素的声明格式:ELEMENTElement_NameElement_Defination其中,Element_Name为声明的元素名称,Element_Defination为元素内容格式的定义。合法的元素声明语句如:!ELEMENTbookinfo(title,author,publish,price)!ELEMENTpublisher(#PCDATA)2.空元素的声明在第3章中已介绍了空标记的使用方法,那么在DTD中如何对与其对应的空元素进行声明呢?其声明格式:ELEMENTElement_NameEMPTY例如下面的语句:ELEMENThrEMPTY3.不限定元素内容的声明ANY是DTD中使用很频繁的一个关键字,特别是对于文档根元素的声明。在定义一个DTD文档时通常很难准确地确定一个元素是否具有子元素的情况,此时一般的做法是指定该元素的子元素为ANY型(表示可以是任意的元素),这样在它之中可以包含任何数据、任何声明的子元素及其数据和子元素的组合。ANY元素的声明格式:!ELEMENTElement_NameANY4.子元素列表的设定在XML中有一种针对复合元素的最为严格的设定方法,称为子元素列表的设定。这种方式下,元素都拥有哪些子元素、每个子元素出现的次数和位置都有明确的规定,在具体文档实现时,必须严格执行。子元素列表的设定语法如下:!ELEMENTElement_Name(Child_Element1,Child_Element2,…)其中“(Child_Element1,Child_Element2,…)”部分为Element_Name所拥有的子元素列表。5.可选择的子元素有些时候,需要在两个或多个互斥的元素中进行选择。即多选一的情况,如一个人的性别可以是男或女,两者中只能有一种情况。DTD有专门的语法来处理这种情况,其语法格式如下:!ELEMENTElement_Name(Child_Element1|Child_Element2|……)其中,“(Child_Element1|Child_Element2|…)”部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。6.元素出现次数的控制(1)一个元素可能出现一次,也可能不出现。这时可通过在元素名后面加上一个“?”来实现。(2)一个元素可能不出现,也可能出现多次。这时可通过在元素名后面加上一个“*”来实现。(3)一个元素可能出现一次,也可能出现多次,但至少也要出现一次。这时可通过在元素名后面加上一个“+”来实现。7.元素组在声明复合型元素的时候,可以使用括号将其部分子元素组合在一起,成为一个元素组,该元素组在特性上与普通元素没什么区别,可以对其使用“?”、“*”、“+”等控制字符。在实际应用中,使用元素组可能不是最好的方案。这时也可以先将准备分组的元素定义为一个复合元素,再在原来的元素中引用刚定义的复合元素,这样文档的结构更清晰。8.混合型元素还有另一种元素,其内容既可以为字符数据,也可以为子元素,这种元素称为混合型元素。混合型元素的声明格式:!ELEMENTElement_Name(#PCDATA|Child_Element1|Child_Element2,…)混合型元素的存在破坏了文档的层次结构化,不利于应用软件对XML文档的处理,在XML文档开发过程中,它可以作为一个不成熟的DTD文档,一步一步地在XML文档中添加元素,边添加边测试其正确性,这时可将尚未处理的部分作为字符数据组织到一个混合型元素中,以便使文档通过测试。但在文档最后完成时,要通过添加新元素的方法来清除这种非结构化信息。4.3DTD属性简单来讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。4.3.1属性的声明在DTD中,属性的声明格式:!ATTLISTElement_nameAttribute_nameTYPEDefault_value其中,!ATTLIST为属性声明的关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。在声明属性时有以下需要注意的事项。(1)可以多次为一个元素声明其中所包含的属性。(2)属性的声明在文档中的次序没有严格的要求,可位于与其相连的元素声明之前或之后。(3)所有元素的属性,都要在各自所对应的标记中声明。(4)属性有4种不同类型的默认值,可在属性声明中的Default_value部分指定。①default:表示使用提供的默认值,default不是一个关键字,它代表一个预设的字符串。!ATTLISTbookinfobookcategory(文艺|自然科学)文艺此例句表示当在XML文档中省略了对bookinfo元素的bookcategory属性值进行设定时,该属性的默认值就是“文艺”。②#REQUIRED:表示属性值必须指定。③#IMPLIED:表示元素的这个属性可用可不用。④#FIXED:表示元素的这个属性值是一个固定值,且必须是指定的值。4.3.2属性的类型在属性的声明中TYPE部分为属性的类型设定,DTD中属性的类型有10种,下面将对这些数据类型进行逐一的介绍。1.CDATA型CDATA型表明属性值为不包含“”和“”的任意字符串,如果属性值中需要包含“”和“”,则可使用特殊字符来代替。2.Enumerated型如果属性值并不是任意的字符串,而是在几个可能的值中进行选择,如书籍的“类别”属性,其值可为“文艺”,也可为“自然科学”,而不可能为其他情况时,则可以将书籍的“类别”属性设定为Enumerated型。3.ID型当元素的某个属性值是不能重复时,如书籍的ISBN属性、个人的“身份证号”属性等,要定义这样的属性则需使用属性的ID类型。在一个XML文档中,所有元素的ID类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的属性。4.IDREF与IDREFS型IDREF为IdentifierReference的缩写,IDREF与ID类型属性的关系为子元素与父元素的关系,即IDREF类型属性的值必须是其他元素的ID类型属性的值,且该ID类型属性的值必须在文档的其他地方被设定过。IDREFS类型属性的属性值可有多个,每一个都必须是在文档其他地方被设定了的ID类型属性的值,而这多个属性值之间用空格隔开。5.ENTITY与ENTITIES型ENTITY类型的属性提供了把外部二进制形式的文件(如.jpeg、.mp3等)和外部不可解析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的通用实体名。ENTITIES类型属性的属性值可由多个不可解析的外部实体名称组成,各实体名称之间使用空格隔开。6.NMTOKEN与NMTOKENS型NMTOKEN类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数字、“.”、“_”、“-”、“:”等组成,这里有几点需要注意。(1)不能包括空格。(2)以上字符中除“:”以外,其他字符都可以作为开头字符。(3)“:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。7.NOTATION型XML文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进行处理。4.4DTD中的实体4.4.1实体的概念实体是包含了文档片段的虚拟存储单元,可用来存储XML声明、DTD、其他形式的文本及二进制数据等。简单来讲就是一段代码或数据的代称,这个代称即为实体的名字。当需要在文档中引用某段代码或数据时,可以引用与这段代码或数据相对应的实体名称来代替实体的具体内容。具有正确性检查功能的XML处理器在提交文档给最终应用程序之前或在显示文档以前,将先把所有不同的实体引用替换为与其对应的具体内容,从而构成一个结构完整的文档。4.4.2实体的分类(1)按照实体的具体内容来分类,实体可分为可解析与不可解析两类。可解析实体的具体内容为简单的字符、数字、文本块,而不可解析实体的具体内容则为图片、声音等二进制文件。(2)按照逻辑存储来分类,实体可分为内部实体与外部实体两类。内部实体的内容是在文档内部设定的;而外部实体则是一个外部独立的物理存储对象,如某个外部文件。(3)按照使用的范围来分类,实体可分为一般实体与参数实体两类。一般实体都用来构成文档的具体内容,可出现在XML文档中,也可出现在DTD中;而参数实体只能出现在DTD中,不能出现在XML文档中。1.内部一般实体内部一般实体就
本文标题:XML实用教程_第4章_XML文档类型定义
链接地址:https://www.777doc.com/doc-2857458 .html