Comment on page
Deploying query services using Graph Indexer
Here we will introduce how to quickly build a graph-indexer.
- 1.Install JDK(Requires JDK11 and above)
macOS
CentOS
brew install openjdk@11
sudo yum install java-11-openjdk-devel
Check the installation:
java -version
- 2.Install nodejs
Install and run:
wget https://dlcdn.apache.org/jena/binaries/apache-jena-fuseki-4.7.0.tar.gz
tar xvf apache-jena-fuseki-4.7.0.tar.gz
cd apache-jena-fuseki-4.7.0
sh fuseki-server
%20(1)%20(1)%20(2).png?alt=media)
Figure 1-1 Add a dataset
%20(1)%20(1)%20(4).png?alt=media)
Figure 1-2 Create demo dataset
Here, we will use Node.js to accomplish this process.
This example will listen to RDF data on the Mumbai network, between blocks 32362681 and 32362699.
- 1.Create a new project and install the
ethers (v5)
,axios
, andqs
.
mkdir graph-indexer
cd graph-indexer
npm init -y
npm install ethers@5 axios qs
- 2.Create an
app.js
file with the following content:
const axios = require('axios')
const qs = require('qs')
const ethers = require('ethers')
const rpc = 'https://polygon-mumbai.blockpi.network/v1/rpc/public'
let abi = ['event CreateRDF(uint256 indexed tokenId, string rdfStatements)']
const provider = new ethers.providers.JsonRpcProvider(rpc)
const iface = new ethers.utils.Interface(abi)
const filter = {}
// Listen to all new events on the blockchain.
provider.on(filter, async (e) => {
try {
let event = iface.parseLog(e)
if (event) {
const rdf = event.args[1]
// todo: Do your own business
const res = await insertRdf(rdf)
}
} catch (error) {}
})
// You can also get the data of the specified filter
const logFilter = {
fromBlock: 32362681,
toBlock: 32362699
}
provider
.getLogs(logFilter)
.then(function (logs) {
for (let index = 0; index < logs.length; index++) {
try {
const log = logs[index]
const event = iface.parseLog(log)
if (event) {
const rdf = event.args[1]
insertRdf(rdf)
}
} catch (error) {}
}
})
.catch(function (err) {
console.log(err)
})
// Insert RDF into Graph database.
function insertRdf(rdfString) {
const data = qs.stringify({
update: `PREFIX : <http://relationlabs.ai/entity/>
PREFIX p: <http://relationlabs.ai/property/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
INSERT DATA {
${rdfString}
}`
})
const config = {
method: 'post',
maxBodyLength: Infinity,
url: 'http://localhost:3030/demo/update',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: data
}
return axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data))
})
.catch(function (error) {
console.log(error)
})
}
- 3.Run the Graph Indexer
node app.js

Figure 1-3 Query results using SPARQL
Last modified 8mo ago