| 建立有效的XML文件 |
|
| 来源:网络收集 作者: 加入时间:2006-10-27 访问次数:6 [大 中 小] |
|
指定元素内容
如果元素拥有元素内容,它可以只包含特定的子元素,且不含字符数据。在文件中,你可以随意地利用空格符将子元素分开以加强文件的可读性,但处理器将会忽略这些空格符且不会将之传送到应用程序。 下面的范例XML 文件,它描述了一本书:
[
] >
Nathaniel Hawthorne
在这份文件中,BOOK 元素型态被宣告成拥有元素内容。在宣告中紧接在元素名称之后的(TITLE、 AUTHOR),称为内容模型(content model)。内容模型代表允许的子元素的型态与其顺序。在这个范例中,内容模型代表BOOK 元素必须恰好拥有一个TITLE 子元素,后面恰好接着一个AUTHOR 子元素。在文件中,处理器将会忽略用来将子元素与BOOK 元素分隔的三行空白。 内容模型可以拥有下列两种基本格式的任何一种: 串行 。内容模型的串行格式代表元素必须有一连串的子元素。你可以利用逗号(,)来将子元素型态的名称分开。例如,下面的DTD 代表MOUNTAIN 文件元素必须拥有一个NAME 子元素,后面接着HEIGHT 子元素,后面再接着一个STATE 子元素。 [
] > 因此,下面的文件元素将是有效的:
Wheeler 13161 New Mexico
下面的文件元素则不是有效的,因为子元素的顺序并不像宣告中所设定的:
New Mexico Wheeler 13161
省略子元素或包含超过一个相同的子元素都会造成违法。如你所见,这是一种非常严格的宣告型式。 选择 。选择格式的内容模型代表元素可以拥有一连串可能的子元素的任何一个,使用「|」字符来区隔。例如,下面的DTD 设定FILM 元素可以包含一个STAR子元素,或NARRATOR 子元素,也可以是INSTRUCTIOR 子元素: [
] > 因此,下面的文件元素是有效的:
Robert Redford
这个元素也是:
Sir Gregory Parsloe
还有这个也是:
Galahad Threepwood
然而,下面的文件元素将造成违法,因为你只能包含一个子元素型态:
Sir Gregory Parsloe Galahad Threepwood
你可以借着使用问号(?)、加号(+),或星号(*)来修改这些内容模型的任何一种,这三个符号的意义如下表所述。 字符 含义 ? 零个或一个前置项目 + 一个或多个前置项目 * 零个或多个前置项目 例如,下面的宣告代表你可以包含一个或多个NAME 子元素,而且HEIGHT 子元素是选择性的:
因此,下面的元素将是正确的:
Pueblo Peak Taos Mountain New Mexico
再举另一个范例,下面宣告代表你可以包含零个或多个STAR 子元素,或者是一个NARRATOR子元素,或是一个INSTRUCTOR 子元素:
因此,下面三个元素的每一个都是合法的:
Tom Hanks Meg Ryan
Sir Gregory Parsloe
你也可以使用「?」、「+」,或「*」字符来修改整个内容模型,方法是借着将字符紧接在结束括号之后。例如,下面的宣告让你可以包含一个或多个这三种型态的子元素,任何顺序都可以:
该宣告让下面的元素变为合法:
Bertram Wooster Sean Connery Plug Basham
Sean Connery Meg Ryan
Stinker Pike
最后,你可以借着将选择的内容模型套迭在串行模型中,或将串行模型套迭在内容模性中,来建构更复杂的内容模型。例如,下面的DTD 设定了FILM 文件元素必须拥有一个TITLE 子元素;后面接着一个CLASS 子元素,后面再接着一个STAR、NARRATOR,或INSTRUCTOR 子元素:
|
|
|
|
|
|