cubicweb/rdf.py
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 19:15:03 +0200
changeset 12957 0c973204033a
parent 12910 c87c3943d6ab
permissions -rw-r--r--
[server] prevent returning closed cursor to the database pool In since c8c6ad8 init_repository use repo.internal_cnx() instead of repo.system_source.get_connection() so it use the pool and we should not close cursors from the pool before returning it back. Otherwise we may have "connection already closed" error. This bug only trigger when connection-pool-size = 1. Since we are moving to use a dynamic pooler we need to get this fixed. This does not occur with sqlite since the connection wrapper instantiate new cursor everytime, but this occur with other databases.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
12910
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    18
from rdflib import plugin, namespace
12891
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    19
import rdflib_jsonld  # noqa
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    20
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    21
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
    22
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    23
RDF_MIMETYPE_TO_FORMAT = {
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    24
    'application/rdf+xml': 'xml',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    25
    'text/turtle': 'turtle',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    26
    'text/n3': 'n3',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    27
    'application/n-quads': 'nquads',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    28
    'application/n-triples': 'nt',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    29
    'application/trig': 'trig',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    30
    'application/ld+json': 'json-ld',
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    31
}
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    32
12892
0df0db725f07 [rdf] Add a basic foaf adapter for CWUser
Simon Chabot <simon.chabot@logilab.fr>
parents: 12891
diff changeset
    33
NAMESPACES = {
12910
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    34
    "rdf": namespace.RDF,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    35
    "rdfs": namespace.RDFS,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    36
    "owl": namespace.OWL,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    37
    "xsd": namespace.XSD,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    38
    "skos": namespace.SKOS,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    39
    "void": namespace.VOID,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    40
    "dc": namespace.DC,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    41
    "dcterms": namespace.DCTERMS,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    42
    "foaf": namespace.FOAF,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    43
    "doap": namespace.DOAP,
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    44
    "schema": namespace.Namespace("http://schema.org/"),
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    45
    "cubicweb": namespace.Namespace("http://ns.cubicweb.org/cubicweb/0.0/")
12891
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
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    48
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    49
def add_entity_to_graph(graph, entity):
12910
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    50
    adapter = entity.cw_adapt_to("rdf")
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    51
    if adapter:
12891
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    52
        for triple in adapter.triples():
eb0cd6060062 [rdf] add functions and tools to generate rdf graph
Simon Chabot <simon.chabot@logilab.fr>
parents:
diff changeset
    53
            graph.add(triple)
12910
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    54
        for prefix, rdfns in adapter.used_namespaces.items():
c87c3943d6ab [entities] simplify rdf generation and add a generic rdf adapter
Elodie Thieblin <ethieblin@logilab.fr>
parents: 12892
diff changeset
    55
            graph.bind(prefix, rdfns)