科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

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

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

重复元素

让我们再把上节的例子作一个小小的改动:


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

    让我们看看前面给出的正则表达式的元字符集列表,它说明一个“联系人”元素中必须含有一个“姓名”元素,后面接一个或多个“EMAIL”元素。这样,下面的这段XML 文件是“有效的”。


<联系人>
<姓名>张三</姓名>
<EMAIL>zhang@aaa.com</EMAIL>
<EMAIL>zhang@hotmail.com</EMAIL>
<EMAIL>zhang@yahoo.com</EMAIL>
</联系人>
 
那么下面这段XML文件不是有效的,因为它没有“EMAIL”元素,而“+”代表了“一个或多个”。


<联系人>
<姓名>张三</姓名>
</联系人>
 
如果你需要表示“零个或多个”,那么应该使用字符“*”。例如:


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

成组元素

子元素可以使用括号并为一组。因此,下面的Dtd片段说明,一个“联系人”元素中可以有一个或多个“姓名/EMAIL”子元素对,并且在每个子元素对中,“姓名”都放在“EMAIL”之前。


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


符合这个Dtd的XML文件可以是:


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

<姓名>李四</姓名>
<EMAIL>li@bbb.org</EMAIL>

<姓名>王五</姓名>
<EMAIL>wang@ccc.org</EMAIL>
</联系人>
 


注意,仅仅是因为“+”由括号里面移到括号外面,元素“联系人”的内容就大大不同了。


OR或

号“|”描述了一个OR操作。因此,下面的Dtd片段所规定的XML元素是:所有的 “联系人”元素应该有一个“姓名”子元素,同时,在此之后还应该有一个“电话”或一个“EMAIL”元素,但不能同时有“电话”和“EMAIL”两个元素。


<!ELEMENT 联系人(姓名,(电话|EMAIL))>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT 电话(#PCDATA)>
<!ELEMENT EMAIL(#PCDATA)>

一个符合上述Dtd定义的“有效的”XML文件的定义应该是:


<联系人>
<姓名>张三</姓名>
<电话>12345678</EMAIL>
</联系人>
 


或者是:


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

注意:在一个组中,只允许使用一种连接符(例如“,”或“|”)。因此,象下面这样定义的Dtd是不合法的:<!ELEMENT 联系人(姓名,电话|EMAIL)>

要想使用多种连接符,只有通过创建子组的方式,使用<!ELEMENT 联系人(姓名,(电话|EMAIL))>


可选子元素

字符“?”说明一个子元素是可选的,它可以出现,也可以不出现。因此,在下面的Dtd 中,我们规定,每一个“联系人”都必须有一个“姓名”子元素,同时或者有一个“电话” 子元素,或者有一个“EMAIL”子元素,此外,它还可以包含一个“地址”子元素,也可以不包含这种元素。


<!ELEMENT 联系人(姓名,(电话|EMAIL),地址?)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT 电话(#PCDATA)>
<!ELEMENT EMAIL(#PCDATA)>
<!ELEMENT 地址(街道,城市,省份)>
<!ELEMENT 街道 (#PCDATA)>
<!ELEMENT 城市 (#PCDATA)>
<!ELEMENT 省份 (#PCDATA)>
 

根据这个Dtd描述,下面的XML片段是“有效的”:


<联系人>
<姓名>张三</姓名>
<EMAIL>zhang@aaa.com</EMAIL>
<地址>
<街道>五街1234号</街道>
<城市>北京市</城市>
<省份>北京</省份>
</地址>
</联系人>
 

同样,下面这段不包含“地址”元素的XML片段也是“有效的”:


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

查看本文来源

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

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

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