cubicweb/rdf.py
author Laurent Wouters <lwouters@cenotelie.fr>
Fri, 20 Mar 2020 14:34:07 +0100
changeset 12931 6eae252361e5
parent 12910 c87c3943d6ab
permissions -rw-r--r--
[rql] Store selected variables for RQL select queries in ResultSet (#17218476) By storing the name of the selected variables for RQL select queries in the ResultSet (within the "variables" attribute), the information can be passed down to specific protocols, e.g. rqlio that may wish to pass is down further to clients. In turn, clients can then choose to present the results of RQL select queries as symbolic bindings using the names used in the query's projection, instead of ordinal arrays.
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)