W3C公司

可扩展标记语言(XML)1.0(第二版)

W3C工作草案2000年8月14日

此版本:
http://www.w3.org/TR/2000/WD-xml-2e-20000814(HTML格式,XML格式,审查版本带彩色修订指示器)
最新版本:
http://www.w3.org/TR/REC-xml
以前的版本:
http://www.w3.org/TR/1998/REC-xml-19980210
编辑:
蒂姆·布雷,文本与网景<tbray@textuality.com>
Jean Paoli,微软<jeanpa@microsoft.com>
C.M.Sperberg-McQueen,伊利诺伊大学芝加哥分校和文本编码主动权<cmsmcq@uic.edu>
Eve Maler,太阳微系统公司。<elm@east.sun.com公司>-第二版

摘要

可扩展标记语言(XML)是本文档中完整描述的SGML的子集。它的目标是使通用SGML能够在Web上提供、接收和处理以HTML现在可以实现的方式。XML的设计非常简单实现和与SGML和HTML的互操作性。

本文件的状态

这个文档是XML1.0规范的一个版本,包含勘误表自2000年8月9日起发生变化。它由XML Core发布作为W3C工作草案的工作组在之前收集公众反馈其最终版本为XML1.0第二版W3C建议书。本文件不得用作参考材料或作为其他文件的规范性引用。本文件的审查期工作草案为期4周,截至2000年9月11日。

本文件指定通过将现有的、广泛使用的国际文本处理标准(标准通用标记语言,ISO 8879-1986(E))(经修订和更正)在万维网上使用。它是W3C XML活动,有关详细信息,请访问http://www.w3.org/XML.当前W3C建议和其他建议的列表技术文件可在http://www.w3.org/TR网站.

第二版是新版本的XML;只包含了第一版中规定的更改勘误表.每件更改或添加的材料的位置为在文本中用如下链接标记表示:[英语]。第二版的勘误表位于http://www.w3.org/XML/XML-V10-2e-勘误表.

请报告错误在本文档中xml-editor@w3.org.

注:

C.M.Sperberg-McQueen的自第一版出版以来,隶属关系发生了变化。他是现在在万维网联盟,可以联系cmsmcq@w3.org.

目录

1介绍
    1.1原产地和目标
    1.2术语
2文件
    2.1格式良好的XML文档
    2.2字符
    2.3常见句法结构
    2.4字符数据和标记
    2.5评论
    2.6处理说明
    2.7CDATA部分
    2.8序言和文档类型声明
    2.9独立文档声明
    2.10空白区处理
    2.11终端处理
    2.12语言识别
逻辑结构
    3.1开始标记、结束标记和空元素标记
    3.2元素类型声明
        3.2.1元素内容
        3.2.2混合内容
    3.3属性列表声明
        3.3.1属性类型
        3.3.2属性默认值
        3.3.3[E70]属性值规范化
    3.4条件节
4物理结构
    4.1字符和实体引用
    4.2实体声明
        4.2.1内部实体
        4.2.2外部实体
    4.3已分析的实体
        4.3.1文本声明
        4.3.2格式良好的解析实体
        4.3.3实体中的字符编码
    4.4XML处理器对实体和引用的处理
        4.4.1未识别
        4.4.2包括
        4.4.3验证时包含
        4.4.4被禁止的
        4.4.5包含在文字中
        4.4.6通知
        4.4.7被忽略的
        4.4.8包含在PE中
    4.5内部实体替换文本的构建
    4.6预定义实体
    4.7符号声明
    4.8文档实体
5合规性
    5.1正在验证和非验证处理器
    5.2使用XML处理器
6符号

附录

A类工具书类
A.1款规范性引用文件
A.2款其他参考文献
B类字符课程
C类XML和SGML(非标准)
D类实体和字符引用的扩展(非标准)
E类确定性内容模型(非标准)
F类字符编码的自动检测(非标准)
G公司W3C XML工作组(非标准)
H(H)W3C XML核心组(非标准)


1引言

可扩展标记语言(Markup Language,缩写为XML)描述了一类称为XML文档并部分描述处理它们的计算机程序的行为。XML是一个应用程序标准通用标记语言SGML的配置文件或限制形式【ISO 8879】通过构造,XML文档符合SGML文件。

XML文档由称为实体,其中包含已分析的或未分析的数据。分析的数据由以下部分组成字符,其中一些形式字符数据以及其中一些形式标记.标记对文档存储布局的描述进行编码和逻辑结构。XML提供了一种对存储布局和逻辑结构。

[定义:称为xml处理器用于阅读XML文档并提供对其内容和结构的访问。][定义:假设XML处理器代表另一个称为应用.]本规范描述了XML处理器所需的行为它必须如何读取XML数据以及它必须提供的信息应用程序。

1.1起源和目标

XML是由XML工作组开发的(最初是称为SGML编辑审查委员会),由万维网联盟(W3C)于1996年成立。会议由Sun的Jon Bosak主持XML特殊利益集团积极参与的微系统(以前称为SGML工作组)也由W3C组织。这个XML工作组的成员在附录中给出。丹康纳利担任工作组与W3C的联系人。

XML的设计目标是:

  1. XML应能在互联网上直接使用。

  2. XML应支持多种应用程序。

  3. XML应与SGML兼容。

  4. 应易于编写处理XML文档的程序。

  5. XML中可选功能的数量应保持为绝对值最小值,理想为零。

  6. XML文档应该是人可读的,并且相当清晰。

  7. XML设计应该很快准备好。

  8. XML的设计应正式简洁。

  9. XML文档应易于创建。

  10. XML标记中的严格性是最不重要的。

本规范以及相关标准(Unicode和ISO/IEC 10646用于字符,Internet RFC 1766用于语言识别标签,ISO 639用于语言名称代码,ISO 3166用于国家名称代码),提供了理解XML 1.0版和构造所需的所有信息计算机程序来处理它。

此版本的XML规范可以自由分发,只要所有文本和法律通知保持不变。

1.2术语

用于描述XML文档的术语在本规范正文。使用以下列表中定义的术语在构建这些定义和描述XML处理器的操作时:

可以

[定义:合格文件和XML处理器可以但无需按所述进行操作。]

必须

[定义:合格文件和XML处理器必须按所述方式工作;否则就是错误。]

错误

[定义:违反本规范的规则;结果未定义。符合要求的软件可能检测并报告错误,并可能从中恢复。]

致命错误

[定义:错误一致的xml处理器必须检测并向应用程序报告。遇到致命错误后,处理器可以继续处理数据以搜索进一步的错误并可向应用程序报告此类错误。为了支持纠正对于错误,处理器可能会从文档中生成未处理的数据(使用混合字符数据和标记)。一次检测到致命错误,但处理器不能继续正常运行处理(即不得继续传递字符数据和信息以正常方式将文档的逻辑结构发送给应用程序)。]

按用户选项

[定义:合格软件可能或必须(取决于句子中的情态动词)行为如上所述;如果是,它必须为用户提供启用或禁用的方法描述的行为。]

有效性约束

[定义:规则适用于所有有效的XML文档。违反有效性约束是错误;用户可以选择,报告人验证XML处理器.]

格式良好约束

[定义:适用于所有人的规则形成良好的XML文档。违反格式良好约束的行为包括致命错误.]

比赛

[定义:(字符串或名称:)要比较的两个字符串或名称必须相同。具有多个字符ISO/IEC 10646中的可能表示法(例如,带有两个预编码的字符和base+音调符号形式)只有在它们具有相同表示形式时才匹配在两个字符串中。不进行箱子折叠。(中的字符串和规则grammar:)如果字符串属于语言,则它与语法产物相匹配由该生产产生。(关于内容和内容模型:)元素当它符合约束中描述的方式时,匹配其声明[VC:元素有效].]

为了兼容性

[定义:[公元87年]标记描述XML功能的句子,以确保该XML仍然与SGML兼容。]

实现互操作性

[定义:[公元87年]标记一个句子描述包含的非约束性建议,以增加XML文档可以由现有安装的SGML处理器处理它早于ISO 8879的WebSGML适配附件。]

2文件

[定义:数据对象是XML文档如果是的话形成良好的,如本规范所定义。格式良好的XML文档此外,还可以有效的如果它遇到某些进一步的限制。]

每个XML文档都有一个逻辑以及物理结构。在物理上,文档由称为实体.实体可以参考将其纳入文档。文档以“根”开头,或文档实体从逻辑上讲,文件是由声明、元素、注释、字符引用和处理指令,所有这些指令都在文档中通过显式标记指示。逻辑和物理结构必须正确嵌套,如中所述4.3.2格式良好的解析实体.

2.1格式良好的XML文档

[定义:文本对象是一个形成良好的XML文档,如果:]

  1. 整体而言,它与标签上的产品相匹配文件.

  2. 它满足本规范中给出的所有格式良好的约束。

  3. 每个已分析的实体文件中直接或间接引用的是形成良好的.

文件
[1]   文件   ::=   序言 要素 其他*

匹配文件生产意味着:

  1. 它包含一个或多个元素.

  2. [定义:确实有一个元素,称为,或文档元素,不包含其中的任何部分出现在内容任何其他元素。]【E17】对于所有其他元素,如果启动标签位于另一个元素的内容中结束标记位于同一元素的内容中。更简单地说元素由开始标记和结束标记分隔,相互正确嵌套。

[定义:作为因此,对于每个非根元素C类在文档中,还有一个因素P(P)在文件中C类在的内容中P(P),但不在的内容中内容中的任何其他元素P(P).P(P)被称为起源属于C类、和C类作为一个小孩属于P(P).]

2.2字符

[定义:A已分析实体包含文本,一系列字符,可以表示标记或字符数据。][定义:A性格是的原子单位ISO/IEC 10646规定的文本[ISO/IEC 10646] 【E67】(另请参阅[ISO/IEC 10646-2000]). 合法字符为制表符,回车符、换行符和Unicode和ISO/IEC的法律字符10646【E69】这个引用的这些标准的版本A.1规范工具书类在编制本文件时是最新的。新建这些标准可以通过修订或新版本添加字符。因此,XML处理器必须接受指定范围内的任何字符对于烧焦.使用“兼容字符”,如定义见第6.8节[统一码] 【E67】(另请参见第3.6节中的D21[单码3]),不鼓励。]

字符范围
[2]    烧焦   ::=    #x9|#xA|#xD|[#x20-#xD7FF]|[#xE000-#xFFFD]|[#10000-#x10FFFF]/*任何Unicode字符,不包括代理块,FFFE和FFFF*/

编码字符代码的机制指向位模式可能因实体而异。所有XML处理器必须接受10646的UTF-8和UTF-16编码;发出以下信号的机制讨论了这两种编码中的一种正在使用,或用于发挥其他编码的作用稍后,在4.3.3实体中的字符编码.

2.3常见句法结构

本节定义了一些使用的符号在语法中广泛使用。

S公司(空白)包括一个或多个空格(x20)字符、回车符、换行符或制表符。

空白
[3]   S公司   ::=   (#x20|#x9|#xD|#xA)+

为了方便起见,字符被分类为字母,数字或其他字符。【E30】字母由字母或音节基本字符或表意字符。每个字符中特定字符的完整定义类在中给出B字符类.

[定义:A姓名是一个以字母或几个标点符号之一开头的标记,以及继续使用字母、数字、连字符、下划线、冒号或句号,合称为名称字符。]名称以字符串“xml格式“,或任何匹配的字符串(('X'|'X')('M'|'M')(‘L'|'L')),保留在本版本或未来版本中用于标准化规范。

注:

【E98】命名空间在XML建议中[XML名称]赋予意义包含冒号字符的名称。因此,作者不应使用XML名称中的冒号(命名空间除外),但XML处理器必须接受冒号作为名称字符。

名字符号(名称标记)是名称字符的任意混合。

姓名和代币
[4]   NameChar(名称字符)   ::=   信函|数字| '.' | '-' | '_' | ':' |组合字符|扩展器
[5]    姓名   ::=    (信函| '_' | ':') (NameChar(名称字符))*
[6]    姓名   ::=    姓名(#x20姓名)*/*【E62】*/
[7]    名字符号   ::=    (NameChar(名称字符))+
[8]   Nm标记   ::=   名字符号(#x20名字符号)*/*【E62】*/

文字数据是不包含引号的任何带引号的字符串用作该字符串分隔符的标记。文字用于指定内部实体的内容(实体值),属性值(AttValue(附件值))、和外部标识符(SystemLiteral(系统文字)). 请注意SystemLiteral(系统文字)可以在不扫描的情况下进行分析用于标记。

直接常量
[9]   实体值   ::=   '"' ([^%&"] |PEReference(性能参考)|参考)* '"'
|  "'" ([^%&']|PEReference(性能参考)|参考)* "'"
[10]   AttValue(附件值)   ::=   '"' ([^<&"] |参考)*'"'
|  "'" ([^<&']|参考)* "'"
[11]   SystemLiteral(系统文字)   ::=   ('"' [^"]* '"') | ("'" [^']* "'")
[12]   PubidLiteral(公共文字)   ::=   '"'PubidChar公司* '"' | "'" (PubidChar公司- "'")* "'"
[13]   PubidChar公司   ::=   #x20|#xD|#xA|[a-zA-Z0-9]|[-'()+,./:=?;!*#@$_%]

注:

[第72页]虽然实体值生产允许定义由单个显式<在字面上(例如。,<!实体mylt“<”>),强烈建议避免这种做法,因为任何对该实体的引用都会导致格式良好错误。

2.4字符数据和标记

文本包含混合的字符数据和标记。[定义:标记采取以下形式启动标签,结束标记,空元素标记,实体参考文献,性格参考文献,评论,CDATA部分定界符,文档类型声明,处理指令,[公元89年]XML声明,文本声明,以及位于文档实体(即,在文档元素外部,而不是在任何其他标记)。]

[定义:所有非标记文本构成字符数据属于文档。]

与号字符(&)和左尖括号(<)可能以文字形式出现只有用作标记时分隔符,或在评论,处理指令,或aCDATA部分.如果其他地方也需要它们,必须如此逃脱使用其中之一数字字符引用或字符串“&amp;“和"&它;“分别。可以表示直角括号(>)使用字符串“&gt;“而且必须,为了兼容性,使用“&gt;“或字符串中出现的字符引用”]]>“在内容中,当该字符串未标记CDATA部分.

在元素的内容中,字符数据是不包含start-delimiter的任何字符串任何标记。在CDATA部分中,字符数据是任何字符串不包括CDATA-section-close分隔符,“]]>".

为了允许属性值同时包含单引号和双引号,撇号或单引号字符(')可以表示为“&载脂蛋白;",双引号字符(“)为”&quot;".

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

2.5评论

[定义:评论可能出现在文档中其他位置以外的任何位置标记; 此外,它们可能出现在文档中在语法允许的位置进行类型声明。它们不是文档的字符数据;XML处理器可能(但不一定)使应用程序能够检索注释文本。为了兼容性,字符串“--“(双连字符)不得出现在评论中。]【E63】注释中无法识别参数实体引用。

评论
[15]   注释   ::=   '<!--' ((烧焦- '-') | ('-' (烧焦- '-')))* '-->'

注释示例:

<!-- <head>&<body>-->的声明

【E27】请注意,语法不允许注释以结尾--->。以下示例是形成良好。

<!-- B+、B或B-->

2.6处理说明

[定义:处理说明(PI)允许文档包含说明适用于应用程序。]

处理说明
[16]    圆周率   ::=   '<?'P目标(S公司(烧焦* - (烧焦* '?>'烧焦*)))?'?>'
[17]   P目标   ::=   姓名-(('X'|'X')('M'|'M')('L'|“l”)

个人信息不是文档的一部分字符数据,但必须传递给应用程序。PI以目标开始(P目标)用于标识指令所指向的应用程序。目标名称“XML格式", "xml格式“,等等被保留用于本规范或未来版本的标准化。这个XML格式符号机制可能是用于PI目标的正式声明。【E63】处理过程中无法识别参数实体引用说明。

2.7CDATA部分

[定义:CDATA部分可能出现在任何可能出现字符数据的地方;他们用于转义包含字符的文本块,否则被识别为标记。CDATA部分以字符串“<![CDATA(CDATA)[“并以字符串结尾”]]>":]

CDATA部分
[18]    CD节   ::=    CD启动 C数据 CD结束
[19]   CD启动   ::=   '<![CDATA['
[20]    C数据   ::=    (烧焦* - (烧焦* ']]>'烧焦*))
[21]    CD结束   ::=    ']]>'

在CDATA部分中,只有CD结束字符串被识别为标记,因此左尖括号和与号可能以其字面形式出现;他们不需要(也不可能)使用转义“&它;“和”&amp;“.CDATA节无法嵌套。

CDATA部分的示例,其中“<问候语>“和”</问候语>“被确认为字符数据,不是标记:

<![CDATA[问候语>你好,世界!</问候语>>

2.8序言和文档类型声明

[定义:XML文档可以而且应该以XML声明它指定了正在使用的XML的版本。]例如,以下内容是一个完整的XML文档,形成良好的但不是有效的:

<?xml版本=“1.0”?><问候语>你好,世界</问候语>

这也是:

你好,世界</问候语>

版本号“1“应该用于表明符合本规范的本版本;这是一个错误文档使用值“1“如果不符合本规范的本版本。这是XML工作的目的集团提供本规范编号的更新版本,而不是“1“,但此意图并不表示承诺生产任何XML的未来版本,如果有,也不会使用任何特定的编号方案。由于不排除将来的版本,因此提供了此构造作为允许自动版本识别的一种手段,应该这是必要的。如果处理者收到文档,可能会发出错误信号标有不支持的版本。

标记的功能在XML文档中描述其存储和逻辑结构,并将属性-值对与其逻辑结构相关联。XML提供了机制文档类型声明,定义逻辑结构上的约束并支持使用预定义的存储单元。[定义:XML文档是有效的如果它有关联的文档类型声明以及文档是否符合所表示的约束在其中。]

文档类型声明必须出现在第一个要素在文档中。

序言
[22]    序言   ::=    XML拒绝?其他*(文档类型删除 其他*)?
[23]   XML拒绝   ::=   '<?xml’版本信息 编码拒绝?SDDecl公司?S公司?'?>'
[24]   版本信息   ::=   S公司“版本”等式("'"版本号"'" | '"'版本号'"')/*【E15】*/
[25]    等式   ::=   S公司? '='S公司?
[26]   版本号   ::=   ([a-zA-Z0-9_.:]|'-')+
[27]    其他   ::=    注释|圆周率|S公司

[定义:XML文档类型声明包含或点标记声明为一类文档提供语法的。这个语法是已知的作为文档类型定义,或DTD公司.文档类型声明可以指向外部子集(一种特殊的外部实体)包含标记声明,或可以直接在内部子集中包含标记声明,也可以两者兼而有之。文档的DTD由两个子集组成。]

[定义:A类标记声明是一个元素类型声明,一个属性列表声明,一个实体声明,或a注释声明.]这些声明可以全部包含或部分在参数实体,如下面的规范性和有效性约束所述。对于【E14】进一步的信息,请参见4物理结构.

文档类型定义
[28]   文档类型删除   ::=   '<!DOCTYPE(文件类型)S公司 姓名(S公司 外部ID)?S公司? ('[' (标记updecl|PEReference(性能参考)|S公司)* ']'S公司?)? '>'[VC:根元素类型]
[29]   标记updecl   ::=   元素decl|AttlistDecl公司|实体拒绝|符号拒绝|圆周率|注释 [VC:正确声明/PE嵌套]
[WFC:内部子集中的PE]

【E82】请注意,可以构造一个格式良好的文档,其中包含文档类型删除两者都不指向外部子集也不包含内部子集。

标记声明可以全部或部分组成替换文本属于参数实体.本规范后面针对单个非终端的产品(元素decl,AttlistDecl公司等)描述声明之后所有参数实体已经包括.

【E75】参数实体在DTD中的任何位置都可以识别引用(内部和外部子集和外部参数实体),但文字、处理指令除外,注释和被忽略的条件节的内容(请参见3.4条件部分). 它们也被确认为实体价值文字。限制在内部子集中使用参数实体如下所述。

有效性约束:根元素类型

这个姓名在文档类型声明中必须与根元素.

有效性约束:适当声明/PE嵌套

参数实体替换文本必须正确嵌套标记声明。也就是说,如果第一个字符或最后一个字符标记声明的(标记updecl以上)是包含在替换文本中参数-性能参考,两者都必须包含在相同的替换文本。

井形约束:内部PE子集

在内部DTD子集中,参数-属性引用只能在标记声明可以发生,而不是在标记声明中。(这不适用指向出现在外部参数实体中的引用或指向外部子集。)

像内部子集、外部子集和任何DTD中引用的外部参数实体必须包含一系列非终结符所允许类型的完整标记声明标记updecl,中间点缀着空白或参数-属性引用然而,外部子集或外部子集的部分内容参数实体可以通过使用条件段建构;这是不允许的在内部子集中。【E13】引用的外部子集和任何外部参数实体DTD中的到必须与生产相匹配extPE(外部PE).请参见4.3.2格式良好的解析实体.

外部子集
[30]   extSubset(扩展子集)   ::=   文本拒绝?extSubsetDecl(扩展子集拒绝)
[31]   extSubsetDecl(扩展子集拒绝)   ::=   (标记updecl|条件部分|PEReference(性能参考)|S公司)*

外部子集和外部参数实体也与内部子集不同的是,参数-属性引用是允许的在内部标记声明,不仅之间标记声明。

带有文档类型声明的XML文档示例:

<?xml版本=“1.0”?><!DOCTYPE问候语系统“hello.dtd”><问候语>你好,世界</问候语>

这个系统标识符"你好.dtd“提供了[电子78]文档DTD的地址(URI引用)。

声明也可以局部给定,如本例所示:

<?xml version=“1.0”encoding=“UTF-8”?><!DOCTYPE问候语[<!ELEMENT问候语(#PCDATA)>]>你好,世界</问候语>

如果同时使用外部和内部子集内部子集被认为出现在外部子集之前。这个有实体和属性列表声明对内部子集的影响优先于外部子集中的那些。

2.9独立文件声明

标记声明可以影响文档的内容,如从xml处理器应用程序;例如属性默认值和实体声明。独立文档声明,其中可能显示为XML声明的组件,表示是否存在这些声明在文档实体【E64】或在参数实体中。[定义:安外部标记声明定义为出现在外部子集或参数实体(外部或内部,包括后者是因为非验证处理器不需要读取它们)。]

独立文件声明
[32]    SDDecl公司   ::=    S公司“独立”等式(("'"(‘是’|‘否’)“”)|(‘”“(‘是'|‘否')”“)”)[VC:独立文档声明]

在独立文档声明中,值““表示没有【E64】外部的标记声明影响从XML处理器传递的信息应用程序。价值观““表示存在或可以是这样的外部标记声明。请注意,独立文档声明仅表示外部声明; 这个在文件中存在对外部的引用实体,何时这些实体是内部声明的,不会更改其独立状态。

如果没有外部标记声明,则独立文档声明没有任何意义。如果存在外部标记声明,但是没有独立的文档声明,值““是假设。

任何XML文档standalone=“否”持有可以通过算法转换为独立文档,这可能是理想的对于一些网络交付应用程序。

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

独立文档声明必须具有值““如果任何外部标记声明包含以下声明:

  • 具有的属性违约值,如果这些属性所应用的元素出现在文档中没有为这些属性指定值,或

  • 实体(除放大器,书信电报,gt公司,阿波罗,引用),如果参考文献出现在文档中的实体,或

  • 具有以下值的属性归一化,其中属性显示在文档中,其值为将因标准化而发生变化,或

  • 元素类型元素含量,如果空白直接出现在这些类型。

带有独立文档声明的示例XML声明:

<?xml version=“1.0”standalone='yes'?>

2.10空白区处理

在编辑XML文档时,通常很方便使用“空白”(空格、制表符和空行)分隔标记以提高可读性。此类空白通常不用于包含在文档的交付版本中。另一方面,“重要”交付版本中应该保留的空白是常见的,因为诗歌和源代码中的示例。

xml处理器必须始终传递文档中未包含的所有字符标记到应用程序。A类验证XML处理器还必须告知申请字符构成出现在元素含量.

一个特别的属性命名xml:空间可以附加到元素表示一个意图,即在该元素中,空白应该是由应用程序保存。在有效文档中,此属性与其他属性一样,必须是宣布如果使用。声明时,它必须作为枚举类型谁的【E81】值为“违约“和”保存“。例如:

<!ATTLIST诗歌xml:space(默认|保留)'preserve'><!--【E81】--><!ATTLIST pre-xml:space(preserve)#FIXED“preserve”>

价值观“违约“表示应用程序”此元素可以接受默认的空白处理模式;这个值“保存“表示应用程序保留的意图所有空白。此声明意图被视为适用于所有要素在指定元素的内容内,除非重写使用的另一个实例xml:空间属性。

这个根元素任何文件的没有关于应用程序空间处理的意图,除非它提供此属性或属性的值使用默认值声明。

2.11线路末端搬运

XML格式已分析的实体通常存储在计算机文件中,为了便于编辑,这些文件组织成线。这些线通常由一些组合分隔字符care-return(#xD)和line-feed(#xA)。

[公元86年]为了简化以下任务应用,一个xml处理器必须通过转换双字符序列#xD#xA和后面没有#xA的任何#xD到#在解析之前对输入进行xA,或使用其他方法,使字符传递给应用程序的过程与进行此转换的过程相同。

2.12语言识别

在文档处理中,识别自然的或正式的编写内容的语言。一个特别的属性命名xml:lang可以在文件中插入以指定中任何元素的内容和属性值中使用的语言XML文档。在有效文档中,与其他属性一样,此属性必须是宣布如果是的话已使用。【E73】这个属性的值是由定义的语言标识符[IETF RFC 1766],语言识别标签,或其在IETF标准轨道上的继任者。

注:

【E73】[IETF RFC 1766]标记是从两个字母的语言定义如下【ISO 639】,来自两个字母国家代码由定义【ISO 3166】,或来自语言在互联网号码分配机构注册的标识符【E58】[IANA-LANGCODES]。预计的继承人[IETF RFC 1766]将介绍三字母目前未被转换的语言的语言代码【ISO 639】.

【E73】(已删除第33至38部作品。)

例如:

敏捷的棕色狐狸跳过了懒狗</p>(第页)它是什么颜色的</p>(第页)它是什么颜色的</p>(第页)<sp who=“Faust”desc='leise'xml:lang=“de”><l> 哈比修女,啊!哲学<l> Juristerei,und Medizin律师事务所<l> und leider auch神学<l> durchaus studiert mit heißem Bemüh'n.学生</sp>

声明的意图xml:lang已考虑应用于指定元素的所有属性和内容,除非使用的实例重写xml:lang在中的另一个元素上内容。

的简单声明xml:lang可能需要表格

xml:lang NMTOKEN#隐含

但如果合适,也可以给出特定的默认值。为英国学生准备的法语诗歌集,附有注释和注释在英语中xml:lang属性可以这样声明:

<!ATTLIST诗歌xml:lang NMTOKEN'fr'><!ATTLIST光泽xml:lang NMTOKEN'en'><!ATTLIST注释xml:lang NMTOKEN'en'>

逻辑结构

[定义:每个XML文档包含一个或多个元素,其边界被分隔通过启动标签结束标记,或,用于空的元素,按空元素标签。每个元素都有一个由名称标识的类型,有时称为“通用标识符”(GI),可以有一组属性规范。]每个属性规范都有一个名称和a价值.

元素
[39]   要素   ::=   清空元素标签
|雄鹿 内容 电子标签 [WFC:元素类型匹配]
[VC:元素有效]

本规范不约束语义、使用、,或(超出语法)元素类型和属性的名称,除了以匹配开头的名称(('X'|'X')('M'|'M')(‘L'|'L'))保留用于本规范或未来版本的标准化。

井然有序约束:图元类型匹配

这个姓名元素的end标记必须与start-tag中的元素类型匹配。

有效性约束:元素有效

如果有声明,则元素有效匹配元素decl其中姓名与元素类型相匹配,并且以下其中一项保持不变:

  1. 声明匹配元素没有内容.

  2. 声明匹配儿童序列子元素属于由内容中的正则表达式生成的语言模型,带有可选空白(与非终结符匹配的字符S公司)协议双方:[E59]子元素之间的start-tag和第一个子元素,或在最后一个子元素和结束标记之间。请注意,CDATA部分只包含空白与非终结符不匹配S公司,因此不能出现在这些位置。

  3. 声明匹配混合的和内容包括字符数据子元素谁的类型与内容模型中的名称匹配。

  4. 声明匹配任何,以及任何子元素已申报。

3.1启动标签,结束标记和空元素标记

[定义:每个非空XML元素的开头都由标记启动标签.]

开始标记
[40]    雄鹿   ::=    '<'姓名(S公司 属性)*S公司? '>'[WFC:独特的特性规范]
[41]   属性   ::=   姓名 等式 AttValue(附件值)[VC:属性值类型]
[WFC:无外部实体引用]
[WFC:否<在属性值中]

这个姓名在开始标记和结束标记中给出了元素的类型. [定义:该姓名-AttValue(附件值)对被称为属性规范元素的],[定义:使用姓名在每对中称为属性名称]和[定义:的的内容AttValue(附件值)(文本位于'"分隔符)作为属性值.]【E46】请注意,start-tag或empty-element标记不重要。

井形约束:Unique Att Spec

属性名不能在同一start-tag或empty元素中多次出现标签。

有效性约束:属性值类型

属性必须具有已申报;值必须是为其声明的类型。(for属性类型,请参见3.3属性列表声明.)

井形约束:无外部实体引用

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

井形约束:否<在属性值中

这个替换文本属于属性值中直接或间接引用的任何实体不得包含一个<.

启动标记示例:

<termdef id=“dt dog”term=“dog”>

[定义:该以start-tag开头的每个元素的结尾都必须用结束标记包含一个与在启动标签:]

结束标记
[42]    电子标签   ::=    '</'姓名 S公司? '>'

结束标记的示例:

</termdef>

[定义:这个文本在开始标记和结束标记之间称为元素的内容:]

元素的内容
[43]   内容   ::=   字符数据? ((要素|参考|CD节|圆周率|注释)字符数据?)*/*[电子71]*/

[定义:[公元97年]没有内容的元素称为空的.]代表空元素的开头标记紧跟结尾标记,或空元素标记。[定义:安空元素标签采用特殊形式:]

的标记空元素
[44]   清空元素标签   ::=   '<'姓名(S公司 属性)*S公司? '/>' [WFC:独特的特性规范]

空元素标签可用于任何具有无内容,无论是否使用关键字声明.为了实现互操作性,empty-element标记【E45】应该并且只应该用于声明的元素空的。

空元素示例:

<IMG align=“左”src=“http://www.w3.org/Icons/www/w3c_home" /><br></br><br/>

3.2元件类型声明

这个要素结构XML文档5月,用于验证目的,使用元素类型和属性列表声明进行约束。一个元素类型声明约束元素的内容.

元素类型声明通常约束哪个元素类型可以显示为儿童元素的。根据用户的选择,XML处理器可能会发出警告当声明提到未提供声明的元素类型时,但这不是一个错误。

[定义:安元素类型声明采用以下形式:]

元素类型声明
[45]   元素decl   ::=   '<!元素S公司 姓名 S公司 内容规范 S公司? '>'[VC:唯一元素类型声明]
[46]   内容规范   ::=   “空”|“任何”|混合的|儿童

其中姓名给出了元素正在声明的类型。

有效性约束:唯一元素类型声明

没有元素类型可以声明多次。

元素类型示例声明:

<!元素br空><!元素p(#PCDATA|emph)*><!元素%name.para;%内容.para;><!ELEMENT容器ANY>

3.2.1元素内容

[定义:一个元素类型元素含量当该类型的元素必须仅包含小孩元素(无字符数据),可选用空格分隔(与非终结符匹配的字符S公司).][定义:在这种情况下,约束包括【E55】内容模型,一个管理允许类型的简单语法子元素及其允许出现的顺序。]语法是建立在内容颗粒上的(内容提供商s) ,其中由的名称、内容粒子的选择列表或序列列表组成含量粒子:

元素含量模型
[47]   儿童   ::=   (选择|序列)('?' | '*' | '+')?
[48]    内容提供商   ::=   (姓名|选择|序列) ('?' | '*' | '+')?
[49]    选择   ::=    '('S公司?内容提供商(S公司? '|'S公司?内容提供商)+S公司? ')'/*【E50】*/
/*【E52】*/
[VC:正确分组/PE嵌套]
[50]    序列   ::=    '('S公司?内容提供商(S公司? ','S公司?内容提供商)*S公司? ')'/*【E52】*/
[VC:正确分组/PE嵌套]

其中每个姓名是的类型可能显示为小孩。选项列表中的任何内容粒子都可能出现在元素含量选择的位置列表出现在语法中;序列列表中出现的内容粒子每个都必须出现在元素含量按照列表中给出的顺序。可选字符在名称或列表之后控制元素或内容粒子列表中可能出现一个或多个(+),零或更多(*),或零次或一次(?). 缺少这样的操作员意味着元素或内容粒子必须出现一次。这个语法和含义与本文中的产品中使用的语法和含义相同规范。

元素的内容与内容模型匹配,如果只有在可以通过内容模型追踪出路径的情况下,遵循顺序、选择和重复操作符并匹配每个元素内容模型中的元素类型。为了兼容性,如果文档可以匹配内容中出现的多个元素类型模型。有关更多信息,请参阅E确定性内容模型.

有效性约束:正确的组/PE嵌套

参数实体替换文本必须正确嵌套【E11】括号中的组。也就是说,如果开幕式或括号中的右括号选择,序列,或混合的替换中包含构造的文本参数实体,两者必须包含在相同的替换文本中。

【E19】为了实现互操作性,如果是参数项引用出现在选择,序列,或混合的构造,其替换文本应包含至少一个非空字符,第一个和最后一个都不是空字符替换文本的字符应为连接器(|,).

元素模型示例:

<!元件规格(前部、车身、后部?)><!ELEMENT div1(头,(p|list|note)*,div2*)><!ELEMENT dictionary-body(%div.mix;|%dict.mix;)*>元素目录-正文

3.2.2混合内容

[定义:一个元素类型混合的内容当该类型的元素可能包含字符数据时(可选)穿插着小孩元素。]在这种情况下,子元素的类型可能会受到约束,但不是它们的顺序或出现次数:

混合成分宣言
[51]    混合的   ::=    '('S公司? '#PCDATA(PCDATA)(S公司? '|'S公司?姓名)*S公司? ')*'
| '('S公司? '#PCDATA(PCDATA)S公司? ')'[VC:正确分组/PE嵌套]
[VC:无重复类型]

其中姓名s给出类型可能显示为子元素的元素。【E10】关键字#PCDATA公司历史上源于术语“解析字符数据。"

有效性约束:无重复类型

不能使用相同的名称在单个混合内容声明中出现多次。

混合内容声明示例:

<!元素p(#PCDATA|a|ul|b|i|em)*><!元素p(#PCDATA|%font;|%phrase;|%special;|%form;)*><!元素b(#PCDATA)>

3.3属性列表声明

属性用于将名称值对与关联元素。属性规范只能出现在内部启动标签空元素标记; 因此,用于识别它们出现在3.1开始标记、结束标记和空元素标签。可以使用属性列表声明:

  • 定义与给定元素类型相关的属性集。

  • 为这些属性建立类型约束。

  • 提供违约属性。

[定义:属性列表声明指定名称、数据类型和与给定元素类型关联的每个属性的默认值(如果有):]

属性列表声明
[52]   AttlistDecl公司   ::=   '<!ATTLIST公司S公司 姓名 AttDef(附件定义)*S公司? '>'
[53]    AttDef(附件定义)   ::=    S公司 姓名 S公司 附件类型 S公司 默认拒绝

这个姓名在中AttlistDecl公司rule是元素的类型。根据用户选择,XML处理器如果为元素类型而不是其自身声明属性,则可能会发出警告声明,但这不是错误。这个姓名在中AttDef(附件定义)rule是属性的名称。

什么时候?不止一个AttlistDecl公司是为给定元素类型,将合并所有提供的内容。当更多为给定元素的同一属性提供了多个定义类型时,第一个声明是绑定的,随后的声明将被忽略。【E9】为了实现互操作性,DTD的编写者可以选择为给定的元素类型最多提供一个属性列表声明,位于属性列表中给定属性名称的大多数属性定义声明,并且每个属性列表中至少有一个属性定义宣言。为了实现互操作性,XML处理器可能存在用户选择问题为提供多个属性列表声明时发出警告给定元素类型,或为提供多个属性定义给定属性,但这不是错误。

3.3.1属性类型

XML特性类型有三种:字符串类型、一组标记化类型和枚举类型类型。字符串类型可以将任何文本字符串作为值;标记化的类型具有不同的词汇和语义约束【E8】。语法中注明的有效性约束适用于属性值已规范化,如中所述3.3属性列表声明.

属性类型
[54]   附件类型   ::=   字符串类型|标记化类型|枚举类型
[55]   字符串类型   ::=   “CDATA”
[56]   标记化类型   ::=   “ID”[VC:ID]
[VC:每个元素类型一个ID]
[VC:ID属性默认值]
|“IDREF” [VC:IDREF]
|“IDREFS” [VC:IDREF]
|“实体” [VC:实体名称]
|“实体” [VC:实体名称]
|“NMTOKEN” [VC:姓名标记]
|“NMTOKENS” [VC:姓名标记]

有效性约束:ID

类型的值身份证件必须与匹配姓名生产。名称不能出现多次在XML文档中作为此类型的值;即,ID值必须唯一确定承载它们的元素。

有效性约束:一个ID每个元素类型

任何元素类型都不能有多个ID属性明确规定。

有效性约束:ID属性默认值

ID属性必须已宣布违约#默示#必需.

有效性约束:国际数据参考

类型的值国际数据参考必须与匹配姓名生产和类型值IDREFS公司必须匹配姓名; 每个姓名必须与ID的值匹配XML文档中某个元素的属性;国际数据参考值必须匹配某些ID属性的值。

有效性约束:实体名称

类型的值实体必须与匹配姓名生产,类型的值实体必须匹配姓名; 每个姓名必须与的名称匹配未分析的实体在中声明DTD公司.

有效性约束:名称令牌

类型的值NMTOKEN公司必须与匹配名字符号生产;类型为NMTOKENS公司必须匹配Nm标记.

[定义:枚举的属性可以采用值列表中的一个声明中提供]。有两种枚举类型:

枚举属性类型
[57]   枚举类型   ::=   符号类型|枚举
[58]   符号类型   ::=   “符号”S公司'('S公司?姓名(S公司? '|'S公司?姓名)*S公司? ')'[VC:符号属性]
[VC:[E7]每个元素类型一个符号]
[59]   枚举   ::=   '('S公司?名字符号(S公司? '|'S公司?名字符号)*S公司? ')'[风险投资:枚举]

A类符号属性标识符号,在具有关联系统的DTD中声明和/或公共标识符,用于解释属性已附加。

有效性约束:符号属性

此类型的值必须与符号声明中包含的名称;声明中的所有表示法名称必须声明。

有效性约束:【E7】每个元素类型一个符号

任何元素类型都不能有不止一个符号指定的属性。

有效性约束:【E68】非空元素

为了兼容性,类型为的属性符号不得声明在声明的元素上.

有效性约束:枚举

此类型的值必须与名字符号声明中的标记。

为了实现互操作性,相同的名字符号应该在单个元素的枚举属性类型中不会出现多次类型。

3.3.2属性默认值

属性声明提供有关属性是否需要存在,否则,如果声明文档中缺少属性。

属性默认值
[60]   默认拒绝   ::=   “#必需”|“#隐含”
|(('#FIXED')?AttValue(附件值))[VC:必需属性]
[VC:属性默认合法]
[WFC:否<在属性值中]
[VC:固定属性默认值]

在属性声明中,#必需意味着必须始终提供属性,#默示没有默认值提供了。[定义:如果声明两者都不是#必需也不是#默示,然后是AttValue(附件值)值包含声明的违约价值;这个#固定关键字声明属性必须始终具有默认值。如果声明了默认值,则当XML处理器遇到一个省略的属性,它的行为就像该属性存在一样使用声明的默认值。]

有效性约束:必填属性

如果默认声明是关键字#必需,然后是属性必须为attribute-list声明中类型的所有元素指定。

有效性约束:属性默认合法

宣布的违约值必须满足声明的属性类型的词法约束。

有效性约束:固定属性默认值

如果属性声明了默认值使用#固定关键字,该属性的实例必须与默认值。

属性列表声明示例:

<!ATTLIST术语定义需要id号name CDATA#隐含><!ATTLIST列表类型(项目符号|ordered|glossary)“ordered”><!ATTLIST表格方法CDATA#修复“POST”>

3.3.3[电子70]属性-值规范化

将属性值传递给应用程序之前或者检查有效性,XML处理器必须规范化属性值通过应用以下算法,或使用其他方法传递给应用程序的值与算法生成的值相同。

  1. 如前所述,所有换行符都必须在#xA的输入中规范化在里面2.11末端处理,剩下的也一样该算法对以这种方式规范化的文本进行操作。

  2. 从一个由空字符串组成的规范化值开始。

  3. 对于中的每个字符、实体引用或字符引用非规范化属性值,从第一个开始,一直到最后,执行以下操作:

    • 对于字符引用,将引用的字符附加到规范化值。

    • 对于实体引用,递归应用此算法的步骤3实体的替换文本。

    • 对于空白字符(#x20、#xD、#xA、#x9),附加一个空格字符(x20)到归一化值。

    • 对于另一个字符,将该字符附加到规范化值。

如果属性类型不是CDATA,则XML处理器必须进一步通过丢弃任何前导和尾随来处理规范化属性值空格(#x20)字符,并通过替换空格(#x20)字符序列通过单个空格(x20)字符。

注意,如果非规范化属性值包含对空白字符的字符引用,而不是空格(x20),规范化值包含引用字符本身(#xD、#xA或#x9)。这与非规范化值的情况形成对比包含空白字符(不是引用),替换为规范化值中的空格字符(x20),也与非规范化值包含替换实体引用的情况文本包含空白字符;在递归处理时,白色在规范化的值。

未读取声明的所有属性都应被非验证人对待[公元95年]处理器,如同声明的那样CDATA(CDATA).

以下是示例属性规范化。鉴于以下声明:

<!实体d“&#xD;”><!实体a“&#xA;”><!实体da“&#xD;&#xA;”>

下面左列中的属性规范如果属性已声明NMTOKENS公司和那些右翼人士列,如果已声明CDATA(CDATA).

属性规范a是NMTOKENSa是CDATA
a=“xyz“
x y z轴
#x20#x20 x y z
a=“&d;&d;a&a;&a;B&da;”
A#x20个B
#x20#x20 A#x20#x20 B#x20#x20
一个=“A&#xa;B&#xd;&#xa
#xD#xD A#xA#xA B#xD#xA
#xD#xD A#xA#xA B#xD#xD

请注意,最后一个示例无效(但格式良好)如果声明为类型NMTOKENS公司.

3.4条件部分

[定义:条件节文档类型声明外部子集哪些是基于控制它们的关键字。]

条件节
[61]   条件部分   ::=   包括Sect|无知教派
[62]   包括Sect   ::=   '<![“S?”包括“S?“[”extSubsetDecl(扩展子集拒绝)']]>'/*【E90】*/
[VC:[E90]适当条件段/PE嵌套]
[63]   无知教派   ::=   '<![S?'忽略'S?'['忽略SectContents* ']]>'/*【E90】*/
[VC:[E90]适当条件段/PE嵌套]
[64]   忽略SectContents   ::=   忽略('<!['忽略SectContents']]>'忽略)*
[65]    忽略   ::=    烧焦* - (烧焦* ('<!['| ']]>')烧焦*)

有效性约束:【E90】适当的条件截面/PE嵌套

如果“<![", "[“,或”]]>“的条件节包含在参数-名称引用的替换文本中,所有这些必须包含在相同的替换文本中。

与内部和外部DTD子集一样,条件节可以包含一个或多个完整的声明、注释、处理指令或嵌套有条件的部分,夹杂着空白。

如果关键字条件段的包括,然后是条件的内容部分是DTD的一部分。如果条件节的关键字为忽略,则条件节的内容不符合逻辑DTD的一部分。如果条件节的关键字为包括出现在较大的条件节中,关键字为忽略,外部和内部条件部分都被忽略。【E90】忽略的条件节的内容通过忽略进行分析“”之后的所有字符[“关键字后面,条件除外节开始“<![“和结束”]]>“,直到找到匹配的条件段结束。参数实体引用在此过程中无法识别。

如果条件的关键字节是参数实体引用,必须替换参数实体在处理器决定是否包含或忽略条件节。

例如:

<!实体%汇票“INCLUDE”><!实体%最终“忽略”><!【%汇票[<!元素手册(注释*、标题、正文、补充?)>]]><!【%最终[<!元素手册(标题、正文、补充?)>]]>

4物理结构

[定义:XML文档可以由一个或多个存储单元组成。【E6】这些被称为实体; 他们都有内容都是(除了文件实体外部DTD子集)由实体标识名称.]每个XML文档有一个名为文件实体,它是xml处理器并且可能包含整个文档。

实体可以被解析或未解析。[定义:A已解析实体的内容为称为其替换文本; 文本被认为是一个积分文档的一部分。]

[定义:安未分析的实体是其内容可以也可能不是文本,如果是文本,【E25】可能不是XML。每个未分析的实体都有一个关联的符号,由名称标识。超越要求XML处理器为实体和应用程序可用的符号,XML对内容没有约束未分析实体的数量。]

使用实体按名称调用已分析的实体参考文献;按名称列出的未分析实体,以实体实体属性。

[定义:一般实体是在文档中使用的实体内容。在本规范中,有时提及通用实体带有不合格条款实体当这不会导致歧义时。][定义:【E53】参数实体是要在中使用的已解析实体日期。]这两种类型的实体使用不同的引用形式在不同的上下文中识别。此外,它们占用不同的名称空间;具有相同名称的参数实体和通用实体是两个不同的实体实体。

4.1字符和实体引用

[定义:A字符参考指特定字符在ISO/IEC 10646字符集中,例如不能直接访问的字符集来自可用的输入设备。]

字符引用
[66]   字符参考   ::=   '&#' [0-9]+ ';'
|“&#x”[0-9a-fA-F]+';'[WFC:法律性质]

完井约束:法律性质

引用的字符要使用字符引用,必须与烧焦.

如果字符引用以“&#x个“,数字和字母直到终止;提供ISO/IEC 10646中字符代码点的十六进制表示。如果只是以“&#“,直到终止的数字;提供字符代码点的十进制表示。

[定义:安实体参考指命名实体的内容。][定义:对解析的常规实体的引用使用和号(&)和分号(;)作为分隔符。][定义:参数实体引用使用百分号(%)和分号(;)作为分隔符。]

实体引用
[67]   参考   ::=   实体参考|字符参考
[68]   实体参考   ::=   '&'姓名';'【WFC:申报实体】
[VC:声明的实体]
[WFC:解析实体]
[WFC:无递归]
[69]   PEReference(性能参考)   ::=   '%'姓名';'[VC:声明的实体]
[WFC:无递归]
[WFC:在DTD中]

井形约束:已声明实体

在没有任何DTD,一种只包含不包含参数的内部DTD子集的文档实体引用,或带有“standalone=“是”",【E34】对于实体不出现在外部子集或参数实体中的引用,这个姓名在实体引用中给定必须比赛在一个实体宣言不发生在外部子集或参数实体,但格式良好的文档不需要声明以下实体:放大器,书信电报,gt公司,阿波罗,引用类似地,一般实体的声明必须位于属性列表中默认值中出现的对它的任何引用之前宣言。

注意,如果实体在外部子集中声明或者在外部参数实体中,非验证处理器是没有义务阅读并处理其声明;对于这样的文档中,必须声明实体的规则是格式良好的约束只有standalone=“是”.

有效性约束:声明的实体

在包含外部子集的文档中或带有“standalone=“否”“,该姓名在实体引用中给定必须比赛在一个实体宣言。为了实现互操作性,有效文档应声明实体放大器,书信电报,gt公司,阿波罗,引用,格式见4.6预定义实体。参数实体的声明必须在任何引用之前。类似地,一般实体的声明必须位于任何[公元92年]包含默认值的attribute-list声明或间接提及该一般实体。

井形约束:已解析实体

实体引用不能包含未分析的实体.可以引用未经分析的实体到仅在中属性值声明为类型实体实体.

井然有序约束:无递归

分析的实体不能包含递归直接或间接地引用自身。

完井约束:在DTD中

参数实体引用只能出现在DTD公司.

字符和实体示例参考文献:

键入<key>less-than</key>(&#x3C;)保存选项。本文件于&docdate;编制;已分类&security-level;。

参数实体引用示例:

<!-- 声明参数实体“ISOLat2”…--><!实体%ISOLat2系统”http://www.xml.com/iso/isolat2-xml.entities" ><!-- ... 现在引用它。-->%ISOLat2;

4.2实体声明

[定义:实体声明如下:]

实体声明
[70]   实体拒绝   ::=   GEDecl公司|PEDecl公司
[71]    GEDecl公司   ::=    '<!实体'S公司 姓名 S公司 实体定义 S公司? '>'
[72]    PEDecl公司   ::=    '<!实体'S公司'%'S公司 姓名 S公司 PEDef公司 S公司? '>'
[73]   实体定义   ::=   实体值| (外部ID NDataDecl(数据拒绝)?)
[74]    PEDef公司   ::=    实体值|外部ID

这个姓名标识实体在中实体引用或者,如果是未分析的实体,则为实体实体属性。如果同一实体声明了多次,则遇到的第一个声明是绑定;根据用户选择,XML处理器如果多次声明实体,可能会发出警告。

4.2.1内部实体

[定义:如果实体定义是实体值,定义的实体称为内部实体.那里不是单独的物理存储对象,并且给定了实体的内容在声明中。]注意,实体和字符引用的一些处理在中文字实体价值可能需要生成正确的替换文本:请参阅4.5内部实体替换文本的构建.

内部实体是一个已析实体.

内部实体声明示例:

<!实体发布状态“这是规范。">

4.2.2外部实体

[定义:如果实体不是内部的,则它是外部实体,已声明如下:]

外部实体声明
[75]   外部ID   ::=   “系统”S公司 SystemLiteral(系统文字)
|“公共”S公司 PubidLiteral(公共文字) S公司 SystemLiteral(系统文字)
[76]   NDataDecl(数据拒绝)   ::=   S公司“NDATA”S公司 姓名[VC:声明的符号]

如果NDataDecl(数据拒绝)存在,这是一个将军未分析的实体; 否则它是一个已解析的实体。

有效性约束:符号宣布

这个姓名必须与声明的匹配名称符号.

[定义:该SystemLiteral(系统文字)称为实体的系统标识。它是一个【E88】URI引用【E66】(如定义在里面[IETF RFC 2396],更新者[IETF RFC 2732]),【E76】旨在被解引用以获得XML处理器的输入构造实体的替换文本。]这是片段标识符的错误(以#字符)作为系统标识符的一部分。除非本规范范围以外的信息另有规定(例如,由特定DTD定义的特殊XML元素类型,或处理特定应用程序规范定义的指令),相对URI相对于实体声明所在的资源位置发生。因此,URI可能与文档实体,指向包含外部DTD子集或其他人外部参数实体.

[电子78]URI引用需要对某些字符进行编码和转义。不允许的字符包括所有非ASCII字符,以及排除的第2.4节中列出的字符[IETF RFC 2396],除了数字符号(#)和百分号(%)字符和方括号字符[IETF RFC 2732]。不允许的字符必须转义如下:

  1. 每个不允许的字符都转换为UTF-8[IETF RFC 2279]作为一个或多个字节。

  2. 与不允许的字符对应的任何八位字节都用转义URI转义机制(即转换为%HH(小时),其中HH是字节值的十六进制表示法)。

  3. 原始字符被结果字符序列替换。

[定义:在除了系统标识符外,外部标识符还可以包括公共标识符.]XML处理器试图检索实体的内容可以使用公共标识符来尝试生成替代【E88】URI引用。如果处理器无法执行此操作,则必须使用【E88】系统文字中指定的URI引用。比赛开始前尝试时,必须规范化公共标识符中的所有空白字符串到单空格字符(x20),前导和尾随空格必须被删除。

外部实体声明示例:

<!实体打开舱口系统”http://www.textualy.com/boilerplate/OpenHatch.xml"><!实体打开舱口PUBLIC“-//文本//TEXT标准开口样板//EN”"http://www.textualy.com/boilerplate/OpenHatch.xml"><!ENTITY图案填充-pic系统“../grafix/OpenHatch.gif”NDATA gif>

4.3已分析的实体

4.3.1文本声明

外部解析的实体可以分别以文本声明.

文本声明
[77]   文本拒绝   ::=   '<?xml’版本信息?编码拒绝 S公司? '?>'

文本声明必须按字面意思提供,而不是由对已分析实体的引用。任何位置都不得出现文本声明而不是外部已解析实体的开头。[公元94年]不考虑外部已分析实体中的文本声明它的一部分替换文本.

4.3.2成型良好已分析的实体

如果文档实体与生产已标记文件.外部将军如果解析的实体与标记为extParsedEnt(外部解析Ent)。如果外部参数实体与产品已标记extPE(外部PE).

成型井外部分析实体
[78]   extParsedEnt(外部解析Ent)   ::=   文本拒绝?内容
[79]    extPE(外部PE)   ::=    文本拒绝?extSubsetDecl(扩展子集拒绝)

如果内部通用解析实体的替换文本与标记的产品匹配内容。根据定义,所有内部参数实体都是格式良好的。

实体形式良好的一个结果是逻辑和物理XML文档中的结构被正确嵌套;启动标签,结束标记,空元素标签,要素,评论,处理指令,字符参考,或实体引用可以开始于一个实体,结束于另一个实体。

4.3.3实体中的字符编码

每个XML文档中的外部解析实体可以使用不同的编码它的特点。所有XML处理器必须能够读取中的实体【E56】UTF-8和UTF-16编码。【E77】本规范中的术语“UTF-8”和“UTF-16”不适用使用任何其他标签进行字符编码,即使编码或标签与UTF-8或UTF-16非常相似。

UTF-16编码的实体必须以描述的字节顺序标记开始【E67】附录F[ISO/IEC 10646],附录H[ISO/IEC 10646-2000],第2.4节[统一码]和第2.7节[单码3](该零宽度无空格字符,#xFEFF)。这是一个编码签名,不是XML文档的标记或字符数据的一部分。XML格式处理器必须能够使用此字符来区分UTF-8和UTF-16编码文档。

虽然需要XML处理器要读取UTF-8和UTF-16编码中的实体,可以识别世界各地都在使用其他编码XML处理器读取使用它们的实体。【E47】在缺少外部字符编码信息的情况下(例如MIME标头),解析的实体存储在除UTF-8或UTF-16必须以文本声明开头(请参见4.3.1文本声明)包含编码声明:

编码声明
[80]   编码拒绝   ::=   S公司“编码”等式('"'EncName(加密名称)'"' | "'"EncName(加密名称)"'" )
[81]   EncName(加密名称)   ::=   [A-Za-z]([A-Za-z0-9._]|'-')*/*编码名称仅包含拉丁字符*/

文件实体,编码声明是XML声明. TheEncName(加密名称)使用的编码的名称。

在编码声明中,价值观”UTF-8型", "UTF-16型", "ISO-10646-UCS-2标准“,以及”异-10646-UCS-4“应用于各种Unicode/ISO/IEC 10646的编码和转换,值“ISO-8859-1标准", "ISO-8859-2标准", ... "异-8859-9"应用于ISO 8859的部分,以及值”ISO-2022-JP标准", "换档_JIS“,以及”欧盟-日本“应使用适用于JIS X-0208-1997的各种编码形式。【E57】建议将字符编码注册为字符集s) 通过互联网号码分配机构【E58】[IANA-图表集],除了刚才列出的以外,应使用其注册名称;其他编码应该使用以“x-”前缀开头的名称。XML处理器应匹配字符以区分大小写的方式编码名称,并应解释IANA注册的name作为该名称在IANA注册的编码,或将其视为未知(当然,处理器不需要支持所有IANA注册的编码)。

没有外部传输协议提供的信息(例如HTTP或MIME),它是一个错误包含要呈现给XML的编码声明的实体处理器使用声明中指定的编码以外的编码,或既不以字节顺序标记也不以编码声明开头的实体使用UTF-8以外的编码。注意,由于ASCII是UTF-8,普通ASCII实体不严格需要编码声明。

【E5】【E36】致命的的错误文本拒绝发生在外部实体的开头。

它是一个致命错误当XML处理器遇到带有编码的实体时无法处理。[第79页]如果确定了XML实体(默认情况下,编码声明或更高级别的协议)以某种编码但包含在该编码中不合法的八进制序列。它也是如果XML实体不包含编码声明及其内容,则为致命错误不是合法的UTF-8或UTF-16。

示例【E23】包含编码声明的文本声明:

<?xml编码=“UTF-8”?><?xml编码=“EUC-JP”?>

4.4XML处理器对实体和引用的处理

下表总结了字符引用、实体引用、,可能会出现未分析实体的调用以及所需的行为xml处理器在每个案例。最左侧列中的标签描述了识别上下文:

内容中的引用

作为在启动标签结束标记元素的;对应于非终结符内容.

属性值中的引用

作为中属性值内的引用启动标签,或中的默认值属性声明; 对应于非终结符AttValue(附件值).

作为属性值发生

作为一个姓名,也不是引用作为已声明为类型的属性的值实体,或作为属性值中的一个空格分隔标记已声明为类型实体.

实体值中的引用

作为参数或内部实体的引用文字实体值实体声明中;对应于非终结符实体值.

DTD中的参考

【E90】作为的内部或外部子集中的引用DTD公司,但在实体值,AttValue(附件值),圆周率,注释,SystemLiteral(系统文字),PubidLiteral(公共文字),或忽略的条件节的内容(请参见3.4条件部分).

.

实体类型字符
参数 内部概述外部解析通用未分级
内容中的引用未被识别包括验证时包含被禁止的包括
属性值中的引用未被识别包含在文字中被禁止的【E51】被禁止的包括
作为属性值发生未被识别被禁止的【E51】被禁止的通知【E51】未被识别
EntityValue中的引用包含在文字中被忽略的被忽略的被禁止的包括
DTD中的参考包括作为PE被禁止的被禁止的被禁止的被禁止的

4.4.1未识别

在DTD外部%角色没有特殊意义;因此,在DTD在中未被识别为标记内容同样,无法识别未分析实体的名称,除非它们出现在适当声明的属性值中。

4.4.2包括

[定义:实体是包括替换文本就地检索和处理引用本身,就好像它是该位置文档的一部分该引用已被识别。]替换文本可能包含这两个字符数据和(参数实体除外)标记,必须在通常的方式。(字符串“AT&amp;T;“扩展到”美国电话电报公司;“并且剩余的与号不被识别为实体引用分隔符。)字符引用是包括当指示的字符代替引用本身进行处理。

4.4.3验证时包含

当XML处理器识别对已解析实体的引用,以便验证处理者必须包括其替换文本。如果实体是外部的,处理器不尝试验证XML文档,处理器可以但不必包括实体的替换文本。如果非验证[公元95年]处理器不包含替换文本,它必须通知它识别但未读取实体的应用程序。

此规则基于自动包含提供的识别通过SGML和XML实体机制,主要用于支持模块化在创作中,不一定适用于其他应用程序,尤其是文档浏览。例如,浏览器在遇到外部解析实体引用,可以选择提供实体的显示并检索它以便仅按需显示。

4.4.4禁止

禁止以下行为:,并构成致命的错误:

4.4.5包含在字面意义的

实体参考出现在属性值或参数实体引用中出现在文字实体值中,其替换文本代替引用本身进行处理它是文件的一部分,位于引用被识别的位置,替换文本中的单引号或双引号字符除外始终被视为普通数据字符,不会终止文本。例如,这是格式良好的:

<!--【E4】--><!实体%YN'“是”'><!实体他说什么“他说%YN;”>

而这不是:

<!实体EndAttr“27'”><元素属性='a-&EndAttr;>

4.4.6通知

未分析的实体在声明的属性值中显示为标记类型实体实体,验证处理器必须通知应用系统公众的(如有)实体及其关联的标识符符号.

4.4.7旁路

当通用实体引用出现在实体值在实体声明中,它被绕过并保持原样。

4.4.8纳入PE

正如对于外部解析实体,参数实体只需要验证时包含。识别参数-属性引用时包括在DTD中,其替换文本通过一根引线和一根引线的连接而扩大后跟空格(#x20)字符;其目的是约束替换包含整数语法标记的参数实体的文本在DTD中。[公元96年]此行为不适用于实体内的参数实体引用价值观;这些在中进行了描述4.4.5包含在文字中.

4.5内部实体替换文本的构建

在讨论处理内部实体时,区分两种形式的实体的值。[定义:该文字实体值引用的字符串实际存在吗在实体声明中,对应于非终结符实体值.] [定义:该替换文本是替换后实体的内容字符引用和参数-实体引用。]

文字内部实体声明中给定的实体值(实体值)可以包含字符、参数-实体和泛型-实体参考文献。此类引用必须完全包含在文字中实体值。实际替换文本包括如上所述,必须包含替换文本引用的任何参数实体,并且必须包含引用的字符到,代替文字实体值中的任何字符引用;然而,泛型实体引用必须保持为-is,未展开。例如,给定以下声明:

<!实体%pub“&#xc9;条件Gallimard”><!实体权利“保留所有权利”><!实体书籍“害虫:阿尔伯特·加缪,&#xA9;1947%酒吧&权利;" >

然后是实体的替换文本“"是:

《害虫》:阿尔伯特·加缪,©1947 Editions Gallimard版权所有&权利;

通用实体参考”&权利;"如果引用“&书籍;“出现在文档的内容或属性值。

这些简单的规则可能具有复杂的相互作用;为了详细讨论一个困难的例子,看见D实体和字符引用的扩展.

4.6预定义实体

[定义:实体和字符引用都可以用于逃跑这个左尖括号、与号和其他分隔符。一组通用实体(放大器,书信电报,gt公司,阿波罗,引用)是为此目的而指定的。数字字符引用可能也可使用;它们在被识别时会立即扩展,必须进行处理作为字符数据,因此数字字符引用“&#60;"和“&#38;“可能被用来逃跑<&当它们出现在字符数据中时。]

所有XML处理器必须识别无论是否声明这些实体。为了实现互操作性,有效的XML文档应声明这些实体与其他任何实体一样,在使用它们之前。【E80】如果实体书信电报放大器已声明,它们必须声明为其替换文本为字符的内部实体对转义字符的引用;需要双重转义以使对它们的引用产生格式良好的结果。如果实体gt公司,阿波罗,或引用声明后,它们必须声明为内部实体,其替换文本转义的单个字符(或对该字符的字符引用;这里的双重转义没有必要,但无害)。例如:

<!实体lt“&#38;#60;”><!实体gt“&#62;”><!实体amp“&#38;#38;”><!实体apos“&#39;”><!实体“&#34;”>

4.7符号声明

[定义:符号通过名称识别的格式未分析的实体,包含的元素的格式表示法属性或应用程序处理指令已寻址。]

[定义:符号声明提供一个表示法的名称,用于实体和属性列表声明以及在属性规范中,以及用于表示法的外部标识符可以允许XML处理器或其客户端应用程序查找助手应用程序能够处理给定符号中的数据。]

符号声明
[82]   符号拒绝   ::=   '<!符号'S公司 姓名 S公司(外部ID|公共ID)S公司? '>'[VC:[E22]唯一符号名称]
[83]   公共ID   ::=   “公共”S公司 PubidLiteral(公共文字)

有效性约束:【E22】唯一符号名称

只有一个符号声明可以声明给定姓名.

XML处理器必须为应用程序提供任何属性值、属性定义、,或实体声明。它们还可以解析外部标识符进入系统标识,文件名,或允许应用程序调用以所述符号表示数据的处理器。(然而,这不是一个错误,用于XML文档声明和引用特定于符号的符号应用程序在XML处理器或应用程序所在的系统上不可用正在运行。)

4.8文档实体

[定义:该文档实体作为实体树的根的起点xml处理器.]本规范未指定文档实体的格式由XML处理器定位;与其他实体不同,文档实体具有没有名称,很可能出现在处理器输入流中而没有任何标识完全。

5合规性

5.1验证和非验证处理器

符合XML处理器分为两类:验证和非验证。

验证和非验证处理器必须的内容文档实体以及任何其他已分析的实体他们读到的。

[定义:验证处理器必须[E21],根据用户选项,报告违反所表示约束的情况根据DTD公司以及未能满足本规范中给出的有效性约束。]为此,验证XML处理器必须读取并处理整个DTD和文档中引用的所有外部解析实体。

未验证处理器只需要检查文档实体,包括完整的内部DTD子集。[定义:同时他们不需要检查文件的有效性,他们是必需的过程它们在内部DTD子集中读取的所有声明以及在他们读取的任何参数实体中,直到第一次引用它们所做的参数实体读取;也就是说,他们必须使用这些声明中的信息使正常化属性值,包括内部实体的替换文本,以及供应默认属性值.]【E33】除非是在standalone=“是”,不得过程 实体声明属性列表声明在引用参数后遇到未读取的实体,因为该实体可能包含重写声明。

5.2使用XML处理器

验证XML处理器的行为是高度可预测的;它必须阅读文档的每一部分,并报告所有格式正确的内容有效性违规。对非验证处理器的要求更少;它需要除了文档实体之外,不要阅读文档的任何部分。这个有对XML处理器用户来说可能很重要的两个影响:

为了实现不同XML处理器之间互操作的最大可靠性,使用非验证处理器的应用程序不应依赖任何行为这种处理器不需要。需要以下设施的应用程序使用中声明的默认属性或内部实体外部实体应该使用验证XML处理器。

6符号

正式本规范使用简单的扩展Backus-Naur给出了XML语法形式(EBNF)符号。语法中的每个规则都定义一个符号形式

符号::=表达式

符号用首字母大写字母书写,如果他们是【E42】这个正则语言的开始符号,否则以小写字母开头。文字字符串被引用。

在右侧的表达式中在规则的一侧,以下表达式用于匹配一个规则的字符串或更多字符:

#x个N

哪里N个是十六进制整数,表达式匹配ISO/IEC 10646中的字符,解释时其规范(UCS-4)代码值作为无符号二进制数,具有指定的值。领先的数量中的0#x个N形式无关紧要;领先的数量相应代码值中的零由字符编码控制在使用中,对XML不重要。

【a-zA-Z】,[#xN-#xN]

与任何匹配[公元93年]烧焦值在指定范围内(含)。

【E3】[美国广播公司],[#xN#xN#xN]

与任何匹配烧焦字符中有一个值枚举。枚举和范围可以混合在一组括号中。

[^a-z],[^#xN-#xN]

与任何匹配[公元93年]烧焦具有值外部范围表明。

[^abc],[^#xN#xN#xN#xN]

与任何匹配[公元93年]烧焦值不在字符中鉴于。【E3】枚举禁止值的范围可以混合在一组括号中。

“字符串”

匹配文本字符串匹配双引号中给出的内容。

“字符串”

匹配文本字符串匹配单引号中给出的内容。

这些符号可以组合以匹配更复杂的模式,如下所示,哪里A类B类表示简单表达式:

(表达)

表达被视为一个单元,可以组合为如本列表中所述。

A?

比赛A类或者什么都没有;可选择的A类.

A和B

比赛A类然后B类.【E20】该运算符的优先级高于交替;因此A B | C D类与相同(A B)|(C D).

A|B类

比赛A类B类但并非两者兼而有之。

A-B类

匹配任何匹配的字符串A类但不匹配B类.

A类+

匹配的一个或多个事件A类.【E20】串联优先于交替;因此A+|B级+与相同(A+)|(B+).

一个*

匹配零次或多次A类.【E20】串联优先于交替;因此A*|B类*与相同(A*)|(B*).

生产中使用的其他符号包括:

/* ... */

评论。

[wfc:…]

格式约束;它通过名称标识上的约束形成良好的关联的文档用一个产品。

[vc:…]

有效性约束;它通过名称标识上的约束有效的与生产关联的文档。

A类工具书类

A.1款规范性引用文件

IANA-图表集
【E58】(互联网分配号码授权)字符集的正式名称,编辑:Keld Simonsen等人,参见ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets.
IETF RFC 1766
IETF(互联网工程任务组)。RFC 1766:标识标签语言,编辑H.Alvestrand。1995
ISO 639标准
【E38】(国际标准化组织)。ISO 639:1988(E)。代表代码语言名称。[日内瓦]:国际标准化组织,1988.
ISO 3166标准
【E38】(国际标准化组织)。ISO 3166-1:1997(E)。的代码国家及其地区名称的表示第1部分:国家代码[日内瓦]:国际标准化组织,1997年。
ISO/IEC 10646标准
ISO(国际标准化组织)。ISO/IEC 10646-1993标准(E) ●●●●。信息技术通用多路八位编码字符集(UCS)——第1部分:架构和基本多语言平面。[日内瓦]:国际标准化组织,1993年(加上AM 1修正案至AM 7)。
ISO/IEC 10646-2000标准
【E67】国际标准化组织(国际标准化组织)。ISO/IEC 10646-1:2000。信息技术通用多路八位编码字符集(UCS)--第1部分:建筑和基本的多语言平面。【日内瓦】:国际标准化组织,2000年。
Unicode码
Unicode联盟。Unicode标准,2.0版。阅读,马萨诸塞州:Addison-Wesley Developers出版社,1996年。
单码3
【E67】这个Unicode联盟。Unicode标准,3.0版。读数,质量:Addison-Wesley开发者出版社,2000年。国际标准图书编号0-201-61633-5。

A.2其他参考

ISO 639标准
【E38】(国际标准化组织)。ISO 639:1988(E)。代表代码语言名称。[日内瓦]:国际标准化组织,1988.
ISO 3166标准
【E38】(国际标准化组织)。ISO 3166-1:1997(E)。的代码国家及其分支机构名称的表示法第1部分:国家代码[日内瓦]:国际标准化组织,1997年。
WEBSGML公司
【E43】ISO(国际标准化组织)。ISO 8879:1986 TC2标准。信息技术--文档描述和处理语言。【日内瓦】:国际标准化组织,1998年。(参见http://www.sgmlsource.com/8879rev/n0029.htm)(请参见http://www.sgmlsource.com/8879rev/n0029.htm.)
IANA-LANGCODES公司
【E58】(互联网分配号码授权)语言标签注册处,编辑:KeldSimonsen等人,参见http://www.isi.edu/in-notes/iana/assignments/languages/.
IETF RFC 2376
【E48】IETF公司(互联网工程任务组)。RFC 2376:XML媒体类型.编辑E.Whitehead,M.Murata。1998年。(参见http://ietf.org/rfc/rfc2376.txt). (参见http://ietf.org/rfc/rfc2376.txt.)
IETF RFC 2396
【E66】IETF公司(互联网工程任务组)。RFC 2396:统一资源标识符(URI):通用语法T.Berners-Lee,R.Fielding,L.Masinter。1998(参见http://www.ics.uci.edu/pub/ietf/uri/rfc2396.txt.)
阿霍/乌尔曼
阿霍(Aho)、阿尔弗雷德五世(Alfred V.)、拉维·塞蒂(Ravi Sethi)和杰弗里·乌尔曼(Jeffrey D.Ullman)。编辑者:原则,技术和工具阅读:Addison-Wesley,1986年,摘录。1988年更正。
Berners-Lee等人。
Berners-Lee、T.、R.Fielding和L.Masinter。统一资源标识符(URI):通用语法和语义. 1997. (正在进行的工作;请参阅RFC1738的更新。)
布吕格曼·克莱因
【E2】布吕格曼·克莱因,安妮。文档处理中的形式模型。习惯改变。教师弗赖堡大学数学系,1993年。(参见ftp://ftp.informatik.uni-freiburg.de/documents/papers/brueggem/habil.ps.)
布吕格曼·克莱因和伍德
【E2】布吕格曼·克莱因,安妮和德里克·伍德。确定性正则语言.大学弗莱堡信息研究所,Bericht 38,Oktober 1991。扩展摘自A.Finkel,M.Jantzen,Hrsg。,STACS 1992,S.173-184。施普林格-弗拉格,1992年柏林。计算机科学课堂讲稿577。完整版本标题为一种模糊正则语言信息与计算140(2) :229-2531998年2月。
克拉克
James Clark。SGML和XML的比较。请参见http://www.w3.org/TR/NOTE-sgml-xml-971215.
IETF RFC1738
IETF(互联网工程任务组)。RFC 1738:统一资源定位器(URL)编辑:T.Berners-Lee,L.Masinter,M.McCahill。1994
IETF RFC1808
IETF(互联网工程任务组)。RFC 1808:相对统一资源定位器编辑R.Fielding。1995
IETF RFC2141
IETF(互联网工程任务组)。RFC 2141:URN语法,编辑:R.护城河。1997
IETF RFC 2279
[电子78]RFC 2279:UTF-8,ISO 10646的转换格式.互联网工程工作队,1998年。(参见http://www.ietf.org/rfc/rfc2279.txt.)
IETF RFC 2732
【E66】IETF公司(互联网工程任务组)。RFC 2732:文字IPv6格式URL中的地址R.Hinden、B.Carpenter和L.Masinter。1999年。(见http://www.ietf.org/rfc/rfc2732.txt.)
IETF RFC 2781
【E77】IETF公司(互联网工程任务组)。RFC 2781:UTF-16,ISO的一种编码10646编辑P.Hoffman,F.Yergeau。2000
ISO 8879标准
ISO(国际标准化组织)。ISO 8879:1986(E)。信息处理文本和办公系统标准通用标记语言(SGML)。第一版——1986-10-15年。【日内瓦】:国际标准化组织,1986年。
ISO/IEC 10744标准
ISO(国际标准化组织)。ISO/IEC 10744-1992标准(E) ●●●●。信息技术超媒体/基于时间的结构化语言(HyTime)。[日内瓦]:国际标准化组织,1992扩展设施附件。[日内瓦]:国际组织标准化,1996年。
XML名称
【E98】蒂姆·布雷,Dave Hollander和Andrew Layman,编辑。XML中的命名空间.Textuality、Hewlett-Packard和Microsoft。万维网联盟,1999年。(参见http://www.w3.org/TR/REC-xml名称/.)

B字符课程

遵循Unicode标准中定义的特征,字符被分类为基本字符(其中包括拉丁字母的字母字符)、表意字符和组合字符(除其他外,此类包含大多数音调符号)数字和扩展器也有区别。

字符
[84]    信函   ::=    基本字符|表意字符
[85]   基本字符   ::=   [#x0041-#x005A]|[#x0061-#x007A]|[#x00C0-#x00D6]|[#x00D8-#x00F6]|[#x000F8-#x000FF]|[[#x0100-#x0131]|[#x0134-#x013E]|[#x0141-#x0148]|[#x0114A-#x017E]|[[#x01-#x01C3]|[#x01CD-#x011F0]|[#x01F4-#x01V5]|[#x011FA-#x0217]|[[#x0250-#x020A8]|[#x02BB-#x02 C1]|#x0386|[#x0388-#x038A]|#x033C|[#x038E-#x03A1]|[#x03A3-#x03CE]|[#x003D0-#x03D6]|#x03DA|#x03DC|#x03DE|#x03E0|[#x03E2-#x03F3]|[#x0401-#x040C]|[#x040E-#x044F]|[#x0.451-#x045C]|[#x045E-#x0.481]|[#x049-#x04C4]|[#x04C7-#x04C6]|[#x04 CB-#x04 CC]|[#x04D0-#x04 EB]|[#x04 EE-#x04F5]|[#x04F8-#x04F 9]|[#x0531-#x0556]|#x0559 |[#x0561-#x00586]|[#x05D0-#x05EA]|[#x05 F0-#x05 F2]|[[#x0621-#x063A]|[#x0641-#x864A]|[#x0671-#x06B7]|[#x06 BA-#x06 BE]|[#x06C0-#x06 CE]|[&#x06D0-#x06D3]|#x06D5|[#x06E5-#x06E6]|[#x0905-#x0939]|#x093D|[#x0958-#x0961]|[#x0.985-#x0.98C]|[#x098F-#x0990]|[[#x9993-#x09A8]|[#x09AA-#x09B0]|#x09B2|[#x09 B6-#x09 b9]|[#X09 DC-#x09 DD]|[#x09DF-#x09E1]|[#x009F0-#x09F1]|[#x0A05-#x0A0A]|[&#x0A0F-#x0A10]|[#x0A13-#x0A28]|[#x0 A2A-#x0A30]|[#x0 A32-#x0 A33]|[&#x0 A35-#x0A36]|[#x0A38-#x0A59]|[#x0 A59-#x0 A 5C]|#x0 5 E |[#x 0 A72-#x0 A74]|[#x0A85-#x0A 8B]|#x0B 8D|[#x0 A8F-#x0 A 91]|[#x 0A93-#x0 AA8]|[#x0AA-#x0AB0]|[#x0AB2-#x0AB3]|[#x0AB5-#x0AB9]|#x0ABD|#x0AE0|[#x0B05-#x0B0C]|[#x0B0F-#x0B10]|[#x0B13-#x0B28]|[#x0B2A-#x0B30]|[#x0 B32-#x0 B23]|[#x0 B36-#x0 B39]|#x0|[#x0B5C-#x0B 5D]|[#x0 B5F-#x0B1]|[#x0B85-#x0B38A]|[&#x0B8E-#x0 b90]|[#x0B92-#x0B 95]|[#x0 B99-#x0 B 9A]|#x0 b9C|[#x 0B9E-#x0x0 B9F]|[#x0BA3-#x0BA 4]|[#x0 BA8-#x0巴A]|[#X0巴E-#x0BB5]|[#x0BB7-#x0BB9]|[#x0C05-#x0COC]|[#xnC0E-#x0C10]|[#x0C12-#x0C28]|[&#x0C2A-#x0C33]|[#x0C35-#x0C39]|[#x0C60-#x0C61]|[#x0C85-#x0C8C]|[#x0C8E-#x0C90]|[#x0C92-#x0CA8]|[#x0 CAA-#x0 CB3]|[#x0CB5-#x0CB9]|#x0CDE|[#x0CE0-#x0CE 1]|[#x00D05-#x0D0C]|[#x0D0E-#x0D10]|[#x0D12-#x0D28]|[#x0D2A-#x0D39]|[#x00D60-#x0D1]|[[#x01-#x0E2E]|#x0E30|[#x0E32-#x0E33]|[#x0 E40-#x0 e45]|[#x0E81-#x0%E82]|#x0E 84|[#x0E87-#x0E88]|#x0E 8A|#x0 E8D|[#x0 E 94-#x0 e97]|[#x0E99-#x0E 9F]|[#x0 EA1-#x0EA3]|#x0 EA 5|#x0EA 7|[#x0EAA-#x0EB]|[#x0 EAD-#x0EA E]|#x0 EB0|[#x 0EB2-#x0EB3]|#x0EBD |[#x0EC0-#x0EC 4]|[#x0F40-#x0F47]|[#x 0F49-#x0 F69]|[#x10A0-#x10C5]|[#x110D0-#x10F6]|#x1100|[#x1102-#x1103]|[#x1105-#x1107]|#x1109 |[#x110B-#x110C]|[#x110E-#x1112]|#x113C |#x113E |#x1140 |#x114C |#x114E |#x1150|[#x1154-#x1155]|#x1159|[#x115F-#x1161]|#x1163|#x1165|#x1167|#x1169|[#x116D-#x116E]|[#x1172-#x1173]|#x1175|#x119E|#x11A8|#x111AB|[#x11AE-#x11AF]|[#x11B7-#x11B3]|#x11BA|[#x111BC-#x11C2]|#x11EB|#x11F0|#x11V9|[#x1E00-#x1E9B]|[#x1EA0-#x1EF9]|[#x1F00-#x1F15]|[#x1F18-#x1F1D]|[#1x1F20-#x1F45]|[#x1F48-#x1F4D]|[#x1F50-#x1F57]|#x1F59|#x1F5B|#x1F 5D|[#x1F五F-#x1F7D]|[#x1F80-#x1FB4]|[#x1FB6-#x1FBC]|#x1FBE|[#x1FC2-#x1FC4]|[#x1FC6-#x1FCC]|[#x1FD0-#x1FD3]|[#1x1FD6-#x1FDB]|[#x1FE0-#x1FEC]|[#x1FF2-#x1FF4]|[#x1FF6-#x1FFC]|#x2126|[#x212A-#x212B]|#x212E |[#x2180-#x2182]|[#x3041-#x3094]|[#x30A1-#x30 FA]|[#x3105-#x312C]|[#xAC00-#xD7A3]
[86]   表意字符   ::=   [#x4E00-#x9FA5]|#x3007|[#x3021-#x3029]
[87]   组合字符   ::=   [#x0300-#x0345]|[#xO360-#x0361]|[[#x0483-#x0486]|[#x0591-#x05A1]|[#x005A3-#x05 B9]|[[#x05 BB-#X05 BD]|#x05 BF|[#x05C1-#x05C2]|#x05C4 |[#x064B-#x0652]|#x0670|[#x06D6-#x06DC]|[#x006DD-#x06DF]|[#x06E0-#x06E4]|[#x06E7-#x06E8]|[#x06EA-#x06ED]|[#x0901-#x0903]|#x093C|[#x093E-#x094C]|#x094D|[#x0951-#x0954]|[#x0962-#x0663]|[#x0981-#x0883]|#x09BC|#x09BE|#x009BF|[#x09C0-#x09C4]|[#x09C7-#x09C8]|[#x09CB-#x09CD]|#x09D7|[#x09 E2-#x09 E3]|#x0A02|#x0A3C|#x0A3E|#x033F|[#x0A40-#x0A52]|[#x0A47-#x0A18]|[#x0A4B-#x0A4D]|[#x0A70-#x0A71]|[#x0A81-#x0A83]|#x0ABC|[#x0ABE-#x0AC5]|[#x0 AC7-#x0AC 9]|[#x0 ACB-#x0 AC D]|[#x0B01-#x0B03]|#x0B3C|[#x0B2E-#x0B43]|[#x0B47-#x0B48]|[#x0B4B-#x0B 4D]|[#x0B56-#x0B 57]|[#x0 B82-#x0 B 83]|[#x0 BBE-#x0x0 BC2]|[#x 0BC6-#x00 BC8]|[#x0BCA-#x0BCD]|#x0BD7|[#xnC01-#x0C03]|[#x0C3E-#x0C44]|[#x0C46-#x0C68]|[#x0 C4A-#x0C 4D]|[#x0 C55-#x0 C56]|[#x0C82-#x0C83]|[#x0CBE-#x0CC4]|[#x0 CC6-#x0CC 8]|[#x 0CCA-#x0CCD]|[#x0CD5-#x0CD6]|[#x0D02-#x0D2]|[#x0 D3E-#x0D 43]|[#x0 D46-#x0 D 48]|[&#x0 D4A-#x0|#x0D57|#x0E31|[#x0E34-#x0E 3A]|[#x0E47-#x0 E4E]|#x0EB1|[#x0EB4-#x0EP9]|[#x0EBB-#x0ECC]|[x0EC8-#x0EDD]|[#x0F18-#x0F1 9]|#x0F35|#x0 F37|#x0-F39|#x0x0F3E|#x0F3F |[#x0F71-#x0F84]|[#x0F86-#x0F8B]|[#x0F90-#x0F95]|#x0F97|[#x0F99-#x0FAD]|[#x0FB1-#x0FB7]|#x0FC9|[#x20D0-#x20DC]|#x20E1 |[#x302A-#x302F]|#x3099|x309A号
[88]    数字   ::=    [#x0030-#x0039]|[#x0660-#x0669]|[#x06F0-#x06F9]|[#x0966-#x096F]|[#x09E6-#x09EF]|[#x0A66-#x0A 6F]|[#x0AE6-#x0AEF]|[#x0B66-#x0B6F]|[#x0BE7-#x0PEF]|[#x066-#x0C6F]|[#x0CE6-#x0 CEF]|【#x0D66-#x0D 6F]|[#x0E50-#x0E 59]|[#x0 ED0-#x0ED9]|[#x0F20-#x0 F29]
[89]   扩展器   ::=   #x00B7|#x02D0|#x020D1|#x0387|#x0640|#x0E46|#x0EC6|#x3005|[#x3031-#x3035]|[#x309D-#x309E]|[#x30FC-#x30FE]

此处定义的字符类可以派生自Unicode码【E67】2.0字符数据库如下:

C XML和SGML(非标准)

【E43】XML被设计为SGML的子集,因为每个XML文档还应是一份符合SGML标准的文件。有关XML对SGML以外的文档的附加限制,看见[克拉克].

D类实体和字符引用的扩展(非规范)

这个附录中包含一些示例,说明实体和字符引用的顺序确认和扩展,如4.4 XML处理器实体和参考文献的处理.

如果DTD包含宣言

<!ENTITY示例“<p>可以转义与号(&#38;#38;)数字(&#38;&#38;#38;)或一般实体(&amp;)</p> “>”

然后XML处理器将识别字符引用当它解析实体声明,并在存储将字符串作为实体的值“例子":

<p>可能会漏掉一个与号(&#38;)数字(&#38;&#38;)或使用通用实体(&amp;)</p>(第页)

文件中对“&示例;"将重新分析文本,此时开始和结束标记的“第页“元素将被识别,三个引用将被识别和扩展,从而产生“第页“具有的元素以下内容(所有数据,无分隔符或标记):

可以转义与号(&)数字(&#38;)或一般实体(&amp;)。

一个更复杂的示例将说明这些规则及其充分发挥作用。在下面的示例中,行号仅供参考。

1 <?xml版本=“1.0”?>2 <!DOCTYPE测试[3 <!ELEMENT测试(#PCDATA)>4 <!实体%xx’&#37;zz;'>5 <!实体%zz'&#60;!ENTITY棘手的“易出错”>'>6%xx;7 ]>8<test>这个示例显示了一个&diffle;方法</测试>

这会产生以下结果:

E确定性内容模型(非标准)

为了兼容性,要求元素类型中的内容模型声明具有确定性。

SGML需要确定性内容模型(它称之为“明确的”);使用SGML系统构建的XML处理器可能会将非确定性内容模型标记为错误。

例如内容模型((b,c)|(b,d))是不确定的,因为给定首字母b条这个[公元95年]XML处理器无法知道b条在模型中匹配而不向前看,以查看哪个元素跟随b条.在这种情况下b条可以折叠为单个引用,使模型读取(b,(c | d)).首字母b条现在显然只匹配内容模型中的一个名称。这个[公元95年]处理器没有需要向前看,看看接下来会发生什么;任何一个c(c)d日将被接受。

更正式地说:可以构造有限状态自动机使用标准算法从内容模型中删除,例如,中的算法3.5Aho、Sethi和Ullman第3.9节[阿霍/乌尔曼].英寸许多这样的算法,在正则表达式(即正则的语法树中的每个叶节点表达);如果任何位置有一个跟随集,其中有多个跟随位置用相同的元素类型名称标记,然后是内容模型出现错误,可能会报告为错误。

存在的算法允许自动减少许多但不是所有非确定性内容模型等效确定性模型;参见Brüggemann-Klein 1991[布吕格曼·克莱因].

F类字符编码的自动检测(非标准)

XML编码声明在每个实体上起到内部标签的作用,指示正在使用字符编码。在XML处理器可以读取内部然而,标签显然必须知道使用的是什么字符编码——哪个是内部标签试图指示的。在一般情况下是一种绝望的局面。然而,在XML中并非完全没有希望,因为XML以两种方式限制了一般情况:假设每个实现仅支持有限的字符编码集和XML编码声明在位置和内容上受到限制,以便实现自动检测在正常情况下,每个实体中使用的字符编码。此外,在许多除了XML数据之外,还有其他信息来源流本身。根据XML是否实体在没有或有任何附带(外部)的情况下呈现给处理器信息。我们首先考虑第一种情况。

因为每个XML实体非UTF-8或UTF-16格式必须以XML编码声明开始,其中前个字符必须为'<?xml格式',任何符合在输入两到四个八位字节后,处理器可以检测以下哪项案例适用。阅读此列表时,了解UCS-4中的“<”可能会有所帮助是“#x0000003C型“而‘?’是”#x0000003传真“,以及UTF-16数据流所需的字节顺序标记为“#xFEFF公司".【E44】符号##用于表示除00以外的任何字节值。

使用字节顺序作记号:

00 00 FE全平面
UCS-4,大发动机(1234订单)
消防FE 00 00
UCS-4,小型发动机(4321订单)
FE FF 00型##
UTF-16,大发动机
FF前端#00
UTF-16,小发动机
EF BB高炉
UTF-8型

没有字节顺序标记:

00 00 00摄氏度
UCS-4,大发动机(1234订单)
3克00 00
UCS-4,小型发动机(4321订单)
00 00摄氏度00
UCS-4,异常八位字节顺序(2143)
00摄氏度00 00
UCS-4,异常八位字节顺序(3412)
00 3C编号##00 25 ## ##00 20 ## ##00 09 ## ##00 0D编号##00 0A####
大发动机UTF-16或ISO-10646-UCS-2(注意,如果没有编码声明,这些情况严格来说就是错误)
3C 00####25 00 ## ##20 00 ## ##09 00 ## ##0D 00####0A 00####
小发动机UTF-16或ISO-10646-UCS-2(注意,如果没有编码声明,这些情况严格来说就是错误)
3C三楼78 6D
UTF-8、ISO 646、ASCII等ISO 8859、Shift JIS、EUC或任何其他7位、8位或混合宽度的一部分确保ASCII字符具有正常位置的编码,宽度和值;必须读取实际的编码声明才能检测以下哪一项适用,但由于所有这些编码都使用相同的位ASCII字符的模式,编码声明本身可以是可靠读取
4C六楼A7 94
EBCDIC(有点味道必须读取完整的编码声明,以告知正在使用的代码页)
其他UTF-8型没有编码声明,否则数据流损坏、残缺,或者用某种包装纸包装

这种级别的自动检测足以读取XML编码声明并解析字符编码标识符,它是仍然需要区分每个编码族的单个成员(例如,告诉UTF-8与8859,告诉8859的各个部分,或者区分使用中的特定EBCDIC代码页等)。

因为编码声明的内容被限制为ASCII字符,处理器可以可靠地读取整个编码声明已检测到正在使用哪一系列编码。因为在实践中使用的字符编码属于上述类别之一,即XML编码声明允许对字符编码进行合理可靠的带内标记,即使是操作系统或运输协议中的外部信息源液位不可靠。【E44】注意,由于UTF-16中的外部解析实体可能以任何字符,此自动检测并不总是有效。此外,由于超负荷使用ASCII值字节,UTF-7编码可能失败待可靠检测。

处理器检测到字符后在使用编码时,它可以适当地进行操作,无论是通过调用单独的每个案例的输入例程,或通过调用适当的转换函数输入的每个字符。

与任何自标记系统一样,XML如果任何软件更改实体的字符,编码声明将不起作用设置或编码而不更新编码声明。的实施者字符编码例程应小心确保用于标记实体的内部和外部信息。

第二个当XML实体附带编码信息时,可能会发生这种情况,在一些文件系统和一些网络协议中。当多个来源信息的可用性、相对优先级和首选方法应将处理冲突的方法指定为更高级别协议的一部分用于传递XML。【E48】具体请参阅[IETF RFC 2376],它定义了文本/xml应用程序/xmlMIME类型并提供了一些有用的指导。为了实现互操作性,然而,建议使用以下规则。

G W3C XML工作组(非标准)

本规范已编制和批准供W3C XML工作组(WG)发布。工作组对本规范的批准并不一定意味着所有工作组成员都投票赞成。这个XML工作组的现任和前任成员是:

H W3C XML核心组(非标准)

本规范的第二版为由W3C XML核心工作组(WG)编制。工作组成员本版本的出版时间为: