我希望我的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