i在XML中具有一个正则表达式:
<RegexPath regex="someRegex"/>
我想为此做适当的XSD:
<xs:complexType name="RegexPath">
<xs:attribute name="regex" type="xs:regex??" use="required"/>
</xs:complexType>
是否有XSD中正则表达式的数据类型定义?这不是生存的重要性,但是能够通过XSD验证器检测无效的正则是很不错的选择...
也许令人惊讶的是,没有正则表达式可以准确匹配所有有效的正则表达式(也没有其他)。这是因为正则表达式的语法是递归的,这意味着它不是常规语法(在计算机科学意义上),这意味着无法通过正则表达式描述。
您可以使用XSD 1.1中的断言(用技巧)做到这一点。技巧依赖于以下事实:XPATH错误失败的断言被视为虚假的断言。所以断言
matches("", $value) or true()
如果$ value不是有效的正则罚款,则会失败,否则返回true。但是,您可能需要采取一些进一步的骗局,以避免将其处理此操作。将其写成
可能是安全的if (matches("", $value))
then string-length($value) gt 0
else string-length($value) ne 0
一个小警告:这对XPath正则表达方言进行了测试,该方言与XSD正则表达式略有不同。
没有由W3C定义的原始或内置的" Regex"数据类型。可能的是在简单类型定义的图案面上使用正则表达式。这意味着您可以在理论上创建自己的数据类型来验证正则表达式,但这可能是一个非常复杂的实现。