XSD:正则表达式的属性



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"数据类型。可能的是在简单类型定义的图案面上使用正则表达式。这意味着您可以在理论上创建自己的数据类型来验证正则表达式,但这可能是一个非常复杂的实现。

最新更新