<!ENTITY % NAME "NMTOKEN">
<!ENTITY % TYPE "NMTOKEN">
<!ENTITY % ATEXT "CDATA">
<!ENTITY % TEXT "#PCDATA">
<!ELEMENT block (property*)>
<!ATTLIST block
name %NAME; #REQUIRED>
<!ELEMENT attribute EMPTY>
<!ATTLIST attribute
key %ATEXT; #REQUIRED
value %ATEXT; #REQUIRED>
<!ELEMENT property (%TEXT; | attribute | property)*>
<!ATTLIST property
type %TYPE; #REQUIRED>
<!ELEMENT request (fetch | store)>
<!ELEMENT fetch (union)>
<!ELEMENT union (intersect+)>
<!ELEMENT intersect ((union | compare)+)>
<!ELEMENT compare (path, value)>
<!ATTLIST compare
subtree %NAME; #REQUIRED
operator (eq | ne | contains | excludes ) "eq"
caseSensitive (true | false) "true"
approximate (true | false) "false">
<!ELEMENT path (element*)>
<!ATTLIST path
attribute %ATEXT; ""
order (ascending | descending) "ascending">
<!ELEMENT element EMPTY>
<!ATTLIST element
property %TYPE; #REQUIRED>
<!ELEMENT value (%TEXT;)>
<!ELEMENT store (%BLOCK;)+>
<!ATTLIST store
action (create | write | update | delete) "write">
|