XSD模式限制-带有正斜杠的替代

时间:2019-05-09 12:08:55

标签: regex xml xsd

我必须创建一个XSD文件。我的一个复杂类型包含一个以xs:string为基础的SimplyType,我想给它提供以下模式限制:

[X|X/R|X/L]

所以我的意图是允许XX/RX/L

当尝试根据该模式验证xml时,XMLSpy告诉我仅允许XRL/。但不是预期的组合。

我在做什么错。根据我的研究,/不需要转义字符。

非常感谢您

1 个答案:

答案 0 :(得分:2)

您的模式失败的原因是,通过使用Character Classes or Character Sets[ ]),您指定列出的任何字符都是可以接受的,而不是您想要的。

对于正斜杠,您是对的:它不是任何正则表达式样式中的特殊正则表达式元字符,只是有时它用作允许 regex文字表示法(例如{ {1}}。

所以,您只需要使用

/^abc$/

或更简单地使用<xs:pattern value="X|X/R|X/L"/> (匹配[RL]R的字符类),而不是重复最后两个值:

L

甚至

<xs:pattern value="X|X/[RL]"/>

在这里,<xs:pattern value="X(/[RL])?"/> 被匹配,然后X/R被匹配1或0次,即可选地。

默认情况下,XSD模式始终是锚定的(=必须与整个字符串匹配),因此您不应在开头/结尾添加任何/L^


这是一个完整的支持示例XSD:

$