Вперед Обратное Правило Xml DTD - PullRequest
1 голос
/ 31 октября 2009

Я хочу смоделировать простое (IF Then) правило с использованием DTD. Вот что я придумал:

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

<!ELEMENT rule       (if, then)> 

<!ELEMENT fact       (#PCDATA)> 

<!ELEMENT if         (#PCDATA)> 

<!ELEMENT then       (#PCDATA)>

Это dtd для прямого правила (p => c). Я хочу смоделировать и обратное правило (c <= p), используя элементы заключения и предпосылки вместо «если и тогда» Мне просто нужно изменить, если и затем на минусы и прем или мне нужно сделать что-то еще. Я ценю ваши ответы. </p>

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

Для словаря XML может быть намного хуже, чем «заимствовать» эквивалентную функциональность из XSLT (даже если вы не используете те же имена).

См. http://www.w3.org/TR/xslt#section-Conditional-Processing-with-xsl:if

Общая форма его синтаксиса:

<xsl:if test = <i>boolean-expression</i>>
  <!-- Content: template -->
</xsl:if>

Для пересылки и тому подобного ваша проблема слишком общая, чтобы дать точный ответ. Если вы хотите объединить в цепочку тесты, вы можете присвоить каждому из ваших тестов идентификатор, а затем добавить что-то вроде элемента , который ссылается на идентификатор следующего теста, который будет применен. Или вы можете построить более сложный словарь условной обработки, возможно, основываясь (опять же) на модели XSLT (см. http://www.w3.org/TR/xslt#section-Conditional-Processing-with-xsl:choose).

DTD предоставляет вам синтаксис, но не семантику, поэтому любые функциональные возможности , которые вам нужны для вашего XML, должны быть разработаны в вашем приложении.

0 голосов
/ 31 октября 2009

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 не дает никакой конкретной помощи.

Я бы посоветовал вам взглянуть на такие языки, как Пролог.

...