You are currently viewing a snapshot of taken on April 21, 2008. Most of this content is highly out of date (some pages haven't been updated since the project began in 1998) and exists for historical purposes only. If there are any pages on this archive site that you think should be added back to, please file a bug.

<< XULNotes Author: Chris Waterson Other Docs: XUL Template Primer

XUL Template Primer - Nested Content


The containment attribute
Related Documents


This document expands on the XUL Template Primer by illustrating how templates can recursively generate nested content.


To illustrate how nested content is generated, we'll examine this XUL document, which builds a simple content model from an RDF/XML file.

<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <window xmlns:html="" xmlns="" align="vertical"> <vbox datasources="toc.rdf" ref="urn:root" containment=""> <template> <rule> <conditions> <content uri="?uri" /> <triple subject="?uri" predicate="" object="?subheadings" /> <member container="?subheadings" child="?subheading" /> </conditions> <bindings> <binding subject="?subheading" predicate="" object="?name" /> <binding subject="?subheading" predicate="" object="?number" /> </bindings> <action> <vbox> <hbox uri="?subheading"> <label value="?name (?number^)" /> </hbox> </vbox> </action> </rule> </template> </vbox> </window>

We'll use the following RDF/XML file, toc.rdf, which is a partial Table of Contents from one of my favorite books.

<?xml version="1.0"?> <rdf:RDF xmlns:rdf="" xmlns:nc=""> <rdf:Description about="urn:root"> <nc:subheadings> <rdf:Seq> <rdf:li> <rdf:Description ID="ch1" nc:number="1" nc:page="12" nc:name="Introduction to JavaScript" /> </rdf:li> <rdf:li> <rdf:Description ID="ch2" nc:number="2" nc:page="13" nc:name="Lexical Structure" /> </rdf:li> <rdf:li> <rdf:Description ID="ch3" nc:number="3" nc:page="15" nc:name="Data Types and Values" /> </rdf:li> </rdf:Seq> </nc:subheadings> </rdf:Description> <rdf:Description about="#ch1"> <nc:subheadings> <rdf:Seq> <rdf:li> <rdf:Description ID="ch1.1" nc:number="1.1" nc:page="16" nc:name="JavaScript Myths" /> </rdf:li> <rdf:li> <rdf:Description ID="ch1.2" nc:number="1.2" nc:page="19" nc:name="JavaScript Versions" /> </rdf:li> </rdf:Seq> </nc:subheadings> </rdf:Description> <rdf:Description about="#ch1.1"> <nc:subheadings> <rdf:Seq> <rdf:li> <rdf:Description ID="ch1.1.1" nc:number="1.1.1" nc:page="20" nc:name="JavaScript Is Not Java" /> </rdf:li> </rdf:Seq> </nc:subheadings> </rdf:Description> <rdf:Description about="#ch2"> <nc:subheadings> <rdf:Seq> <rdf:li> <rdf:Description ID="ch2.1" nc:number="2.1" nc:page="21" nc:name="Case Sensitivity" /> </rdf:li> </rdf:Seq> </nc:subheadings> </rdf:Description> <rdf:Description about="#ch3"> <nc:subheadings> <rdf:Seq> <rdf:li> <rdf:Description ID="ch3.1" nc:number="3.1" nc:page="30" nc:name="Numbers" /> </rdf:li> </rdf:Seq> </nc:subheadings> </rdf:Description> </rdf:RDF>

This RDF/XML creates the following model (the nc:number and nc:page properties have been left of for clarity's sake).

RDF Data Model

When thrown together in Mozilla, the following appears:


The containment attribute

The template's root node specifies how container membership is indicated using the containment attribute.

<vbox datasources="toc.rdf" ref="urn:root" containment=""> ... </vbox>

This attribute is a whitespace-separated list of RDF properties that indicate container membership in the RDF model.

XUL Template Primer
XUL template basics.
XUL Template Primer - Bindings
Illustrates how to use the <bindings> tag in your XUL templates.
XUL Template Primer - Multiple Rules
Illustrates how to write templates with multiple <rule> elements.
XUL Template Primer - Outliner
Illustrates how a template can be used as a view for a XUL outliner.
XUL Template Reference
Describes the simple XUL template syntax in detail.