2009-01-20 7 views
1

J'ai besoin d'exprimer des conditions simples comme entrée de programme. L'entrée doit être lisible par l'homme.Stockage de la logique conditionnelle (structures logiques) en XML

Est-ce que XML convient à cela?

Par exemple, je l'instruction conditionnelle suivante:

If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then 
    ZooKeeper=Jack 
Else 
    ZooKeeper=Jill 
End If 

Exprimant ci-dessus en XML pourrait ressembler à ceci:

<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> 

Toutes les idées sur la meilleure façon de représenter des instructions conditionnelles en XML ?

Je n'ai pas encore exploré l'utilisation des attributs. Je n'ai actuellement pas besoin d'instructions imbriquées «If» ou de la clause «Else If», mais je vais essayer de les utiliser de toute façon.

Peut-être que le code VB est plus "lisible" que XML peut être dans ce cas et je devrais créer un format de fichier plat personnalisé à la place.

Répondre

0

Vous avez dit que vous vouliez qu'il soit lisible par un humain, et ensuite vous avez présenté un exemple XML presque impénétrable. Je ne suis pas sûr de ce que XML vous achète ici. Un analyseur simple pour une langue vraiment lisible par l'homme serait probablement un bon investissement de votre temps.

2

Il n'y a rien de mal avec XML pour cela, mais vous pourriez vous épargner certains frais généraux avec une syntaxe plus claire comme une liste de style LISP:

(if 
    (and 
     (AnimalType Leopard) 
     (or 
      (SourceCountry Kenya) 
      (TargetCountry Kenya) 
     ) 
    ) 
    (ZooKeeper Jack) 
    (ZooKeeper Jill) 
) 

Vous pouvez utiliser la commande des éléments à l'intérieur du si au lieu de façon explicite déclaration de condition, vrai, faux. L'exigence de base que vous aurez est qu'une arborescence de syntaxe correcte est préservée.

1

Peut-être avez-vous entendu parler ou vu RuleML?

Cela semble être ce que vous cherchez. Il existe un moteur de règles open source utilisant RuleML pour .NET que j'ai utilisé avec C#: NxBRE

NxBRE dispose également d'un gabarit Visio qui permet aux autres utilisateurs de comprendre facilement les règles. Ils ont également expérimenté avec un format lisible par l'homme, mais je ne suis pas sûr que ce soit encore en cours ou non.

0

Comme XML est pratique dans ce cas et VB est tout à fait « lisible », je pense que je vais aller avec quelque chose comme ceci:

<Conditional> 
     If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then 
      ZooKeeper=Jack 
     Else 
      ZooKeeper=Jill 
     End If 
    </Conditional> 
Questions connexes