The set value element
Set value elements allow you to associate a set of database values with a given set name. For example here we associate a set of state names with the phrase "west coast":
<column id="name" type="text" lex="name,names,named,called">
<set_value lex="west coast">
<element val="California"/>
<element val="Oregon"/>
<element val="Washington"/>
...
</set_value>
...
Here we see the DTD definition for the set_value element:
<!ELEMENT set_value (element*|#PCDATA)>
<!ATTLIST set_value
lex CDATA #IMPLIED
description CDATA #IMPLIED>
<!ATTLIST element
val CDATA #REQUIRED>
lex is the comma-separated phrases associated with the set value (e.g. "west coast").
The sub-element element gives a value within the set. It has a single tag attribute
val that gives the literal value.
In the case that PCDATA is supplied as sub-element, it gives SQL that defines the set value. Note that this is SQL that get plugged into a query and gets executed at query time. An example use of this follows over a SQLite database.
<set_value lex="next weekend"><![CDATA[
SELECT day FROM Date_DIMENSION
WHERE day < DATE('now','weekday 1') AND
weekday IN ('Saturday','Sunday')
ORDER BY day DESC LIMIT 2
]]></set_value>
In this particular application, this lets users use expressions such as "next weekend" and Catch-Phrase dynamically, at query time, determines exactly which dates that constitutes.