| 建立有效的XML文件 |
|
| 来源:网络收集 作者: 加入时间:2006-10-27 访问次数:6 [大 中 小] |
|
[
] > This is an extremely simplistic XML document. 如果文件使用外部DTD 子集,则它出现的样子应该像这样:
This is an extremely simplistic XML document. 而Simple.dtd 档案将会拥有下面内容:
包含了外部DTD 子集的档案可以包含任何的卷标宣告,这些卷标宣告可以包含在内部的DTD子集中。本章稍早章节<建构一个DTD>中已讨论过这些相关议题。 档案位置的描述(在范例中是指Simple.dtd 档案)被称为系统literal。它可以被单引号(')或双引号(")包围,而且可以包含除了被用来包围该字符串的引号之外的任何字符。 系统literal 指定了包含外部DTD 子集档案的统一资源识别代号(uniform resource identifier,URI)。目前,URI 本质上是与标准的因特网地址,被称为统一资源定位器(Uniform Re-sourceLocator)或URL。你可以使用完全合法的URI,如下所示:
或者,你可以使用部分的URI,该URI 指定了相对于包含该XML 文件位置的相对位置,如下所示:
注意 URI 是一个崭新、具高度弹性用来安排资源位置的系统标记。URI 的一种型态就是URL(统一资源定位器),通常用在因特网中(例如, http://mspress.microsoft.com/ )。在将来,URI 将会包含其它用来安排资源的标记型式。然而,这些都还在发展中。 XML 文件中的相对URI 的运作模式就像HTML 网页中的相对URL 一样。在第二个范例中,如果XML 文件的完整URI 是http://bogus.com/documents/Simple.xml ,「Simple.dtd」将会参照到 http://bogus.com/documents/Simple.dtd 。同样地,如果XML 文件是位在file:///C:\XML Stepby Step\Example Code\Simple.xml,「Simple.dtd」将会参照到file:///C:\XML Step by Step\Example Code\Simple.dtd。
使用外部DTD 子集与内部DTD 子集
要一起使用外部DTD 子集与内部的DTD 子集,将SYSTEM 关键词与提供外部DTD 子集档案的系统literal 包含在一起,后面接着包含在中括号([ ])字符中的内部DTD 子集的标签宣告。 下面是一个包含内部与外部DTD 子集的简单XML 文件的范例:
[
] >
下面是包含外部DTD 子集的档案Book.dtd 的内容:
当你包含了内部与外部DTD 子集,下面是XML 处理器如何结合内部与外部子集的内容: 通常,它会合并两种子集的内容来组成完整的DTD。在范例中,作为结果的合并DTD 定义了两个元素,TITLE 与BOOK,以及BOOK 元素的两个属性-ISBN 与YEAR。 然而,如果相同名称的属性与元素型态被宣告超过一次以上,XML 处理器会使用第一个宣告并将后面的宣告忽略。(这也将适用于实体的重复宣告,第六章中将会讨论。) 内部的DTD 子集被认为比外部的DTD 子集(即使是外部子集的参照先出现在文件型态的宣告区中)具有较高的优先权。因此,定义在内部的任何属性(或实体)的地位高于宣告于外部子集中相同的名称与元素型态。在范例中,XML 处理器会认为ISBN 属性拥有CDATA 型态与#IMPLIED 默认值,因此下面的元素(省去ISBN)是正确的:
注意 虽然XML 处理器简单地将属性与实体的重复宣告省略,元素的重复宣告(即使是以相同方法宣告)还是违法的。 XML 处理器结合内部与外部DTD 子集的方法让你可以将普通的DTD 子集(就像XML 应用程序,MathML 所提供的DTD 子集)当作外部DTD 子集使用,但接着藉由包含一个内部子集来为目前的文件定制(或子集合化)DTD。你的内部子集可以加入元素、属性,或实体-而且该子集还可以改变属性或实体的定义。
|
|
|
|
|
|