diff --git a/atramhasis/audit.py b/atramhasis/audit.py
index 88a3d59a..6d512708 100644
--- a/atramhasis/audit.py
+++ b/atramhasis/audit.py
@@ -16,12 +16,15 @@ def _origin_from_request(request):
return 'HTML'
elif 'application/json' in request.accept:
return 'REST'
+ elif 'application/ld+json' in request.accept:
+ return 'RDF'
else:
return None
def _origin_from_response(response):
if response.content_type == 'application/rdf+xml' \
+ or response.content_type == 'application/ld+json' \
or response.content_type == 'text/turtle' \
or response.content_type == 'application/x-turtle':
return 'RDF'
diff --git a/atramhasis/routes.py b/atramhasis/routes.py
index 3aefa7cc..c628448e 100644
--- a/atramhasis/routes.py
+++ b/atramhasis/routes.py
@@ -27,6 +27,8 @@ def includeme(config):
config.add_route('atramhasis.rdf_conceptscheme_export_turtle_ext', pattern='/conceptschemes/{scheme_id}.ttl')
config.add_route('atramhasis.rdf_individual_export_ext', pattern='/conceptschemes/{scheme_id}/c/{c_id}.rdf')
config.add_route('atramhasis.rdf_individual_export_turtle_ext', pattern='/conceptschemes/{scheme_id}/c/{c_id}.ttl')
+ config.add_route('atramhasis.rdf_conceptscheme_jsonld_ext', pattern='/conceptschemes/{scheme_id}.jsonld')
+ config.add_route('atramhasis.rdf_individual_jsonld_ext', pattern='/conceptschemes/{scheme_id}/c/{c_id}.jsonld')
config.add_route('conceptschemes', pattern='/conceptschemes', accept='text/html', request_method="GET")
config.add_route('conceptscheme', pattern='/conceptschemes/{scheme_id}', accept='text/html', request_method="GET")
@@ -83,3 +85,7 @@ def includeme(config):
accept='text/turtle')
config.add_route('atramhasis.rdf_individual_export_turtle_x', pattern='/conceptschemes/{scheme_id}/c/{c_id}',
accept='application/x-turtle')
+ config.add_route('atramhasis.rdf_conceptscheme_jsonld', pattern='/conceptschemes/{scheme_id}',
+ accept='application/ld+json')
+ config.add_route('atramhasis.rdf_individual_jsonld', pattern='/conceptschemes/{scheme_id}/c/{c_id}',
+ accept='application/ld+json')
diff --git a/atramhasis/templates/concept.jinja2 b/atramhasis/templates/concept.jinja2
index 4c735f37..51a3404b 100644
--- a/atramhasis/templates/concept.jinja2
+++ b/atramhasis/templates/concept.jinja2
@@ -3,19 +3,19 @@
{{ super() }}
-
+
{% if concept.notes|length > 0 %}
{% endif %}
-
+
{% if concept.notes|length > 0 %}
{% endif %}
{% endblock %}
-{% block html_title %}{{ concept.label(request.locale_name).label|title }}{% endblock %}
+{% block html_title %}{{ concept.label(locale).label|title }}{% endblock %}
{% from "macros.jinja2" import
render_relaties_lijst,
@@ -32,6 +32,7 @@
diff --git a/atramhasis/templates/conceptscheme.jinja2 b/atramhasis/templates/conceptscheme.jinja2
index 1a652d42..4b76e127 100644
--- a/atramhasis/templates/conceptscheme.jinja2
+++ b/atramhasis/templates/conceptscheme.jinja2
@@ -30,6 +30,7 @@
- DOWNLOAD
- RDF/XML
+ - JSON/LD
- N3/Turtle
- Full RDF/XML
- Full N3/Turtle
diff --git a/atramhasis/templates/header-page.jinja2 b/atramhasis/templates/header-page.jinja2
index 39af53d3..71319cff 100644
--- a/atramhasis/templates/header-page.jinja2
+++ b/atramhasis/templates/header-page.jinja2
@@ -22,7 +22,7 @@
{%- for c in concepts %}
-
+
{%- endfor %}
diff --git a/atramhasis/views/rdf.py b/atramhasis/views/rdf.py
index 5d093521..0a47cab4 100644
--- a/atramhasis/views/rdf.py
+++ b/atramhasis/views/rdf.py
@@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
-
import os
+from pyramid import compat
+from pyramid.renderers import render
from pyramid.response import Response, FileResponse
from pyramid.view import view_defaults, view_config
+from pyramid_skosprovider.views import ProviderView
from skosprovider_rdf import utils
from atramhasis.errors import (
@@ -119,3 +121,23 @@ def rdf_individual_export_turtle(self):
response.body = graph.serialize(format='turtle')
response.content_disposition = 'attachment; filename="%s.ttl"' % (str(self.c_id),)
return response
+
+ @audit
+ @view_config(route_name='atramhasis.rdf_conceptscheme_jsonld', permission='view')
+ @view_config(route_name='atramhasis.rdf_conceptscheme_jsonld_ext', permission='view')
+ def get_conceptscheme_jsonld(self):
+ conceptscheme = ProviderView(self.request).get_conceptscheme_jsonld()
+ response = Response(content_type='application/ld+json')
+ response.text = compat.text_(render('skosjsonld', conceptscheme, self.request))
+ response.content_disposition = 'attachment; filename="%s.jsonld"' % (str(self.scheme_id),)
+ return response
+
+ @audit
+ @view_config(route_name='atramhasis.rdf_individual_jsonld', permission='view')
+ @view_config(route_name='atramhasis.rdf_individual_jsonld_ext', permission='view')
+ def get_concept(self):
+ concept = ProviderView(self.request).get_concept()
+ response = Response(content_type='application/ld+json')
+ response.text = compat.text_(render('skosjsonld', concept, self.request))
+ response.content_disposition = 'attachment; filename="%s.jsonld"' % (str(self.c_id),)
+ return response
diff --git a/atramhasis/views/views.py b/atramhasis/views/views.py
index bbc43339..971eede7 100644
--- a/atramhasis/views/views.py
+++ b/atramhasis/views/views.py
@@ -151,6 +151,9 @@ def concept_view(self):
scheme_id = self.request.matchdict['scheme_id']
c_id = self.request.matchdict['c_id']
provider = self.request.skos_registry.get_provider(scheme_id)
+ label = self._read_request_param('label')
+ ctype = self._read_request_param('ctype')
+
if not provider:
raise ConceptSchemeNotFoundException(scheme_id)
if 'atramhasis.force_display_label_language' in provider.metadata:
@@ -166,10 +169,10 @@ def concept_view(self):
else:
return Response('Thing without type: ' + str(c_id), status_int=500)
url = self.request.route_url('concept', scheme_id=scheme_id, c_id=c_id)
- update_last_visited_concepts(self.request, {'label': c.label(self.request.locale_name).label, 'url': url})
+ update_last_visited_concepts(self.request, {'label': c.label(locale).label, 'url': url})
return {'concept': c, 'conceptType': concept_type, 'scheme_id': scheme_id,
'conceptschemes': conceptschemes, 'provider': provider,
- 'locale': locale}
+ 'locale': locale, 'ctype': ctype, 'label': label}
except NoResultFound:
raise ConceptNotFoundException(c_id)
@@ -190,13 +193,17 @@ def search_result(self):
ctype = self._read_request_param('ctype')
provider = self.skos_registry.get_provider(scheme_id)
if provider:
+ if 'atramhasis.force_display_label_language' in provider.metadata:
+ locale = provider.metadata['atramhasis.force_display_label_language']
+ else:
+ locale = self.request.locale_name
if label is not None:
- concepts = provider.find({'label': label, 'type': ctype}, language=self.request.locale_name, sort='label')
+ concepts = provider.find({'label': label, 'type': ctype}, language=locale, sort='label')
elif (label is None) and (ctype is not None):
- concepts = provider.find({'type': ctype}, language=self.request.locale_name, sort='label')
+ concepts = provider.find({'type': ctype}, language=locale, sort='label')
else:
- concepts = provider.get_all(language=self.request.locale_name, sort='label')
- return {'concepts': concepts, 'scheme_id': scheme_id, 'conceptschemes': conceptschemes}
+ concepts = provider.get_all(language=locale, sort='label')
+ return {'concepts': concepts, 'scheme_id': scheme_id, 'conceptschemes': conceptschemes, 'ctype': ctype, 'label': label}
return Response(content_type='text/plain', status_int=404)
@view_config(route_name='locale')
diff --git a/requirements.txt b/requirements.txt
index 07cf1f7b..c0fa8ada 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,8 +7,8 @@ skosprovider==0.7.1
#-e git+https://github.com/koenedaele/skosprovider.git@develop#egg=skosprovider
skosprovider_sqlalchemy==0.6.0
#-e git+https://github.com/koenedaele/skosprovider_sqlalchemy.git@0.6.0#egg=skosprovider_sqlalchemy
-pyramid_skosprovider==0.9.0
-#-e git+https://github.com/koenedaele/pyramid_skosprovider.git@0.9.0#egg=pyramid_skosprovider
+pyramid_skosprovider==0.9.1
+#-e git+https://github.com/koenedaele/pyramid_skosprovider.git@0.9.1#egg=pyramid_skosprovider
skosprovider_rdf==0.8.1
#-e git+https://github.com/OnroerendErfgoed/skosprovider_rdf.git@develop#egg=skosprovider_rdf
skosprovider_getty==0.5.1
diff --git a/setup.py b/setup.py
index 7a5ae57d..725a32a1 100644
--- a/setup.py
+++ b/setup.py
@@ -113,7 +113,7 @@ def run(self):
]
setup(name='atramhasis',
- version='0.7.0b1',
+ version='0.7.0b4',
description='A web based editor for thesauri adhering to the SKOS specification.',
long_description=README + '\n\n' + CHANGES,
long_description_content_type='text/x-rst',
diff --git a/tests/test_functional.py b/tests/test_functional.py
index 6c8d1003..8d275fc5 100644
--- a/tests/test_functional.py
+++ b/tests/test_functional.py
@@ -723,6 +723,26 @@ def test_rdf_conceptscheme_turtle_ext(self):
self.assertEqual('200 OK', ttl_response.status)
self.assertEqual('text/turtle', ttl_response.content_type)
+ def test_rdf_conceptscheme_jsonld(self):
+ res = self.testapp.get('/conceptschemes/MATERIALS', headers={'Accept': 'application/ld+json'})
+ self.assertEqual('200 OK', res.status)
+ self.assertEqual('application/ld+json', res.content_type)
+
+ def test_rdf_conceptscheme_jsonld_ext(self):
+ res = self.testapp.get('/conceptschemes/MATERIALS.jsonld')
+ self.assertEqual('200 OK', res.status)
+ self.assertEqual('application/ld+json', res.content_type)
+
+ def test_rdf_individual_jsonld(self):
+ res = self.testapp.get('/conceptschemes/MATERIALS/c/1', headers={'Accept': 'application/ld+json'})
+ self.assertEqual('200 OK', res.status)
+ self.assertEqual('application/ld+json', res.content_type)
+
+ def test_rdf_individual_jsonld_ext(self):
+ res = self.testapp.get('/conceptschemes/MATERIALS/c/1.jsonld')
+ self.assertEqual('200 OK', res.status)
+ self.assertEqual('application/ld+json', res.content_type)
+
def test_rdf_individual_xml(self):
rdf_response = self.testapp.get('/conceptschemes/MATERIALS/c/1', headers={'Accept': 'application/rdf+xml'})
self.assertEqual('200 OK', rdf_response.status)