[tmql-wg] Proposed new requirement: Ability to produce textual output

Robert Barta rho@bigpond.net.au
Sun, 06 Jul 2003 19:59:02 +1000


On Thu, Jul 03, 2003 at 05:51:53PM +0200, Lars Marius Garshol wrote:
> | I would expect - depending on the query - that both, matching and
> | navigation features should be in the language. SQL has it, XQuery
> | has it, some RDF-query languages have it to a certain extent.
> 
> Robert, could you expand on this a little? I'm not sure I understand
> what you mean.

Let's look at XQuery (SQL is such a ... mature language):

{
        for $b in doc("http://www.bn.com/bib.xml")//book[editor]
        return
          <reference>
            { $b/title }
            {$b/editor/affiliation}
          </reference>
}

In the first for-loop the results is narrowed-in: books with editors.
Some results can be directly used from this match like the title. For
other some more navigation is done ($b/...go..somewhere../...).

After the navigation phase these results again could be subjected a
search or used to build a new search:

<result>
  {
    for $u in doc("users.xml")//user_tuple
    order by $u/name
    return
        <user>
            { $u/name }
            {
                for $b in distinct-values(doc("bids.xml")//bid_tuple
                                             [userid = $u/userid]/itemno)
                for $i in doc("items.xml")//item_tuple[itemno = $b]
                let $descr := $i/description/text()
                order by $descr
                return
                    <bid_on_item>{ $descr }</bid_on_item>
            }
        </user>
  }
</result>

> | Hosting navigational aspects in your abstract model seems to be a
> | bit difficult.  Also, there is more complication if we allow content
> | to be generated conditionally: Where do I host the condition?
> 
> That is a good question. TMTL solves this by having conditional
> features in the output language itself, but if there is only a query
> result and then a rendering of that this may be difficult.

Right, so I simply assume that there should be an 'if' in the query
language.

\rho