网友俱乐部 » » XML教程 » 3.1.2.2 定义元素及其子元素

2007-2-25 17:32 hinet
3.1.2.2 定义元素及其子元素

3.1.2.2 定义元素及其子元素
   

在上节的例子中,我们定义了一个名为“联系人”的元素,并且解释过,它可以包含一个单独的子元素“姓名”,而这个“姓名”元素中则包含了字符数据。具体的例子为:

<DOCTYPE 联系人列表[    <ELEMENT 联系人(姓名)>
    <ELEMENT 姓名(#PCDATA)>   
    ]>
<联系人列表>
    <联系人>
        <姓名>张三
   

事实上,前面对这个DTD的解释并不是十分准确的,更准确的说法是,元素“联系人”必须包含一个,且只能包含一个子元素“姓名”。这就描述了一个“说一不二”的规则,联系人不能没有名字,也不能有好几个名字。可如果子元素是“EMAIL地址”怎么办?联系人可能根本没有自己的EMAIL邮箱,也可能“狡兔三窟”,有好几个EMAIL帐号。
DTD尽管要求严格,但也有它的灵活性。使用正则表达式,我们就可以解决上述问题,描述父元素与子元素之间非常复杂的关系。例如,你可以对一个元素作如下任何一种类型的定义:它有一个子元素,有一个或多个子元素,有零个或多个子元素,至少有一个子元素。你还可以定义复合关系,比如“元素X是有效的,如果它含有一个或多个子元素Y,或一个子元素Z”。听着有些绕嘴,举个例子就明白了:“联系方式”中必须包含一个或多个“EMAIL地址”,如果没有EMAIL地址,包含一个“电话号码”也是可以的。
元素定义是由它们的元素内容模型(ECM)来描述的,也就是说,是由紧跟元素后面的括号中的内容来定义的。因此,正如我们前面见到的,元素“联系人”的ECM被描述为子元素“姓名”:
<ELEMENT 联系人(姓名)>
ECM中的内容采取一组正则表达式的形式,和UNIX用到的正则表达式差不多。可能你不大熟悉UNIX,那没关系,正则表达式非常简单,它的核心思想就是采取“匹配”的逻辑。在下表中,我们列出了正则表达式中可能出现的元字符:
元 字 符 含    义
+ 出现一次或多次
* 出现零次或多次
? 可选,不出现或出现一次
() 一组要共同匹配的表达式
| OR,或
, AND,要求严格遵从顺序要求
元素A
元素B
元素C 元素列表,无须遵从顺序要求
下面几节中,我们将通过一些例子具体讲解这些元字符的用法,对使用正则表达式来定义ECM的方法获得一些感性认识。

页: [1]


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