Esempio n. 1
0
def load_metadata_prefixes():
    """
    Load default metadata prefixes for OAI-PMH
    """
    metadataPrefixes = OaiMyMetadataFormat.objects.all()
    if len(metadataPrefixes) == 0:
        #Add OAI_DC metadata prefix
        schemaURL = "http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
        file = open(os.path.join(SITE_ROOT, 'oai_pmh', 'resources', 'xsd', 'oai_dc.xsd'),'r')
        xsdContent = file.read()
        dom = etree.fromstring(xsdContent.encode('utf-8'))
        if 'targetNamespace' in dom.find(".").attrib:
            metadataNamespace = dom.find(".").attrib['targetNamespace'] or "namespace"
        else:
            metadataNamespace = "http://www.w3.org/2001/XMLSchema"
        OaiMyMetadataFormat(metadataPrefix='oai_dc',
                            schema=schemaURL,
                            metadataNamespace=metadataNamespace,
                            xmlSchema=xsdContent,
                            isDefault=True).save()
Esempio n. 2
0
def load_metadata_prefixes():
    """
    Load default metadata prefixes for OAI-PMH
    """
    metadataPrefixes = OaiMyMetadataFormat.objects.all()
    if len(metadataPrefixes) == 0:
        #Add OAI_DC metadata prefix
        schemaURL = "http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
        file = open(
            os.path.join(SITE_ROOT, 'oai_pmh', 'resources', 'xsd',
                         'oai_dc.xsd'), 'r')
        xsdContent = file.read()
        dom = etree.fromstring(xsdContent.encode('utf-8'))
        if 'targetNamespace' in dom.find(".").attrib:
            metadataNamespace = dom.find(
                ".").attrib['targetNamespace'] or "namespace"
        else:
            metadataNamespace = "http://www.w3.org/2001/XMLSchema"
        OaiMyMetadataFormat(metadataPrefix='oai_dc',
                            schema=schemaURL,
                            metadataNamespace=metadataNamespace,
                            xmlSchema=xsdContent,
                            isDefault=True).save()
        #Add NMRR templates as metadata prefixes
        templates = {
            'all': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_all'
            },
            'organization': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_org'
            },
            'datacollection': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_datacol'
            },
            'repository': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_repo'
            },
            'projectarchive': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_proj'
            },
            'database': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_database'
            },
            'dataset': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_dataset'
            },
            'service': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_serv'
            },
            'informational': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_info'
            },
            'software': {
                'path': 'res-md.xsd',
                'metadataPrefix': 'oai_soft'
            },
        }

        for template_name, info in templates.iteritems():
            try:
                template = Template.objects.get(title=template_name,
                                                filename=info['path'])
                #Check if the XML is well formed
                try:
                    xml_schema = template.content
                    dom = etree.fromstring(xml_schema.encode('utf-8'))
                    if 'targetNamespace' in dom.find(".").attrib:
                        metadataNamespace = dom.find(
                            ".").attrib['targetNamespace'] or "namespace"
                    else:
                        metadataNamespace = "http://www.w3.org/2001/XMLSchema"
                except XMLSyntaxError:
                    print(
                        'ERROR : Impossible to set the template "%s" as a metadata prefix. The template XML is not well formed.'
                        % template_name)
                #Create a schema URL
                schemaURL = OAI_HOST_URI + reverse('getXSD',
                                                   args=[template.filename])
                #Add in database
                OaiMyMetadataFormat(metadataPrefix=info['metadataPrefix'],
                                    schema=schemaURL,
                                    metadataNamespace=metadataNamespace,
                                    xmlSchema='',
                                    isDefault=False,
                                    isTemplate=True,
                                    template=template).save()
            except Exception, e:
                print(
                    'ERROR : Impossible to set the template "{!s}" as a metadata prefix. {!s}'
                    .format(template_name, e.message))