The XML markup for fuzzy XML documents is described in the file named FsRuleSet.dtd. If you write a fuzzy application involving fuzzy XML documents, you may need to copy this file to a location accessible to your application.
A copy of the DTD is shown below, but you must not rely on what you see here being up-to-date. Always refer to the file itself for the latest DTD!
<?xml encoding="UTF-8"?> <!ENTITY % hedges "about|above|below|closeTo|extremely|generally|inVicinityOf|not|positively|slightly|somewhat|very"> <!ENTITY % boolComparator "isEqualTo|isNotEqualTo|isLessThan|isLessThanOrEqualTo|isGreaterThan|isGreaterThanOrEqualTo"> <!ELEMENT FsRuleSet (options?, variables, ((inputVariables,outputVariables)|(outputVariables,inputVariables)), ((sensors?,effectors?)|(effectors?,sensors?)), rules)> <!ATTLIST FsRuleSet name ID #REQUIRED > <!-- ================================================== Ruleset options can be entered in any order and more than once. The last one of any type takes precedence. ================================================== --> <!ELEMENT options (alphaCut | correlation | defuzzify | inference)* > <!ELEMENT alphaCut EMPTY> <!ATTLIST alphaCut value NMTOKEN "0.1" > <!ELEMENT correlation EMPTY> <!ATTLIST correlation method (product | minimum) "product" > <!ELEMENT defuzzify EMPTY> <!ATTLIST defuzzify method (centroid | maxHeight) "centroid" > <!ELEMENT inference EMPTY> <!ATTLIST inference method (fuzzyAdd | minMax | productOr) "fuzzyAdd" > <!-- ================================================== Variable definitions ================================================== --> <!ELEMENT variables (declareBooleanVar | declareCategoricalVar | declareContinuousVar | declareNumericVar | declareSymbolicVar)+> <!ELEMENT declareBooleanVar EMPTY> <!ATTLIST declareBooleanVar varName ID #REQUIRED initialValue (true | false) #REQUIRED > <!ELEMENT declareCategoricalVar (categoricalItem)+> <!ATTLIST declareCategoricalVar varName ID #REQUIRED > <!ELEMENT categoricalItem EMPTY> <!ATTLIST categoricalItem value NMTOKEN #REQUIRED > <!ELEMENT declareContinuousVar (setDefinitions)> <!ATTLIST declareContinuousVar varName ID #REQUIRED from NMTOKEN #REQUIRED to NMTOKEN #REQUIRED > <!ELEMENT declareNumericVar EMPTY> <!ATTLIST declareNumericVar varName ID #REQUIRED initialValue NMTOKEN #REQUIRED > <!ELEMENT declareSymbolicVar (symbolicItem)+> <!ATTLIST declareSymbolicVar varName ID #REQUIRED > <!ELEMENT symbolicItem EMPTY> <!ATTLIST symbolicItem value NMTOKEN #REQUIRED > <!-- ================================================== Fuzzy set definitions ================================================== --> <!ELEMENT setDefinitions (betaSet | gaussianSet | linearSet | piSet | segmentsSet | shoulderSet | sigmoidSet | trapezoidSet | triangleSet)+> <!ELEMENT betaSet (complementSet)?> <!ATTLIST betaSet setName NMTOKEN #REQUIRED centerPoint NMTOKEN #REQUIRED width NMTOKEN #REQUIRED weight NMTOKEN "1.0" > <!ELEMENT gaussianSet (complementSet)?> <!ATTLIST gaussianSet setName NMTOKEN #REQUIRED centerPoint NMTOKEN #REQUIRED widthFactor NMTOKEN #REQUIRED > <!ELEMENT linearSet (complementSet)?> <!ATTLIST linearSet setName NMTOKEN #REQUIRED beginPoint NMTOKEN #REQUIRED endPoint NMTOKEN #REQUIRED direction (up | down) #REQUIRED > <!ELEMENT piSet (complementSet)?> <!ATTLIST piSet setName NMTOKEN #REQUIRED centerPoint NMTOKEN #REQUIRED width NMTOKEN #REQUIRED weight NMTOKEN "1.0" > <!ELEMENT segmentsSet (membership+, complementSet?)> <!ATTLIST segmentsSet setName NMTOKEN #REQUIRED > <!ELEMENT membership EMPTY> <!ATTLIST membership point NMTOKEN #REQUIRED truthValue NMTOKEN #REQUIRED > <!ELEMENT shoulderSet (complementSet)?> <!ATTLIST shoulderSet setName NMTOKEN #REQUIRED beginPoint NMTOKEN #REQUIRED endPoint NMTOKEN #REQUIRED direction (left | right) #REQUIRED > <!ELEMENT sigmoidSet (complementSet)?> <!ATTLIST sigmoidSet setName NMTOKEN #REQUIRED leftPoint NMTOKEN #REQUIRED flexPoint NMTOKEN #REQUIRED rightPoint NMTOKEN #REQUIRED direction (up | down) #REQUIRED > <!ELEMENT trapezoidSet (complementSet)?> <!ATTLIST trapezoidSet setName NMTOKEN #REQUIRED leftPoint NMTOKEN #REQUIRED leftCorePoint NMTOKEN #REQUIRED rightCorePoint NMTOKEN #REQUIRED rightPoint NMTOKEN #REQUIRED > <!ELEMENT triangleSet (complementSet)?> <!ATTLIST triangleSet setName NMTOKEN #REQUIRED leftPoint NMTOKEN #REQUIRED centerPoint NMTOKEN #REQUIRED rightPoint NMTOKEN #REQUIRED > <!ELEMENT complementSet EMPTY> <!ATTLIST complementSet setName NMTOKEN #REQUIRED > <!-- ================================================== Specifying Input & Output Variables ================================================== --> <!ELEMENT inputVariables EMPTY> <!ATTLIST inputVariables varRefs IDREFS #IMPLIED > <!ELEMENT outputVariables EMPTY> <!ATTLIST outputVariables varRefs IDREFS #IMPLIED > <!-- ================================================== Specifying Sensors & Effectors ================================================== --> <!ELEMENT sensors (sensorItem)*> <!ELEMENT sensorItem EMPTY> <!ATTLIST sensorItem sensor ID #REQUIRED > <!ELEMENT effectors (effectorItem)*> <!ELEMENT effectorItem EMPTY> <!ATTLIST effectorItem effector ID #REQUIRED > <!-- ================================================== Rule definitions ================================================== --> <!ELEMENT rules (assert | (if, then))+> <!ELEMENT assert ( (booleanVar, equals, (variableValue | booleanLiteral | sensorValue) ) | (numericVar, equals, (variableValue | numericLiteral | sensorValue) ) | (categoricalVar,equals, ( token | sensorValue) ) | (symbolicVar, equals, ( token | sensorValue) ) | (continuousVar, equals, ( numericLiteral | sensorValue) ) | (continuousVar, is, hedge*, fuzzyValue ) ) > <!ATTLIST assert label ID #IMPLIED > <!ELEMENT if (antecedent+)> <!ATTLIST if label ID #IMPLIED > <!ELEMENT then (consequent)> <!ELEMENT antecedent ( (booleanVar, (isEqualTo|isNotEqualTo), (variableValue | booleanLiteral | sensorValue), weight? ) | (numericVar, (%boolComparator;), (variableValue | numericLiteral | sensorValue), weight? ) | (categoricalVar, (isEqualTo|isNotEqualTo), ( token | sensorValue), weight? ) | (symbolicVar, (isEqualTo|isNotEqualTo), ( token | sensorValue), weight? ) | (continuousVar, (%boolComparator;), (variableValue | numericLiteral | sensorValue), weight? ) | (continuousVar, is, hedge*, fuzzyValue ) ) > <!ELEMENT consequent ( (booleanVar, equals, (variableValue | booleanLiteral | effectorValue) ) | (numericVar, equals, (variableValue | numericLiteral | effectorValue) ) | (categoricalVar,equals, ( token | effectorValue) ) | (symbolicVar, equals, ( token | effectorValue) ) | (continuousVar, equals, ( numericLiteral | effectorValue) ) | (continuousVar, is, hedge*, fuzzyValue ) ) > <!-- ================================================== Rule bits ================================================== --> <!ELEMENT equals EMPTY> <!ELEMENT is EMPTY> <!ELEMENT isEqualTo EMPTY> <!ELEMENT isNotEqualTo EMPTY> <!ELEMENT isLessThan EMPTY> <!ELEMENT isLessThanOrEqualTo EMPTY> <!ELEMENT isGreaterThan EMPTY> <!ELEMENT isGreaterThanOrEqualTo EMPTY> <!ELEMENT booleanLiteral EMPTY> <!ATTLIST booleanLiteral value (true | false) #REQUIRED > <!ELEMENT numericLiteral EMPTY> <!ATTLIST numericLiteral value NMTOKEN #REQUIRED > <!ELEMENT effectorValue EMPTY> <!ATTLIST effectorValue effectorRef IDREF #REQUIRED effectorParms IDREFS #IMPLIED > <!ELEMENT sensorValue EMPTY> <!ATTLIST sensorValue sensorRef IDREF #REQUIRED sensorParms IDREFS #IMPLIED > <!ELEMENT token EMPTY> <!ATTLIST token value NMTOKEN #REQUIRED > <!ELEMENT hedge EMPTY> <!ATTLIST hedge type (%hedges;) #REQUIRED > <!ELEMENT fuzzyValue EMPTY> <!ATTLIST fuzzyValue setRef NMTOKEN #REQUIRED > <!ELEMENT variableValue EMPTY> <!ATTLIST variableValue varRef IDREF #REQUIRED > <!ELEMENT booleanVar EMPTY> <!ATTLIST booleanVar varRef IDREF #REQUIRED > <!ELEMENT categoricalVar EMPTY> <!ATTLIST categoricalVar varRef IDREF #REQUIRED > <!ELEMENT continuousVar EMPTY> <!ATTLIST continuousVar varRef IDREF #REQUIRED > <!ELEMENT numericVar EMPTY> <!ATTLIST numericVar varRef IDREF #REQUIRED > <!ELEMENT symbolicVar EMPTY> <!ATTLIST symbolicVar varRef IDREF #REQUIRED > <!ELEMENT weight EMPTY> <!ATTLIST weight value NMTOKEN "1.0" >