<< Кликните, чтобы показать Содержание >> Критерии и условия |
Критерий в правиле описывается XML-тегом "match" и определяет, будут ли выполняться действия правила для данного сообщения.
Критерий в правиле состоит из одного или нескольких условий, которые связаны логическими операциями AND, OR, XOR или NOT. Это позволяет строить критерий на основе логических выражений, состоящих из условий.
Пример:
<rule> <match> <c name="all" /> </match> <action name="drop" /> </rule> |
---|
Данный критерий состоит из единственного условия: "все сообщения".
Условия в критериях
Условие – это элементарная проверка сообщения или его метаданных на соответствие чему-либо.
Условие описывается XML-тегом "condition" или "c". Сообщение либо удовлетворяет условию, и в этом случае условие имеет значение TRUE, либо не удовлетворяет условию, и в таком случае результатом проверки условия будет FALSE. Для условия указывается его имя в атрибуте "name", которое определяет, что и как проверять в сообщении. В прочих атрибутах тега указываются параметры для выполнения действия. Имена атрибутов дополнительных параметров зависят от конкретных условий.
Общая структура XML-тега, описывающего условие:
<condition name="The name of the condition." [additional parameters] /> |
---|
или
<condition name="The name of the condition." [additional parameters] > </condition> |
---|
или
<c name="The name of the condition." [additional parameters] /> |
---|
или
<c name="The name of the condition." [additional parameters] ></c> |
---|
Большинство условий использует атрибут value="...", в котором указываются значения для проверки на соответствие условию, или атрибут data="...", в котором можно указывать внешний файл для загрузки данных для такой проверки (это могут быть наборы слов, списки доменных имён и другие параметры). Какие атрибуты и как именно проверяются, описано в разделах соответствующих условий.
Логические выражения в критериях
В случае, когда необходимо создать для правила сложный критерий, состоящий из нескольких условий, эти условия можно объединять в логические выражения с использованием логических операций AND, OR, XOR, NOT. Логические операции в виде XML-тегов выглядят следующим образом:
<and> ... </and>:
Соответствует ( ... & ... & ... & ... ) – все условия, находящиеся внутри тега "and", объединяются логической операцией AND.
<or> ... </or>:
Соответствует ( ... | ... | ... | ... ) – все условия, находящиеся внутри тега "or", объединяются логической операцией OR.
<xor> ... </xor>:
Соответствует ( ... ^ ... ^ ... ^ ... ) – все условия, находящиеся внутри тега "xor", объединяются логической операцией XOR.
<not> ... </not>:
Соответствует !(...) – к условию применяется операция отрицания.
Пример:
<and> <c name="ccc1"/> <c name="ccc2"/> </and> |
---|
означает результат (ccc1 & ccc2),
а критерий:
<not><c name="ccc1"/></not> |
---|
означает результат "не (ccc1)".
Любые теги логических операций могут быть вложенными.
Пример:
<and> <c name="ccc1"/> <or> <c name="ccc2"> <c name="ccc3"> </or> <or> <c name="ccc4"> <c name="ccc5"> <not><c name="ccc6"></not> </or> </and> |
---|
означает результат (ccc1 & (ccc2 | ccc3) & (ccc4 | ccc5 | !ccc6)).
То есть сообщение будет удовлетворять указанному в примере критерию, если: оно удовлетворяет условию ccc1, а также удовлетворяет (условию ссс2 или условию ссс3), а также (удовлетворяет (условию ссс4 или условию ссс5) или не удовлетворяет условию ссс6).
Для наглядности можно разбить данный критерий на блоки условий, которые обязательно должны возвращать TRUE при следующих проверках:
1) сообщение должно удовлетворять условию ccc1
И
2) сообщение должно удовлетворять одному из условий (ccc2 или ccc3)
И
3) сообщение должно удовлетворять одному из условий (ccc4 или ccc5) ИЛИ не удовлетворять условию ccc6.