【问题标题】:Storing Conditional Logic (Logical Structures) in XML在 XML 中存储条件逻辑(逻辑结构)
【发布时间】:2010-10-02 08:48:21
【问题描述】:

我需要将简单的条件表达为程序输入。输入必须是人类可读的。

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 更“可读”,我应该创建一个自定义的平面文件格式。

【问题讨论】:

    标签: xml vb.net conditional


    【解决方案1】:

    XML 在这方面没有什么问题,但您可以使用更轻的语法(如 LISP 样式列表)为自己节省一些开销:

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

    您可以使用 if 中的项目排序,而不是显式声明条件 true、false。您的基本要求是保留正确的语法树。

    【讨论】:

      【解决方案2】:

      您说您希望它是人类可读的,然后您提供了一个几乎难以理解的 XML 示例。我不确定 XML 在这里给你买了什么。为真正人类可读的语言编写一个简单的解析器可能是您的时间投资。

      【讨论】:

        【解决方案3】:

        也许你听说过或见过RuleML

        这似乎是您正在寻找的。有一个使用 RuleML for .NET 的开源规则引擎,我在 C# 中使用过:NxBRE

        NxBRE 还有一个 Visio 模板,可以让其他人轻松查看规则。他们还尝试了一种人类可读的格式,但我不确定这是否仍在进行中。

        【讨论】:

          【解决方案4】:

          由于在这种情况下 XML 很方便,而 VB 非常“人类可读”,我想我会采用这样的方式:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-06
            • 2018-12-26
            相关资源
            最近更新 更多