computer 版 (精华区)

发信人: lyl (一条四处游荡的鱼), 信区: network
标  题: [范文][XML]W3C建议XML 1.0中文版说明(四) (转载) 
发信站: 听涛站 (Fri Apr 28 21:11:31 2000), 转信

发信人: DDG (导弹驱逐舰~雾的季节), 信区: XML
标  题: [范文][XML]W3C建议XML 1.0中文版说明(四) (转载)
发信站: BBS 水木清华站 (Thu Apr  6 13:29:26 2000)

【 以下文字转载自 New_board 讨论区 】
【 原文由 starw 所发表 】
2.7 CDATA段
CDATA段可以出现在字符数据可以出现的任何地方,它们用于转义包含会被识别为标
记的字符串的文本块。CDATA段以字符串"<![CDATA["开始,以字符串"]]>"结束:

CDATA段
[18]  CDSect ::=  CDStart CData CDEnd
[19]  CDStart ::=  '<![CDATA['
[20]  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? ('[' (marku
pdecl | PEReference | S)* ']' S?)? '>' [  VC: 根元素类型 ]
[29]  markupdecl ::=  elementdecl | AttlistDecl | EntityDecl | NotationD
ecl | PI | Comment  [  VC: 严格的声明/PE嵌套 ]  [  WFC: 内部子集中的PE ]



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

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

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

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

同内部子集一样,外部子集和任何DTD中引用的外部参数实体,必须由一系列被非终
结符markupdecl所允许的完整的标记声明组成,其中可以夹杂空白字符或参数实体
引用。但是,外部子集和外部参数实体的部分内容可以通过使用条件段(condition
al 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>

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

2.9 独立文档声明
当文档从XML处理器递给应用时,标记声明可以影响它的内容,属性缺省值和实体声
明是其中的例子。可以作为XML声明成分的独立文档声明,指明了对于文档实体而言,
是否存在外部的声明。

独立文档声明
[32]  SDDecl ::=  S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('y
es' | 'no') '"'))  [  VC: 独立文档声明 ]


在一个独立文档声明中,值"yes"表示对于文档实体没有外部标记声明(不论是在DT
D外部子集中,还是在由内部实体引用的外部参数实体中)会影响从XML处理器传递给
应用的信息。值"no"表示有或可能有这样的外部标记声明。注意独立文档声明只是
表示外部声明的存在,如果文档中存在对外部实体的引用,而这些实体已在内部声
明时,不影响它的独立状态。

如果不存在外部标记声明,独立文档声明没有意义。如果存在外部标记声明,但没
有独立文档声明,就假定取值"no"。

某些网络传输应用也许需要独立的文档,任何满足standalone="no"的XML文档可以
通过一定的算法转换为独立文档。

有效性约束: 独立文档声明
独立文档声明必须取值为"no",如果任何外部标记声明中包含:

n 有缺省值的属性声明,如果适用这些属性的元素出现在文档中而又没有给这些属
性赋值的话。
n (除了amp,lt,gt,apos,quot的)实体声明,而对这些实体的引用出现在文档中
的话。
n 需要规范化的属性声明,这些出现在文档中的属性的值会因规范化而改变。
n 具有元素内容的元素类型声明,如果在这些类型的任一实例中直接出现空白域的
话。

具有独立文档声明的XML声明的例子:

<?xml version="1.0" standalone='yes'?>

2.10 空白域处理
在编辑XML文档时,使用"空白域"(空格,制表符,空行,在本规范中用非终结符S表
示)来分开标记以获得更好的可读性是很方便的。通常在文档的交付版本中不想包含
这些空白域。另一方面,必须保留在交付版本中的有意义的空白域是很常见的,如
在诗歌和源码中的空白域。

XML处理器必须始终把不是标记的所有字符传递给应用。一个进行验证的XML处理器
必须同时通知应用这些字符中的那一些组成了出现在元素内容中的空白域。

可以在元素中附加一个名为xml:space的特殊属性,以通知应用应该保留此元素中的
空白域。在有效的文档中,此属性和其他属性一样,使用时必须声明。它必须被声
明为枚举类型,只有"default"和"preserve"两个可能的值。例如:

    <!ATTLIST poem  xml:space (default|preserve) 'preserve'>

"default"表示可以对此元素使用应用的缺省空白域处理模式,"preserve"表示应用
应该保留所有的空白域。这适用于其所处元素的内容中的所有元素,除非被另一个
xml:space属性的实例所覆盖。

任何文档的根元素被认为对应用的空白域处理方式不作要求,除非它给此属性赋了
值或将此属性声明为带缺省值。

2.11 行尾处理
为编辑的方便起见,存储XML已析实体的计算机文档经常用行来组织。通常这些行用
回车符(#xD)和换行符(#xA)的一些组合来分隔。

为了使应用的工作简单化,对于一个外部已析实体或内部已析实体的字面实体值中
包含的任何双字符序列"#xD#xA"或单独的#xD,XML处理器都应换成#xA传递给应用。
(这可以通过在进行解析前将所有行定界符规范成#xA而方便地实现。)

2.12 语言标识
在进行文档处理时,标识出其内容所使用的自然或形式化语言经常是很有用的。可
以在文档中插入一个名为xml:lang的特殊属性用于指出XML文档中任何元素的内容和
属性所使用的语言。在有效的文档中,此属性和其他属性一样,使用时必须声明。
此属性的值是[IETF RFC 1766],"语言标识码"中定义的语言标识符:

语言标识
[33]  LanguageID ::=  Langcode ('-' Subcode)*
[34]  Langcode ::=  ISO639Code |  IanaCode |  UserCode
[35]  ISO639Code ::=  ([a-z] | [A-Z]) ([a-z] | [A-Z])
[36]  IanaCode ::=  ('i' | 'I') '-' ([a-z] | [A-Z])+
[37]  UserCode ::=  ('x' | 'X') '-' ([a-z] | [A-Z])+
[38]  Subcode ::=  ([a-z] | [A-Z])+


Langcode可以是下列值:

n [ISO 639],"语言名称的表示码"中定义的双字母语言码。
n 在Internet Assigned Numbers Authority [IANA]注册的语言标识码,以前缀"i
-"(或"I-")开头。
n 用户指定或经各方同意的专用语言标识符,必须以前缀"x-"或"X-"开头,以保证
它们不会和以后经IANA标准化或在IANA注册的名字相冲突。

可以有任意多个子代码段(subcode),如果第一个子代码段存在,并且子代码由两
个字母组成,那么此子代码必须是[ISO 3166],"国家名称表示码"中定义的国家代
码。如果第一个子代码多于两个字母,那么它必须是在IANA注册的语言代码所表示
的语言的子代码,除非它Langcode以前缀"x-"或"X-"开头。

习惯上用小写字母给出语言代码,用大写字母给出国家代码(如果有的话)。注意这
些值与XML文档中的其他名字不同,是大小写无关的。

举例如下:

<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
  <l>Habe nun, ach! Philosophie,</l>
  <l>Juristerei, und Medizin</l>
  <l>und leider auch Theologie</l>
  <l>durchaus studiert mit hei遝m Bem黨'n.</l>
  </sp>

xml:lang所表示的语言选择适用于它所处元素的所有属性和内容,除非被此内容中
的元素内的另一个xml:lang的实例所覆盖。

xml:lang的一个简单声明可以采用如下形式:

xml:lang  NMTOKEN  #IMPLIED

但是如果合适的话,也可以给出特定的缺省值。在一本供英国学生使用的法文诗歌
集中,评注和注解使用英语,xml:lang属性可以这样声明:

    <!ATTLIST poem   xml:lang NMTOKEN 'fr'>
    <!ATTLIST gloss  xml:lang NMTOKEN 'en'>
    <!ATTLIST note   xml:lang NMTOKEN 'en'>


--
        山居且喜远纷华,俯仰乾坤野性赊。
                千载勋名身外影,百岁荣辱镜中花。

        金 琢 倒秋将暮,蕙径萧瑟日且斜。
                闻道五湖烟境好,何   蝮业鐾∩场?


--
与其相濡以沫,不若相望于江湖。

http://10.23.31.91/
http://10.23.31.91:9999

※ 来源:.听涛站 cces.net.[FROM: 匿名天使的家]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.957毫秒