O que é uma sintaxe greex?

Ao usar a Sintaxe Greex é possível criar condições XML avançadas ou regras Greex. Uma condição XML avançada é usada para avaliar certas condições nos dados de entrada. A Sintaxe Greex é baseada em um XML. Este estilo de avaliação de condição permite usar os dados de entrada de diversas formas, ao invés de uma saída Booleana.

A Sintaxe Greex fornece construções Greex que podem ser aninhadas usando diversos blocos de IF e de ELSE e também permite agrupar expressões usando um operador AND ou OR. Cada expressão compreende uma ou mais chamadas de função. É possível incluir funções em um loop aninhado, o que significa que os parâmetros para as funções podem ser outras chamadas de função. Elas contêm condições IF ELSE básicas. A tabela a seguir descreve vários elementos de uma construção If/Else.

Elemento

Descrição

Condição

O elemento Condição fornece um agrupamento lógico de todas as expressões que precisam ser avaliadas, operando em um XML de entrada.

Return

Cada condição definida na construção If/Else deve retornar um valor. A condição pode retornar um elemento XML, sequência ou valor booleano. Ela retorna o valor adequado a uma condição If/Else no elemento Retorno. Por exemplo,
  • Se deseja retornar um documento XML, o elemento Retorno pode ser:
     <Return>
        <Value output="&lt;Order
               type=&quot;Web&quot;
               discount=&quot;5&quot;/&gt;"/>
     </Return>
  • Se deseja retornar uma sequência, o elemento Retorno pode ser:
    <Return>
       <Value output="Draft Order Created"/>
    </Return>
  • Se deseja retornar um valor Booleano, o elemento Retorno pode ser:
    <Return>
        <Value output="true"/>
    </Return>
  • Se deseja retornar um elemento PureXML como resultado de uma avaliação, o elemento Retorno pode ser:
    <Return>
             <Value output="&lt;Date"/>
    </Return>
    A saída para o elemento acima será:
    <Date/>

O elemento Condição contém vários elementos Expressão. Cada elemento Expressão define a expressão que deseja avaliar para a condição especificada. A tabela a seguir descreve os diversos elementos de uma condição:

Elemento

Descrição

Expressão

O elemento Expressão contém as expressões que deseja avaliar para que uma condição seja atendida. Para realizar as chamadas de função na expressão, prefixe o nome da função com "fn:". Por exemplo, defina o seguinte elemento Expressão que realiza uma chamada de função:

<Expression>fn:equals(@ZipCode,"01876")</Expression>

É possível também passar funções como parâmetros para outras funções. Por exemplo, é possível definir o seguinte elemento Expressão para passar funções como parâmetros para outras funções:

<Expression>fn:intGreater
(fn:count(OrderLines/OrderLine), "100")</Expression>

Grupo

Esse é um elemento opcional. Se deseja avaliar um conjunto de expressões, você deve agrupá-las.

O atributo "op" do elemento Grupo indica a operação que deseja executar no conjunto de expressões. Os valores válidos são: "ou" e "e". É possível definir mais de uma expressão no elemento Grupo. Se o valor op do elemento Grupo for "e", então a condição será atendida somente se TODAS as expressões que fazem parte do elemento Grupo forem avaliadas como "verdadeiras". Da mesma forma, se o atributo "op" do elemento Grupo for "ou", então a condição será atendida somente se UMA das expressões que fazem parte do elemento Grupo for avaliada como "verdadeira".

É possível criar qualquer nível de aninhamento dos elementos Grupo e Expressão.

Nota: Se deseja avaliar uma única expressão, defina um único elemento Expressão no elemento Condição, sem criar o elemento Grupo.

Uma construção IF ELSE de amostra para definir uma condição XML avançada ou Regra Greex pode ser:
<If>    
  <Condition name="isWebOrder?">
    <Group op="and">
      <Expression>fn:!equals(@orderType,"WEB")</Expression>
      <Expression>fn:equals(address::@ZipCode, "01876")</Expression>
    </Group>
  </Condition>
  <Return>
     <Value output="&lt;Order type=&quot;Web&quot; 
            discount=&quot;5&quot;/&gt;"/>
  </Return>
</If>
  <Else>
    <Return>
       <Value output="&lt;Order type=&quot;Catalog&quot; 
              discount=&quot;2&quot;/&gt;"/>
     </Return>
  </Else>