Property Lists

ProWiki | RecentChanges | Preferences

Showing revision 1
Previous: Page Queries

In-Page Property Lists

The second major type of query is the in-page property list. Whereas a page query says, "for all pages that have this property", a property list says, "apply the following pattern for all properties of this type on this page".

For example, let's give this page several ExampleItem properties:

ExampleItem = A big black book

ExampleItem = Deck of cards

ExampleItem = Some pocket lint

We can now add a query that goes through all of these properties and lists them:

{{?*ExampleItem : <b>A big black book | Deck of cards | Some pocket lint</b><br>}}

Note the "*" at the start of the query -- that indicates that a property list is desired. When displayed, it looks like this:

{{?*ExampleItem : A big black book | Deck of cards | Some pocket lint
}}

That isn't very interesting, is it? But we can make it a heck of a lot more interesting if those items are references to pages themselves, with their own properties. Say that each ExampleItem is actually the name of a page, and that each of those pages has an ItemName? and ItemDescription? property. Now we can do this:

{{?*ExampleItem : <b>The NecronomiconA? poker deck[Some Pocket Lint]?</b> (<i>A Big Black BookDeck Of Cards[Some Pocket Lint]?</i>) -- A large black book of unknown age. You get chills just trying to hold it. There is a big sealed padlock, and no apparent key.A perfectly ordinary-looking deck. Or is it? On closer inspection, you see that several cards have slightly cut corners. Hmm...[Some Pocket Lint]?<br>}}

That is, "For each ExampleItem on this page, take the value as a page name, and show the ItemName?, PAGENAME and ItemDescription? properties on that page". That shows up like this:

{{?*ExampleItem : The NecronomiconA? poker deck[Some Pocket Lint]? (A Big Black BookDeck Of Cards[Some Pocket Lint]?) -- A large black book of unknown age. You get chills just trying to hold it. There is a big sealed padlock, and no apparent key.A perfectly ordinary-looking deck. Or is it? On closer inspection, you see that several cards have slightly cut corners. Hmm...[Some Pocket Lint]?
}}

Neat, huh? I left the Pocket Lint undefined, so that you can see what happens if you use this syntax to refer to a page that isn't there.

In-Page Singleton Property Queries

You can also do queries aimed at single values rather than multiple ones. If you substitute a "+" for the "*" in the query, it will only fetch one value. The particular power of this alternative is that it will walk up the inheritance tree: if the property is defined by an ancestor of this page, the value will be taken from that ancestor. This can be useful if you want a default value.

This variant is also useful as essentially an "if" statement. For example, this line:

{{?+ExampleItem : <h4>ExampleItems?</h4>}}

renders like this:

{{?+ExampleItem :

ExampleItems?

}}

because there are ExampleItems? on this page. But if there's weren't any, the line would be omitted entirely. This is often useful for headers to lists.

Leaf Queries

Rather different from the above are Leaf Queries. This are specifically aimed at the prototype-oriented inherited nature of ProWiki. They allow you to fetch all of the leaves descending from a particular page -- that is, all of the descendants that do not themselves have children.

The syntax of a leaf query looks like this:

{{?~ParentPage? : <b></b> (<i>Property Lists</i>) -- <br>}}

So this says, "for each leaf page that inherits from ParentPage?, show the Name, PAGENAME and Description". Again, this is strictly practical -- it is often useful to get a listing of such leaves, without any intervening parent nodes in the inheritance tree. (A version of this that includes those parent nodes would be easy enough to add, but I haven't needed it yet.)

Next: Display Templates


ProWiki | RecentChanges | Preferences
This page is read-only | View other revisions | View source of this page | View current revision
Edited May 19, 2005 5:36 pm by Jducoeur
Search:
Edit: