VirtGraphReplicationBiDirectional Replication Example: 2-node Bi-directional Topology Replication Example: 2-node Bi-directional Topology Introduction The following Guide demonstrates the Virtuoso RDF Bi-directional Graph Replication, e.g.,
Prerequisites Database INI Parameters Suppose there are 2 Virtuoso instances respectively with the following ini parameters values: virtuoso1.ini: ... [Database] DatabaseFile = virtuoso1.db TransactionFile = virtuoso1.trx ErrorLogFile = virtuoso1.log ... [Parameters] ServerPort = 1111 SchedulerInterval = 1 ... [HTTPServer] ServerPort = 8891 ... [URIQA] DefaultHost = localhost:8891 ... [Replication] ServerName = db1 ... virtuoso2.ini: ... [Database] DatabaseFile = virtuoso2.db TransactionFile = virtuoso2.trx ErrorLogFile = virtuoso2.log ... [Parameters] ServerPort = 1112 SchedulerInterval = 1 ... [HTTPServer] ServerPort = 8892 ... [URIQA] DefaultHost = localhost:8892 ... [Replication] ServerName = db2 ... Database DSNs Use the ODBC Administrator on your Virtuoso host (e.g., on Windows, Start menu -> Control Panel -> Administrative Tools -> Data Sources (ODBC); on Mac OS X, /Applications/Utilities/OpenLink ODBC Administrator.app) to create a System DSN for db1 and db2 with names db1 and db2 respectively. Install Conductor package On each of the 2 Virtuoso instances install the conductor_dav.vad package. Create Publication on db2 Go to http://localhost:8892/conductor and log in as dba Go to Conductor -> Replication -> Transactional -> Publications
Click Enable RDF Publishing As result publication with the name RDF Publication should be created
Click the link which is the publication name. You will be shown the publication items page
Enter for Graph IRI: http://example.org
Click Add New The item will be created and shown in the list of items for the currently viewed publication.
Create subscription from db1 to db2's Publication Log in at http://localhost:8891/conductor Go to Replication -> Transactional -> Subscriptions
Click New Subscription
From the list of "Specify new data source" select Data Source db2
Enter for db2 dba user credentials
Click "Add Data Source" As result db2 will be shown in the "Connected Data Sources" list.
Select db2 the "Connected Data Sources" list and click "Publications list"
As result will be shown the list of available publications for the selected data source. Select the one with name "RDF Publication" and click "List Items".
As result will be shown the "Confirm subscription" page.
The sync interval by default is 10 minutes. For the testing purposes, we will change it to 1 minute.
Click "Subscribe" The subscription will be created.
Create Publication on db1 Go to http://localhost:8891/conductor and log in as dba Go to Conductor -> Replication -> Transactional -> Publications
Click Enable RDF Publishing As result publication with the name RDF Publication should be created
Click the link which is the publication name. You will be shown the publication items page
Enter for Graph IRI: http://example.org
Click Add New The item will be created and shown in the list of items for the currently viewed publication.
Create subscription from db2 to db1's Publication Log in at http://localhost:8892/conductor Go to Replication -> Transactional -> Subscriptions
Click New Subscription
From the list of "Specify new data source" select Data Source db1
Enter for db1 dba user credentials
Click "Add Data Source"
As result db1 will be shown in the "Connected Data Sources" list. Select it and click "Publications list"
As result will be shown the list of available publications for the selected data source. Select the one with name "RDF Publication" and click "List Items".
As result will be shown the "Confirm subscription" page.
The sync interval by default is 10 minutes. For the testing purposes, we will change it to 1 minute.
Click "Subscribe" The subscription will be created.
Insert Data into a Named Graph on the db2 Virtuoso Instance Log in at http://localhost:8892/conductor Go to Linked Data -> Quad Store Upload
In the shown form: Tick the box for Resource URL and enter your resource URL, e.g.: http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this Enter for Named Graph IRI: http://example.org
Click Upload A successful upload will result in a shown message.
Check the count of the inserted triples by executing a query like the following against the SPARQL endpoint, http://localhost:8892/sparql: SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o }
Should return 57 as total.
Check data on the Destination instance db1 To check the starting count, execute from db1's SPARQL Endpoint: SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o } Should return 57 as total.
Add new data on db2 Disconnect db1. On the Host Virtuoso Instance db2 go to Conductor -> Database -> Interactive SQL enter the following statement: SPARQL INSERT INTO GRAPH <http://example.org> { <http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this> <http://xmlns.com/foaf/0.1/interest> <http://dbpedia.org/resource/Web_Services> } ;
Click "Execute" As result the triples will be inserted
Check the count of the destination instance graph's triples by executing the following query like against the SPARQL endpoint, http://localhost:8892/sparql: SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o } Should return 58 as total.
Check data on the Destination instance db1 Start instance db1 To confirm that the triple count has increased by the number of inserted triples, execute the following statement on db1's SPARQL Endpoint: SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o } Should return 58 as total.
Add new data on db1 Disconnect db2. On the Host Virtuoso Instance db1 go to Conductor -> Database -> Interactive SQL enter the following statement: SPARQL INSERT INTO GRAPH <http://example.org> { <http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this> <http://xmlns.com/foaf/0.1/interest> <http://dbpedia.org/resource/Web_Clients> } ; SPARQL INSERT INTO GRAPH <http://example.org> { <http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com#this> <http://xmlns.com/foaf/0.1/interest> <http://dbpedia.org/resource/SPARQL> } ;
Click "Execute" As result the triples will be inserted
Check the count of the destination instance graph's triples by executing the following query like against the SPARQL endpoint, http://localhost:8891/sparql: SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o } Should return 60 as total.
Check data on the Destination instance db2 Start instance db2 To confirm that the triple count has increased by the number of inserted triples, execute the following statement on db2's SPARQL Endpoint: SELECT COUNT(*) FROM <http://example.org> WHERE { ?s ?p ?o } Should return 60 as total.
Related Replication Example: Star Topology Replication Example: Chain Topology Set up RDF Replication via procedure calls Example of Linked Data Usage of PubSubHubbub Implementation Exploit Virtuoso's Replication Functionality Web based Solutions