荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: playboy (冰河), 信区: Program
标  题: 可扩展标记语言(XML) 1.0(3)
发信站: BBS 荔园晨风站 (Sun May 28 12:22:02 2000), 转信


2.4 字符数据和标记
文本由字符数据和标记混合构成。标记包括起始标记、结束标记
、空元素标记、实体引用、 字符引用、注释、CDATA段定界符、
文档类型声明和处理指令。

其他所有非标记的文本组成文档的字符数据。

"and"号(&)和左尖括号(<)只有作为标记定界符,或在注释,处理
指令,或CDATA段中时才能以字面形式出现。它们在一个内部实体
声明的字面实体数值中也是合法的,参见"4.3.2 格式良好的解析
实体"。如果在其他地方需要用到这两个字符,它们必须用数值式
字符引用来转义或分别用字符串"&amp;"和"&lt;"表示。右尖括号
(>)可以用"&gt;"表示,而当它在内容中的字符串"]]>"中出现,
但此字符串不表示一个CDATA段的结束时,出于兼容性考虑,必须
用"&gt;"或一个字符引用转义得到。

在一个元素的内容中,字符数据可以是不包括任何标记的起始定界
符的任意字符串。在一个CDATA段中,字符数据可以是不包括CDATA
段结束定界符"]]>"的任意字符串。

为了允许在属性值中包含单引号和双引号,省略符或称单引号(')可
以被表示为"&apos;",而双引号(")可以被表示为"&quot;"。

字符数据
[14]  CharData ::=  [^<&]* - ([^<&]* ']]>' [^<&]*)


2.5 注释
注释可以在其他标记之外的文档中的任何位置出现。另外,它们可以
在文档类型声明中语法允许的地方出现。它们不是文档字符数据的一
部分,XML处理器可以,但不必须,允许一个应用检索注释文本。出
于兼容性考虑,字符串"--"(双连字符)不能在注释中出现。

注释
[15]  Comment ::=  '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'


注释的一个例子:

<!-- declarations for <head> & <body> -->

2.6 处理指令
处理指令(PI)允许文档中包含由应用来处理的指令。

处理指令
[16]  PI ::=  '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]  PITarget ::=  Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))


PI不是文档字符数据的一部分,但必须传递给应用。PI以用于指示传递
给哪个应用的目标(PITarget)开头,目标名字"XML","xml",等等,保
留用于本规范的此版本或后续版本的标准化。XML符号机制可以用于PI
目标的形式化声明。

2.7 CDATA段
CDATA段可以出现在字符数据可以出现的任?  CData ::=  (Char* - (Char* ']]>' Char*))

[21]  CDEnd ::=  ']]>'


在一个CDATA段内,只有CDEnd字符串被识别为标记,因此左尖括号和"&"
可以以它们的字面形式出现,不需要(也不能)被换码为"&lt;"和"&amp;"。
CDATA段不能嵌套。

一个CDATA段的例子,其中"<greeting>"和"</greeting>"被识别为字符数
据,而不是标记:

<![CDATA[<greeting>Hello, world!</greeting>]]>

2.8 序言(prolog)和文档类型声明
XML文档可以,也应该以一个XML声明开始,其中指明了所用XML的版本。
例如,以下是一个完整的XML文档,它是格式良好的,但不是有效的:

<?xml version="1.0"?>
<greeting>Hello, world!</greeting>


下面这个也同样:

<greeting>Hello, world!</greeting>


版本号"1.0"应该用于表明对与本规范的此版本相一致,如果使用了值
"1.0"但又与本规范的此版本不一致,那么这是文档的一个错误。XML工
作组打算赋予本规范的后续版本不同于"1.0"的数值,但这并不代表开
发后续版本的承诺,也不代表如果有后续版本,会使用任何特殊的命名
方案的承诺。因为不排除有后续版本的可能性,提供了本构造(construct)
作为一旦需要时进行自动版本识别的手段。当处理器收到的文档标有它们
不支持的版本时,可以给出一个错误。

XML文档中标记的功能是描述文档的存储格式和逻辑结构,并将属性-值对
和逻辑结构关联起来。XML提供一种称为文档类型声明的机制,用于定义对
逻辑结构的约束,支持预定义存储单元的使用。如果一个XML文档有相应的
文档类型声明并且它遵循其中的约束,则称它是有效的(valid)。


文档类型声明必须位于文档第一个元素之前。

序言
[22]  prolog ::=  XMLDecl? Misc* (doctypedecl Misc*)?
[23]  XMLDecl ::=  '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
[24]  VersionInfo ::=  S 'version' Eq (' VersionNum ' | " VersionNum ")
[25]  Eq ::=  S? '=' S?
[26]  VersionNum ::=  ([a-zA-Z0-9_.:] | '-')+
[27]  Misc ::=  Comment | PI |  S

XML文档类型声明包含或指向标记声明,标记声明提供某一类文档的语法。
这种语法被称为文档类型定义(document type difinition,DTD)。文档类
型定义可以指向一个外部子集(一种特殊类型的外部实体),或者可以在一
个内部子集中直接包含标记声明,或者两者兼用。一个文档的文档类型定
义由这两个子集合在一起组成。

标记声明可以是元素类型声明,属性表声明,实体声明,或是符号声明。
这些声明可以如下面规范性和有效性约束中所述,全部或部分地包含在参
数实体中,完整的信息参见"4. 物理结构"。

文档类型定义
[28]  doctypedecl ::=  '<!DOCTYPE' S Name (S ExternalID)? S?
('[' (markupdecl | PEReference | S)* ']' S?)? '>' [  VC: 根元素类型 ]
[29]  markupdecl ::=  elementdecl | AttlistDecl | EntityDecl |
 NotationDecl | PI | Comment  [  VC: 严格的声明/PE嵌套 ]
 [  WFC: 内部子集中的PE ]


标记声明可以全部或部分地由参数实体的置换文本组成。本规范后面的
各个非终结符(elementdecl,AttlistDecl,等等)产生式描述的是在所
有的参数实体被包含(include)之后的声明。

有效性约束: 根元素类型(Root Element Type)
文档类型声明中的Name必须匹配根元素的类型。

有效性约束: 严格的声明/PE嵌套
参数实体的置换文本必须用标记声明严格嵌套。即,如果一个标记声明
(上面的markupdecl)的第一个或最后一个字符被包含于一个参数实体引
用的置换文本中,两者必须都在此置换文本中。

格式约束: 内部子集中的PE
在内部DTD子集中,参数实体引用只能出现在标记声明出现的地方,而不
能在标记声明内部出现。(这个约束不适用于出现在外部参数实体内的引
用,也不适用于外部子集。)

同内部子集一样,外部子集和任何DTD中引用的外部参数实体,必须由一
系列被非终结符markupdecl所允许的完整的标记声明组成,其中可以夹
杂空白字符或参数实体引用。但是,外部子集和外部参数实体的部分内
容可以通过使用条件段(conditional section)被有条件地忽略,在内
部子集中则不允许这么做。

外部子集
[30]  extSubset ::=  TextDecl? extSubsetDecl
[31]  extSubsetDecl ::=  ( markupdecl | conditionalSect |
 PEReference | S )*


外部子集和外部参数实体与内部实体不同之处还在于:在外部子集和
外部参数实体内,参数实体引用不仅可以出现在标记声明间,还可以
出现在标记声明内。

有文档类型声明的XML文档的例子:

<?xml version="1.0"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting>


系统标识符"hello.dtd"给出了文档DTD的URI。

声明也可以如同下面这个例子一样直接(locally)给出:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting [
  <!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>

如果同时使用外部和内部子集,内部子集被看成出现在外部子集之前,
这意味着内部子集中的实体和属性表声明的优先级要比在外部子集中的高。

--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.90]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店