📄 0301-0103.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-0103 -->
<HTML><HEAD><TITLE>XML中国论坛 - 初学进阶 - 3.1.1.3 外部DTD</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=51 rowSpan=2></TD>
<TD vAlign=center width=650>
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=51 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="650" ><!-- 正文内容 -->
<DIV class=pt10><B>3.1.1.3 外部DTD</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>一个DTD既可以是内部的,包含在一个“形式良好的”XML文件中(standalone=“yes”),采用前面一节中的形式;也可以是外部的,作为一个外部文件被引用(standalone=“no”)。</P>
<P>外部DTD的好处是:它可以方便高效地被多个XML文件所共享。你只要写一个DTD文件,就可以被多个XML文件所引用。事实上,当许多组织需要统一它们的数据交换格式时,它们就是通过外部DTD来完成的。这样做不仅简化了输入工作,还保证当你需要对DTD做出改动时,不用一一去改每个引用了它的XML文件,只要改一个公用的DTD文件就足够了。不过需要注意,如果DTD的改动不是“向后兼容”的,这时原先写的那些XML文件可能就会出问题了!</P>
<P>为了引用一个外部DTD,必须修改XML声明和DOCTYPE声明。</P>
<P>XML声明中必须说明这个文件不是自成一体的,即standalone属性的属性值不再是yes了。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0"
<BR> encoding="GB2312"
<BR> standalone =
"no"?></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>在DOCTYPE声明中,应该加入SYSTEM属性:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><!DOCTYPE 根元素名<BR>SYSTEM
"外部DTD文件的URL"></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>例如:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><!DOCTYPE 联系人列表<BR>SYSTEM
"http://www.mydomain.com/dtds/fclml.dtd<BR>"></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>上面的URL是一个绝对路径,除此以外,它还可以是一个相对路径,如:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><!DOCTYPE 联系人列表<BR>SYSTEM
"fclml.dtd"></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>它说明这个DTD文件和引用它的XML文件在同一个目录下。或者,这个DTD文件还可能在XML文件的父目录的子目录DTD下,表示为:<BR></P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><!DOCTYPE 联系人列表<BR>SYSTEM
"../dtds/fclml.dtd"></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>使用这种方法,你可以方便地把DTD文件从你的XML文件中分离出来,粘贴到另一个文件fclml.dtd中。这样,你就得到一个DTD文件和一个有效的XML文件。</P>
<P>仍然回到前面那个包含客户联系方式信息的XML文件,如果使用外部DTD,其形式应该变为下面这个样子。</P>
<P>DTD文件fclml.dtd:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version="1.0"
encoding="GB2312"?><BR><BR><!ELEMENT 联系人列表
(联系人)*><BR><!ELEMENT 联系人
(姓名,ID,公司,EMAIL,电话,地址)><BR><!ELEMENT 地址
(街道,城市,省份)><BR><!ELEMENT 姓名 (#PCDATA)><BR><!ELEMENT ID
(#PCDATA)><BR><!ELEMENT 公司 (#PCDATA)><BR><!ELEMENT EMAIL
(#PCDATA)><BR><!ELEMENT 电话 (#PCDATA)><BR><!ELEMENT 街道
(#PCDATA)><BR><!ELEMENT 城市 (#PCDATA)><BR><!ELEMENT 省份
(#PCDATA)></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>XML文件client.xml:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "no"?><BR><!DOCTYPE 联系人列表<BR>
SYSTEM "fclml.dtd"><BR><?xml-stylesheet type="text/xsl"
href="mystyle.xsl"?><BR><BR><联系人列表><BR><联系人><BR><姓名>张三</姓名><BR><ID>001</ID><BR><公司>A公司</公司><BR><EMAIL>zhang@aaa.com</EMAIL><BR><电话>(010)62345678</电话><BR><地址><BR><街道>五街1234号</街道><BR><城市>北京市</城市><BR><省份>北京</省份><BR><ZIP>100001</ZIP><BR></地址><BR></联系人><BR><BR><联系人><BR><姓名>李四</姓名><BR><ID>002</ID><BR><公司>B公司</公司><BR><EMAIL>li@bbb.org</EMAIL><BR><电话>(021)87654321</电话><BR><地址><BR><街道>南京路9876号</街道><BR><城市>上海</城市><BR><省份>上海</省份><BR><ZIP>200002</ZIP><BR></地址><BR></联系人><BR></联系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>在这一节里,我们将为每个XML文件定义的DTD推广到一个系统内可共享的DTD。在下一节里,我们还可以将这个推广进一步推而广之,扩大到行业内甚至公众使用的公用DTD。</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 + -