Example #1
0
    def addIdentifierTriples(self, node, identifier):
        """Add triples for the given identiifer to the given node."""

        if self.model is None:
            raise Exception("Model not found.")

        scheme = util.getIdentifierScheme(identifier)
        resolve_url = util.getIdentifierResolveURL(identifier)

        # Create a blank node for the identifier
        identifier_node = RDF.Node(blank=str(uuid.uuid4()))

        self.add(node, 'geolink:hasIdentifier', identifier_node)
        self.add(identifier_node, 'rdf:type', 'geolink:Identifier')
        self.add(identifier_node, 'rdfs:label', RDF.Node(identifier))

        self.add(identifier_node, 'geolink:hasIdentifierValue', RDF.Node(identifier))
        self.add(identifier_node, 'geolink:hasIdentifierScheme', 'datacite:'+scheme)

        if resolve_url is not None:
            self.add(identifier_node, 'geolink:hasIdentifierResolveURL', RDF.Uri(resolve_url))

        # Also always add the DataOne resolve URL for non local-resource-identifier-scheme identifiers
        if scheme != 'local-resource-identifier-scheme':
            dataone_resolve_url = 'https://cn.dataone.org/cn/v1/resolve/%s' % urllib.quote_plus(identifier)
            self.add(identifier_node, 'geolink:hasIdentifierResolveURL', RDF.Uri(dataone_resolve_url))
Example #2
0
def test_can_determine_resolve_urls():
    # DOIs
    assert util.getIdentifierResolveURL(
        'http://doi.org/10.asdf') == 'http://doi.org/10.asdf'
    assert util.getIdentifierResolveURL(
        'doi:/10.asdf') == 'http://doi.org/10.asdf'
    assert util.getIdentifierResolveURL(
        'http://dx.doi.org/10.asdf') == 'http://doi.org/10.asdf'

    # URIs
    assert util.getIdentifierResolveURL(
        'http://example.org') == 'http://example.org'

    # DataOne PIDs
    assert util.getIdentifierResolveURL(
        'asdf') == 'https://cn.dataone.org/cn/v1/resolve/asdf'

    # Bad values
    assert util.getIdentifierResolveURL('') is None
    assert util.getIdentifierResolveURL(1) is None
    assert util.getIdentifierResolveURL(None) is None