Domain queries¶
A top-level <query> defines an answer for a predicate. A query has one predicate and exactly one body form: implications, random selection, or enumeration.
<query predicate="greeting">
<implication>
<antecedent predicate="time_of_day" value="morning"/>
<consequent predicate="greeting" value="good_morning"/>
</implication>
<implication>
<antecedent predicate="time_of_day" value="evening"/>
<consequent predicate="greeting" value="good_evening"/>
</implication>
</query>
- Implications: each antecedent may be one proposition or a configuration; all propositions in a configuration must hold. Define exhaustive cases for the expected state space.
- Random selection:
<select_at_random>contains individuals; consecutive calls may return the same individual. - Enumeration:
<enumerate>returns individuals in declaration order and restarts after its final value. Setrandomize="true"to randomize the order.
Choose a value at random; repeated calls may choose the same value:
<query predicate="direction">
<select_at_random>
<individual value="left"/>
<individual value="right"/>
</select_at_random>
</query>
Enumerate all declared values in sequence:
<query predicate="season_to_consider">
<enumerate>
<individual value="spring"/>
<individual value="summer"/>
<individual value="autumn"/>
<individual value="winter"/>
</enumerate>
</query>
To enumerate the same values in random order, set randomize="true" on enumerate. For implication bodies with multiple conditions, place all antecedent propositions inside one <antecedent>; every proposition must hold for that implication to match.
invoke_domain_query resolves a question through a matching domain query. Use reset_domain_query to restart an enumeration. has_more_items can test for remaining values.