﻿<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid XML Studio 1.0.4.0 (http://www.liquid-technologies.com) -->
<xsd:schema xmlns="http://www.metarule.com/metarule" elementFormDefault="unqualified" targetNamespace="http://www.metarule.com/metarule" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:annotation>
    <xsd:documentation>Copyright (c) Scientio LLC 2004-6 all rights reserved. This schema defines the Metarule language, which is a mechanism for describing fuzy logic rules and fuzzy arithmetic based algebraic expressions. </xsd:documentation>
  </xsd:annotation>
  <xsd:element name="ruleset">
    <xsd:annotation>
      <xsd:documentation>Root node</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" ref="creationdate" />
        <xsd:element minOccurs="0" ref="source" />
        <xsd:element minOccurs="0" ref="generator" />
        <xsd:element minOccurs="0" ref="examples" />
        <xsd:element minOccurs="0" ref="namespaces" />
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="rule" />
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="association" />
        <xsd:element ref="inputlist" />
        <xsd:element ref="outputlist" />
        <xsd:element minOccurs="0" ref="functionlist" />
        <xsd:element minOccurs="0" ref="numericconstantlist" />
        <xsd:element minOccurs="0" ref="stringconstantlist" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="rule">
    <xsd:annotation>
      <xsd:documentation>A single if..then rule</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="if">
          <xsd:annotation>
            <xsd:documentation>Placeholder, signifies start of rule</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:choice>
          <xsd:element ref="and" />
          <xsd:element ref="or" />
          <xsd:element ref="is" />
          <xsd:element ref="not" />
          <xsd:element ref="anything" />
          <xsd:element ref="sigmoid" />
          <xsd:element ref="unknown_top_logical_op" />
        </xsd:choice>
        <xsd:element ref="then" />
        <xsd:choice>
          <xsd:element ref="output" />
          <xsd:element ref="unknown_output" />
        </xsd:choice>
        <xsd:element ref="willbe" />
        <xsd:choice>
          <xsd:element ref="arithexpression" />
          <xsd:element ref="category" />
          <xsd:element ref="set" />
          <xsd:element ref="range" />
          <xsd:element ref="voidfunction" />
          <xsd:element ref="unknown_output_rvalue" />
          <xsd:element ref="input" />
        </xsd:choice>
        <xsd:element minOccurs="0" ref="confidence" />
        <xsd:element minOccurs="0" ref="examples" />
        <xsd:element minOccurs="0" ref="cost" />
      </xsd:sequence>
      <xsd:attribute name="ruleid" type="xsd:string" use="optional">
        <xsd:annotation>
          <xsd:documentation>An identifier used in editing and viewing of the rule set. these should be globally unique.</xsd:documentation>
        </xsd:annotation>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="and">
    <xsd:annotation>
      <xsd:documentation>logical 'and'</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="logicalbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="or">
    <xsd:annotation>
      <xsd:documentation>logical 'or'</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="logicalbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="not">
    <xsd:annotation>
      <xsd:documentation>logical 'not'</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="logicalunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="is">
    <xsd:annotation>
      <xsd:documentation>evaluates a numeric, categorical, textual or other comparison.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice>
          <xsd:element ref="input" />
          <xsd:element ref="output" />
          <xsd:element ref="unknown_input" />
          <xsd:element ref="unknown_output" />
          <xsd:element ref="unknown_is_lvalue" />
          <xsd:element ref="arithexpression" />
        </xsd:choice>
        <xsd:choice>
          <xsd:element ref="set" />
          <xsd:element ref="category" />
          <xsd:element ref="greater" />
          <xsd:element ref="lesser" />
          <xsd:element ref="equal" />
          <xsd:element ref="absent" />
          <xsd:element ref="present" />
          <xsd:element ref="catfunction" />
          <xsd:element ref="vocab" />
          <xsd:element ref="unknown_is_rvalue" />
          <xsd:element ref="match" />
          <xsd:element ref="catequals" />
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="input">
    <xsd:annotation>
      <xsd:documentation>an externally supplied data value used in a rule.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="alttext" type="xsd:string" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="set">
    <xsd:annotation>
      <xsd:documentation>a fuzzy set</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="settype" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="category">
    <xsd:annotation>
      <xsd:documentation>A short and discrete textual state that an input or output can contain.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="alttext" type="xsd:string" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="anything">
    <xsd:annotation>
      <xsd:documentation>indicates that the conditions for the rule to fire will be unconditionally met.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="power">
    <xsd:annotation>
      <xsd:documentation>fuzzy version of numeric power operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="arithexpression">
    <xsd:annotation>
      <xsd:documentation>indicates the contained opeators return a numeric value.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="plus">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic addition.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="minus">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic subtraction.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="multiply">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic multiplication.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="divide">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic division.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="unaryminus">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic unary sign inversion</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="output">
    <xsd:annotation>
      <xsd:documentation>represents an output value created by this ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="visible" type="xsd:boolean" />
          <xsd:attribute name="replace" type="xsd:string" />
          <xsd:attribute name="alttext" type="xsd:string" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="constant">
    <xsd:annotation>
      <xsd:documentation>A singleton numeric constant.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="reference" type="xsd:string" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="willbe">
    <xsd:annotation>
      <xsd:documentation>separator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="inputlist">
    <xsd:annotation>
      <xsd:documentation>In the data dictionary section indicates the input definitions.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="inputspec" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="outputlist">
    <xsd:annotation>
      <xsd:documentation>In the data dictionary section indicates the output definitions.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="outputspec" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="inputspec">
    <xsd:annotation>
      <xsd:documentation>An individual input definition.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice>
          <xsd:element ref="input" />
          <xsd:element ref="unknown_input" />
        </xsd:choice>
        <xsd:element minOccurs="0" ref="path" />
        <xsd:choice minOccurs="0">
          <xsd:element ref="categorical" />
          <xsd:element ref="numeric" />
          <xsd:element ref="presence" />
          <xsd:element ref="textual" />
          <xsd:element ref="semantic" />
          <xsd:element ref="arity" />
        </xsd:choice>
        <xsd:element minOccurs="0" ref="confidence" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="outputspec">
    <xsd:annotation>
      <xsd:documentation>an individual output definition.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice>
          <xsd:element ref="output" />
          <xsd:element ref="unknown_output" />
        </xsd:choice>
        <xsd:element minOccurs="0" ref="path" />
        <xsd:choice>
          <xsd:element ref="categorical" />
          <xsd:element ref="numeric" />
          <xsd:element ref="presence" />
        </xsd:choice>
        <xsd:element minOccurs="0" ref="execorder" />
        <xsd:element minOccurs="0" ref="updates" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="categorical">
    <xsd:annotation>
      <xsd:documentation>Defines the input or output as posessing categories.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="category" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="numeric">
    <xsd:annotation>
      <xsd:documentation>Defines the input or output as numeric.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="setdefinition" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="setdefinition">
    <xsd:annotation>
      <xsd:documentation>Introduces a set definition.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="set" />
        <xsd:element ref="lower" />
        <xsd:choice minOccurs="0">
          <xsd:sequence>
            <xsd:element ref="lowermid" />
            <xsd:element ref="uppermid" />
          </xsd:sequence>
          <xsd:element ref="middle" />
        </xsd:choice>
        <xsd:element ref="upper" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="lower" type="xsd:double">
    <xsd:annotation>
      <xsd:documentation>Lower bound of a set.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="upper" type="xsd:double">
    <xsd:annotation>
      <xsd:documentation>Upper bound of a set.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="if">
    <xsd:annotation>
      <xsd:documentation>Placeholder at start of rule.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="then">
    <xsd:annotation>
      <xsd:documentation>Placeholder between conditional and output section of the rule.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="creationdate" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Documentation only - the date the ruleset was created.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="source">
    <xsd:annotation>
      <xsd:documentation>Documentation only - the source of the data if created from a data set via data mining.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="selectionpattern" type="xsd:string" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="generator" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Documentation only - The editor or data mining system that created the rule set.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="examples" type="xsd:integer">
    <xsd:annotation>
      <xsd:documentation>Documentation only - The number of examples used to generate the rule set if crated by data mining.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="sum">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic sum function.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="catcompare" />
        <xsd:element ref="constant" />
        <xsd:element ref="divide" />
        <xsd:element ref="maximum" />
        <xsd:element ref="minimum" />
        <xsd:element ref="minus" />
        <xsd:element ref="modulus" />
        <xsd:element ref="multiply" />
        <xsd:element ref="numfunction" />
        <xsd:element ref="input" />
        <xsd:element ref="output" />
        <xsd:element ref="plus" />
        <xsd:element ref="power" />
        <xsd:element ref="remotenumfunc" />
        <xsd:element ref="round" />
        <xsd:element ref="sigmoid" />
        <xsd:element ref="sum" />
        <xsd:element ref="unaryminus" />
        <xsd:element ref="unknown_constant" />
        <xsd:element ref="unknown_input" />
        <xsd:element ref="unknown_numeric_op" />
        <xsd:element ref="unknown_output" />
        <xsd:element ref="fuzzytuple" />
        <xsd:element ref="product" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="sigmoid">
    <xsd:annotation>
      <xsd:documentation>Sigmiod squashing function used in simulations of neural nets.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="confidence" type="xsd:float">
    <xsd:annotation>
      <xsd:documentation>The degree of certainty attached to a rule. Range 0-1</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="execorder" type="xsd:integer">
    <xsd:annotation>
      <xsd:documentation>A number specifying the order of execution of outputs. Lower numbers are executed first.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="middle" type="xsd:double">
    <xsd:annotation>
      <xsd:documentation>The middle value of a triangular fuzzy set.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="encoderange">
    <xsd:annotation>
      <xsd:documentation>no longer used.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="input" />
      </xsd:sequence>
      <xsd:attribute name="settype" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="catcompare">
    <xsd:annotation>
      <xsd:documentation>no longer used.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="category" />
        <xsd:element ref="input" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="range">
    <xsd:annotation>
      <xsd:documentation>no longer used.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:attribute name="settype" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="greater">
    <xsd:annotation>
      <xsd:documentation>Fuzzy numeric comparison operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="lesser">
    <xsd:annotation>
      <xsd:documentation>Fuzzy numeric comparison operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="equal">
    <xsd:annotation>
      <xsd:documentation>Fuzzy numeric comparison operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="fuzzytuple">
    <xsd:annotation>
      <xsd:documentation>Enables the composition of a fuzzy number from several (2-4) singletons. Typically used with constants.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element ref="catcompare" />
          <xsd:element ref="constant" />
          <xsd:element ref="divide" />
          <xsd:element ref="maximum" />
          <xsd:element ref="minimum" />
          <xsd:element ref="minus" />
          <xsd:element ref="modulus" />
          <xsd:element ref="multiply" />
          <xsd:element ref="numfunction" />
          <xsd:element ref="input" />
          <xsd:element ref="output" />
          <xsd:element ref="plus" />
          <xsd:element ref="power" />
          <xsd:element ref="remotenumfunc" />
          <xsd:element ref="round" />
          <xsd:element ref="sigmoid" />
          <xsd:element ref="sum" />
          <xsd:element ref="unaryminus" />
          <xsd:element ref="unknown_constant" />
          <xsd:element ref="unknown_input" />
          <xsd:element ref="unknown_numeric_op" />
          <xsd:element ref="unknown_output" />
          <xsd:element ref="product" />
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="absent">
    <xsd:annotation>
      <xsd:documentation>predefined category used with presence inputs and outputs.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="present">
    <xsd:annotation>
      <xsd:documentation>predefined category used with presence inputs and outputs.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="path" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>XPath statement locating the data for inputs or outputs relative to the selectionpattern.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="cost" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Cost data</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="presence">
    <xsd:annotation>
      <xsd:documentation>Defines an input or output as 'presence' i.e. responding to or predicting the presence or absence of a node.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="voidfunction">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="localfunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="catfunction">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="localfunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="numfunction">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="localfunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="functionname" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="functioncatparam">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="input" />
        <xsd:element ref="output" />
        <xsd:element ref="category" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="functionnumparam">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithunarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="functionfuzzyparam">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:choice>
        <xsd:element ref="and" />
        <xsd:element ref="or" />
        <xsd:element ref="is" />
        <xsd:element ref="not" />
        <xsd:element ref="anything" />
        <xsd:element ref="sigmoid" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="functionlist">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="functionspec" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="functionspec">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="functionlibraryname" />
        <xsd:element ref="functionname" />
        <xsd:choice>
          <xsd:element ref="remotevoidfunc" />
          <xsd:element ref="remotecatfunc" />
          <xsd:element ref="remotenumfunc" />
          <xsd:element ref="remotefuzzyfunc" />
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="functionlibraryname" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="functionremotename" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="remotevoidfunc">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="remotefunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="remotecatfunc">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="remotefunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="remotenumfunc">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="remotefunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="remotecatparam" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="remotenumparam" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="remotefuzzyparam" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="remotefuzzyfunc">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="remotefunctiontype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="textual">
    <xsd:annotation>
      <xsd:documentation>Denotes an input containing a block of text.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="vocabulary" />
      </xsd:sequence>
      <xsd:attribute name="stemming" type="xsd:boolean" />
      <xsd:attribute name="stoplist" type="xsd:boolean" />
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="vocabulary">
    <xsd:annotation>
      <xsd:documentation>a collection of vocabs.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="vocab" />
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="word" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="word">
    <xsd:annotation>
      <xsd:documentation>a single word used for text processing.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="pt" type="xsd:double" />
          <xsd:attribute name="pf" type="xsd:double" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="vocab" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>a name given to a collection of words</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="semantic">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="inputspec" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="round">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic rounding operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="maximum">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic maximum operator</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="minimum">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic minimum operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="modulus">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic modulus opeerator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent mixed="false">
        <xsd:extension base="arithbinarytype" />
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="unknown_input">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_logical_op">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_output_rvalue">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_is_lvalue">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_is_rvalue">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_top_logical_op">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_output">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_constant">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="unknown_numeric_op">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:complexType name="arithbinarytype">
    <xsd:annotation>
      <xsd:documentation>Type defining a two operator arithmetic type.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:choice>
        <xsd:element ref="catcompare" />
        <xsd:element ref="constant" />
        <xsd:element ref="divide" />
        <xsd:element ref="maximum" />
        <xsd:element ref="minimum" />
        <xsd:element ref="minus" />
        <xsd:element ref="modulus" />
        <xsd:element ref="multiply" />
        <xsd:element ref="numfunction" />
        <xsd:element ref="input" />
        <xsd:element ref="output" />
        <xsd:element ref="plus" />
        <xsd:element ref="power" />
        <xsd:element ref="remotenumfunc" />
        <xsd:element ref="round" />
        <xsd:element ref="sigmoid" />
        <xsd:element ref="sum" />
        <xsd:element ref="unaryminus" />
        <xsd:element ref="unknown_constant" />
        <xsd:element ref="unknown_input" />
        <xsd:element ref="unknown_numeric_op" />
        <xsd:element ref="unknown_output" />
        <xsd:element ref="fuzzytuple" />
        <xsd:element ref="product" />
      </xsd:choice>
      <xsd:choice>
        <xsd:element ref="catcompare" />
        <xsd:element ref="constant" />
        <xsd:element ref="divide" />
        <xsd:element ref="maximum" />
        <xsd:element ref="minimum" />
        <xsd:element ref="minus" />
        <xsd:element ref="modulus" />
        <xsd:element ref="multiply" />
        <xsd:element ref="numfunction" />
        <xsd:element ref="input" />
        <xsd:element ref="output" />
        <xsd:element ref="plus" />
        <xsd:element ref="power" />
        <xsd:element ref="remotenumfunc" />
        <xsd:element ref="round" />
        <xsd:element ref="sigmoid" />
        <xsd:element ref="sum" />
        <xsd:element ref="unaryminus" />
        <xsd:element ref="unknown_constant" />
        <xsd:element ref="unknown_input" />
        <xsd:element ref="unknown_numeric_op" />
        <xsd:element ref="unknown_output" />
        <xsd:element ref="fuzzytuple" />
        <xsd:element ref="product" />
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="arithunarytype">
    <xsd:annotation>
      <xsd:documentation>Type defining a single operator arithmetic type.</xsd:documentation>
    </xsd:annotation>
    <xsd:choice>
      <xsd:element ref="catcompare" />
      <xsd:element ref="constant" />
      <xsd:element ref="divide" />
      <xsd:element ref="maximum" />
      <xsd:element ref="minimum" />
      <xsd:element ref="minus" />
      <xsd:element ref="modulus" />
      <xsd:element ref="multiply" />
      <xsd:element ref="numfunction" />
      <xsd:element ref="input" />
      <xsd:element ref="output" />
      <xsd:element ref="plus" />
      <xsd:element ref="power" />
      <xsd:element ref="remotenumfunc" />
      <xsd:element ref="round" />
      <xsd:element ref="sigmoid" />
      <xsd:element ref="sum" />
      <xsd:element ref="unaryminus" />
      <xsd:element ref="unknown_constant" />
      <xsd:element ref="unknown_input" />
      <xsd:element ref="unknown_numeric_op" />
      <xsd:element ref="unknown_output" />
      <xsd:element ref="fuzzytuple" />
      <xsd:element ref="product" />
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="logicalunarytype">
    <xsd:annotation>
      <xsd:documentation>Type defining a single operator logical type.</xsd:documentation>
    </xsd:annotation>
    <xsd:choice>
      <xsd:element ref="and" />
      <xsd:element ref="or" />
      <xsd:element ref="is" />
      <xsd:element ref="unknown_logical_op" />
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="logicalbinarytype">
    <xsd:annotation>
      <xsd:documentation>Type defining a two operator logical type.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:choice>
        <xsd:element ref="and" />
        <xsd:element ref="or" />
        <xsd:element ref="is" />
        <xsd:element ref="not" />
        <xsd:element ref="unknown_logical_op" />
      </xsd:choice>
      <xsd:choice>
        <xsd:element ref="and" />
        <xsd:element ref="or" />
        <xsd:element ref="is" />
        <xsd:element ref="not" />
        <xsd:element ref="unknown_logical_op" />
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="localfunctiontype">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element ref="functionname" />
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="functioncatparam" />
        <xsd:element ref="functionnumparam" />
        <xsd:element ref="functionfuzzyparam" />
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="remotefunctiontype">
    <xsd:annotation>
      <xsd:documentation>Reserved for future expansion.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element ref="functionremotename" />
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="remotecatparam" />
        <xsd:element ref="remotefuzzyparam" />
        <xsd:element ref="functionnumparam" />
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="arity">
    <xsd:annotation>
      <xsd:documentation>defines an input or output that counts or predicts the counts of a set of nodes.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="setdefinition" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="unknown_confidence">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="lowermid" type="xsd:double">
    <xsd:annotation>
      <xsd:documentation>for trapezoidal fuzzy sets indicates the lower middle bound.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="uppermid" type="xsd:double">
    <xsd:annotation>
      <xsd:documentation>for trapezoidal fuzzy sets indicates the upper middle bound.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="namespaces">
    <xsd:annotation>
      <xsd:documentation>collection of namespaces needed to locate data in the data source.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="namespace" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="namespace">
    <xsd:annotation>
      <xsd:documentation>An individual namespace.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="uri" />
        <xsd:element ref="prefix" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="uri" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>The uri of a namespace</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="prefix" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>the prefix of a namespace.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="updates">
    <xsd:annotation>
      <xsd:documentation>Indicates that the value of the given input is updated by this output.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="input" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="association">
    <xsd:annotation>
      <xsd:documentation>Represents a single association found in the input data.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="2" maxOccurs="50" ref="is" />
        <xsd:element ref="confidence" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="match">
    <xsd:annotation>
      <xsd:documentation>Matches a regular expression contained in a string constant to the textual value on the other side of the 'is' operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:choice>
        <xsd:element ref="stringconstant" />
        <xsd:element ref="unknown_string_constant" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="stringconstant" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>A string constant</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="numericconstantlist">
    <xsd:annotation>
      <xsd:documentation>a collection of numeric constants</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="numericconstantdefinition" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="stringconstantlist">
    <xsd:annotation>
      <xsd:documentation>a collection of string constants.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="stringconstantdefinition" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="numericconstantdefinition">
    <xsd:annotation>
      <xsd:documentation>a single numeric constant definition.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="name" />
        <xsd:element ref="value" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="stringconstantdefinition">
    <xsd:annotation>
      <xsd:documentation>a single string constant definition.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="name" />
        <xsd:element ref="string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="name" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>the name of the constant used within rules.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="value" type="xsd:double">
    <xsd:annotation>
      <xsd:documentation>The value of the constant.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="string" type="xsd:string">
    <xsd:annotation>
      <xsd:documentation>The text of a string constant.</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="unknown_string_constant">
    <xsd:annotation>
      <xsd:documentation>Used as a placeholder during editing. Should not appear in a working ruleset.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType />
  </xsd:element>
  <xsd:element name="product">
    <xsd:annotation>
      <xsd:documentation>Fuzzy arithmetic product operator.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="catcompare" />
        <xsd:element ref="constant" />
        <xsd:element ref="divide" />
        <xsd:element ref="maximum" />
        <xsd:element ref="minimum" />
        <xsd:element ref="minus" />
        <xsd:element ref="modulus" />
        <xsd:element ref="multiply" />
        <xsd:element ref="numfunction" />
        <xsd:element ref="input" />
        <xsd:element ref="output" />
        <xsd:element ref="plus" />
        <xsd:element ref="power" />
        <xsd:element ref="remotenumfunc" />
        <xsd:element ref="round" />
        <xsd:element ref="sigmoid" />
        <xsd:element ref="sum" />
        <xsd:element ref="unaryminus" />
        <xsd:element ref="unknown_constant" />
        <xsd:element ref="unknown_input" />
        <xsd:element ref="unknown_numeric_op" />
        <xsd:element ref="unknown_output" />
        <xsd:element ref="fuzzytuple" />
        <xsd:element ref="product" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="catequals">
    <xsd:complexType>
      <xsd:choice>
        <xsd:element ref="input" />
        <xsd:element ref="output" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>