Ich möchte, dass meine XSD den Inhalt einer Zeichenfolge überprüft. Um genau zu sein, möchte ich validieren, dass eine bestimmte Zeichenfolge nicht auftritt.XSD-Einschränkung, die eine übereinstimmende Zeichenfolge negiert
Betrachten Sie diese Regel, die überprüfen, ob meine Zeichenfolge auftritt. Suche nach allen Link
Elemente beginnt mit diesem string: /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>
Mit anderen Worten, überprüft der obige Ausdruck, dass alle Link
Elemente mit /site/example.com
starten. Wie invertieren Sie den obigen Ausdruck, so dass er ** bestätigt, dass keine Link
Elemente mit /site/example.com
beginnen?
Ich habe versucht, den folgenden regulären Ausdruck ohne Glück: /[^(site/example\.com)].*
, so dass dies nicht funktioniert:
Nicht-Arbeits Strategie 1 (Negation von einzelnen Zeichen) I Ich bin mir bewusst, dass dies wahrscheinlich für die Negierung eines einzelnen Zeichens funktionieren würde, da diese SO-Frage das macht: XML schema restriction pattern for not allowing empty strings
Die vorgeschlagene Muster in dieser Frage <xs:pattern value=".*[^\s].*" />
Aber negiert nur ein einzelnes Zeichen in diesem Fall nicht funktioniert, da es richtig scheitern würde:
/site/example.com
aber auch, es wäre falsch
/Lösungen
scheitern
Nicht-Arbeits Strategie 2 (fortgeschrittener regexp Look-Ahead) Nach dieser Frage SO (Regular expression to match a line that doesn't contain a word?), können Sie dies mit negativen Look-Ahead-(?!expr)
lösen könnten.
So wird dies in gewöhnlichen regexp arbeiten:
^* $
nun leider xsd Validierungen unterstützen nur begrenzt regexps ((/ site/example.com)?!.). Laut dieser Site werden keine Lookaheads unterstützt: regular-expressions.info -- xsd
Das beschreibt ziemlich genau das, was ich bis jetzt versucht habe.
Meine Frage ist, wie negiere ich einen regulären Ausdruck in einem XSD-Schema?
Vielen Dank, ich werde das prüfen müssen –