diff --git a/linkml_runtime/utils/metamodelcore.py b/linkml_runtime/utils/metamodelcore.py index accdedc8..e4a80eaa 100644 --- a/linkml_runtime/utils/metamodelcore.py +++ b/linkml_runtime/utils/metamodelcore.py @@ -172,17 +172,17 @@ def __init__(self, v: str) -> None: @classmethod def ns_ln(cls, v: str) -> Optional[tuple[str, str]]: - # See if this is indeed a valid CURIE, ie, it can be split by a colon + if not validate_curie(v): + return None + # assume the presence of a colon and try to split the CURIE curie_split = v.split(":", 1) if len(curie_split) == 1: - # there is no ':' character in the string, ie, it is not a valid CURIE - return None + # there is no ':' character in the string, it's only a reference + return '', v else: prefix = curie_split[0].lower() - if not NCName.is_valid(prefix): - return None reference = curie_split[1] - return prefix, reference + return prefix, reference @classmethod def is_valid(cls, v: str) -> bool: diff --git a/tests/test_utils/test_metamodelcore.py b/tests/test_utils/test_metamodelcore.py index 63ee247e..df3b03b9 100644 --- a/tests/test_utils/test_metamodelcore.py +++ b/tests/test_utils/test_metamodelcore.py @@ -70,11 +70,10 @@ def test_uriorcuries(self): def test_curie(self): """Test the CURIE type""" self.assertEqual("rdf:type", Curie("rdf:type")) - with self.assertRaises(ValueError): - Curie("type") - self.assertFalse(Curie.is_valid("type")) + self.assertTrue(Curie.is_valid("type")) self.assertEqual(":type", Curie(":type")) self.assertTrue(Curie.is_valid(":type")) + self.assertTrue(Curie.is_valid("_abc:123")) self.assertTrue(Curie.is_valid("WIKIDATA_PROPERTY:P854")) self.assertTrue(Curie.is_valid("WIKIDATA.PROPERTY:P854")) self.assertTrue(Curie.is_valid("CL:0000001")) @@ -82,6 +81,7 @@ def test_curie(self): Curie("1df:type") self.assertFalse(Curie.is_valid("1df:type")) self.assertTrue(Curie.is_valid("rdf:17")) + self.assertTrue(Curie.is_valid("17")) nsm = Namespaces(Graph()) self.assertEqual(RDF.type, Curie("rdf:type").as_uri(nsm)) self.assertIsNone(Curie("ex:foo").as_uri(nsm))