什么是XML信息集 XML Infoset规范

发布时间 - 2025-12-31 00:00:00    点击率:
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 在讨论“一个元素有没有某个属性”“某个命名空间是否声明过”这类问题时,有共同的语言和边界定义。


# 处理器  # 编码  #   # 命名空间  # xml  # 接口  # Namespace  # Attribute  # 事件  # dom  # 数据库  # 文档  # 可以用  # 的是  # 它不  # 也不  # 有什么  # 序列化  # 就能  # 这类  # 树状 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速生成可下载的建站源码工具?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  html5的keygen标签为什么废弃_替代方案说明【解答】  如何解决hover在ie6中的兼容性问题  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel如何为API生成Swagger或OpenAPI文档  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  EditPlus中的正则表达式 实战(1)  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  java中使用zxing批量生成二维码立牌  油猴 教程,油猴搜脚本为什么会网页无法显示?  大同网页,大同瑞慈医院官网?  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何快速搭建安全的FTP站点?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何在景安服务器上快速搭建个人网站?  python中快速进行多个字符替换的方法小结  Android仿QQ列表左滑删除操作  如何在腾讯云服务器快速搭建个人网站?  C#如何调用原生C++ COM对象详解  如何在Windows 2008云服务器安全搭建网站?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何快速生成高效建站系统源代码?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel中的withCount方法怎么高效统计关联模型数量  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  BootStrap整体框架之基础布局组件  Laravel如何使用withoutEvents方法临时禁用模型事件  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何在新浪SAE免费搭建个人博客?  详解MySQL数据库的安装与密码配置  详解Oracle修改字段类型方法总结  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel怎么在Controller之外的地方验证数据  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程