ILOG Simple Rules DTD
<!-- ILOG Simple Rules DTD --> <?xml version="1.0" encoding="ISO-8859-1"?> <!-- A constant expression has a required type (enumerated) and a value (cdata). The DTD provides the common types that exist in the programming languages. The notations allowed for specifying the literal values (for instance hexadecimal numbers or special characters) are the same as for the Java programming language. --> <!ELEMENT constant EMPTY> <!ATTLIST constant type (string | boolean | byte | short | char | long | int | float | double | null) #REQUIRED value CDATA #REQUIRED> <!-- Defines an assignable entity. An assignable entity is a variable or a field. An assignable entity has a value and can change values using assignments. As an assignable entity is also a value, it can appear in an expressison. --> <!ENTITY % assignable "(variable | field)"> <!-- A variable has simply a name. A variable is created using "bind" or as the object variable of a simple condition. A variable is an "assignable" and can change values using "assignment". --> <!ELEMENT variable EMPTY> <!ATTLIST variable name NMTOKEN #REQUIRED> <!-- A field value. A field value operates on an object (an expression) and a field name. If the object is not specified, it is set to be the current default object. In a simple condition or a not condition, the default object is the one currently matched by the condition. For "assert" and "modify", the default object is the target of the assertion or the modification. --> <!ELEMENT field (%expression;)?> <!ATTLIST field name NMTOKEN #REQUIRED> <!-- Defines the expressions of the language. An expression can be an assignable (variable or field), a constant (a literal), an arithmetic expression or a boolean expression (a test). --> <!ENTITY % expression "(%assignable; | constant | unaryExp | binaryExp | naryExp)"> <!-- Defines the unary expressions. A unary expression acts on a single argument. The operator is specified using an enumerated type (the "operator" attribute). Note: the traditional signs like +, -, ! can not be part of enumerations. This justifies that we use symbolic names for operators. --> <!ELEMENT unaryExp (%expression;)> <!ATTLIST unaryExp operator (plus | minus | not) #REQUIRED> <!-- Defines the binary expressions. A binary expression acts on two arguments. As for unary operators, binary operators are specified using enumerated symbolic names which correspond respectively to the following signs: ==, !=, <, <=, >, >= --> <!ELEMENT binaryExp (%expression;,%expression;)> <!ATTLIST binaryExp operator (eq | neq | lt | lte | gt | gte) #REQUIRED> <!-- A N-ary expression acts on N expressions. The number of expressions must be at least two. The operators are specified using symbolic names. Those names correspond to these signs: +, -, *, /, %, &&, || --> <!ELEMENT naryExp (%expression;)+> <!ATTLIST naryExp operator (add | subtract | multiply | divide | remainder | and | or) #REQUIRED> <!-- An assignment. This uses two expressions: a first expression (an "assignable") which will be assigned the value of a second expression. --> <!ELEMENT assignment (%assignable;,%expression;)> <!-- A variable binding declares a variable and sets it to some initial value. A variable can change values by "assignment". --> <!ELEMENT bind (%expression;) > <!ATTLIST bind name NMTOKEN #REQUIRED> <!-- The ruleset is composed of a list of rules. A ruleset has a name (optional). The ruleset is the root element of an XML document. --> <!ELEMENT ruleset (rule*)> <!ATTLIST ruleset name NMTOKEN #IMPLIED> <!-- A rule has a name (required), a priority (optional), a condition part and an action part. The priority is an expression. There must be at least a condition and the action part can be empty. --> <!ELEMENT rule ( priority?, conditionPart, actionPart ) > <!ATTLIST rule name NMTOKEN #REQUIRED> <!ELEMENT priority (%expression;)> <!ELEMENT conditionPart (%condition;)+> <!ELEMENT actionPart (%action;)* > <!-- A condition is either a simple condition or a not condition. These conditions differ by the fact that a simple condition match an object which can be bound to a variable, while the not condition does not match any object. --> <!ENTITY % condition "(simpleCondition | notCondition)"> <!-- Defines the possible actions allowed in the rule action part. This includes variable declarations and assignments, as well as the traditional assert, retract and modify statements of rule languages. --> <!ENTITY % action "(assignment | bind | assert | assertobj | modify | retract)"> <!-- A simple condition has a class name (required), a variable name (optional) to which the object is bound. The body of the condition is composed of test expressions. Under the scope of a simple condition, the default object is the one tested by this condition. --> <!ELEMENT simpleCondition (%expression;)*> <!ATTLIST simpleCondition className CDATA #REQUIRED objectVariable NMTOKEN #IMPLIED> <!-- A not condition has a class name (required). The body of the condition may contain the same test expressions as for the simple condition. A not condition can not be bound to a variable. Under the scope of a not condition, the default object is the one tested by this condition. --> <!ELEMENT notCondition (%expression;)*> <!ATTLIST notCondition className CDATA #REQUIRED> <!-- The assert action. This action requires a class name and may specify field assignment statements. An instance of the class is created, the statements (assignments) are executed, and the object is then added to the working memory. Under the scope of an assert, the default object is the one currently asserted. --> <!ELEMENT assert (assignment | bind)* > <!ATTLIST assert className CDATA #REQUIRED> <!-- Another assert action. This action asserts an object computed from an expression. It differs from the previous "assert" by the fact that the object may be already created and returned as the value of the expression. --> <!ELEMENT assertobj (%expression;)> <!-- The retract action. This action removes an object from the working memory. The variable represents an object previously bound from the condition part. --> <!ELEMENT retract (variable)> <!-- The modify action. The action modifies an object of the working memory. The object is identified by a variable. The block of statements the the same as for the assert action. Under the scope of a modify, the default object is the one currently modified. --> <!ELEMENT modify (variable, (assignment | bind)+)>
Prepared by Robin Cover for The XML Cover Pages archive. See (1) DTD text format and (2) the main entry "Simple Rule Markup Language (SRML)."