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))
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