author | Simon Chabot <simon.chabot@logilab.fr> |
Fri, 28 Feb 2020 17:11:01 +0100 | |
changeset 12892 | 0df0db725f07 |
parent 12891 | eb0cd6060062 |
child 12910 | c87c3943d6ab |
permissions | -rw-r--r-- |
12891
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
1 |
# -*- coding: utf-8 -*- |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
2 |
# copyright 2019 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
3 |
# contact http://www.logilab.fr -- mailto:contact@logilab.fr |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
4 |
# |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
5 |
# This program is free software: you can redistribute it and/or modify it under |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
6 |
# the terms of the GNU Lesser General Public License as published by the Free |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
7 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
8 |
# any later version. |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
9 |
# |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
10 |
# This program is distributed in the hope that it will be useful, but WITHOUT |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
11 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
12 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
13 |
# details. |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
14 |
# |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
15 |
# You should have received a copy of the GNU Lesser General Public License |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
16 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
17 |
|
12892
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
18 |
from rdflib import ConjunctiveGraph, plugin |
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
19 |
from rdflib.namespace import Namespace, RDF, FOAF |
12891
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
20 |
import rdflib_jsonld # noqa |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
21 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
22 |
plugin.register("jsonld", plugin.Serializer, "rdflib_jsonld.serializer", "JsonLDSerializer") |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
23 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
24 |
RDF_MIMETYPE_TO_FORMAT = { |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
25 |
'application/rdf+xml': 'xml', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
26 |
'text/turtle': 'turtle', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
27 |
'text/n3': 'n3', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
28 |
'application/n-quads': 'nquads', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
29 |
'application/n-triples': 'nt', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
30 |
'application/trig': 'trig', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
31 |
'application/ld+json': 'json-ld', |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
32 |
} |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
33 |
|
12892
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
34 |
NAMESPACES = { |
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
35 |
"rdf": RDF, |
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
36 |
"schema": Namespace("http://schema.org/"), |
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
37 |
"foaf": FOAF, |
12891
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
38 |
} |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
39 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
40 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
41 |
# dict: name of CWEType -> list of regid of adapters derived from EntityRDFAdapter |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
42 |
ETYPES_ADAPTERS = { |
12892
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
43 |
"CWUser": ("rdf.foaf",), |
12891
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
44 |
} |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
45 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
46 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
47 |
def conjunctive_graph(): |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
48 |
"""factory to build a ``ConjunctiveGraph`` and bind all namespaces |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
49 |
""" |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
50 |
graph = ConjunctiveGraph() |
12892
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
51 |
for prefix, rdfns in NAMESPACES.items(): |
0df0db725f07
[rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents:
12891
diff
changeset
|
52 |
graph.bind(prefix, rdfns) |
12891
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
53 |
return graph |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
54 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
55 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
56 |
def iter_rdf_adapters(entity): |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
57 |
for adapter_id in ETYPES_ADAPTERS.get(entity.__regid__, ()): |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
58 |
adapter = entity.cw_adapt_to(adapter_id) |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
59 |
if adapter: |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
60 |
yield adapter |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
61 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
62 |
|
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
63 |
def add_entity_to_graph(graph, entity): |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
64 |
for adapter in iter_rdf_adapters(entity): |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
65 |
for triple in adapter.triples(): |
eb0cd6060062
[rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff
changeset
|
66 |
graph.add(triple) |