linkml 1.7.4__py3-none-any.whl → 1.7.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- linkml/generators/__init__.py +2 -0
- linkml/generators/docgen/class.md.jinja2 +15 -2
- linkml/generators/docgen/slot.md.jinja2 +14 -1
- linkml/generators/docgen.py +32 -11
- linkml/generators/excelgen.py +5 -3
- linkml/generators/golanggen.py +6 -3
- linkml/generators/jsonldcontextgen.py +9 -6
- linkml/generators/jsonldgen.py +3 -1
- linkml/generators/oocodegen.py +6 -3
- linkml/generators/owlgen.py +30 -3
- linkml/generators/prefixmapgen.py +5 -4
- linkml/generators/projectgen.py +18 -5
- linkml/generators/pydanticgen/__init__.py +29 -0
- linkml/generators/{pydanticgen.py → pydanticgen/pydanticgen.py} +196 -301
- linkml/generators/pydanticgen/template.py +504 -0
- linkml/generators/pydanticgen/templates/attribute.py.jinja +10 -0
- linkml/generators/pydanticgen/templates/base_model.py.jinja +27 -0
- linkml/generators/pydanticgen/templates/class.py.jinja +21 -0
- linkml/generators/pydanticgen/templates/conditional_import.py.jinja +9 -0
- linkml/generators/pydanticgen/templates/enum.py.jinja +16 -0
- linkml/generators/pydanticgen/templates/footer.py.jinja +13 -0
- linkml/generators/pydanticgen/templates/imports.py.jinja +31 -0
- linkml/generators/pydanticgen/templates/module.py.jinja +27 -0
- linkml/generators/pydanticgen/templates/validator.py.jinja +15 -0
- linkml/generators/pythongen.py +19 -10
- linkml/generators/shacl/__init__.py +3 -0
- linkml/generators/shacl/ifabsent_processor.py +41 -0
- linkml/generators/shacl/shacl_data_type.py +40 -0
- linkml/generators/shaclgen.py +105 -82
- linkml/generators/shexgen.py +1 -1
- linkml/generators/sparqlgen.py +5 -4
- linkml/generators/sqlalchemygen.py +15 -14
- linkml/generators/sqltablegen.py +37 -25
- linkml/generators/terminusdbgen.py +7 -1
- linkml/generators/typescriptgen.py +2 -1
- linkml/linter/config/datamodel/config.py +8 -0
- linkml/linter/linter.py +2 -1
- linkml/linter/rules.py +11 -2
- linkml/transformers/logical_model_transformer.py +2 -1
- linkml/transformers/relmodel_transformer.py +4 -2
- linkml/transformers/schema_renamer.py +1 -1
- linkml/utils/generator.py +11 -8
- linkml/utils/ifabsent_functions.py +7 -9
- linkml/utils/schema_builder.py +1 -0
- linkml/utils/schema_fixer.py +3 -2
- linkml/utils/schemaloader.py +1 -9
- linkml/utils/sqlutils.py +39 -25
- linkml/validator/validation_context.py +2 -1
- {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/METADATA +4 -1
- {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/RECORD +53 -40
- {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/entry_points.txt +0 -1
- linkml/generators/sqlddlgen.py +0 -559
- {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/LICENSE +0 -0
- {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/WHEEL +0 -0
@@ -232,11 +232,19 @@ class StandardNamingConfig(RuleConfig):
|
|
232
232
|
|
233
233
|
level: Union[str, "RuleLevel"] = None
|
234
234
|
permissible_values_upper_case: Optional[Union[bool, Bool]] = None
|
235
|
+
slot_pattern: Optional[str] = None
|
236
|
+
class_pattern: Optional[str] = None
|
235
237
|
|
236
238
|
def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
|
237
239
|
if self.permissible_values_upper_case is not None and not isinstance(self.permissible_values_upper_case, Bool):
|
238
240
|
self.permissible_values_upper_case = Bool(self.permissible_values_upper_case)
|
239
241
|
|
242
|
+
if self.class_pattern is not None and not isinstance(self.class_pattern, str):
|
243
|
+
self.class_pattern = str(self.class_pattern)
|
244
|
+
|
245
|
+
if self.slot_pattern is not None and not isinstance(self.slot_pattern, str):
|
246
|
+
self.slot_pattern = str(self.slot_pattern)
|
247
|
+
|
240
248
|
super().__post_init__(**kwargs)
|
241
249
|
|
242
250
|
|
linkml/linter/linter.py
CHANGED
linkml/linter/rules.py
CHANGED
@@ -219,8 +219,17 @@ class StandardNamingRule(LinterRule):
|
|
219
219
|
self.config = config
|
220
220
|
|
221
221
|
def check(self, schema_view: SchemaView, fix: bool = False) -> Iterable[LinterProblem]:
|
222
|
-
class_pattern =
|
223
|
-
|
222
|
+
class_pattern = (
|
223
|
+
self.PATTERNS["uppercamel"]
|
224
|
+
if not self.config.class_pattern
|
225
|
+
else self.PATTERNS.get(self.config.class_pattern, re.compile(self.config.class_pattern))
|
226
|
+
)
|
227
|
+
slot_pattern = (
|
228
|
+
self.PATTERNS["snake"]
|
229
|
+
if not self.config.slot_pattern
|
230
|
+
else self.PATTERNS.get(self.config.slot_pattern, re.compile(self.config.slot_pattern))
|
231
|
+
)
|
232
|
+
|
224
233
|
enum_pattern = self.PATTERNS["uppercamel"]
|
225
234
|
permissible_value_pattern = (
|
226
235
|
self.PATTERNS["uppersnake"] if self.config.permissible_values_upper_case else self.PATTERNS["snake"]
|
@@ -383,7 +383,8 @@ class LogicalModelTransformer(ModelTransformer):
|
|
383
383
|
if new_slot_dict:
|
384
384
|
target.all_of.append(AnonymousSlotExpression(**new_slot_dict))
|
385
385
|
|
386
|
-
|
386
|
+
@staticmethod
|
387
|
+
def _merge_type_ancestors(target: TypeDefinition, source: TypeDefinition):
|
387
388
|
"""
|
388
389
|
Generate all_ofs for type based on ancestors.
|
389
390
|
|
@@ -368,7 +368,8 @@ class RelationalModelTransformer:
|
|
368
368
|
result = TransformationResult(target, mappings=mappings)
|
369
369
|
return result
|
370
370
|
|
371
|
-
|
371
|
+
@staticmethod
|
372
|
+
def get_direct_identifier_attribute(sv: SchemaView, cn: ClassDefinitionName) -> Optional[SlotDefinition]:
|
372
373
|
c = sv.get_class(cn)
|
373
374
|
for a in c.attributes.values():
|
374
375
|
if a.identifier:
|
@@ -414,7 +415,8 @@ class RelationalModelTransformer:
|
|
414
415
|
or (c.tree_root and self.skip_tree_root)
|
415
416
|
)
|
416
417
|
|
417
|
-
|
418
|
+
@staticmethod
|
419
|
+
def add_primary_key(cn: str, sv: SchemaView) -> SlotDefinition:
|
418
420
|
"""
|
419
421
|
Adds a surrogate/autoincrement primary key to a class
|
420
422
|
|
linkml/utils/generator.py
CHANGED
@@ -83,11 +83,11 @@ class Generator(metaclass=abc.ABCMeta):
|
|
83
83
|
For usage `Generator Docs <https://linkml.io/linkml/generators/>`_
|
84
84
|
"""
|
85
85
|
|
86
|
-
# ClassVars
|
87
86
|
schema: Union[str, TextIO, SchemaDefinition, "Generator"]
|
88
87
|
"""metamodel compliant schema. Can be URI, file name, actual schema, another generator, an
|
89
88
|
open file or a pre-parsed schema"""
|
90
89
|
|
90
|
+
# ClassVars
|
91
91
|
generatorname: ClassVar[str] = None
|
92
92
|
""" Name of the generator. Override with os.path.basename(__file__)"""
|
93
93
|
|
@@ -159,7 +159,8 @@ class Generator(metaclass=abc.ABCMeta):
|
|
159
159
|
"""True means output is to a directory, False is to stdout"""
|
160
160
|
|
161
161
|
base_dir: str = None # Base directory of schema
|
162
|
-
"""Working directory or base URL of sources
|
162
|
+
"""Working directory or base URL of sources.
|
163
|
+
Setting this is necessary for correct retrieval of relative imports."""
|
163
164
|
|
164
165
|
metamodel_name_map: Dict[str, str] = None
|
165
166
|
"""Allows mapping of names of metamodel elements such as slot, etc"""
|
@@ -196,8 +197,8 @@ class Generator(metaclass=abc.ABCMeta):
|
|
196
197
|
if self.uses_schemaloader:
|
197
198
|
self._initialize_using_schemaloader(schema)
|
198
199
|
else:
|
199
|
-
logging.info(f"Using SchemaView with im={self.importmap}")
|
200
|
-
self.schemaview = SchemaView(schema, importmap=self.importmap)
|
200
|
+
logging.info(f"Using SchemaView with im={self.importmap} // base_dir={self.base_dir}")
|
201
|
+
self.schemaview = SchemaView(schema, importmap=self.importmap, base_dir=self.base_dir)
|
201
202
|
self.schema = self.schemaview.schema
|
202
203
|
self._init_namespaces()
|
203
204
|
|
@@ -579,7 +580,8 @@ class Generator(metaclass=abc.ABCMeta):
|
|
579
580
|
return slotname
|
580
581
|
return None
|
581
582
|
|
582
|
-
|
583
|
+
@staticmethod
|
584
|
+
def enum_identifier_path(enum_or_enumname: Union[str, EnumDefinition]) -> List[str]:
|
583
585
|
"""Return an enum_identifier path"""
|
584
586
|
return [
|
585
587
|
"str",
|
@@ -682,7 +684,7 @@ class Generator(metaclass=abc.ABCMeta):
|
|
682
684
|
|
683
685
|
def slot_name(self, name: str) -> str:
|
684
686
|
"""
|
685
|
-
Return the underscored version of the aliased slot name if name is a slot. Prepend "
|
687
|
+
Return the underscored version of the aliased slot name if name is a slot. Prepend "unknown\_" if the name
|
686
688
|
isn't valid.
|
687
689
|
"""
|
688
690
|
slot = self.slot_for(name)
|
@@ -704,7 +706,7 @@ class Generator(metaclass=abc.ABCMeta):
|
|
704
706
|
|
705
707
|
:param el_or_elname: element or name to map
|
706
708
|
:param is_range_name: True means that we're looking for a class or type. False means Slot or Subset. Only
|
707
|
-
|
709
|
+
applies if el_or_elname is an ElementName (otherwise we know what we've got
|
708
710
|
:return: Formatted name if type can be known else None
|
709
711
|
"""
|
710
712
|
if isinstance(el_or_elname, str):
|
@@ -862,7 +864,8 @@ class Generator(metaclass=abc.ABCMeta):
|
|
862
864
|
else:
|
863
865
|
return slot_name
|
864
866
|
|
865
|
-
|
867
|
+
@staticmethod
|
868
|
+
def is_class_unconstrained(cls: ClassDefinition):
|
866
869
|
"""
|
867
870
|
Determine if the class is mapped to typing.Any, i.e the unconstrained class
|
868
871
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import re
|
2
|
-
from typing import Callable, List, Match, Optional, Text, Tuple
|
2
|
+
from typing import Callable, List, Match, Optional, Text, Tuple, Union
|
3
3
|
|
4
4
|
from linkml_runtime.linkml_model.meta import ClassDefinition, SlotDefinition
|
5
5
|
from linkml_runtime.utils.formatutils import sfx
|
@@ -77,12 +77,13 @@ default_library: List[
|
|
77
77
|
(
|
78
78
|
r"date\((\d{4})-(\d{2})-(\d{2})\)",
|
79
79
|
False,
|
80
|
-
lambda m, __, ___, ____: f"
|
80
|
+
lambda m, __, ___, ____: f"date({int(m[1])}, {int(m[2])}, {int(m[3])})",
|
81
81
|
),
|
82
82
|
(
|
83
83
|
r"datetime\((\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z\)",
|
84
84
|
False,
|
85
|
-
lambda m, __, ___, ____: f"datetime
|
85
|
+
lambda m, __, ___, ____: f"datetime({int(m[1])}, {int(m[2])}, {int(m[3])}, "
|
86
|
+
f"{int(m[4])}, {int(m[5])}, {int(m[6])})",
|
86
87
|
),
|
87
88
|
# TODO: We have to make the real URI available before any of these can work
|
88
89
|
# ("class_uri", True,
|
@@ -113,12 +114,9 @@ default_library: List[
|
|
113
114
|
|
114
115
|
def isabsent_match(
|
115
116
|
txt: Text,
|
116
|
-
) ->
|
117
|
-
Tuple[
|
118
|
-
|
119
|
-
bool,
|
120
|
-
Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str],
|
121
|
-
]
|
117
|
+
) -> Union[
|
118
|
+
Tuple[Match[str], bool, Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str]],
|
119
|
+
Tuple[None, None, None],
|
122
120
|
]:
|
123
121
|
txt = str(txt)
|
124
122
|
for pattern, postinit, f in default_library:
|
linkml/utils/schema_builder.py
CHANGED
linkml/utils/schema_fixer.py
CHANGED
@@ -271,7 +271,8 @@ class SchemaFixer:
|
|
271
271
|
for k in empty_keys:
|
272
272
|
del cls.slot_usage[k]
|
273
273
|
|
274
|
-
|
274
|
+
@staticmethod
|
275
|
+
def implicit_slots(schema: SchemaDefinition) -> Dict[str, Dict]:
|
275
276
|
"""
|
276
277
|
Find slots that are implicit in the schema from slot_usage
|
277
278
|
|
@@ -313,8 +314,8 @@ class SchemaFixer:
|
|
313
314
|
self.history = []
|
314
315
|
self.history.append(txt)
|
315
316
|
|
317
|
+
@staticmethod
|
316
318
|
def fix_element_names(
|
317
|
-
self,
|
318
319
|
schema: SchemaDefinition,
|
319
320
|
schema_dict: Dict[str, Any] = None,
|
320
321
|
rules: Dict[str, Callable] = None,
|
linkml/utils/schemaloader.py
CHANGED
@@ -118,7 +118,7 @@ class SchemaLoader:
|
|
118
118
|
sname = self.importmap.get(str(sname), sname) # It may also use URI or other forms
|
119
119
|
import_schemadefinition = load_raw_schema(
|
120
120
|
sname + ".yaml",
|
121
|
-
base_dir=os.path.dirname(self.schema.source_file) if self.schema.source_file else
|
121
|
+
base_dir=os.path.dirname(self.schema.source_file) if self.schema.source_file else self.base_dir,
|
122
122
|
merge_modules=self.merge_modules,
|
123
123
|
emit_metadata=self.emit_metadata,
|
124
124
|
)
|
@@ -351,14 +351,6 @@ class SchemaLoader:
|
|
351
351
|
f"slot: {slot.name} - unrecognized domain ({slot.domain})",
|
352
352
|
slot.domain,
|
353
353
|
)
|
354
|
-
if slot.ifabsent:
|
355
|
-
from linkml.utils.ifabsent_functions import isabsent_match
|
356
|
-
|
357
|
-
if isabsent_match(slot.ifabsent) is None:
|
358
|
-
self.raise_value_error(
|
359
|
-
f"Unrecognized ifabsent action for slot '{slot.name}': '{slot.ifabsent}'",
|
360
|
-
slot.ifabsent,
|
361
|
-
)
|
362
354
|
|
363
355
|
# Keys and identifiers must be present
|
364
356
|
if bool(slot.key or slot.identifier):
|
linkml/utils/sqlutils.py
CHANGED
@@ -324,9 +324,15 @@ def main(verbose: int, quiet: bool, csv_field_size_limit: int):
|
|
324
324
|
show_default=True,
|
325
325
|
help="Force creation of a database if it does not exist",
|
326
326
|
)
|
327
|
-
@click.
|
327
|
+
@click.option(
|
328
|
+
"--glob/--no-glob",
|
329
|
+
default=False,
|
330
|
+
show_default=True,
|
331
|
+
help="Treat input as a quoted glob expression, e.g. 'data/*.json'",
|
332
|
+
)
|
333
|
+
@click.argument("inputs", nargs=-1)
|
328
334
|
def dump(
|
329
|
-
|
335
|
+
inputs,
|
330
336
|
module,
|
331
337
|
db,
|
332
338
|
target_class,
|
@@ -334,6 +340,7 @@ def dump(
|
|
334
340
|
schema=None,
|
335
341
|
validate=None,
|
336
342
|
force: bool = None,
|
343
|
+
glob: bool = None,
|
337
344
|
index_slot=None,
|
338
345
|
) -> None:
|
339
346
|
"""
|
@@ -359,34 +366,41 @@ def dump(
|
|
359
366
|
if target_class is None:
|
360
367
|
raise Exception("target class not specified and could not be inferred")
|
361
368
|
py_target_class = python_module.__dict__[target_class]
|
362
|
-
input_format = _get_format(input, input_format)
|
363
|
-
loader = get_loader(input_format)
|
364
|
-
|
365
|
-
inargs = {}
|
366
|
-
if datautils._is_rdf_format(input_format):
|
367
|
-
if sv is None:
|
368
|
-
raise Exception("Must pass schema arg")
|
369
|
-
inargs["schemaview"] = sv
|
370
|
-
inargs["fmt"] = input_format
|
371
|
-
if _is_xsv(input_format):
|
372
|
-
if index_slot is None:
|
373
|
-
index_slot = infer_index_slot(sv, target_class)
|
374
|
-
if index_slot is None:
|
375
|
-
raise Exception("--index-slot is required for CSV input")
|
376
|
-
inargs["index_slot"] = index_slot
|
377
|
-
inargs["schema"] = schema
|
378
|
-
obj = loader.load(source=input, target_class=py_target_class, **inargs)
|
379
|
-
if validate:
|
380
|
-
if schema is None:
|
381
|
-
raise Exception("--schema must be passed in order to validate. Suppress with --no-validate")
|
382
|
-
# TODO: use validator framework
|
383
|
-
validation.validate_object(obj, schema)
|
384
369
|
|
385
370
|
endpoint = SQLStore(schema, database_path=db, include_schema_in_database=False)
|
386
371
|
endpoint.native_module = python_module
|
387
372
|
endpoint.db_exists(force=force)
|
388
373
|
endpoint.compile()
|
389
|
-
|
374
|
+
|
375
|
+
if glob:
|
376
|
+
import glob
|
377
|
+
|
378
|
+
inputs = [item for input in inputs for item in glob.glob(input)]
|
379
|
+
for input in inputs:
|
380
|
+
logging.info(f"Loading: {input}")
|
381
|
+
input_format = _get_format(input, input_format)
|
382
|
+
loader = get_loader(input_format)
|
383
|
+
|
384
|
+
inargs = {}
|
385
|
+
if datautils._is_rdf_format(input_format):
|
386
|
+
if sv is None:
|
387
|
+
raise Exception("Must pass schema arg")
|
388
|
+
inargs["schemaview"] = sv
|
389
|
+
inargs["fmt"] = input_format
|
390
|
+
if _is_xsv(input_format):
|
391
|
+
if index_slot is None:
|
392
|
+
index_slot = infer_index_slot(sv, target_class)
|
393
|
+
if index_slot is None:
|
394
|
+
raise Exception("--index-slot is required for CSV input")
|
395
|
+
inargs["index_slot"] = index_slot
|
396
|
+
inargs["schema"] = schema
|
397
|
+
obj = loader.load(source=input, target_class=py_target_class, **inargs)
|
398
|
+
if validate:
|
399
|
+
if schema is None:
|
400
|
+
raise Exception("--schema must be passed in order to validate. Suppress with --no-validate")
|
401
|
+
# TODO: use validator framework
|
402
|
+
validation.validate_object(obj, schema)
|
403
|
+
endpoint.dump(obj)
|
390
404
|
|
391
405
|
|
392
406
|
@main.command()
|
@@ -4,6 +4,7 @@ from functools import lru_cache
|
|
4
4
|
from typing import Optional
|
5
5
|
|
6
6
|
import jsonschema
|
7
|
+
from jsonschema.protocols import Validator
|
7
8
|
from linkml_runtime import SchemaView
|
8
9
|
from linkml_runtime.linkml_model import SchemaDefinition
|
9
10
|
|
@@ -36,7 +37,7 @@ class ValidationContext:
|
|
36
37
|
closed: bool,
|
37
38
|
include_range_class_descendants: bool,
|
38
39
|
path_override: Optional[os.PathLike] = None,
|
39
|
-
) ->
|
40
|
+
) -> Validator:
|
40
41
|
if path_override:
|
41
42
|
with open(path_override) as json_schema_file:
|
42
43
|
json_schema = json.load(json_schema_file)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: linkml
|
3
|
-
Version: 1.7.
|
3
|
+
Version: 1.7.6
|
4
4
|
Summary: Linked Open Data Modeling Language
|
5
5
|
Home-page: https://linkml.io/linkml/
|
6
6
|
Keywords: schema,linked data,data modeling,rdf,owl,biolink
|
@@ -22,6 +22,8 @@ Classifier: Programming Language :: Python :: 3.11
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.8
|
23
23
|
Classifier: Programming Language :: Python :: 3.9
|
24
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
25
|
+
Provides-Extra: shacl
|
26
|
+
Provides-Extra: tests
|
25
27
|
Requires-Dist: antlr4-python3-runtime (>=4.9.0,<4.10)
|
26
28
|
Requires-Dist: click (>=7.0)
|
27
29
|
Requires-Dist: graphviz (>=0.10.1)
|
@@ -38,6 +40,7 @@ Requires-Dist: prefixcommons (>=0.1.7)
|
|
38
40
|
Requires-Dist: prefixmaps (>=0.1.3)
|
39
41
|
Requires-Dist: pydantic (>=1.0.0,<3.0.0)
|
40
42
|
Requires-Dist: pyjsg (>=0.11.6)
|
43
|
+
Requires-Dist: pyshacl (>=0.25.0,<0.26.0) ; extra == "shacl" or extra == "tests"
|
41
44
|
Requires-Dist: pyshex (>=0.7.20)
|
42
45
|
Requires-Dist: pyshexc (>=0.8.3)
|
43
46
|
Requires-Dist: python-dateutil
|
@@ -2,67 +2,80 @@ linkml/__init__.py,sha256=jwtUdhwmquj-0fCR6VwPH5_RfSpuG94hLWdre_W_FD4,3327
|
|
2
2
|
linkml/_version.py,sha256=udxv6OEqcE89DTVMYPtetXYg8IA8Sgc6yW26-6f8C3M,310
|
3
3
|
linkml/generators/PythonGenNotes.md,sha256=wb9BPLLhF6378OKLbwSBAwmniLpwrcT5_bbfCHfLme8,51006
|
4
4
|
linkml/generators/README.md,sha256=RMzT8EblC_GEdPy5WyfXHDBXlFI6k6mz3Cx2sdpcyWI,4438
|
5
|
-
linkml/generators/__init__.py,sha256=
|
5
|
+
linkml/generators/__init__.py,sha256=dQ2EUKy_MctEVEzbC3XzEJL5YmYwjYfsa44mG2zKn7g,1517
|
6
6
|
linkml/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
linkml/generators/common/type_designators.py,sha256=lgVcIRJJ-yCvVGeP9U_gQZpm77UmJBQo9Bh3lGJITno,1956
|
8
8
|
linkml/generators/csvgen.py,sha256=X0f4qKXahSDtkzM9Y47rwWqdseP1O6PTZ_WKiOqOrQI,2956
|
9
|
-
linkml/generators/docgen/class.md.jinja2,sha256=
|
9
|
+
linkml/generators/docgen/class.md.jinja2,sha256=bz5A46HOIPkUVbzPGorg64NNhr66zK0hCCekSfRPErY,3787
|
10
10
|
linkml/generators/docgen/class_diagram.md.jinja2,sha256=lLU_0sQZBttOX5Wiup2oZwrxHuiQtbU9ZgLi66aJvOo,2538
|
11
11
|
linkml/generators/docgen/common_metadata.md.jinja2,sha256=zy8Ua3gDtAAq8VA3e3O3ft9W7eJopVZaq5efP8LU_hU,1321
|
12
12
|
linkml/generators/docgen/enum.md.jinja2,sha256=mXnUrRkleY2bOTEyAZ5c4pcUnqhs6BNa8a-4LVve-eo,1014
|
13
13
|
linkml/generators/docgen/index.md.jinja2,sha256=wXUYTmayPLFltC0vbGE_Mf6m3GkkWav7FOEjCvEpHp4,1466
|
14
14
|
linkml/generators/docgen/index.tex.jinja2,sha256=Go_EA-_N4JUpbOYbk3OY11mz5yV70VF2l2sMtgIPWw4,501
|
15
15
|
linkml/generators/docgen/schema.md.jinja2,sha256=xlENfnzNRYgPT_0tdqNFxgklVM4Qf5BuzhFVvSMDuxs,70
|
16
|
-
linkml/generators/docgen/slot.md.jinja2,sha256=
|
16
|
+
linkml/generators/docgen/slot.md.jinja2,sha256=HcLu32FiyIRy0AaV-GwBPUwEbTCY-KkPDhOZk3OKfqg,3226
|
17
17
|
linkml/generators/docgen/subset.md.jinja2,sha256=fTNIpAkml5RKFbbtLore3IAzFN1cISVsyL1ru2-Z4oA,2665
|
18
18
|
linkml/generators/docgen/type.md.jinja2,sha256=QmCMJZrFwP33eHkggBVtypbyrxTb-XZn9vHOYojVaYk,635
|
19
|
-
linkml/generators/docgen.py,sha256=
|
19
|
+
linkml/generators/docgen.py,sha256=dz7OWxclX306EweVIgC765h3NKtJTRg0TPnqmltWygs,34347
|
20
20
|
linkml/generators/dotgen.py,sha256=kzp1EYtF8bBqOuycJokDmsvHVDVkkW-J-6-MiUhwJH0,5013
|
21
21
|
linkml/generators/erdiagramgen.py,sha256=xCnxIldDYZ7xnQ-vLaXlH3FH8MH3cxu-E0j8it-lyJE,10153
|
22
|
-
linkml/generators/excelgen.py,sha256=
|
23
|
-
linkml/generators/golanggen.py,sha256=
|
22
|
+
linkml/generators/excelgen.py,sha256=3ILAeIHeYngNpPf3Ad7CXoHOLQ9KSiYcX5HdwHhQeQE,7696
|
23
|
+
linkml/generators/golanggen.py,sha256=1seIQiKq-ASZoHTf7xoPd0zUQ4YCPkxoKnUwgAIttPo,5811
|
24
24
|
linkml/generators/golrgen.py,sha256=OUBYRWicP7G7lrPu1VrxumbVpx3CBJal-o2imyeP05M,3437
|
25
25
|
linkml/generators/graphqlgen.py,sha256=6qZpI0rwg3ypsv_KrLVzXgdsJfR8LNPqgMwaRwzwnDs,2151
|
26
26
|
linkml/generators/javagen/example_template.java.jinja2,sha256=ec4CVTv_0zS7V5Y-1E6H4lRraya10gfX7BEMBlu38X4,444
|
27
27
|
linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMltvrYyVeut7l2Q-tzK7AOiVmWs,1729
|
28
28
|
linkml/generators/javagen.py,sha256=KxwupMztyCRHcSsbtTnOovuj1WamsAny0mxbYWvTiDs,5324
|
29
|
-
linkml/generators/jsonldcontextgen.py,sha256=
|
30
|
-
linkml/generators/jsonldgen.py,sha256=
|
29
|
+
linkml/generators/jsonldcontextgen.py,sha256=048kzs28xooik86A8OQ0NIbXxyJZGkqH1ZMxg17mcf4,8073
|
30
|
+
linkml/generators/jsonldgen.py,sha256=pk8Gmh2gSvXt_o7MTuJ71thNfIJuHUGkNl3yl3RIdsE,7728
|
31
31
|
linkml/generators/jsonschemagen.py,sha256=XOsYIrpA6BwtAcfh8GNGduIjpuPAsF2f_PQ1mghj_WU,27455
|
32
32
|
linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
linkml/generators/linkmlgen.py,sha256=1_Kt_7rD42WvCTjq0yaq1Of7jEDZR_uusyzAT-qWMHk,3471
|
34
34
|
linkml/generators/markdowngen.py,sha256=dDMyusNXLvM2raIW-_vd2AQBhDHn0P_rMeDq3QFuacs,32926
|
35
35
|
linkml/generators/namespacegen.py,sha256=vVcIyM0zlKd7XRvtdzwTwHjG4Pg49801gy4FUmjJlqQ,6450
|
36
|
-
linkml/generators/oocodegen.py,sha256=
|
37
|
-
linkml/generators/owlgen.py,sha256=
|
36
|
+
linkml/generators/oocodegen.py,sha256=r73QI08ajbTZTobc9OIG6BMWZft3zdu76vKVR33pyYg,7774
|
37
|
+
linkml/generators/owlgen.py,sha256=FMzdiK85CND8wnLiXPmylpayUTGpuydgD_g4hFjyez4,54374
|
38
38
|
linkml/generators/plantumlgen.py,sha256=tk-_XJtBA5EqYJSUTc3bdMdCwqlC-rc9VYO9A2V_HpM,14895
|
39
|
-
linkml/generators/prefixmapgen.py,sha256
|
40
|
-
linkml/generators/projectgen.py,sha256=
|
39
|
+
linkml/generators/prefixmapgen.py,sha256=L9TccwKNHEguW0ox5qgf_GhIuqauYTI8d4jSjeqdkWo,4720
|
40
|
+
linkml/generators/projectgen.py,sha256=OuT_AneoZFNMCn50GllfZafadUHt50u61JcftM2eed4,9750
|
41
41
|
linkml/generators/protogen.py,sha256=5UxThsFDVyDTzzTDh77Z0anx4-tLgz8kQQ-e7ywIqwI,2290
|
42
|
-
linkml/generators/pydanticgen.py,sha256=
|
43
|
-
linkml/generators/
|
42
|
+
linkml/generators/pydanticgen/__init__.py,sha256=uKGaaQSaeKqinHImXGFE448i-t8Oi0No8suIO76sep8,629
|
43
|
+
linkml/generators/pydanticgen/pydanticgen.py,sha256=ZUi9fE5ZiQbW5V4Ckth8hysMghHh9H2RpqLZa3m8PfQ,27598
|
44
|
+
linkml/generators/pydanticgen/template.py,sha256=e2PYQFRlDR1Nva_xy-NlsttpW79L8n6e63QKHZzoXH8,17016
|
45
|
+
linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=AlH_QFJJkONpzXQRGqnW4ufmjp9s9E7Q9W5r8ykNGeQ,443
|
46
|
+
linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=eYKNI-4itB6lYW5yhfIWngtMcHZnuEaic9Dv56XKX4M,797
|
47
|
+
linkml/generators/pydanticgen/templates/class.py.jinja,sha256=RIdkqdZS9rDILUuVqDIAWK_vATGkirLbPhdHSyHDAbY,565
|
48
|
+
linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=YheknDrxvepiJUzeItSL5aSbAkCdR1k0a6m6aTA4qNM,240
|
49
|
+
linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=572XFQyEMZfL-G_Cj68T-NI_mUnDoFOAVJOGIKu2Hb8,338
|
50
|
+
linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=WuWGJjkWDQcEPL2bGk5fdGuhO0gQRUJzpo4CQHHxQNQ,385
|
51
|
+
linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=d1XFna2eOpkH8cgJML3vXwqGcocczvOcrbg6jjd4kP0,945
|
52
|
+
linkml/generators/pydanticgen/templates/module.py.jinja,sha256=SkmtWtQS7D-xBiZI-sFiYC3WYPKi3VJCj_KtaMVxexM,438
|
53
|
+
linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=Yo4dubQal-HwEoJKztQkLYM5qCz1I8na2oaDlXuEpwU,532
|
54
|
+
linkml/generators/pythongen.py,sha256=AvOQZJ-OT8lMYeaT2bdexHuRPRfTK7wpbmgAdfc2lW4,52805
|
44
55
|
linkml/generators/rdfgen.py,sha256=L6F08iDUqVemXXrRbJmcOxvJTt14hR0oo8WLoqf4npw,2656
|
45
|
-
linkml/generators/
|
46
|
-
linkml/generators/
|
47
|
-
linkml/generators/
|
56
|
+
linkml/generators/shacl/__init__.py,sha256=O-M-wndKw8rMW-U8X3QCNHal-ErXP6uXZqxiQSa77l4,108
|
57
|
+
linkml/generators/shacl/ifabsent_processor.py,sha256=I7zvSjZzB7tZjcXRE0UE3DUmF5sY7QrKbXblYvpRwkc,1746
|
58
|
+
linkml/generators/shacl/shacl_data_type.py,sha256=BT3C9tdFyBQnuucPN7YQiFAKEa9yuzy-Q26X6dmOXgo,1827
|
59
|
+
linkml/generators/shaclgen.py,sha256=mTkHziEIKoMTr-Vl6nwOdqxk-97cJzTsFG7ViMiFhMs,8308
|
60
|
+
linkml/generators/shexgen.py,sha256=KzhaL-A4R4peSdhY6nlDWmS-DPfnZMxMzrXhHGnA_Ag,9874
|
61
|
+
linkml/generators/sparqlgen.py,sha256=c7x8GFChKWprBx4rToSnu9qN8OleWTCenVUdZ8XSTWM,6138
|
48
62
|
linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
|
49
63
|
linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
|
50
64
|
linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
|
51
|
-
linkml/generators/sqlalchemygen.py,sha256=
|
52
|
-
linkml/generators/
|
53
|
-
linkml/generators/sqltablegen.py,sha256=yaGdnl1kbovf9b4Qi6dx5VpRlBfy4PX1dtHsXtvg6qQ,11494
|
65
|
+
linkml/generators/sqlalchemygen.py,sha256=TTc1oLLwG0c1BdvDXvSfGWAJCDlVvq7Y0r0yjXcdiW4,9268
|
66
|
+
linkml/generators/sqltablegen.py,sha256=XorqF6lfZX6tHfi6O2aIjd2GU_JZx5BuERuC3P6utVE,11626
|
54
67
|
linkml/generators/sssomgen.py,sha256=yur3q7so9uwIELWZaZRzkJwNbz_ppBL7IQki9XLIM3k,6879
|
55
68
|
linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
|
56
69
|
linkml/generators/summarygen.py,sha256=crH_Hegd4Z7G7byUtgyXoP2XtG_4iblzZsu_pE4aQrk,2887
|
57
|
-
linkml/generators/terminusdbgen.py,sha256=
|
58
|
-
linkml/generators/typescriptgen.py,sha256=
|
70
|
+
linkml/generators/terminusdbgen.py,sha256=XX651NgGGoCafA45XomRU0_DhbCyNzFNiigbjcrwXFQ,4627
|
71
|
+
linkml/generators/typescriptgen.py,sha256=80Ph4RfzDoA1TRCkKaLWlh0NsCNvhakJ2RrNfMqcMmY,8577
|
59
72
|
linkml/generators/yamlgen.py,sha256=PKssrY5VHpdbOU54PVwLVLbsRqHwoOgOImlMb6DVcXM,1614
|
60
73
|
linkml/generators/yumlgen.py,sha256=lnHcLY0VwlU_i8QporSmwR62CXSV4aOCXKxRDw5AxUk,12196
|
61
74
|
linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
62
75
|
linkml/linter/cli.py,sha256=BpQiETcRfQlZsI1-JALyU9wXPgPOm_KE_n11p0iJaC8,4494
|
63
76
|
linkml/linter/config/datamodel/.linkmllint.yaml,sha256=40rNhcL35FXQSjlVBMWnyPgplwEUqFT_sJmeZqUzxMw,292
|
64
77
|
linkml/linter/config/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
|
-
linkml/linter/config/datamodel/config.py,sha256=
|
78
|
+
linkml/linter/config/datamodel/config.py,sha256=WyIBA1damYcW0JI6zLxbFwcHOtSdw0prSADlJdz3zG0,17202
|
66
79
|
linkml/linter/config/datamodel/config.yaml,sha256=hh4a8RoHEsEpl-_E50SZjJD8kmHGquBdcrI4ZqNdAME,6980
|
67
80
|
linkml/linter/config/default.yaml,sha256=O3kaiwyvEO3siX2jDzuBjsCQc1b_EMe466OfRz8Gc5Q,540
|
68
81
|
linkml/linter/config/recommended.yaml,sha256=hxrRSlCZzFXr3WndWAxs2RKwuSwQxRjrvRQi-zteiYQ,198
|
@@ -72,32 +85,32 @@ linkml/linter/formatters/json_formatter.py,sha256=rrOELuETUCFTl1Ewnrus9Rx9hl2g4u
|
|
72
85
|
linkml/linter/formatters/markdown_formatter.py,sha256=sumF2MNJYL5oipLwCftCr3AiaCmVhd9V6di9aYpJ29I,2605
|
73
86
|
linkml/linter/formatters/terminal_formatter.py,sha256=xmNwlRieVCssRt3fpnNP5WWw_YXGmaBsbxFoMWufy5M,2085
|
74
87
|
linkml/linter/formatters/tsv_formatter.py,sha256=1VW-1Tv16mwhIDpHdExYpJJR3z42K5_XK2C-4mmYYdE,871
|
75
|
-
linkml/linter/linter.py,sha256=
|
76
|
-
linkml/linter/rules.py,sha256=
|
88
|
+
linkml/linter/linter.py,sha256=qfVV-vFT7bUJ2BmmDQteD7Jz8HZ-CNDSvnkyhJ-54H0,5113
|
89
|
+
linkml/linter/rules.py,sha256=EuZTHtrU9YndAf2vw6QknGZSVFgsbydStsQmrUCwTKk,11502
|
77
90
|
linkml/reporting/__init__.py,sha256=Jo0V_nyEcnWhMukMW-bqW9dlbgCfaRlWm3CO-XzgU84,92
|
78
91
|
linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,8622
|
79
92
|
linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
80
|
-
linkml/transformers/logical_model_transformer.py,sha256=
|
93
|
+
linkml/transformers/logical_model_transformer.py,sha256=Luc8cKWIGrRAXQ9DSLA03fgpIolLpsTT19OV9Coolvk,26522
|
81
94
|
linkml/transformers/model_transformer.py,sha256=tK_MpRDI-q2qfe8KHT6qJHP8ZruKjYx1FcM-Fnjse-E,678
|
82
|
-
linkml/transformers/relmodel_transformer.py,sha256=
|
83
|
-
linkml/transformers/schema_renamer.py,sha256=
|
95
|
+
linkml/transformers/relmodel_transformer.py,sha256=6tA-GkutJ0rgspjCF2NSCf2z-YdU2b4qPijabkroWfE,17704
|
96
|
+
linkml/transformers/schema_renamer.py,sha256=DYRbgL9j41M9FdbHYLY3u4YIdDM98laD3cv_lHcgWHQ,5275
|
84
97
|
linkml/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
85
98
|
linkml/utils/cli_utils.py,sha256=MdVbox1qr6kDUHUCWAmFhV-D6ebs_nn8vVwB8KDQfew,742
|
86
99
|
linkml/utils/converter.py,sha256=snAF-pgZBSi4ANiaKXxqtZk5w3qonJjTfI4X5OVLmUE,6283
|
87
100
|
linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
|
88
101
|
linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
|
89
102
|
linkml/utils/execute_tutorial.py,sha256=T4kHTSyz3ItJGEUZxVjR-3yLVKnOr5Ix4NMGE47-IuE,6912
|
90
|
-
linkml/utils/generator.py,sha256=
|
103
|
+
linkml/utils/generator.py,sha256=8-5JpMmvkWyLMeK5qSRv3XuOpfAmi2quNQ4Mo6nNCA0,38362
|
91
104
|
linkml/utils/helpers.py,sha256=yR8n4zFA5wPcYC7xzRuNF3wO16vG80v6j7DM3qTNmIc,447
|
92
|
-
linkml/utils/ifabsent_functions.py,sha256=
|
105
|
+
linkml/utils/ifabsent_functions.py,sha256=IkcBcmRYu8sllx7_mTCqu4aHfTxX2AnQoccZ1KOODds,5843
|
93
106
|
linkml/utils/logictools.py,sha256=GSmBiobC49TcQjE08RtXEE3JwJEOV7eEREio25uJiFs,21184
|
94
107
|
linkml/utils/mergeutils.py,sha256=QVm2iQB4v_L2rSvPBsPe9C865R03BgV3TzlPoTTTwWQ,9044
|
95
108
|
linkml/utils/rawloader.py,sha256=QB7Rdvy4o4ZJEWBWa2_2xzz2TOh_6Oe4slvUn8IBVIc,4329
|
96
|
-
linkml/utils/schema_builder.py,sha256=
|
97
|
-
linkml/utils/schema_fixer.py,sha256=
|
98
|
-
linkml/utils/schemaloader.py,sha256=
|
109
|
+
linkml/utils/schema_builder.py,sha256=4qhrur8O0xRZnPm7H1h2BZmTkut5R4q-IE_1KKiHy_c,9937
|
110
|
+
linkml/utils/schema_fixer.py,sha256=Uz8M3AOQ_BputJr1f6lbfk1iyvmANUNG80-0B3BQKJ8,16761
|
111
|
+
linkml/utils/schemaloader.py,sha256=XkH3ARPVcJ3ggnk4qgHJBPepyII4UlSRHzBlTWZbpCo,46062
|
99
112
|
linkml/utils/schemasynopsis.py,sha256=jKf5ZJxpNgSZ5x9oAcdGO3m1IwzcIU2Ni1ugm0SQq1g,18447
|
100
|
-
linkml/utils/sqlutils.py,sha256=
|
113
|
+
linkml/utils/sqlutils.py,sha256=FsOC3Wut6qzzmsnIt9ROsiDt2wXOa1IZUUtJ_T4Nb6M,17071
|
101
114
|
linkml/utils/typereferences.py,sha256=8Yfuz9-HAwOPoJLbIcO_sY9zf32hvPRzGeSOzECfMWA,2232
|
102
115
|
linkml/utils/validation.py,sha256=eLw1-d8x3N1V14bSc6H_mJJXo59ryKvvUIBcOJ1dVMw,1438
|
103
116
|
linkml/validator/__init__.py,sha256=djKc1IyxGKvVYaX5jSxsqjfcEYaw3rFgKbFJxI2wDNk,5002
|
@@ -115,7 +128,7 @@ linkml/validator/plugins/recommended_slots_plugin.py,sha256=kOdoYQyye47nLA7BjorV
|
|
115
128
|
linkml/validator/plugins/shacl_validation_plugin.py,sha256=A6x3tiX-p03_i_VmR2xnw28j0dpiUw6WIAG-gllwJ8Q,3624
|
116
129
|
linkml/validator/plugins/validation_plugin.py,sha256=9SMHF8b2bgG9-8351e8bY676e0A4aEBJSXvMjMF5kXg,1548
|
117
130
|
linkml/validator/report.py,sha256=kkkuh-IZF9--cO-2wGjwP3PDLvOcjjvC8AOlxXUIOAM,870
|
118
|
-
linkml/validator/validation_context.py,sha256=
|
131
|
+
linkml/validator/validation_context.py,sha256=Pmccq-LQ9iEeLyZhamp3mKjjtwp4ji1hIe5TT05AUT4,2732
|
119
132
|
linkml/validator/validator.py,sha256=BFgfKdu9Nad2dc9XTpmz9daQTj_FTcvo6mBq3e8fhJs,5649
|
120
133
|
linkml/validators/__init__.py,sha256=43W3J5NPKhwa3ZFHLRYsJMocwQKWGYCF9Ki9r0ccGbc,202
|
121
134
|
linkml/validators/jsonschemavalidator.py,sha256=_ku7MQGqA6KplbHMiyzDRqgRwwXGloobhLptuXqLCp4,7951
|
@@ -125,8 +138,8 @@ linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
125
138
|
linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
|
126
139
|
linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
|
127
140
|
linkml/workspaces/example_runner.py,sha256=OmC_yZLIb4KXGQrstBVZL0UAQ9ZAaraguQF0RSf-snk,11611
|
128
|
-
linkml-1.7.
|
129
|
-
linkml-1.7.
|
130
|
-
linkml-1.7.
|
131
|
-
linkml-1.7.
|
132
|
-
linkml-1.7.
|
141
|
+
linkml-1.7.6.dist-info/entry_points.txt,sha256=7haDkIbyC7ZLhm5z-e3BhrLJpY2xoW1yuD8Y7QPNtVg,2093
|
142
|
+
linkml-1.7.6.dist-info/METADATA,sha256=PaI8ylnY-nUYjDrS-44yWh-r6UsiLNLQ_cYYDBNZHX8,3588
|
143
|
+
linkml-1.7.6.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
144
|
+
linkml-1.7.6.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
|
145
|
+
linkml-1.7.6.dist-info/RECORD,,
|
@@ -29,7 +29,6 @@ gen-shex=linkml.generators.shexgen:cli
|
|
29
29
|
gen-sparql=linkml.generators.sparqlgen:cli
|
30
30
|
gen-sqla=linkml.generators.sqlalchemygen:cli
|
31
31
|
gen-sqlddl=linkml.generators.sqltablegen:cli
|
32
|
-
gen-sqlddl-legacy=linkml.generators.sqlddlgen:cli
|
33
32
|
gen-sqltables=linkml.generators.sqltablegen:cli
|
34
33
|
gen-sssom=linkml.generators.sssomgen:cli
|
35
34
|
gen-summary=linkml.generators.summarygen:cli
|