XSD是什么 XSD文件怎么验证XML

XSD 是 XML 模式定义文件,用标准 XML 语法描述元素、属性、数据类型、嵌套结构等规则,支持命名空间、强数据类型和断言,需通过编程、命令行等方式验证 XML 是否符合其约束。

XSD 是 XML Schema Definition 的缩写,即 XML 模式定义文件。它用标准 XML 语法描述一个 XML 文档允许包含哪些元素、属性、数据类型、嵌套结构、出现次数、取值范围等规则。相比老式的 DTD,XSD 支持更强的数据类型(如 xs:datexs:decimal)、命名空间、可扩展性,并能被现代开发工具和框架直接解析和校验。

什么是 XSD 文件

XSD 文件本身是合法的 XML 文本,根元素必须是 xs:schema(通常带 xmlns:xs 命名空间声明)。它通过以下方式约束 XML:

  • 定义元素名称、是否必需、最多/最少出现几次(minOccurs/maxOccurs
  • 指定元素内容类型:简单类型(如字符串、整数、正则匹配的邮箱)或复杂类型(含子元素和属性)
  • 限制值范围:例如用 xs:minInclusive 要求年龄 ≥ 0,用 xs:pattern 要求手机号符合 1[3-9]\d{9}
  • 支持断言(xs:assert):在 XSD 1.1 中可写逻辑表达式,比如 “当 status='active' 时,expiryDate 必须存在”

如何用 XSD 验证 XML 文件

验证就是检查某个 XML 文件是否完全满足 XSD 中定义的所有结构与值约束。常用方法有三类:

  • 编程验证(.NET):使用 System.Xml.Schema.XmlSchemaSet 加载 XSD,再调用 XmlDocument.Validate(),错误会通过 ValidationEventHandler 回调返回
  • 编程验证(Java):用 javax.xml.validation.ValidatorSchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) 创建校验器,传入 XML Source 即可
  • 命令行工具(Linux/macOS):安装 xmllint 后执行 xmllint --schema schema.xsd data.xml --noout;或用 Apache Xerces 的 SAXCount -f -s -n data.xml

验证前要注意什么

不是所有 XSD 都能直接拿来验证,需确认几点:

  • XSD 文件本身语法正确(可用在线 XSD 校验器或 IDE 如 VS Code + XML 插件预检)
  • XML 文件开头的 xmlnsxsi:schemaLocation 声明,要与 XSD 中的 targetNamespace 一致(否则可能跳过校验)
  • 如果 XSD 引用了其他 XSD(通过 xs:includexs:import),确保路径可访问,或提前合并/预加载全部依赖
  • 注意版本:xs:assert 等高级特性仅在 XSD 1.1 支持,而 .NET Framework 默认只支持 1.0,需升级到 .NET Core/.NET 5+ 并启用 XSD 1.1 支持

一个最小可运行示例

假设你有如下 XSD(person.xsd):


  
    
      
        
        
      
    
  

对应合法 XML(person.xml)应为:



  Alice
  28

若把 age 改成 -5 或 "abc",验证就会报错:“The value '-5' is not valid according to its datatype…”