G2GML¶
G2GML is a RDF Graph to Property Graph Mapping Language.
Overview¶
- G2GML defines mapping from RDF graphs to property graphs.
- Mapping is described with a set of pairs of RDF graph patterns and property graph patterns.
- RDF graph patterns are written in WHERE clause syntax of SPARQL, while the property graph patterns are written in MATCH clause syntax of Cypher.
sample.g2g
<prefix>
<property graph patterns> <-- Cypher MATCH clause syntax
<semantic graph patterns> <-- SPARQL WHERE clause syntax
...
Minimal Examples¶
- RDF resource > PG node
- RDF datatype property > PG node property
- RDF object property > PG edge
RDF resource > PG node¶
mini-01.ttl
@prefix : <http://example.org/> .
:person1 a :Person .
mini-01.g2g
PREFIX : <http://example.org/>
(p:Person) <-- PG node is defined
?p a :Person .
mini-01.pg
"http://example.org/person1" :"Person"
RDF datatype property > PG node property¶
mini-02.ttl
@prefix : <http://example.org/> .
:person1 a :Person .
:person1 :age 30 .
mini-02.g2g
PREFIX : <http://example.org/>
(p:Person {age:a}) <-- PG node property is defined
?p a :Person .
?p :age ?a .
mini-02.pg
"http://example.org/person1" :"Person" "age":30
RDF object property > PG edge¶
mini-03.ttl
@prefix : <http://example.org/> .
:person1 a :Person .
:person2 a :Person .
:person1 :follows :person2 .
mini-03.g2g
PREFIX : <http://example.org/>
(p:Person)
?p a :Person .
(p1:Person)-[:follows]->(p2:Person) <-- PG edge is defined
?p1 :follows ?p2 .
mini-03.pg
"http://example.org/person1" :"Person"
"http://example.org/person2" :"Person"
"http://example.org/person1" -> "http://example.org/person2" :follows
Actual Examples¶
musician.g2g
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX prop-ja: <http://ja.dbpedia.org/property/>
PREFIX schema: <http://schema.org/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
# Node mappings
(mus:Musician {vis_label:nam, born:dat, hometown:twn, pageLength:len})
?mus rdf:type foaf:Person, dbpedia-owl:MusicalArtist .
?mus rdfs:label ?nam .
FILTER(lang(?nam) = "en") .
OPTIONAL { ?mus prop-ja:born ?dat }
OPTIONAL { ?mus dbpedia-owl:hometown / rdfs:label ?twn }
OPTIONAL { ?mus dbpedia-owl:wikiPageLength ?len }
# Edge mappings
(mus1:Musician)-[:same_group {label:nam, hometown:twn, pageLength:len}]-(mus2:Musician)
?grp a schema:MusicGroup ;
dbpedia-owl:bandMember ?mus1 , ?mus2 .
FILTER(?mus1 != ?mus2)
OPTIONAL { ?grp rdfs:label ?nam. FILTER(lang(?nam) = "en")}
OPTIONAL { ?grp dbpedia-owl:hometown / rdfs:label ?twn }
OPTIONAL { ?grp dbpedia-owl:wikiPageLength ?len }
(mus1:Musician)-[:influenced]-(mus2:Musician)
?mus1 dbpedia-owl:influenced ?mus2 .