Хранение условной логики (логических структур) в XML - PullRequest
1 голос
/ 20 января 2009

Мне нужно выразить простые условия как программный ввод. Ввод должен быть удобочитаемым.

Подходит ли для этого XML?

Например, у меня есть следующее условное утверждение:

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

Выражение вышеизложенного в XML может выглядеть примерно так:

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

Есть какие-нибудь идеи о том, как лучше всего представлять условные операторы в XML?

Я еще не исследовал использование атрибутов. В настоящее время мне не нужны вложенные операторы «If» или «Else If», но я все равно попытаюсь их обработать.

Возможно, в этом случае код VB более «читабелен», чем XML, и я должен вместо этого создать собственный формат плоского файла.

Ответы [ 4 ]

2 голосов
/ 20 января 2009

В этом нет ничего плохого в XML, но вы можете сэкономить некоторые накладные расходы, используя более легкий синтаксис, такой как списки в стиле LISP:

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

Вы можете использовать порядок элементов внутри if вместо явно объявленного условия true, false. Основное требование, которое у вас будет, - это сохранение правильного синтаксического дерева.

1 голос
/ 20 января 2009

Возможно, вы слышали или видели RuleML ?

Кажется, это то, что вы ищете. Существует механизм правил с открытым исходным кодом, который использует RuleML для .NET, который я использовал с C #: NxBRE

NxBRE также имеет трафарет Visio, облегчающий понимание правил другими пользователями. Они также экспериментировали с удобочитаемым форматом, но я не уверен, что он все еще в разработке или нет.

0 голосов
/ 20 января 2009

Поскольку XML удобен в этом случае, а VB довольно «читабелен», я думаю, я пойду с чем-то вроде этого:

    <Conditional>
        If AnimalType = Leopard And (SourceCountry = Kenya Or TargetCountry = Kenya) Then
            ZooKeeper=Jack
        Else
            ZooKeeper=Jill
        End If
    </Conditional>
0 голосов
/ 20 января 2009

Вы сказали, что хотите, чтобы он был удобочитаемым, а затем представили почти непроницаемый пример XML. Я не уверен, что XML покупает вас здесь. Простой синтаксический анализатор для действительно удобочитаемого языка, вероятно, будет хорошим вложением вашего времени.

...