summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/README.md')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/README.md101
1 files changed, 101 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/README.md b/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/README.md
new file mode 100644
index 00000000..ec7da3d0
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/README.md
@@ -0,0 +1,101 @@
+# SPARQLStore
+
+The `SPARQLStore` is the name for the component that can establish a connection between a [RDF triple store][tdb] and Semantic MediaWiki (a more general introduction can be found [here](https://www.semantic-mediawiki.org/wiki/Help:Using SPARQL and RDF stores)).
+
+The `SPARQLStore` is composed of a base store (by default using the existing `SQLStore`), a `QueryEngine`, and a connector to the RDF back-end. Currently, the base store takes the position of accumulating information about properties, value annotations, and statistics.
+
+## Overview
+
+```
+ SPARQLStore
+ |- SPARQLStoreFactory
+ |- ConnectionManager
+ | |- RepositoryConnectionProvider
+ | |- RepositoryClient
+ | |- RepositoryConnection
+ | |- FourstoreRepositoryConnector
+ | |- FusekiRepositoryConnector
+ | |- GenericRepositoryConnector
+ | |- VirtuosoRepositoryConnector
+ |- TurtleTriplesBuilder
+ |- RepositoryRedirectLookup
+ |- ReplicationDataTruncator
+ |- QueryEngine
+ |- HttpResponseParser
+ |- XmlResponseParser
+ |- ConditionBuilder
+ |- DescriptionInterpreter
+```
+
+## Repository connector
+
+A repository connector is responsible for establishing a communication between Semantic MediaWiki and an external [TDB][tdb] with the main objective to transfer/update triples from SMW to the back-end and to return result matches for a query request.
+
+The following client repositories have been tested:
+
+- [Jena Fuseki][fuseki]
+- [Virtuoso][virtuoso]
+- [Blazegraph][blazegraph]
+- [Sesame][sesame]
+- [4Store][4store]
+
+### Create a connection
+<pre>
+$connectionManager = new ConnectionManager();
+
+$connectionManager->registerConnectionProvider(
+ 'sparql',
+ new RepositoryConnectionProvider( 'fuseki' )
+);
+
+$connection = $connectionManager->getConnection( 'sparql' )
+</pre>
+
+## QueryEngine
+
+The `QueryEngine` is responsible for transforming an `#ask` description object into a qualified
+[`SPARQL` query][sparql-query] expression.
+
+- The `ConditionBuilder` builds a SPARQL condition from an `#ask` query artefact (aka [`Description`][ask query] object)
+- The condition is transformed into a qualified `SPARQL` statement for which the [repository connector][connector] is making a http request to the back-end while awaiting an expected list of subjects that matched the condition in form of a `XML` or `JSON` response
+- The raw results are being parsed by a `HttpResponseParser` to provide a unified `RepositoryResult` object
+- During the final step, the `QueryResultFactory` converts the `RepositoryResult` into a SMW specific `QueryResult` object which will fetch the remaining data (those selected as printrequests) from the base store and make them available to a [`QueryResultPrinter`][resultprinter]
+
+### Create a query request
+<pre>
+/**
+ * Equivalent to [[Foo::+]]
+ *
+ * SELECT DISTINCT ?result WHERE {
+ * ?result swivt:wikiPageSortKey ?resultsk .
+ * ?result property:Foo ?v1 .
+ * }
+ * ORDER BY ASC(?resultsk)
+ */
+$description = new SomeProperty(
+ new DIProperty( 'Foo' ),
+ new ThingDescription()
+);
+
+$query = new Query( $description );
+
+$sparqlStoreFactory = new SPARQLStoreFactory(
+ new SPARQLStore()
+);
+
+$queryEngine = $sparqlStoreFactory->newMasterQueryEngine();
+$queryResult = $queryEngine->getQueryResult( $query );
+</pre>
+
+[fuseki]: https://jena.apache.org/
+[fuseki-dataset]: https://jena.apache.org/documentation/tdb/dynamic_datasets.html
+[sparql-query]:http://www.w3.org/TR/sparql11-query/
+[sparql-dataset]: https://www.w3.org/TR/sparql11-query/#specifyingDataset
+[virtuoso]: https://github.com/openlink/virtuoso-opensource
+[4store]: https://github.com/garlik/4store
+[tdb]: http://en.wikipedia.org/wiki/Triplestore
+[sesame]: http://rdf4j.org/
+[blazegraph]: https://wiki.blazegraph.com/wiki/index.php/Main_Page
+[ask query]: https://www.semantic-mediawiki.org/wiki/Query_language
+[connector]: https://www.semantic-mediawiki.org/wiki/Help:SPARQLStore/RepositoryConnector
+[resultprinter]: https://www.semantic-mediawiki.org/wiki/Help:SPARQLStore/RepositoryConnector