解析数据
上一章介绍了如何从链上获取RDF数据,本章将讲述如何解析这些RDF数据。
数据过滤
由于EIP6239的范围要比Relation Protocol广,因此要对上一章监听到的事件做一层过滤。
Graph Indexer会解析符合Schema 规范的RDF数据。
也就是说,合约的schemaURI()
方法返回的地址必须在Schema 规范列表中,他就可以被Graph Indexer
解析。
在EIP6239规范中定义了如何获取Schema:
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);
}
具体解析
从Schema中拿到prefix定义:
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#>
拼接上从Event中解析到的rdf数据:
:Soul_0x0109c8ee3151bde7b6b5d9f37e9d2c4bc16930fe p:following :Soul_0x6247123ec0fe0d25feb811e3c4d4a760c1f2e63e .
即可得到完整的RDF数据了:
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 .
Last updated