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_match_doi_strings(): """Tests the matching algorithm which takes unstructured strings and guesses their identifier structure using string-matching. """ assert util.getIdentifierScheme("http://doi.org/10.XX") == "doi" assert util.getIdentifierScheme("https://doi.org/10.XX") == "doi" assert util.getIdentifierScheme("doi:10.XX") == "doi" assert util.getIdentifierScheme("ark://1234") == "ark" assert util.getIdentifierScheme("somethingsomething") != "doi" assert util.getIdentifierScheme( "somethingsomething") == "local-resource-identifier-scheme"