XML是W3C定义的文档格式https://www.w3.org/XML/,相关的规范可以在https://www.w3.org/XML/Core/#Publications寻得。

Extensible Markup Language (XML) 1.0 (Fifth Edition)

  • W3C Recommendation 26 November 2008
  • Abstract

    • XML全称Extensible Markup Language,是SGML的一个子集。是为了将SGML适配成HTML,XML作为两者的中间格式。
  • Status of this Document(略)

  • 1 Introduction

    • 描述的是一类数据对象,称作XML文档,以及计算机应该如何处理此类文档。
    • XML是SGML(Standard Generalized Markup Language)的特化
    • XML文档基本存储单元为实体,其中保存已解析或未解析的数据
      • 已解析的数据有字符构成,有些是字符数据,有些是签记(markup)
      • 签记录编了文档的存储布局和逻辑结构
      • XML提供机制可以用于给存储布局和逻辑结构施加约束
    • 1.1 Origin and Goals

      • XML的设计目标(节选)
        • 最少化可选特性,最好没有
        • 签记是否简明,无关紧要
    • 1.2 Terminology

      • 采用了RFC2119术语
      • 下面额外的术语用于XML处理器
        • error,对规范的违反,除非指明,否则其结果未定义
        • fatal error,停止正常处理,但是可以尝试查找更多错误
        • at user option,按用户
        • validity constraint,某规则,应用于所有有效的XML文档,违反此规则意味着错误
        • well-formedness constraint,应用于格式完好的XML文档
        • match,两个字符串或两个名字对比一致
          • ISO/IEC 10646中,同一字符可以有多种表示
          • 大小写不做同
          • 字符串由语法产生式定义
          • 元素由其声明定义
        • for compatibility,那些XML兼容SGML的方面
        • for interoperability,一些非强制的推荐,用于增强XML文档能够被SGML处理器处理的能力
  • 2 Documents

    • 定义:一个数据现例是一个格式完好的XML文档。然后,XML文档必须符合约束条件才算是有效的
    • 每个XML文档同时有逻辑以及物理结构。
      • 物理上,文档由实体单元构成,每个实体可以参照其他实体。文档从根实体(也叫文档实体)开始。
      • 逻辑上,文档由声明、元素、注解、字符引用以及处理指令构成。这些都是以签记的形式表现的。
    • 2.1 Well-Formed XML Documents

      • 一个文本对象是格式完好的XML文档的前提
        • 整体满足格式完好性要求
        • 文档中直接或间接引用到的已解析实体,都是格式完好的
      • Document的产生式
        • document    ::=    prolog element Misc*
        • 顶级节点以外的节点,都有上级节点
    • 2.2 Characters

      • 已解析的实体包含文本,也就是字符序列,表示字符数据或者签记。
      • 字符定义为文本的原子单位,由ISO/IEC 10646:2000规定。
        • 文中给出了字符的有效取值范围
        • 不鼓励文档作者使用"compatibility characters"以及其他一些字符
    • 2.3 Common Syntactic Constructs

      • 定义了一些措辞
        • 空白符
        • name token,可用于名字的字符序列
          • NameStartChar, NameChars;
        • 字面值
          • EntityValue、AttValue、SystemLiteral、PubidLiteral、PubidChar
    • 2.4 Character Data and Markup

      • 文本由相互嵌套的字符数据和签记构成
        • 签记是有具体定义的
        • 签记以外的就是字符数据,其产生式为
          • CharData    ::=    [^<&]* - ([^<&]* ']]>' [^<&]*)
    • 2.5 Comments

      • 可以在签记之外的任意位置出现,以及其他一些特别允许的地方
      • 注解内不能出现--
    • 2.6 Processing Instructions

      • 用于给应用提供处理指令
      • 不属于文档的字符数据,但是必须传给应用
    • 2.7 CDATA Sections

      • 字符数据中的任意位置皆可放置
      • 其中的内容只能被解释为字符数据,而不能解释为签记(]]>除外)
      • <![CDATA[开头,以]]>结尾
    • 2.8 Prolog and Document Type Declaration

      • XML文档应以XML声明开头,例如<?xml version="1.0"?>
        • 具有此声明文档才完整并且是格式完好,但文档是否有效要看其约束
      • 签记的作用是描述存储以及逻辑结构,来将属性的名和值关联到逻辑结构上
      • DTD(document type declaration)机制可以用于施加约束于逻辑结构之上,以及支持预定义的存储单位。
      • DTD必须在第一个元素之前定义
      • (剩余略)
    • 2.9 Standalone Document Declaration

      • 相关声明<?xml version="1.0" standalone='yes'?>
      • (剩余略)
    • 2.10 White Space Handling

      • 特殊的属性xml:space用于告知此元素中的空白符要保留给应用。
      • 有效文档中,此属性也必须现声明才能使用
        • <!ATTLIST poem xml:space (default|preserve) 'preserve'>
        • <!ATTLIST pre xml:space (preserve) #FIXED 'preserve'>
    • 2.11 End-of-Line Handling

      • XML处理器在解析前必须将换行规范成#xD #xA,或者单个#xA
    • 2.12 Language Identification

      • xml:lang可以用于指定语言,此属性也必须先声明后使用。
      • 属性的值来自于IETF BCP 47
      • (剩余略)
  • 3 Logical Structures

    • XML文档包含一至多个元素,其边界由开始标签和结束标签框定、或者由空元素标签
    • 每个元素有一个类型,由其名字给出,有时叫做其GI(generic identifier),可伴随一个属性集合,每个有名和值
    • (剩余略)
    • 3.1 Start-Tags, End-Tags, and Empty-Element Tags

      • (略)
    • 3.2 Element Type Declarations

      • (停)

Namespaces in XML 1.1 (Second Edition)

W3C Recommendation 16 August 2006

  • Abstract

    • 提供一个简单的方法,通过IRI来确认XML中使用的元素和属性的名字。
  • Status of this Document

  • 1 Motivation and Summary

    • 单一XML文档,其元素和属性,可能会包含被多个软件模块使用的
    • 此规范描述了XML命名空间机制,用于扩充元素和属性的名字
    • 1.1 A Note on Notation and Usage(略)

  • 2 XML Namespaces

    • 2.1 Basic Concepts

      • XML名字空间由一个IRI引用(RFC3987)来表示
      • 扩充名是一个对子,包含名字空间名和本地名
      • IRI引用可以包含名字中不允许的字符,所以扩充名不直接使用,转而使用的是限定名(qualified name),也就是一个受命名空间解释影响的名字
      • 措辞上,限定名是带前缀名、或无前缀名
      • 通过基于属性的声明措辞来将前缀绑定到命名空间,指定一个默认名字空间给无前缀名
    • 2.2 Use of IRIs as Namespace Names

      • 空字符串,虽也是一个合法的IRI引用,但不认为是一个命名空间名字
      • 相对IRI引用,已经被废弃了。
    • 2.3 Comparing IRI References

      • IRI引用当作字符串对比,大小写敏感,且不支持转义
      • 在命名空间声明中,IRI引用此属性的规范化的值
  • 3 Declaring Namespaces

    • (停)