Using Intermediate XML Documents
When we think of XML structures, we tend to think of the input documents and the results. However, XQuery also allows you to create intermediate XML structures in your queries that are not included in the results. This can be useful for many reasons, among them creating lookup tables and narrowing down input documents to reduce complexity or improve performance.
Creating Lookup Tables
Suppose you want to create a summary of the product catalog that lists the departments. However, you would like to convert the department codes to more descriptive names. You could use the query shown in Example 9-15 to accomplish this.
Example 9-15. Converting values without a lookup table
Query let $cat := doc("catalog.xml")/catalog for $dept in distinct-values($cat/product/@dept) return <li>Department: {if ($dept = "ACC") then "Accessories" else if ($dept = "MEN") then "Menswear" else if ($dept = "WMN") then "Womens" else ( ) } ({$dept})</li> Results <li>Department: Womens (WMN)</li> <li>Department: Accessories (ACC)</li> <li>Department: Menswear (MEN)</li>
This gives the desired results, namely a descriptive name for the department, with the department code in parentheses. However, the query is somewhat cluttered, and anyone maintaining the query would have to be careful to insert any new department codes in the right place, using the right XQuery syntax. A more elegant solution is shown in Example 9-16, which uses an intermediate XML structure as a lookup table. It ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access