<!ELEMENT contexts (context+)>
<!ELEMENT context (and|or|equals|notequals|greater|lower|greaterequals|lowerequals)>
  <!ATTLIST context name CDATA #REQUIRED>
<!ELEMENT and
((and|or|equals|notequals|greater|lower|greaterequals|lowerequals),
 (and|or|equals|notequals|greater|lower|greaterequals|lowerequals)+)>

<!ELEMENT or
((and|or|equals|notequals|greater|lower|greaterequals|lowerequals),
 (and|or|equals|notequals|greater|lower|greaterequals|lowerequals)+)>

<!ELEMENT contextid EMPTY>
  <!ATTLIST contextid value CDATA #REQUIRED>
  <!-- specifies the atomic type if it is a atomic context --> 
  <!ATTLIST contextid atomic CDATA #IMPLIED>

<!ELEMENT boolean EMPTY>
  <!ATTLIST boolean value CDATA #REQUIRED>
<!ELEMENT date EMPTY>
  <!ATTLIST date value CDATA #REQUIRED>
  <!ATTLIST date unit CDATA #IMPLIED>   
<!ELEMENT nominal EMPTY>
  <!ATTLIST nominal value CDATA #REQUIRED> 
  <!ATTLIST nominal unit CDATA #IMPLIED>   
<!ELEMENT ordinal EMPTY>
  <!ATTLIST ordinal value CDATA #REQUIRED> 
  <!ATTLIST ordinal unit CDATA #IMPLIED> 
<!ELEMENT discrete EMPTY>
  <!ATTLIST discrete value CDATA #REQUIRED> 
  <!ATTLIST discrete unit CDATA #IMPLIED> 
<!ELEMENT continous EMPTY>
  <!ATTLIST continous value CDATA #REQUIRED> 
  <!ATTLIST continous unit CDATA #IMPLIED> 

<!ELEMENT accuracy EMPTY>
  <!ATTLIST accuracy value CDATA #REQUIRED> 

<!ELEMENT equals (contextid,(boolean|date|nominal|ordinal|(discrete,accuracy)|(continous,accuracy)))>
<!ELEMENT notequals (contextid,(date|nominal|ordinal|discrete|continous))>
<!ELEMENT greater (contextid,(date|ordinal|discrete|continous))>
<!ELEMENT lower (contextid,(date|ordinal|discrete|continous))>
<!ELEMENT greaterequals (contextid,(date|ordinal|discrete|continous))>
<!ELEMENT lowerequals (contextid,(date|ordinal|discrete|continous))>
