The last chapter introduced how to acquire RDF data from the blockchain. This chapter will show how to parse these RDF data.
Data filtering
EIP6239 covers a lot more ground than the Relation Protocol does. So, we will filter the events shown in the last chapter.
Graph Indexer will parse the RDF data conforming to Schema specification .
This is to say that the address returned by the contract's schemaURI()
method must exist in Schema specification for it to be parsed by the Graph Indexer
.
In the EIP6239 specification , the process to acquire a Schema is defined:
Copy interface ISemanticRDFSchema {
/**
* @notice Get the URI of schema for this contract.
* @return The URI of the contract which points to a configuration profile.
*/
function schemaURI() external view returns (string memory);
}
Procedures for parsing
Acquire the prefix definition from Schema :
Copy 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#>
Put it together with the RDF data parsed from Event:
Copy : Soul_0x0109c8ee3151bde7b6b5d9f37e9d2c4bc16930fe p: following : Soul_0x6247123ec0fe0d25feb811e3c4d4a760c1f2e63e .
We now have a complete RDF:
Copy 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#>
: Soul_0x0109c8ee3151bde7b6b5d9f37e9d2c4bc16930fe a : Soul ;
p: name "Alice" .
: Soul_0x6247123ec0fe0d25feb811e3c4d4a760c1f2e63e a : Soul ;
p: name "Bob" .
: Soul_0x0109c8ee3151bde7b6b5d9f37e9d2c4bc16930fe p: following : Soul_0x6247123ec0fe0d25feb811e3c4d4a760c1f2e63e .