网友俱乐部 » » XML教程 » 3.1.2.6 OR或

2007-2-25 17:33 hinet
3.1.2.6 OR或

3.1.2.6 OR或
   

符号“|”描述了一个OR操作。因此,下面的DTD片段所规定的XML元素是:所有的“联系人”元素应该有一个“姓名”子元素,同时,在此之后还应该有一个“电话”或一个“EMAIL”元素,但不能同时有“电话”和“EMAIL”两个元素。
    <ELEMENT 联系人(姓名,(电话|EMAIL))>
    <ELEMENT 姓名(#PCDATA)>
    <ELEMENT 电话(#PCDATA)>
    <ELEMENT EMAIL(#PCDATA)>
注意,XML正则表达式的匹配原则不允许循环逻辑。所以,OR的意思是或者选这个或者选那个,但不能两个都选,也不能两个都不选。是不是有点绕?下面我们来举几个例子,你就一目了然了。
<联系人>
    <姓名>张三

这个例子是一个“无效的”XML片段,因为DTD中规定或者有一个“电话”元素,或者有一个“EMAIL”元素,但上面这个例子中两种元素都没有。
<联系人>
    <姓名>张三
    <电话>12345678
    [email]zhang@yahoo.com[/email]

同样,这个例子仍是一个“无效的”XML片段,因为它既有“电话”元素,又有“EMAIL”元素。这里可不是“姜太公钓鱼——多多益善”噢。
<联系人>
    [email]zhang@aaa.com[/email]
    <姓名>张三

这个例子也不合DTD要求,尽管它只有“EMAIL”元素,没有“电话”元素,但“EMAIL”元素放错了地方。DTD中规定,“姓名”元素只能放在“EMAIL”或“电话”元素之前。
一个符合上述DTD定义的“有效的”XML文件的定义应该是:
<联系人>
    <姓名>张三
    <电话>12345678

或者是:
<联系人>
    <姓名>张三
    [email]zhang@yahoo.com[/email]

注意:在一个组中,只允许使用一种连接符(例如“,”或“|”)。因此,象下面这样定义的DTD是不合法的:
<ELEMENT 联系人(姓名,电话|EMAIL)>
要想使用多种连接符,只有通过创建子组的方式,使用
<ELEMENT 联系人(姓名,(电话|EMAIL))>

页: [1]
查看完整版本: 3.1.2.6 OR或


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.