コード例 #1
0
ファイル: jsonld.py プロジェクト: fderbel/ktbs
        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)