Esempio n. 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))
Esempio n. 2
0
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"