扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者