# -*- coding: utf-8 -*-
# copyright 2019 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr -- mailto:contact@logilab.fr
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 2.1 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from rdflib import ConjunctiveGraph, plugin
from rdflib.namespace import Namespace, RDF, FOAF
import rdflib_jsonld # noqa
plugin.register("jsonld", plugin.Serializer, "rdflib_jsonld.serializer", "JsonLDSerializer")
RDF_MIMETYPE_TO_FORMAT = {
'application/rdf+xml': 'xml',
'text/turtle': 'turtle',
'text/n3': 'n3',
'application/n-quads': 'nquads',
'application/n-triples': 'nt',
'application/trig': 'trig',
'application/ld+json': 'json-ld',
}
NAMESPACES = {
"rdf": RDF,
"schema": Namespace("http://schema.org/"),
"foaf": FOAF,
}
# dict: name of CWEType -> list of regid of adapters derived from EntityRDFAdapter
ETYPES_ADAPTERS = {
"CWUser": ("rdf.foaf",),
}
def conjunctive_graph():
"""factory to build a ``ConjunctiveGraph`` and bind all namespaces
"""
graph = ConjunctiveGraph()
for prefix, rdfns in NAMESPACES.items():
graph.bind(prefix, rdfns)
return graph
def iter_rdf_adapters(entity):
for adapter_id in ETYPES_ADAPTERS.get(entity.__regid__, ()):
adapter = entity.cw_adapt_to(adapter_id)
if adapter:
yield adapter
def add_entity_to_graph(graph, entity):
for adapter in iter_rdf_adapters(entity):
for triple in adapter.triples():
graph.add(triple)