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.

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top