Я хочу, чтобы мой 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 (отрицание одного символа) Мне известно, что это, вероятно, будет работать для отрицания одного символа, так как этот вопрос SO: Шаблон ограничения схемы XML для запрета пустых строк
Предлагаемый шаблон вэтот вопрос <xs:pattern value=".*[^\s].*" />
Но отрицание только одного символа в этом случае не работает, так как оно будет некорректно:
/ site / example.com
, но также он может ошибочно завершитьсявопрос ( Регулярное выражение для соответствия строке, которая не содержит слова? ), вы можете решить эту проблему с отрицательным прогнозом (?!expr)
.
Так что это будет работать в обычном регулярном выражении:
^ ((?! / Site / example.com).) * $
Теперь, к сожалению, проверки xsd поддерживают только ограниченные регулярные выражения.Согласно этому сайту, никакие запросы не поддерживаются: регулярные-выражения.info - xsd
Это в значительной степени описывает то, что я пробовал до сих пор.
Мой вопросКак я могу отрицать регулярное выражение в схеме XSD?