我希望我的XSD验证字符串的内容。具体而言,我想验证某个字符串不会发生。XSD限制否定匹配的字符串
考虑这个规则,它将验证我的字符串是否发生。寻找所有Link
元件开始与该特定字符串:/site/example.com
<xs:element name="Link" type="xs:normalizedString" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:pattern value="(/site/example\.com).*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
换句话说,上面的表达式验证所有Link
元件与/site/example.com
启动。如何反转上述表达式,以便它**验证没有Link
元素以/site/example.com
开头?
我试过,没有运气以下正则表达式:/[^(site/example\.com)].*
,所以这是行不通的:
不工作的战略1(单个字符的否定) 我我知道这可能适用于否定单个字符,因为这个问题确实如此:XML schema restriction pattern for not allowing empty strings
在这个问题<xs:pattern value=".*[^\s].*" />
但否定只有一个字符不会在这种情况下工作,因为它会失败,正确的建议图案:
/site/example.com
但它也会错误地失败
/solutions
不工作的战略2(高级正则表达式前瞻) 根据这太问题(Regular expression to match a line that doesn't contain a word?),你可以用负先行(?!expr)
解决这个问题。
因此,这将在普通的正则表达式的工作:
^* $
现在,不幸的是XSD验证只支持有限的正则表达式((/网站/ example.com)?!)。根据这个网站,不支持lookahead:regular-expressions.info -- xsd
这几乎描述了我到现在为止所尝试的。
我的问题是,我如何否定XSD架构中的正则表达式?
非常感谢,我将不得不看看这个 – 2012-03-27 20:32:52