Manual - momo54/DSMW GitHub Wiki
Using Distributed Semantic MediaWiki
Publishing : Create pushfeeds and pushing
- First, you can edit wiki pages. Each time you save, you will see that a page has 2 histories: the traditional one and a new one accessible through the DSMW tab. Each time, you save a page, a new page representing the patch i.e. the set of primitive operations, is created. This page belongs to a different namespace "patch". Patches and operations of the patches are available as semantic data and can be requested. Most of DSMW code is written by requesting these semantic data.
- Second, you can publish these "patches" by creating a "pushfeed". This can be done, through the "DSMW tab" or through the "DSMW admin" special page. A pushfeed is just a wikipage containing a semantic query that select of pages to publish i.e. the set of pages where the history will be published. Pushfeed pages are contained in the namespace pushfeed and are also available for semantic queries.
- Third, once the pushfeed is created, you can push. Pushing creates changesets that aggregates all patches of selected pages. Changesets are represented as semantic wiki pages in the "ChangeSet" namespaces and can be part of semantic queries.
Subscribing : Create pullfeeds and pulling
- First create a pullfeed i.e. a subscribtion to a pushfeed. A pullfeed is a semantic wikipage referencing a remote wiki page that is a pushfeed. The DSMW adminpage (Special:ArticleAdminPage) helps to create this pullfeed.
- One a pullfeed created, you can just pull changeset. Changetsets will be downloaded from remote wiki and re-executed locally. If concurrent changes occured, then the logoot algorithm built-in DSMW will merge concurrent changes.
Concurrency
-
DSMW uses internally the logoot algorithm to handle concurrent changes. DMSW ensures that if the graph of semantic servers is connected and the system is idle (no local change, all remote changes pulled), then shared wiki pages are identica on all sites.
-
The granularity of change is lines. Logoot ensures that a line inserted between two uniquely identified lines will always be inserted betwen these line whatever any concurrent change or undo.