def jld_callback(s, p, o): """ Insert extracted (s, p, o) to an rdflib graph. :param s: subject :param p: predicate :param o: object """ #print "Entrant (s,p,o) : (", s, ",", p, ",", o, ")" # Subject analysis if s[:2] == "_:": s = BNode(s[2:]) else: s = URIRef(s, base_uri) # Object analysis # The dictionary can be much more complex if isinstance(o, dict): if "@id" in o: o = o["@id"] if o[:2] == "_:": o = BNode(o[2:]) else: o = URIRef(o, base_uri) else: assert "@value" in o o = Literal( o["@value"], lang = o.get("@language"), datatype = o.get("@type"), ) else: o = Literal(o) # Predicate analysis if "@type" in p: p = RDF.type # Ensure that object is really an URIRef, JSON-LD 3.3 o = URIRef(o, base_uri) elif p.startswith("x-rev:"): p = URIRef(p[6:], base_uri) s, o = o, s else: p = URIRef(p, base_uri) #print "Sortant (s,p,o) : (", s, ",", p, ",", o, ")" graph.add((s, p, o)) return (s, p, o)