| 建立有效的XML文件 |
|
| 来源:网络收集 作者: 加入时间:2006-10-27 访问次数:6 [大 中 小] |
|
[
] > 根据这份DTD,下面的文件元素是合法的
fictional Sandra Bullock
还有这个也是:
instructional Penny Donaldson
设定混合的内容
如果元素拥有混合的内容,它可以包含字符数据。而且如果你在宣告中设定一个或多个子元素型态,它可以包含那些子元素的任何一个,以任何的顺序,以及任何次数的重复(零或多个)。换言之,利用混合内容你可以限制子元素的型态,但你无法限制子元素型态出现的顺序或次数,也不能强制特定子元素型态。 要宣告混合内容的元素型态,你可以使用下列两种内容模型格式的任何一种: 只有字符数据 。要宣告只包含字符数据的元素型态,使用内容模型(#PCDATA)。例如,下面的宣告让SUBTITLE 元素只能包含字符数据:
根据这个宣告,下面两个元素都是有效的: A New Approach
注意,在第二个范例中,被宣告成包含字符数据的元素可以包含零个字符-意即,你可以将之设成空白。(利用这种内容模型,混合内容(mixed content)这个词就技术面上而言是种误称。) 注意 关键词PCDATA 代表已解析过的字符数据。在第三章中你已经学过XML 处理器会解析元素内的字符数据-也就是说,它会扫描文字以搜寻卷标。因此你不能将(<)或(&)符号或字符串(] ] >)当作是字符数据的一部份,因为处理器会将这些字符或串行解释成卷标。然而,你可以使用字符参照或预先定义的实体参照(在第六章中讨论),或CDATA 区段(于第四章中)。 字符数据加上额外的子元素 。要宣告一个可以包含字符数据加上零个或多个子元素的元素型态,在内容模型中将每一个子元素列在#PCDATA 之后,利用「|」字符来分隔每个项目,并在整个内容模型之后加入星号( * )。在内容模型中每一个元素的名称只能出现一次。例如,下面的宣告允许TITLE 元素可以包含字符数据,另外加上零或多个SUBTITLE 子元素:
下面是正确的TITLE 元素,符合上述宣告:
宣告属性
在有效的XML 文件中,你必须明确地宣告所有你将和文件元素一起使用的属性。你将借着属性列表宣告(attribute-list declaration)的DTD 标签来定义所有与特定元素相关的属性。这种宣告作了下面这些工作: 设定与元素相关属性的名称。在有效的文件中,你只能将那些为元素所作的定义包含在元素的起始卷标中。 设定每个属性的数据型态。 为每个属性设定该属性是否为必要的。如果属性并不是必要的,属性列表宣告也将指明当属性被省略时,处理器应该要做什么。(例如,宣告可能会提供一个处理器可以使用的预设属性值。)
属性列表宣告的种类
属性列表宣告拥有下列格式:
这里的Name 是与属性关联元素的型态名称。AttDefs 则是一系列一个或多个属性定义(attributedefinition),每一个负责定义一个属性。 属性定义拥有下列格式: Name AttType DefaultDecl 这里的Name 是属性的名称。(要复习合法属性名称的规则,请参阅第三章中的 <建立属性的规则> 。)AttType 是属性的型态(attribute type),是一种可以被设定到属性的值。(下一节将讨论属性的型态。)而DefaultDecl 是预设宣告(default eclaration),指出属性是否为必要的并提供其它信息。(本章稍后将讨论预设宣告。) 例如,你可以像这样宣告一个名为FILM 的元素型态:
下面是一个属性列表宣告的范例,宣告了两个属性-名称分别为Class 与Year-是为FILM 元素宣告的:
|
|
|
|
|
|