Skip to content

Commit a0757cb

Browse files
Merge pull request #375 from dalito/issue2561-el-type-URIs
Optionally add element type to constructed URI
2 parents fe422ff + eebc3c5 commit a0757cb

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

linkml_runtime/utils/schemaview.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -1074,7 +1074,7 @@ def get_element(self, element: Union[ElementName, Element], imports=True) -> Ele
10741074
e = self.get_subset(element, imports=imports)
10751075
return e
10761076

1077-
def get_uri(self, element: Union[ElementName, Element], imports=True, expand=False, native=False) -> str:
1077+
def get_uri(self, element: Union[ElementName, Element], imports=True, expand=False, native=False, use_element_type=False) -> str:
10781078
"""
10791079
Return the CURIE or URI for a schema element. If the schema defines a specific URI, this is
10801080
used, otherwise this is constructed from the default prefix combined with the element name
@@ -1086,7 +1086,7 @@ def get_uri(self, element: Union[ElementName, Element], imports=True, expand=Fal
10861086
:return: URI or CURIE as a string
10871087
"""
10881088
e = self.get_element(element, imports=imports)
1089-
1089+
e_name = e.name
10901090
if isinstance(e, ClassDefinition):
10911091
uri = e.class_uri
10921092
e_name = camelcase(e.name)
@@ -1106,7 +1106,12 @@ def get_uri(self, element: Union[ElementName, Element], imports=True, expand=Fal
11061106
else:
11071107
schema = self.schema_map[self.in_schema(e.name)]
11081108
pfx = schema.default_prefix
1109-
uri = f'{pfx}:{e_name}'
1109+
if use_element_type:
1110+
e_type = e.class_name.split("_",1)[0] # for example "class_definition"
1111+
e_type_path = f"{e_type}/"
1112+
else:
1113+
e_type_path = ""
1114+
uri = f'{pfx}:{e_type_path}{e_name}'
11101115
if expand:
11111116
return self.expand_curie(uri)
11121117
else:

tests/test_utils/test_schemaview.py

+4
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,10 @@ def test_imports(view):
472472
assert view.get_uri('TestClass') == 'core:TestClass'
473473
assert view.get_uri('TestClass', expand=True) == 'https://w3id.org/linkml/tests/core/TestClass'
474474

475+
assert view.get_uri('TestClass', expand=True, use_element_type=True) == 'https://w3id.org/linkml/tests/core/class/TestClass'
476+
assert view.get_uri('TestClass', use_element_type=True) == 'core:class/TestClass'
477+
assert view.get_uri('name', use_element_type=True) == 'core:slot/name'
478+
475479
assert view.get_uri('string') == 'xsd:string'
476480

477481
# dynamic enums

0 commit comments

Comments
 (0)