科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道XML认证教程,第 2 部分: Dtd

XML认证教程,第 2 部分: Dtd

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

一个“有效的”文件首先应该是“形式良好”的。但这还远远不够,它还要往前更进一步。一个XML文件必须遵守文件类型描述Dtd(Document Type Definition)中定义的种种规定。所有的文件都是由序言和文件体构成的。

作者:中国IT实验室 来源:中国IT实验室 2007年9月22日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

混合内容&空元素

当然,可能也有一些时候,你在一个元素中既希望包含子元素,也希望包含纯文本。 XML中允许这种使用方法,并把这种元素称为混合内容的元素。在下面的例子中, “联系人”就是一个混合元素。


<?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>
<!DOCTYPE CONTACTS [
<!ELEMENT 联系人列表 ANY>
<!ELEMENT 联系人(姓名|电话|EMAIL|#PCDATA)*>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT 电话(#PCDATA)>
<!ELEMENT EMAIL(#PCDATA)>
]>
<联系人列表>
<联系人>
<姓名>张三</姓名>
<电话>(010)62345678</电话>
<EMAIL>zhang@aaa.com</EMAIL>
这是关于张三的信息
</联系人>
</联系人列表>
 

注意,由于在“(姓名|电话|EMAIL|#PCDATA)”之外有“*”,所以在元素“联系人”中可以包含零个或多个“姓名”、电话、EMAIL和纯文本字段。

还有一种情况没有说,那就是,一个元素中不包含任何子元素,也不包含纯文本。对于这种情况,我们可以定义一个空标记。当然,定义这样一个标记很简单,你只需要使用关键字EMPTY就可以了,例如:<!ELEMENT HR EMPTY> 这样,在你的XML文件中,就可以使用一个空元素<HR/>。 


定义有效的元素属性

现在我们已经学会如何定义一个元素以及它的内容,如何描述父元素与子元素之间错综复杂的关系,只差不知道如何定义元素的属性了。

在第二篇教程中我们曾经提到过属性,那个例子是一个有关“商品”的元素,它有两个属性,即“类型”和“颜色”:<商品 类型 = "服装" 颜色 = "黄色">

在Dtd中定义属性时,我们使用下面的格式: <!ATTLIST 元素名 (属性名 属性类型 缺省值)*>

元素名是属性所属的元素的名字,在上面例子中,元素名是“商品”;属性名是属性的命名,例子中,“类型”和“颜色”是属性名;缺省值说明在XML文件中,如果没有特别说明属性的取值,语法分析器默认它具有的取值;属性类型则用来指定该属性是属于十个有效属性类型中的哪种类型。

注意:由于ATTLIST是一个属性的列表,它可以包含很多属性,在实际应用中,一个元素也经常有多个属性。 

上面例子中的属性可以如下定义:


<!ATTLIST 商品
类型 CDATA #REQUIRED
颜色 CDATA #IMPLIED
>
 

在元素说明的四个部分中,我们需要再详细讨论一下元素类型和缺省值。在下一节中,我们就从缺省值说起。


属性缺省值

根据XML文件是否必须为一个属性提供取值,属性的缺省值又可以分为以下三类:

必须赋值的属性 

    关键字REQUIRED说明XML文件中必须为这个属性给出一个属性值。例如,假设你想定义一个"页面作者"元素,并把这个元素加入所有网站中的每一个页面。之所以定义这个元素,是为了页面编辑者能够提供他的联系信息,以便当发现页面错误或无效链接时,可以及时地通知他。在这种情况下,每个页面作者都有不同的个人信息,所以你无法事先知道应该用什么作为缺省值,但你又的确需要提供每个人的信息。这时候,你就可以把与联系信息相关的属性定义为必须的(REQUIRED),而且不用提供缺省值。 
属性值可有可无的属性 

    当使用IMPLIED关键字时,文法解释器不再强行要求你在XML文件中给该属性赋值,而且也无须在Dtd中为该属性提供缺省值。可以说,这是对属性值有无的最低要求,现实中经常用到。
 
固定取值的属性 

    还有一种特殊情况,你需要为一个特定的属性提供一个缺省值,并且不希望XML 文件的编写者把你的缺省值替代掉。这时候,就应该使用FIXED关键字,同时为该属性提供一个缺省值。 

定义缺省值的属性 

    如果不使用上面任何一种关键字的话,该种属性就是属于这种类型。对于这种属性,你需要在Dtd中为它提供一个缺省值。而在XML文件中可以为该属性给出新的属性值来覆盖事先定义的缺省值,也可以不另外给出属性值,后一种情况下它就默认为采用Dtd中给出的缺省值。 

至于究竟采用哪种缺省值,就看实际需要了。下面给出一个具体的例子:


<!ATTLIST 页面作者
姓名 #CDATA #IMPLIED
年龄 #CDATA #IMPLIED
联系信息 #CDATA #REQUIRED
网站职务 #CDATA #FIXED "页面作者"
个人爱好 #CDATA "上网">
 

属性类型

一个元素可以为以下十种类型中的任意一种:


CDATA
Enumerated
ID
IDREF
IDREFS
ENTITY
ENTITIES
NMTOKEN
NMTOKENS
NOTATION
 

下面我们就来一个一个讲述。


CDATA类型

CDATA指的是纯文本,即由字符、符号“&”、小于号“<”和引号“"”组成的字符串。当然,就象我们前面讲到的,你应该使用实体&代替“&”,<代替“<”, "代替“"”。

请看下面这个关于剧本的例子:


<?xml version = "1.0"
encoding="Gb2312"
standalone = "yes"?>
<!DOCTYPE 剧本 [
<!ELEMENT 剧本 ANY>
<!ELEMENT 对话 (#PCDATA)>
<!ATTLIST 对话 演员 CDATA>
]>
<剧本>
<对话 演员="某甲">我可不这么认为!</对话>
<对话 演员="某乙">为什么呢?</对话>
</剧本>
 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章