不能。sublime text 本身不解析 xsd,仅支持格式良好性检查;xsd 校验需依赖外部工具(如 xmllint)或插件(如 exalt),后者可自动识别 schema 引用并校验,但要求编码为无 bom 的 utf-8、xsd 路径为相对路径。

Sublime Text 能不能直接校验 XSD 规则?
不能。Sublime Text 本身不解析 XSD,也不执行 Schema 级验证——它只支持格式良好性(well-formed)检查,比如标签是否闭合、编码是否合法。XSD 校验必须依赖外部工具(如 xmllint)或插件(如 Exalt)桥接解析器。
用 Exalt 插件自动识别并校验 XSD
Exalt 是目前 Sublime Text 中唯一能根据 xsi:schemaLocation 或 xsi:noNamespaceSchemaLocation 自动加载本地 XSD 并触发校验的插件:
- 安装后需确保 XML 文件里有正确的 schema 引用,例如:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nonamespaceschemalocation="schema.xsd"></root> - 文件编码必须是无 BOM 的 UTF-8,否则
Exalt读取 XSD 时会报UnicodeDecodeError - XSD 文件路径要是相对路径(相对于 XML 文件所在目录),不能是绝对路径或 URL
- 如果校验无反应,打开 Sublime 控制台(
Ctrl+`),看是否有Failed to load schema或IOError: [Errno 2] No such file类错误
用 xmllint 手动构建 XSD 校验命令
比插件更可靠的方式是绕过插件,直接调用系统 xmllint 做构建任务,它支持完整 XSD 验证:
- 先确认终端能运行:
xmllint --version;macOS 用brew install libxml2,Windows 需把xmllint.exe加入 PATH - 新建 Build System(
Tools → Build System → New Build System),填入:
{
"cmd": ["xmllint", "--noout", "--schema", "$file_path/schema.xsd", "$file"],
"selector": "text.xml",
"file_regex": "^(.*?):([0-9]+):([0-9]+): (.*)$"
}
- 保存为
XML-Schema.sublime-build,然后按Ctrl+Shift+B选择它即可运行;错误行号会高亮,悬停显示具体问题(如Element 'age': 'twenty' is not a valid value of the atomic type 'xs:integer') - 注意:
$file_path/schema.xsd要和你的实际 XSD 路径匹配,不支持通配符或变量推导
为什么 XML Tools 和 SublimeLinter-contrib-xml 都不校验 XSD?
因为它们底层只调用 xmllint --valid(即 DTD 模式)或仅做 well-formed 检查,不传 --schema 参数。即使你配置了 xsi:schemaLocation,这些插件也完全忽略——它们不解析 XML 头部属性,也不加载外部 XSD 文件。
真正容易被忽略的一点:XSD 校验失败时,错误往往不在 XML 内容本身,而在命名空间声明、targetNamespace 与 xsi:schemaLocation 值不一致、或 XSD 文件里引用了不存在的 xs:import 路径。这类问题 xmllint 会明确报出,但插件连尝试都不会尝试。











