1

我想使用 DTD 建模一个简单的(IF Then)规则。这就是我想出的:

<!ELEMENT forward    ((rule | fact)*)> 

<!ELEMENT rule       (if, then)> 

<!ELEMENT fact       (#PCDATA)> 

<!ELEMENT if         (#PCDATA)> 

<!ELEMENT then       (#PCDATA)>

这是前向规则 (p => c) 的 dtd。我还想使用结论和前提元素而不是 if 和 then 来模拟后向规则( c <= p)。我只需要更改 if 和 then 到 cons 和 prem 还是我需要做其他事情。我很欣赏你的回应。

4

2 回答 2

0

对于 XML 词汇表来说,比从 XSLT 中“借用”等效功能要糟糕得多(即使您不使用相同的名称)。

请参阅http://www.w3.org/TR/xslt#section-Conditional-Processing-with-xsl:if

其语法的一般形式是

<xsl:if test = boolean-expression >
  <!-- 内容:模板 -->
</xsl:if>

对于转发等,您的问题过于笼统,无法给出准确的答案。如果你想链接测试,你可以给每个测试一个 id,然后有一个类似 <forward to-test="some-id"/> 元素,它引用下一个要应用的测试的 id。或者您可能会构建更复杂的条件处理词汇表,可能(再次)基于 XSLT 的模型(参见http://www.w3.org/TR/xslt#section-Conditional-Processing-with-xsl:choose)。

DTD 为您提供语法但没有语义,因此您想要围绕 XML 的任何功能都必须在您的应用程序中开发。

于 2011-05-23T08:53:57.153 回答
0

XML DTD 只是为您提供模型的语法。例如,您可以这样写:

<rule>
  <if>is raining</if>  
  <then>pigs will fly</then>
</rule>

<rule>
  <cons>pigs will fly</cons>  
  <prem>is raining</prem>
</rule>

但是您必须提供连接这两者的任何逻辑并自己编写。XML 没有给您任何具体的帮助。

我建议您查看诸如 Prolog 之类的语言。

于 2009-10-31T17:15:34.700 回答