科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

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

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


元素类型声明2

    为了使元素“联系人列表”中还可以包含其它元素,从而使前面的那个文件是“有效 的”,我们还需要定义元素“联系人”和“姓名”。


<?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>
<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表 ANY>
<!ELEMENT 联系人(姓名)>
<!ELEMENT 姓名(#PCDATA)>
]>

<联系人列表>
<联系人>
<姓名>张三</姓名>
</联系人>
</联系人列表>
 
    现在我们已经定义了一个XML文件,它的根元素名为“联系人列表”。“联系人列表” 中可以包含任何纯文本数据,也可以含有子元素(这即是ANY的含义)。根据后面的定义,我们知道,“联系人列表”中可以包含子元素“联系人”,也可以直接包含子元素“姓名”;“联系人”元素又可以包含自己的子元素,名为“姓名”;而“姓名”则只能包含纯文本数据(即(#PCDATA))。

注意: 


除了根元素外,在定义其它元素时使用关键字ANY都是不好的习惯。 
在定义元素时,Etd的顺序是无关紧要的。 
还有一点要注意,不能对不同的元素使用相同的元素名,即便这些元素的内容、包含的子元素不同也不行,因为它只会引起文件各个元素的混淆,使文件的可读性大打折扣。 
元素名的第一个字母必须是字母、或下划线(_)、或冒号(:),后跟字母、数字、句号(.)、冒号、下划线、连结号(-)的组合,并且不能包含空白符,不能以 “xml”开头。尽管XML1.0标准允许使用任何长度的文件名,但是实际的XML处理器常常会限制标记名的长度。 

定义元素及其子元素

对于以下的例子:


<?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>
<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表 ANY>
<!ELEMENT 联系人(姓名)>
<!ELEMENT 姓名(#PCDATA)>
]>

<联系人列表>
<联系人>
<姓名>张三</姓名>
</联系人>
</联系人列表>
 


    准确的说法是,元素“联系人”必须包含一个,且只能包含一个子元素“姓名”。可如果子元素是“EMAIL地址”怎么办?联系人可能根本没有自己的EMAIL邮箱,也可能有好几个EMAIL帐号。

    使用正则表达式,我们就可以解决上述问题,描述父元素与子元素之间非常复杂的关系。例如,你可以对一个元素作如下任何一种类型的定义:它有一个子元素,有一个或多个子元素,有零个或多个子元素,至少有一个子元素。你还可以定义复合关系,比如“元素X是有效的,如果它含有一个或多个子元素Y,或一个子元素Z”。

    元素定义是由它们的元素内容模型(ECM)来描述的,也就是说,是由紧跟元素后面的括号中的内容来定义的。因此,正如我们前面见到的,元素“联系人”的ECM被描述为子元素“姓名”: <!ELEMENT 联系人(姓名)> 

ECM中的内容采取一组正则表达式的形式。在下表中,我们列出了正则表达式中可能出现的元字符: 
元字符 含义 
+ 出现一次或多次 
* 出现零次或多次 
? 可选,不出现或出现一次 
() 一组要共同匹配的表达式 
| OR,或,AND 要求严格遵从顺序要求 


下面几节中,我们将通过一些例子具体讲解这些元字符的用法,对使用正则表达式来定义ECM的方法获得一些感性认识。


有顺序的子元素

一个元素的各个子元素之间可以以任意顺序出现,也可以强制遵循一定的顺序。

考虑下面的Dtd定义:


<!ELEMENT 联系人(姓名 EMAIL)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT EMAIL(#PCDATA)>
 

遵从这个Dtd的XML文件可以为:


<联系人>
<姓名>张三</姓名>
<EMAIL>zhang@aaa.com</EMAIL>
</联系人>
 

同样,下面这个XML文件也是有效的:


<联系人>
<EMAIL>zhang@aaa.com</EMAIL>
<姓名>张三</姓名>
</联系人>
 

由于我们在Dtd定义中仅仅用空白符分隔了元素“联系人”的两个子元素,这说明我们并没有严格要求两个元素出现的顺序,因此上面两种写法都是允许的。如果我们使用逗号“,”来分隔两个子元素,那么XML文件中,元素“姓名”就必须出现在元素“EMAIL”前面。

查看本文来源

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

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

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