Source code for ckanext.oaipmh.rdftools

'''RDF reader and writer for OAI-PMH harvester and server interface
'''
from lxml.etree import SubElement
from oaipmh.metadata import MetadataReader
from oaipmh.server import NS_XSI, nsdc, NS_DC

NSRDF = 'http://www.openarchives.org/OAI/2.0/rdf/'
NSOW = 'http://www.ontoweb.org/ontology/1#'
RDF_SCHEMA = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'

rdf_reader = MetadataReader(
    fields={'title': ('textList', 'rdf:RDF/ow:Publication/dc:title/text()'),
            'creator': ('textList', 'rdf:RDF/ow:Publication/dc:creator/text()'),
            'subject': ('textList', 'rdf:RDF/ow:Publication/dc:subject/text()'),
            'description': ('textList', 'rdf:RDF/ow:Publication/dc:description/text()'),
            'publisher': ('textList', 'rdf:RDF/ow:Publication/dc:publisher/text()'),
            'contributor': ('textList', 'rdf:RDF/ow:Publication/dc:contributor/text()'),
            'date': ('textList', 'rdf:RDF/ow:Publication/dc:date/text()'),
            'type': ('textList', 'rdf:RDF/ow:Publication/dc:type/text()'),
            'format': ('textList', 'rdf:RDF/ow:Publication/dc:format/text()'),
            'identifier': ('textList', 'rdf:RDF/ow:Publication/dc:identifier/text()'),
            'source': ('textList', 'rdf:RDF/ow:Publication/dc:source/text()'),
            'language': ('textList', 'rdf:RDF/ow:Publication/dc:language/text()'),
            'relation': ('textList', 'rdf:RDF/ow:Publication/dc:relation/text()'),
            'coverage': ('textList', 'rdf:RDF/ow:Publication/dc:coverage/text()'),
            'rights': ('textList', 'rdf:RDF/ow:Publication/dc:rights/text()')},
    namespaces={'rdf': NSRDF,
                'ow': NSOW,
                'dc': NS_DC})


[docs]def rdf_writer(element, metadata): e_rdf = SubElement(element, nsrdf('RDF'), nsmap={'rdf': NSRDF, 'ow': NSOW, 'xsi': NS_XSI, 'dc': NS_DC}) e_rdf.set('{%s}schemaLocation' % NS_XSI, '%s http://www.openarchives.org/OAI/2.0/rdf.xsd' % RDF_SCHEMA) rdf_pub = SubElement(e_rdf, nsow('Publication')) map = metadata.getMap() for ident in map.get('identifier', []): if ident.startswith('http://'): rdf_pub.set('{%s}about' % NSRDF, '%s' % (ident)) 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(rdf_pub, nsdc(name)) e.text = value
[docs]def nsrdf(name): return '{%s}%s' % (NSRDF, name)
[docs]def nsow(name): return '{%s}%s' % (NSOW, name)