@@ -324,7 +324,16 @@ def imports_closure(self, imports: bool = True, traverse: Optional[bool] = None,
324
324
325
325
if inject_metadata :
326
326
for s in self .schema_map .values ():
327
- for x in {** s .classes , ** s .enums , ** s .slots , ** s .subsets , ** s .types }.values ():
327
+ # It is important to merge element definitions as a list as multiple elements of different kinds can
328
+ # have the same name which means they have the same dict key.
329
+ elements = []
330
+ elements .extend (s .classes .values ())
331
+ elements .extend (s .enums .values ())
332
+ elements .extend (s .slots .values ())
333
+ elements .extend (s .subsets .values ())
334
+ elements .extend (s .types .values ())
335
+
336
+ for x in elements :
328
337
x .from_schema = s .id
329
338
for c in s .classes .values ():
330
339
for a in c .attributes .values ():
@@ -1070,14 +1079,14 @@ def get_uri(self, element: Union[ElementName, Element], imports=True, expand=Fal
1070
1079
Return the CURIE or URI for a schema element. If the schema defines a specific URI, this is
1071
1080
used, otherwise this is constructed from the default prefix combined with the element name
1072
1081
1073
- :param element_name : name of schema element
1082
+ :param element : name of schema element
1074
1083
:param imports: include imports closure
1075
1084
:param native: return the native CURIE or URI rather than what is declared in the uri slot
1076
1085
:param expand: expand the CURIE to a URI; defaults to False
1077
1086
:return: URI or CURIE as a string
1078
1087
"""
1079
1088
e = self .get_element (element , imports = imports )
1080
- e_name = e . name
1089
+
1081
1090
if isinstance (e , ClassDefinition ):
1082
1091
uri = e .class_uri
1083
1092
e_name = camelcase (e .name )
@@ -1091,8 +1100,8 @@ def get_uri(self, element: Union[ElementName, Element], imports=True, expand=Fal
1091
1100
raise ValueError (f'Must be class or slot or type: { e } ' )
1092
1101
if uri is None or native :
1093
1102
if e .from_schema is not None :
1094
- schema = next (sc for sc in self .schema_map .values () if sc .id == e .from_schema )
1095
- if schema == None :
1103
+ schema = next (( sc for sc in self .schema_map .values () if sc .id == e .from_schema ), None )
1104
+ if schema is None :
1096
1105
raise ValueError (f'Cannot find { e .from_schema } in schema_map' )
1097
1106
else :
1098
1107
schema = self .schema_map [self .in_schema (e .name )]
0 commit comments