Semantic Internal Objects Extension

        Version 0.7.1
        Yaron Koren

This is free software licensed under the GNU General Public License. Please
see http://www.gnu.org/copyleft/gpl.html for further details, including the
full text and terms of the license.

== Overview ==

Semantic Internal Objects is an extension to MediaWiki that defines a
parser function, '#set_internal', that is used to define "internal objects"
within the Semantic MediaWiki system. There are complex types of
information sometimes known as 'n-ary relations' that involve more than one
data value associated together. A simple example is in a cooking recipe; a
recipe may call for 1 cup of flour, and the values "1", "cup" and "flour"
must be encoded together; by themselves, the values are not meaningful (the
third value has meaning, though not all of the meaning it could have). Such
information can be stored already in SMW using multi-valued properties,
though this approach is not flexible and currently leads to querying problems.
Instead, #set_internal can be used to define "internal objects" within a page,
which can then be queried as normal SMW pages would; a row of a recipe would
be a good example of data that could be defined using #set_internal.

The syntax of #set_internal is as follows:

{{#set_internal:object_to_page_property
|property1=value1
|property2=value2
...
}}

A sample call to #set_internal would be:

{{#set_internal:Has recipe
|Has quantity=1
|Has unit=cup
|Has ingredient=flour
}}

This call would be placed in a page for a recipe, and it would define an object
that had an automatically-generated name; if it were in a page called "Carrot
cake", for instance, the object would be called "Carrot cake#1". If that page
had subsequent calls to #set_internal, the objects that those calls generated
would be called "Carrot cake#2", "Carrot cake#3", etc.

It should be noted that #set_internal does not display anything to the screen;
display of the values has to be handled separately (this can be done easily
if the function is called from a template).

Internal objects, once stored, can be queried as if they were wiki pages. So
the following query would show a table of all the recipes that contain more
than 1/2 a cup of flour, and the number of cups they contain:

{{#ask:[[Has recipe::+]][[Has ingredient::flour]][[Has unit::cup]][[Has quantity::>.5]]
|mainlabel=-
|? Has recipe
|? Has quantity
}}

Note the "mainlabel=-" parameter in the query: that hides the names of the
internal objects from users, since those names are meaningless.

For more information, see the extension homepage at:
http://www.mediawiki.org/wiki/Extension:Semantic_Internal_Objects

== Requirements ==

This version of the Semantic Internal Objects extension requires MediaWiki 1.16
or higher and Semantic MediaWiki 1.5.3 or higher.

== Installation ==

To install the extension, place the entire 'SemanticInternalObjects' directory
within your MediaWiki 'extensions' directory, then add the following
line to your 'LocalSettings.php' file:

     require_once( "$IP/extensions/SemanticInternalObjects/SemanticInternalObjects.php" );

== Contact ==

Most comments, questions, suggestions and bug reports should be sent to
the Semantic MediaWiki mailing list:

 https://lists.sourceforge.net/lists/listinfo/semediawiki-user

If possible, please add "[SIO]" at the beginning of the subject line, to
clarify the subject matter.