Schematron是一种基于XPath断言的XML语义验证语言,专注业务规则而非结构约束。它通过context定位节点、assert检查条件,支持跨元素关系、计算逻辑和日期函数,常与XSD分层配合使用。

Schematron 是一种基于规则的 XML 验证语言,它不依赖元素结构或数据类型定义(如 DTD、XML Schema 或 Relax NG),而是通过编写逻辑断言(assertions)和报告(reports)来检查 XML 文档是否符合业务规则、语义约束或领域特定要求。
核心思想:用 XPath 表达“应该是什么”
Schematron 的验证逻辑围绕 上下文(context) 和 条件断言(assert) 展开。你指定一个 XPath 表达式定位到某类节点,再用另一个 XPath 判断该节点或其周围环境是否满足某种业务条件。
- 例如:要求每个
下必须有且仅有一个,且值大于 0 —— 这在 XSD 中难以直接表达,但在 Schematron 中可写为:发票必须有唯一且正数的总金额 - 它不描述“文档长什么样”,而是回答“文档是否合理”——更贴近人工校验逻辑。
与 XSD 等结构型 Schema 的关键区别
XSD 主要约束元素顺序、出现次数、数据类型;Schematron 则专注跨元素关系、计算逻辑、条件依赖等“软性规则”。
对于一个刚进入PHP 开发大门的程序员,最需要的就是一本实用的开发参考书,而不仅仅是各种快速入门的only hello wold。在开发的时候,也要注意到许多技巧和一些“潜规则”。PHP是一门很简单的脚本语言,但是用好它,也要下功夫的。同时,由于PHP 的特性,我一再强调,最NB 的PHP 程序员都不是搞PHP 的。为什么呢?因为PHP 作为一种胶水语言,用于粘合后端 数据库和前端页面,更多需
- XSD 很难表达:“如果
status是shipped,则shippingDate必须存在且早于当前日期” —— Schematron 可直接用 XPath 函数(如current-date())实现。 - Schematron 规则可复用、可嵌套、支持变量和函数扩展(通过 XSLT 实现),适合渐进式增强验证能力。
- 它本身不是独立执行引擎,通常编译为 XSLT,再由标准 XSLT 处理器运行,因此天然兼容现有 XML 工具链。
典型使用场景
适合需要语义级、业务级校验,而非仅语法合规的场合:
- 电子病历中检查“用药剂量不能超过患者体重允许上限”
- 报关 XML 中验证“征税方式为免税时,税额字段必须为空或为零”
- 出版行业校验“所有带 ID 的图必须在正文中被引用(
)” - 配合 XSD 使用:XSD 做基础结构检查,Schematron 补充业务规则,形成分层验证体系。
简单起手示例
验证一个图书 XML 中:每本 必须有 和 ,且页数()要是正整数:









