XSD 断言违规可以是警告而不是错误吗?

Can XSD assertion violations be warnings rather than errors?

我一直在使用 XML 架构 1.1,因为我想在架构中定义一些断言。问题是我是否可以将任何断言错误作为简单的警告来处理。

原因是我的网站会自动处理任何不一致的地方,所以我想通知用户所做的更改。

也许有一个我不知道的 "assert" 合适的替代品。

不,XSD 没有这样的警告概念,并且不直接支持用户控制的有关约束违规的消息传递。

您可以查看 Schematron,其中可以指定断言消息以及 @role@flag 属性。


根据 OP 评论更新:

是的,您可以编写自定义 SAX 错误处理程序来拦截和更改验证解析器的默认错误消息。 (参见 Tip: Validation and the SAX ErrorHandler interface)但是,这不会在 XSD 本身中以声明的方式自然表示,除非您还以某种创造性的方式利用 xsd:appinfo

无效文档是否是错误的原因或警告不是架构的功能;它由验证器和验证器的调用者确定。

大多数验证器默认假定它们应该在无效输入时引发错误,但没有什么需要这种行为。您正在使用的验证器可能有一个调用时间选项,允许您请求警告,或者如果您从 Java 之类的语言调用解析器,您当然可以自己捕获异常。通过检查验证器提供的错误代码,您几乎可以肯定地确定无效的原因是否是错误的断言。

如果您是任何验证器的用户(特别是如果您是付费客户),您可能会考虑让开发人员知道您想要一个行为不同的验证器接口;很明显,如果你不告诉他们,他们永远不会知道。