From 49c55f5af6d008f4c8039eebd648e6654194e3e4 Mon Sep 17 00:00:00 2001 From: Marcin Koziej Date: Thu, 6 Sep 2012 14:37:17 +0200 Subject: [PATCH 1/1] remove hasPart/isPartOf from oai_dc move to qdc --- apps/oai/handlers.py | 25 +++++++++++++++++-------- apps/oai/views.py | 31 ++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/apps/oai/handlers.py b/apps/oai/handlers.py index 26e1cfa8e..4ad5c138f 100644 --- a/apps/oai/handlers.py +++ b/apps/oai/handlers.py @@ -40,14 +40,21 @@ wl_dc_reader = metadata.MetadataReader( ) +NS_DCTERMS = "http://purl.org/dc/terms/" + + +def nsdcterms(name): + return '{%s}%s' % (NS_DCTERMS, name) + + class Catalogue(common.ResumptionOAIPMH): TAG_CATEGORIES = ['author', 'epoch', 'kind', 'genre'] - + def __init__(self, metadata_registry): super(Catalogue, self).__init__() self.metadata_registry = metadata_registry - self.oai_id = "oai:"+Site.objects.get_current().domain+":%s" + self.oai_id = "oai:" + Site.objects.get_current().domain + ":%s" # earliest change year_zero = datetime(1990, 1, 1, 0, 0, 0) @@ -111,7 +118,7 @@ class Catalogue(common.ResumptionOAIPMH): def books(self, tag, from_, until): if tag: # we do not support sets, since they are problematic for deleted books. - raise errror.NoSetHierarchyError("Wolne Lektury does not support sets.") + raise error.NoSetHierarchyError("Wolne Lektury does not support sets.") # books = Book.tagged.with_all([tag]) else: books = Book.objects.all() @@ -193,9 +200,13 @@ returns result, token return records, None def listMetadataFormats(self, **kw): - formats = [('oai_dc', - 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', - server.NS_OAIDC)] + formats = [ + ('oai_dc', + 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', + server.NS_OAIDC), + ('qdc', + 'http://dublincore.org/schemas/xmls/qdc/2006/01/06/dcterms.xsd', + NS_DCTERMS)] if 'identifier' in kw: slug = self.identifier_to_slug(kw['identifier']) try: @@ -219,5 +230,3 @@ returns result, token # tag.name, # tag.description)) # return tags, None - - diff --git a/apps/oai/views.py b/apps/oai/views.py index 4c44e56d6..af4bd1c2c 100644 --- a/apps/oai/views.py +++ b/apps/oai/views.py @@ -1,12 +1,13 @@ -from oai.handlers import Catalogue +from oai.handlers import Catalogue, NS_DCTERMS, nsdcterms from oaipmh.server import ServerBase, oai_dc_writer, NS_OAIDC, NS_DC, NS_XSI, nsoaidc, nsdc from oaipmh.metadata import MetadataRegistry from django.http import HttpResponse from lxml.etree import tostring, SubElement -ns_map = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI} + +#ns_map = {'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI } def fbc_oai_dc_writer(element, metadata): @@ -21,14 +22,38 @@ def fbc_oai_dc_writer(element, metadata): 'title', 'creator', 'subject', 'description', 'publisher', 'contributor', 'date', 'type', 'format', 'identifier', 'source', 'language', 'relation', 'coverage', 'rights', - 'isPartOf', 'hasPart']: + ]: for value in map.get(name, []): e = SubElement(e_dc, nsdc(name)) e.text = value +def qdc_writer(element, metadata): + """FBC notified us that original writer does not output all necessary namespace declarations. + """ + nsmap={'oai_dc': NS_OAIDC, 'dc': NS_DC, 'xsi': NS_XSI, 'dcterms': NS_DCTERMS} + map = metadata.getMap() + for name in [ + 'title', 'creator', 'subject', 'description', 'publisher', + 'contributor', 'date', 'type', 'format', 'identifier', + 'source', 'language', 'relation', 'coverage', 'rights', + ]: + for value in map.get(name, []): + e = SubElement(element, nsdc(name), nsmap=nsmap) + e.text = value + + for name in ['hasPart', 'isPartOf']: + for value in map.get(name, []): + print "%s %s" % (name, value) + e = SubElement(element, nsdcterms(name), nsmap=nsmap) + e.text = value + + + metadata_registry = MetadataRegistry() metadata_registry.registerWriter('oai_dc', fbc_oai_dc_writer) +metadata_registry.registerWriter('qdc', qdc_writer) + server = ServerBase(Catalogue(metadata_registry), metadata_registry, {'topxsi': NS_XSI}) -- 2.20.1