XML规范 - 中文版(3)

2019-04-22 08:30

定取值\。

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

有效性约束:独立文件声明

独立文件声明必须取值为\,如果任何外部标记声明中包含:

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

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

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

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

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

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

2.11 行尾处理

为编辑的方便起见,存储XML已析实体的计算机文件经常用行来组织。通常这些行用回车符(#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可以是下列值:

[ISO 639],\语言名称的表示码\中定义的两字母语言码。

在Internet Assigned Numbers Authority [IANA]注册的语言标识码,以前缀\或\开头。

用户定义或经各方同意的专用语言标识符,必须以前缀\或\开头,以保证它们不会和以后经IANA标准化或在IANA注册的名字相冲突。

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

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

举例如下:

Habe nun, ach! Philosophie, Juristerei, und Medizin und leider auch Theologie

durchaus studiert mit hei遝m Bem黨'n.

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

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

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

3. 逻辑结构

每个XML文件包含一个或多个元素,它们的边界用起始标签和结束标签分隔,或者,对于空元素,用一个空元素标签分隔。每一个元素 有一个用名字标识的类型,有时称之为它的\通用标识符(generic identifier)\,同时它可以有一个属性值说明 (attribute specification)集。每一个属性值说明有一个名字和一个值。

元素

[39] element ::= EmptyElemTag

| STag content ETag [ WFC:元素类型匹配 ] [ VC:元素有效性 ]

除了那些开头匹配(('X'|'x')('M'|'m')('L'|'l'))的名字保留用于本规范的此版本和后继版本的标准化外,本规范不对元素类型和属性的语义,用法和名字(语法之外)作出限制。

规范性约束:元素类型匹配:元素结束标签中的Name必须和起始标签中的元素类型相匹配。

有效性约束:元素有效性:如果有一个与elementdecl相匹配的声明的Name与元素类型相匹配,且下述之一成立时,称此元素是有效的:

此声明与EMPTY相匹配,同时此元素没有内容。

此声明与children相匹配,同时子元素的序列属于内容模型中的正则表达式所产生的语言,在每对子元素间允许有空白(匹配非终结符S的字符)。

此声明与Mixed相匹配,同时内容由其类型匹配内容模型中的名字的字符数据和子元素组成。 此声明与ANY相匹配,同时每个子元素的类型均已声明。 3.1 起始标签,结束标签和空元素标签

每一个非空XML元素以一个起始标签作为开始的标记。 起始标签

[40] STag ::= '<' Name (S Attribute)* S? '>' [ WFC:唯一的属性值说明 ] [41] Attribute ::= Name Eq AttValue [ VC:属性值类型 ] [ WFC:无外部实体引用 ] [ WFC:在属性值中没有< ]

起始标签和结束标签中的Name给出了元素的类型。Name-AttValue对被统称为元素的属性值说明,其中每一对中的Name被称为属性名,AttValue的内容(在'或\定界符间的文本)被称为属性值。

规范性约束:唯一的属性值说明

一个属性名只能在同一个起始标签或空元素标签中出现一次。 有效性约束:属性值类型

属性必须被声明,其值必须具有所声明的类型。(属性类型参见\属性表声明\。) 规范性约束:无外部实体引用

属性值不能包含对外部实体直接或间接的实体引用。

规范性约束:在属性值中没有<

在一个属性值中直接或间接引用的实体的置换文本(除了\不能包含<。 起始标签的一个例子:

由一个起始标签开始的每一个元素必须用一个结束标签标记其结束,结束标签中的名字必须与起始标签中给出的元素类型相同:

结束标签

[42] ETag ::= '' 结束标签的一个例子:

在起始标签和结束标签中的文本被称为元素的内容: 元素的内容

[43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*

如果元素的内容为空,它必须表示为一个起始标签紧跟一个结束标签或空元素标签。空元素标签则采用一种特殊的形式:

空元素标签

[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [ WFC:唯一的属性值说明 ]

不论元素是否用关键字EMPTY声明,空元素标签都可以用于任何没有内容的元素。出于互操作性考虑,空元素必须用于,且只能用于声明为EMPTY的元素。

空元素的例子:

src=\://www.w3.org/Icons/WWW/w3c_home\


3.2 元素类型声明

出于验证的目的,可以用元素类型和属性表声明限制XML文件中元素的结构。元素类型声明限制了元素的内容。

元素类型声明通常限制了子元素的类型。由用户选择,当声明提到的元素类型没有相应的声明时,XML处理器可以给出警告,但这不是一个错误。

元素类型声明形式如下: 元素类型声明

[45] elementdecl ::= '' [ VC:唯一的元素类型声明 ] [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children 其中Name给出了所声明的元素类型。

有效性约束:唯一的元素类型声明 元素类型只能声明一次。 元素类型声明的例子:

3.2.1 元素型内容

当 某一类型的元素只能包含用可选空白(匹配非终结符S)分隔的子元素(无字符数据)时,称此元素类型具有元素型内容。在这种情况下,有内容模型作为类型限制 之一,内容模型是决定子元素类型和子元素出现顺序的一种简单文法。此文法用内容粒子(cp)构建,内容粒子由名字,内容粒子的选择表 (choice list)或内容粒子的序列表(sequence list)组成:

元素型内容的模型

[47] children ::= (choice | seq) ('?' | '*' | '+')? [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?

[49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' [ VC:严格的组/PE嵌套 ] [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' [ VC:严格的组/PE嵌套 ]

其 中每一个Name是可以作为子元素的元素的类型。选择表中出现的任意内容粒子在元素型内容中允许出现的位置对应于选择表在文法中的位置。序列表中出现的所 有内容粒子必须以相同的顺序出现在元素型内容中。在名字或表之后的可选字符(optional character)决定了表中元素或内容粒子可以出现一 次或多次(+),还是零次或多次(*),或是零次或一次(?)。没有这样一个操作符意味着元素或内容粒子必须恰好出现一次。这种语法和意义和本规范中的产 生式中所使用的相同。

当且仅当一个元素的内容可以通过满足内容模型中的选择,序列和重复操作符得到,并且内容中的每一个元素与内容模型 中的一种元素类型相匹配时,称此元素的内容与该内容模型相匹配。出于兼容性考虑, 如果文件的某个元素可以和内容模型中的一种元素类型多次匹配,这是一个 错误。 更详细的信息参见\确定型内容模型\

有效性约束:严格的组/PE嵌套

参数实体的置换文本用括号括起的组 严格嵌套。即,如果choice,seq或Mixed语法成分的开始或结束括号出现在某个参数实体的置换文本中,两者必须同在此置换文本中。出于互操作性 考虑,如果一个参数实体引用出现在choice,seq或Mixed语法成分中时,它的置换文本不应为空,同时其置换文本的第一个和最后一个非空字符不应 为一个连接符(|或,)。

元素型内容的模型举例:

3.2.2 混合型内容(Mixed Content)


XML规范 - 中文版(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:威斯敏斯特小要理问答

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: