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