📄 0301-0202.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0301-0202 -->
<HTML><HEAD><TITLE>XML中国论坛 - 初学进阶 - 3.1.2.2 定义元素及其子元素</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋体"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下为主体内容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=39 rowSpan=2></TD>
<TD vAlign=center width=523><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=24 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="523" ><!-- 正文内容 -->
<DIV class=pt10><B>3.1.2.2 定义元素及其子元素</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>在上节的例子中,我们定义了一个名为“联系人”的元素,并且解释过,它可以包含一个单独的子元素“姓名”,而这个“姓名”元素中则包含了字符数据。具体的例子为:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "yes"?><BR><!DOCTYPE 联系人列表[<BR>
<!ELEMENT 联系人列表 ANY><BR> <!ELEMENT
联系人(姓名)><BR> <!ELEMENT
姓名(#PCDATA)> <BR>
]><BR><BR><联系人列表><BR>
<联系人><BR>
<姓名>张三</姓名><BR>
</联系人><BR></联系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>事实上,前面对这个DTD的解释并不是十分准确的,更准确的说法是,元素“联系人”必须包含一个,且只能包含一个子元素“姓名”。这就描述了一个“说一不二”的规则,联系人不能没有名字,也不能有好几个名字。可如果子元素是“EMAIL地址”怎么办?联系人可能根本没有自己的EMAIL邮箱,也可能“狡兔三窟”,有好几个EMAIL帐号。</P>
<P>DTD尽管要求严格,但也有它的灵活性。使用正则表达式,我们就可以解决上述问题,描述父元素与子元素之间非常复杂的关系。例如,你可以对一个元素作如下任何一种类型的定义:它有一个子元素,有一个或多个子元素,有零个或多个子元素,至少有一个子元素。你还可以定义复合关系,比如“元素X是有效的,如果它含有一个或多个子元素Y,或一个子元素Z”。听着有些绕嘴,举个例子就明白了:“联系方式”中必须包含一个或多个“EMAIL地址”,如果没有EMAIL地址,包含一个“电话号码”也是可以的。</P>
<P>元素定义是由它们的元素内容模型(ECM)来描述的,也就是说,是由紧跟元素后面的括号中的内容来定义的。因此,正如我们前面见到的,元素“联系人”的ECM被描述为子元素“姓名”:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><!ELEMENT
联系人(姓名)></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>ECM中的内容采取一组正则表达式的形式,和UNIX用到的正则表达式差不多。可能你不大熟悉UNIX,那没关系,正则表达式非常简单,它的核心思想就是采取“匹配”的逻辑。在下表中,我们列出了正则表达式中可能出现的元字符:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TH align=middle width="30%">元 字 符</TH>
<TH width="50%">含 义</TH></TR>
<TR>
<TD align=middle width="30%">+</TD>
<TD width="50%">出现一次或多次</TD></TR>
<TR>
<TD align=middle width="30%">*</TD>
<TD width="50%">出现零次或多次</TD></TR>
<TR>
<TD align=middle width="30%">?</TD>
<TD width="50%">可选,不出现或出现一次</TD></TR>
<TR>
<TD align=middle width="30%">()</TD>
<TD width="50%">一组要共同匹配的表达式</TD></TR>
<TR>
<TD align=middle width="30%">|</TD>
<TD width="50%">OR,或</TD></TR>
<TR>
<TD align=middle width="30%">,</TD>
<TD width="50%">AND,要求严格遵从顺序要求</TD></TR>
<TR>
<TD align=middle width="30%">元素A<BR>元素B<BR>元素C</TD>
<TD width="50%">元素列表,无须遵从顺序要求</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>下面几节中,我们将通过一些例子具体讲解这些元字符的用法,对使用正则表达式来定义ECM的方法获得一些感性认识。</P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -