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(単一の文字の否定) Iこれはおそらく単一の文字を否定するために働くことになることを認識しています。これは次のことです。XML schema restriction pattern for not allowing empty strings
その質問<xs:pattern value=".*[^\s].*" />
しかし、それは正確に失敗するので、単一の文字が、このケースでは動作しませんのみを否定で推奨パターン:
を/site/example.com
また、間違って失敗する可能性があります。
/solutions
、働いていない戦略2(高度な正規表現先読み) このSO質問(Regular expression to match a line that doesn't contain a word?)によると、あなたは否定先読み(?!expr)
でこれを解決することができます。
だから、これは通常の正規表現で動作します:(?!。(/サイト/ example.com))
^* $
さて、残念ながらXSDの検証は、限られた正規表現をサポートしています。このサイトによれば、先読みはサポートされていません:regular-expressions.info -- xsd
これは私が今まで何を試したかをほとんど説明しています。
私の質問は、XSDスキーマで正規表現を否定するにはどうすればいいですか?
ありがとう、私はこれを調べなければならないでしょう –