Extension:Page Forms/Example

Getting Started
So, you've set up all the software on your site. Now what? Now it's time to create the structures to hold, display and enable adding and editing of your data; thankfully all of this can be done simply by creating various wiki pages. You should take the following steps:


 * Figure out your data structure. What types of pages will the site have? What data will be contained on each one? You can change all of this around later, but it's good to have a starting plan.


 * Create properties. The basic building blocks of any semantic site are the connections between data, which in Semantic MediaWiki are known as properties. A property is used to specify a single piece of information about the topic of this page; the value of a property can either be a standalone value, or the name of a page on the wiki. Every property should be defined on your wiki, with a page in the "Property:" namespace. The easiest way to do that is using the 'CreateProperty' special page (see above).


 * Create templates. A template sets the display of the data on a page, holds the markup to turn the data into actual semantic information, and (often) defines the page as being of a certain category, and thus of a certain page type. There will generally be one template per page type, although sometimes a single page type will contain more than one template. A template can also be used for aggregation, by displaying a list of all other pages that have a certain relationship to this page (see the inline queries documentation for much more information on this). The easiest way to create templates is using the 'CreateTemplate' special page (see above).


 * Create forms. Now you can create forms to allow users to easily add and edit pages of various types. There should be one form per page type; a form should populate the template or templates that this page type contains. As before, there's a special page to create new forms: 'CreateForm' (see above). See below for documentation on the special markup language used to define forms. One common request is for these three special pages ('CreateProperty', 'CreateTemplate' and 'CreateForm') to be able to edit existing property/template/form pages, and not just create new ones. However, this is programatically much harder to implement than creating new pages, because it requires parsing. For the foreseeable future, modifying existing properties, templates and forms will have to be done by hand. In other words, go to the properties, templates or forms pages (which are listed in special pages) and select what you want to modify. Clicking on the edit tab will allow you to do what you want by editing the source code.


 * Create categories. One template in each form should define each article that the form creates as being part of a certain category. You should create a page for each such category, and specify a default form for it so that every article is automatically editable with the same form that created it. The easiest way to do that is using the 'CreateCategory' special page (see above).


 * Enable links to forms. Besides creating categories that have a default form, there are other steps you should take to enable users to access the forms that you have created. These include adding links to add data in the sidebar and elsewhere, and setting default forms and alternate forms on properties, to have red-links to nonexistent pages point to a form for creating them. These actions are all explained further below.


 * Add data. You should also add data to the site, using your new forms, to make sure that forms, templates and categories are working the way you want them to.


 * Add links on sidebar and elsewhere. The sidebar (which, for English-language wikis, can be edited at the page "MediaWiki:Sidebar") should hold links to add each of the data types, and to the categories for each of these data types as well. You can also include such links on the main page and elsewhere.


 * Customize. Once the structure is in place, you can customize all you want - changing the look-and-feel of the entire wiki, of the various templates, and of the forms, adding and changing fields and adding and changing inline queries for queries.

...conversely, instead of creating properties, templates, forms and categories separately, you can create them all at once, using the 'CreateClass' special page (see above). This page does not allow as much flexibility as creating all these pages independently, but it can be run much faster.

Example
Let's go through a specific example of setting up a Semantic Forms-based wiki from scratch. Let's say that you want to create a wiki that shows all the books you have at home. We'll then go through the steps specified in "Getting started".

Figure out the data structure. You want two kinds of pages on your wiki: one for books, and one for authors. Each book page should hold a title, an author name (or names), a genre (or genres), a year of publication, and a number of pages. Each author page should hold the author name, their country of origin, and a list of all the books they have written that you own.

Create properties. For books, there is no need to create a property for the title, since the title of each page representing a book will be the title of that book. That leaves four fields:
 * Author(s) - using the "Create a property" page, you create a property called "Was written by", of type "Page" (since each author will have his/her own page).
 * Genre - you create a property called "Has genre", of type "String", and give it allowed values such as: "Art, Cookbook, Fiction, History, Poetry, Science".
 * Year of publication - you create a property called "Was published in year", of type "Number".
 * Number of pages - you create a property called "Has number of pages", of type "Number".

For author pages, you only need to create one more property:


 * Country of origin - you create a property called "Is from country", of type "String".

Create templates. You need to create two templates, one for books and one for authors:
 * Books - using the "Create a template" page, you create a template called "Book", and set it to define the category "Books". You add to it four fields, and for each field you specify three values: its field name in the template source code, its display label on each page, and the semantic property it populates.
 * For the first field, you set the field name to be "Authors", the label to be "Author(s)" and the semantic property to be "Was written by", and check the box indicating that this field can hold a list of values (since a book can have more than one author);
 * Click the Add field button and then for the second field, you set the three values to be "Genres", "Genre(s)" and "Has genre", and also check the box for a list of values;
 * Click the Add field button and then for the third, you set the values to be "Year", "Year of publication" and "Was published in year";
 * Click the Add field button and then and for the fourth field, you set them to be "Number of pages", "Number of pages" and "Has number of pages".
 * Click the Save page button.
 * Authors - using the "Create a template" page, you create a template called "Author", and set it to define the category "Authors".
 * You add to it just one field for which you set the three values to be "Country", "Country of origin" and "Is from country".
 * For this template, you also fill out the "Aggregation" fields in the form, since you want each author page to list all the books the author has written. Under "Semantic property", you select "Was written by", and for "Title for list" you put "Books by this author".
 * Click the Save page button.

Create forms. You need to create two forms, one for books and one for authors:
 * Books - using the "Create a form" page, you make a form called "Book", and add to it the template "Book". You do not do any further customizations on this form, but just save the form once you have created it.
 * Authors - using the "Create a form" page, you make a form called "Author", and add to it the template "Author". As before, you do not do any further customizations - you just save the page.

Create categories. You need to create two categories, one for books and one for authors; you have already specified these categories' names before:
 * Books - using the "Create a category" page, you make a category called "Books", and give it the default form "Book".
 * Authors - using the "Create a category" page, you make a category called "Authors", and give it the default form "Author".

Enable links to forms. You add the text "This property uses the form Has default form::Author." to the "Was written by" property's page, i.e. the page "Property:Was written by".

Add data. Using the new "Book" form, you create pages for some books; you check to make sure that both the form and the resulting pages look alright. Each book page will now have a red link to its author, that should point to the "Author" form for adding that author (you may need to refresh the page for the right link to show up). You can then add a few authors, either through these links or from the form page directly, to make sure that this setup works correctly too. Each created author's page should show a list of the books you've saved that have that person as the author.

Add links on sidebar and elsewhere. Your structures are now all set up, and you can add links to the sidebar for easy adding and viewing, by modifying the page 'MediaWiki:Sidebar' (or its equivalent if you're using a language other than English). You can add links to the "Book" and "Author" forms to make it easy to add new ones, and links to the "Books" and "Authors" categories to be able to see the full list of either one at a glance.