我必须创建一个XSD文件。我的一个复杂类型包含一个以xs:string为基础的SimplyType,我想给它提供以下模式限制:
[X|X/R|X/L]
所以我的意图是允许X
,X/R
或X/L
。
当尝试根据该模式验证xml时,XMLSpy告诉我仅允许X
,R
,L
或/
。但不是预期的组合。
我在做什么错。根据我的研究,/
不需要转义字符。
非常感谢您
答案 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:
$