具有包含空格的 xsd:token 类型元素的实例是否会通过验证?

Will an instance with a xsd:token-type element containing whitespace pass validation?

最终目标是通过简单地不允许不良 xs:token 内容通过相关元素的模式验证来防止在经过验证的 XML 内容池中出现白色 space。架构无效的实例不允许进入池。

如果我在 XML 模式 (1.1) 中将元素的类型声明为 xsd:token 并且我尝试验证此模式的实例,其中 xsd:token 类型的元素包含超过零个拒绝字符(制表符、LF、CR)或双精度、前导或尾随 space,所述实例是否有效?

假设:内容上没有其他 "restriction"(可以这么说),只是它必须是 xsd:token.

扩展只是为了完全清楚:"The setting xs:whiteSpace=collapse means that leading and trailing whitespace is removed and internal whitespace is reduced to a single x20 character" - 我知道这是 XML 验证器的 "pre-validation / internal"(可以这么说)步骤;是吗?

你的问题通过谈论白色space "restrictions" 揭示了一个不正确的假设。 xs:whiteSpace 方面没有定义限制,它定义了规范化:即。在应用验证之前 whitespace 会发生什么。在大多数情况下,whitespace 被折叠,这意味着前导和尾随 whitespace 被删除,内部 whitespace 被减少为单个 space 字符。如果有一个模式方面,那么它适用于这个白色space规范化完成后的值。

对于xs:token,请注意类型名称具有高度误导性。 xs:token 的实例可以包含 whitespace。设置 xs:whiteSpace=collapse 意味着删除前导和尾随的白色space,并将内部白色space 减少为单个 x20 字符;结果将始终是 xs:token 的有效实例。

(当然,只有当您正在处理 post-验证信息集时,验证后的规范化值才有意义,例如通过使用模式感知 XSLT 或 XQuery。如果您只对如果无效会报错,那么 xs:token 和 xs:string 是完全等价的。)