XML信息集是W3C定义的抽象数据模型,由文档、元素、属性等11类信息项构成,与序列化方式无关,为XML相关规范提供统一语义基础;PSVI是经Schema验证后增强的信息集。

XML信息集(XML Information Set,简称 XML Infoset)是 W3C 制定的一项基础性规范,它不定义语法或格式,而是为良构的 XML 文档提供一个**统一、抽象的数据模型**。换句话说,Infoset 描述的是“XML 文档里有什么”,而不是“它怎么写”或“怎么存”。只要一个 XML 文档符合基本语法规则(well-formed)并正确处理命名空间,它就拥有一个信息集——哪怕它没有关联 DTD 或 Schema,也不需要验证通过。
它由11类信息项构成
Infoset 把 XML 文档拆解为一组逻辑单元,称为“信息项(information items)”,每种对应文档中一类结构成分,并附带明确的属性(如名称、值、位置关系等)。这11类包括:
- 文档信息项(Document Information Item)——每个 Infoset 必有且仅有一个
- 元素信息项(Element Information Item)
- 属性信息项(Attribute Information Item)
- 命名空间信息项(Namespace Information Item)
- 字符信息项(Character Information Item)
- 注释信息项(Comment Information Item)
- PI 信息项(Processing Instruction Information Item)
- 文档类型声明信息项(Document Type Declaration Information Item)
- 未扩展实体引用信息项(Unexpanded Entity Reference Information Item)
- 非解析实体信息项(Unparsed Entity Information Item)
- 格式信息项(Notation Information Item)
它不绑定具体表现形式
Infoset 是与序列化方式无关的。同一个 Infoset 可以用纯文本 XML 1.0 表示,也可以用二进制编码(如 WCF 中的 MTOM 或 Binary XML),甚至能映射到基于事件的 SAX 解析流或树状 DOM 结构。关键在于:不同技术栈只要最终操作的是同一套信息项,就能互认语义。这也是 SOAP、XML Schema、XSLT 2.0 等规范能协同工作的底层基础。
PSVI 是验证后的增强版信息集
当 XML 文档经过 XML Schema 验证时,处理器可对原始 Infoset 进行补充,比如插入缺省属性值、标注类型信息、标记是否为 ID/IDREF 等。这种补充后形成的信息集叫 post-schema-validation infoset(PSVI)。注意:PSVI 是可选行为,且仅 XML Schema 支持;RELAX NG 不做此类增强,因此不生成 PSVI。
它不是实现模型,而是契约语言
Infoset 明确声明自己不规定接口形式——它不要求必须用树形结构存储,也不强制使用 DOM 或 XPath 模型。你可以用流式解析器、图结构、数据库记录甚至函数式数据流来体现它。它的作用是让不同规范和 API 在讨论“一个元素有没有某个属性”“某个命名空间是否声明过”这类问题时,有共同的语言和边界定义。










