Armazenando condicional Logic (Estruturas Lógicas) em XML
-
19-08-2019 - |
Pergunta
Eu tenho a necessidade de expressar condicionais simples como entrada de programa. A entrada deve ser legível.
É XML adequado para isso?
Por exemplo, eu tenho a seguinte declaração condicional:
If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then
ZooKeeper=Jack
Else
ZooKeeper=Jill
End If
Expressando o acima em XML pode ser algo como isto:
<If>
<Conditional>
<And>
<AnimalType>Leopard<AnimalType>
<Or>
<SourceCountry>Kenya</SourceCountry>
<TargetCountry>Kenya</TargetCountry>
</Or>
</And>
</Conditional>
<True>
<ZooKeeper>Jack</ZooKeeper>
</True>
<False>
<ZooKeeper>Jill</ZooKeeper>
<False>
</If>
Todas as ideias sobre a melhor forma de representar declarações condicionais em XML?
Eu ainda não explorado usando atributos. Eu atualmente não têm a necessidade de nested 'Se' declarações ou a cláusula 'else if', mas eu vou tentar e trabalhá-las de qualquer maneira.
Talvez o código VB é mais 'legível' do que XML pode ser, neste caso, e que eu deveria criar um formato de arquivo simples personalizado em vez.
Solução
Você disse que queria que ele seja legível, e então você apresentou um exemplo XML quase impenetrável. Eu não tenho certeza do que XML está comprando aqui. Um analisador simples para uma linguagem verdadeiramente legível provavelmente seria um bom investimento do seu tempo.
Outras dicas
Não há nada de errado com XML para isso, mas você pode salvar a si mesmo alguma sobrecarga com uma sintaxe mais leve como uma listas de estilo LISP:
(if
(and
(AnimalType Leopard)
(or
(SourceCountry Kenya)
(TargetCountry Kenya)
)
)
(ZooKeeper Jack)
(ZooKeeper Jill)
)
Você pode usar ordenação dos itens no interior do caso em vez de declarar explicitamente condição, verdadeiro, falso. O requisito básico que você vai ter é que uma árvore de sintaxe apropriada é preservada.
Talvez você já tenha ouvido falar ou visto RuleML ?
Este parece ser o que você está procurando. Há um aberto motor de regras de origem que usos RuleML para .NET que eu usei com C #: NxBRE
NxBRE também tem um stencil Visio que torna a olhar para as regras fácil para os outros para entender. Eles também experimentaram com um formato legível, mas não tenho certeza que ainda está em andamento ou não.
Uma vez que XML é conveniente neste caso e VB é bastante 'legível', eu acho que vou ir com algo como isto:
<Conditional>
If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then
ZooKeeper=Jack
Else
ZooKeeper=Jill
End If
</Conditional>