Extension:SparqlExtension

This extension allows to integrate Semantic Mediawiki with a SPARQL endpoint via a web-service.

While this has been set up and tested to work with Joseki and Jena TDB, with some modifications, this should be configurable to work with other triplestores as well.

This extension is an open-source alternative to the triplestore connector in the Extension:Halo Extension.

Comparison of Semantic MediaWiki triplestore connectors
There are (already) a few extensions that offer the possibility to connect the SMW to a rdf triplestore. The connectors differ significantly in their functionality and scalability. The goals and philosophies of their creators also differ. Below is a basic comparison table, however you are strongly suggested to look into the respective extension pages to select the extension that suits your needs.

Here's the basic advice:
 * Use Halo (the professional version) if you want corporate support
 * Use SparqlExtension if you want to use data from external endpoints and expose your data to the rest of the world (linked data)
 * Use RDFIO if you are not concerned about scalability (PHP only) or cannot run a separate Java triple-store

Basic Use

 * Querying the properties of the current page:

Where the function sparqlencode encodes the current page name ( variable) into the sparql-suitable format. The function is equivalent to except that it leaves the forward slashes un-encoded, which is required for querying sub-pages.


 * Dealing with sub-pages as recommended in Linked Data Patterns:

Here instead of using prefixes we are forced to use BASE keyword because the prefixed local part cannot contain any forward slashes. Using the BASE keyword allows to rephrase the IRI, so the following are equivalent:  article:France  SparqlExtension takes care of setting the correct prefixes and BASE keyword (equivalent to $smwgNamespace). The following prefixes are default ($smwgNamespace='http://YOURHOST/wiki/';): BASE  PREFIX article:  PREFIX a:  PREFIX category:  PREFIX cat:  PREFIX property:  PREFIX prop:  PREFIX rdf:  So that the following query would return all pages that belong to a Cat category:

...the following query would return all pages that have a EnjoysMice property:

...the following query would all properties of page Cat:

...which is equivalent to:

Features

 * Synchronizes semantic data with the triple store and exposes it via Joseki endpoint.


 * Embed Sparql query output into a wiki page using a parser extension #sparql.


 * Use foreign endpoints (so far only dbpedia and factbook are "built-in")


 * Multiple output formats: table, maps, graph, template

Template
The following query:

...would feed the following template:
 * Article belongs to a category : called

Maps querying DBpedia (requires Extension:Maps)
Maps output format requires the query to have a "point" variable of type http://www.georss.org/georss/point (or a string with lat and lon separated by a space or comma).

Charts (requires jQuery Visualization)
The following query creates a pie chart for Spain's fuel source mix querying CIA Factbook and using jQuery Visualization to produce HTML5-based chart.

Inline
Best used to return a single value. If multiple values are return they are separated by comma.

is the biggest power plant in China. ...would produce: Three Gorges Powerplant is the biggest power plant in China.

Prerequisites

 * Requires Extension:Semantic_MediaWiki
 * Requires Joseki

Installation
Alternatively you can check out the latest version: svn co https://svn.eeni.tbm.tudelft.nl/SparqlExtension/
 * Install SMW and Joseki first.
 * Configure Joseki to accept named graphs and "SELECT FROM" statements (see example joseki config here)
 * Optional: it seems that Joseki allows non-restricted access to the SPARQL update service allowing strangers to write to your store or even delete data. See User:Alfredas/JosekiSecurity for a security "patch".
 * Download zip and extract it into your_mediawiki_path/extensions/
 * Add the following to the end of your LocalSettings.php

$smwgNamespace = 'http://YOURHOST/wiki/'; $sparqlJosekiUpdateUrl = "http://YOURHOST:8080/joseki/update/service"; // wherever the joseki servlet is running $sparqlRdfExportUrl = "http://YOURHOST/wiki/Special:ExportRDF/"; $sparqlJosekiSparqlUrl = "http://YOURHOST:8080/joseki/sparql?default-graph-uri=&output=csv&query="; // again adjust this to match joseki configuation require_once("$IP/extensions/SparqlExtension/SparqlExtension.php"); $smwgDefaultStore = "JosekiStore"; $sparqljQueryVizPath = "/extensions/jQueryViz";
 * 1) optional support for fancy HTML5 charts
 * 2) you have to download charts from http://code.google.com/p/dwpe/downloads/detail?name=dwpe-code-public-latest.zip and extract them here

In order to configure additional endpoints add the following to your LocalSettings.php: $sparqlEndpoints["factbook"] = array(	"url" => "http://www4.wiwiss.fu-berlin.de/factbook/sparql?output=json&query=",	"type" => "json" ); ...where "url" is the url of the sparql enpoint. The query will be appended to the end. "type" (result format) can be either json or csv, which is sufficient for most sparql endpoints out there.

The endpoint defined can be used in the following way:

Proxy configuration
If your server is behind a proxy, the following allows to configure a proxy (used for fetching data from external endpoints): $sparqlProxyIP = "xxx.xxx.xxx.xxx"; $sparqlProxyPort = 3128;


 * You can import all your current SMW data using a utility script: your_mediawiki_path/extensions/SparqlExtension/importPagesIntoEndpoint.php

Known issues

 * N.B. Even though TDB allows multiple read single write (MRSW) policy only, Joseki allows simultaneous writes to TDB (or so it seems). Consider this a Joseki bug that hopefully will be fixed in the nearest future.
 * The Graphviz output format needs to be further standardized.
 * The Maps Extension may cause problems if you use it to generate coordinates for property values, specifically if it renders coordinates using the decimal-minute-second notation. To fix this, you need to go to Maps/Maps_Settings.php and change $egMapsCoordinateNotation = Maps_COORDS_DMS; to $egMapsCoordinateNotation = Maps_COORDS_FLOAT;