linkml 1.8.6__py3-none-any.whl → 1.9.0rc1__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/docgen/class.md.jinja2 +1 -1
- linkml/generators/docgen/enum.md.jinja2 +1 -1
- linkml/generators/docgen/schema.md.jinja2 +1 -1
- linkml/generators/docgen/slot.md.jinja2 +4 -1
- linkml/generators/docgen/subset.md.jinja2 +1 -1
- linkml/generators/docgen/type.md.jinja2 +1 -1
- linkml/generators/jsonldgen.py +1 -3
- linkml/generators/jsonschemagen.py +11 -0
- linkml/generators/linkmlgen.py +10 -2
- linkml/generators/mermaidclassdiagramgen.py +133 -0
- linkml/generators/owlgen.py +5 -13
- linkml/generators/shacl/shacl_ifabsent_processor.py +2 -1
- linkml/generators/shaclgen.py +10 -1
- linkml/generators/shexgen.py +1 -3
- linkml/generators/summarygen.py +1 -3
- linkml/generators/yamlgen.py +1 -3
- linkml/transformers/logical_model_transformer.py +7 -5
- linkml/utils/generator.py +11 -2
- linkml/workspaces/example_runner.py +1 -3
- {linkml-1.8.6.dist-info → linkml-1.9.0rc1.dist-info}/METADATA +1 -1
- {linkml-1.8.6.dist-info → linkml-1.9.0rc1.dist-info}/RECORD +24 -23
- {linkml-1.8.6.dist-info → linkml-1.9.0rc1.dist-info}/entry_points.txt +1 -0
- {linkml-1.8.6.dist-info → linkml-1.9.0rc1.dist-info}/LICENSE +0 -0
- {linkml-1.8.6.dist-info → linkml-1.9.0rc1.dist-info}/WHEEL +0 -0
@@ -21,7 +21,7 @@
|
|
21
21
|
{%- endif -%}
|
22
22
|
{% endmacro %}
|
23
23
|
|
24
|
-
# Slot: {{ title }}
|
24
|
+
# Slot: {{ title }} {% if element.deprecated %} <span style="color: red;"><strong> (DEPRECATED) </strong> {% endif %}
|
25
25
|
|
26
26
|
{%- if header -%}
|
27
27
|
{{header}}
|
@@ -40,6 +40,9 @@ _{{ element_description_line }}_
|
|
40
40
|
|
41
41
|
URI: {{ gen.uri_link(element) }}
|
42
42
|
|
43
|
+
{%- if element.alias %}
|
44
|
+
Alias: {{ element.alias }}
|
45
|
+
{% endif -%}
|
43
46
|
|
44
47
|
{% if schemaview.slot_parents(element.name) or schemaview.slot_children(element.name, mixins=False) %}
|
45
48
|
|
linkml/generators/jsonldgen.py
CHANGED
@@ -237,6 +237,7 @@ class JsonSchemaGenerator(Generator, LifecycleMixin):
|
|
237
237
|
valid_formats = ["json"]
|
238
238
|
uses_schemaloader = False
|
239
239
|
file_extension = "schema.json"
|
240
|
+
materialize_patterns: bool = False
|
240
241
|
|
241
242
|
# @deprecated("Use top_class")
|
242
243
|
topClass: Optional[str] = None
|
@@ -690,6 +691,10 @@ class JsonSchemaGenerator(Generator, LifecycleMixin):
|
|
690
691
|
return self.top_level_schema
|
691
692
|
|
692
693
|
def serialize(self, **kwargs) -> str:
|
694
|
+
if self.materialize_patterns:
|
695
|
+
logger.info("Materializing patterns in the schema before serialization")
|
696
|
+
self.schemaview.materialize_patterns()
|
697
|
+
|
693
698
|
return self.generate().to_json(sort_keys=True, indent=self.indent if self.indent > 0 else None)
|
694
699
|
|
695
700
|
|
@@ -752,6 +757,12 @@ Include LinkML Schema outside of imports mechanism. Helpful in including deprec
|
|
752
757
|
YAML, and including it when necessary but not by default (e.g. in documentation or for backwards compatibility)
|
753
758
|
""",
|
754
759
|
)
|
760
|
+
@click.option(
|
761
|
+
"--materialize-patterns/--no-materialize-patterns",
|
762
|
+
default=True, # Default set to True
|
763
|
+
show_default=True,
|
764
|
+
help="If set, patterns will be materialized in the generated JSON Schema.",
|
765
|
+
)
|
755
766
|
@click.version_option(__version__, "-V", "--version")
|
756
767
|
def cli(yamlfile, **kwargs):
|
757
768
|
"""Generate JSON Schema representation of a LinkML model"""
|
linkml/generators/linkmlgen.py
CHANGED
@@ -114,8 +114,16 @@ def cli(
|
|
114
114
|
):
|
115
115
|
# You can use the `--materialize` / `--no-materialize` for control
|
116
116
|
# over both attribute and pattern materialization.
|
117
|
-
|
118
|
-
|
117
|
+
|
118
|
+
# If the user did not explicitly specify materialize_attributes,
|
119
|
+
# fall back to the umbrella materialize flag.
|
120
|
+
if materialize_attributes is None:
|
121
|
+
materialize_attributes = materialize
|
122
|
+
|
123
|
+
# If the user did not explicitly specify materialize_patterns,
|
124
|
+
# fall back to the umbrella materialize flag.
|
125
|
+
if materialize_patterns is None:
|
126
|
+
materialize_patterns = materialize
|
119
127
|
|
120
128
|
gen = LinkmlGenerator(
|
121
129
|
yamlfile,
|
@@ -0,0 +1,133 @@
|
|
1
|
+
import importlib
|
2
|
+
import logging
|
3
|
+
import os
|
4
|
+
from dataclasses import dataclass, field
|
5
|
+
from pathlib import Path
|
6
|
+
from typing import List, Optional
|
7
|
+
|
8
|
+
import click
|
9
|
+
from jinja2 import Environment, FileSystemLoader
|
10
|
+
from linkml_runtime.linkml_model.meta import Element, SlotDefinition
|
11
|
+
from linkml_runtime.utils.schemaview import SchemaView
|
12
|
+
|
13
|
+
from linkml.generators.docgen import DocGenerator, customize_environment
|
14
|
+
from linkml.utils.generator import Generator, shared_arguments
|
15
|
+
|
16
|
+
|
17
|
+
@dataclass
|
18
|
+
class MermaidClassDiagramGenerator(Generator):
|
19
|
+
"""This generator creates Mermaid Class diagrams (https://mermaid.js.org/syntax/classDiagram.html)
|
20
|
+
for individual classes in a given LinkML schema and outputs them as Markdown files. It uses
|
21
|
+
a jinja template to render these class diagrams, which can be customized by the user and pointed
|
22
|
+
to using the `--template-file` option. If no template is provided, then the default template
|
23
|
+
file provided by LinkML and present at linkml/generators/docgen/class_diagram.md.jinja2 will be used.
|
24
|
+
The generator also has the option of specifying a certain set of classes for which you want the
|
25
|
+
class diagrams to be generated by using the `--classes` option.
|
26
|
+
"""
|
27
|
+
|
28
|
+
generatorname = os.path.basename(__file__)
|
29
|
+
generatorversion = "0.0.1"
|
30
|
+
valid_formats = ["markdown"]
|
31
|
+
uses_schemaloader = False
|
32
|
+
requires_metamodel = False
|
33
|
+
|
34
|
+
directory: Optional[str] = None # output directory with generated markdown files
|
35
|
+
template_file: Optional[str] = None # custom/default jinja template for class diagrams
|
36
|
+
classes: List[str] = field(default_factory=list) # optional subset of classes
|
37
|
+
|
38
|
+
def __post_init__(self):
|
39
|
+
super().__post_init__()
|
40
|
+
self.logger = logging.getLogger(__name__)
|
41
|
+
self.schemaview = SchemaView(self.schema, merge_imports=self.mergeimports)
|
42
|
+
|
43
|
+
# set the output directory
|
44
|
+
self.output_directory = Path(self.directory)
|
45
|
+
|
46
|
+
# set the template file
|
47
|
+
if not self.template_file:
|
48
|
+
package_dir = os.path.dirname(importlib.util.find_spec("linkml").origin)
|
49
|
+
# Default location of the template file
|
50
|
+
self.template_file = os.path.join(package_dir, "generators", "docgen", "class_diagram.md.jinja2")
|
51
|
+
|
52
|
+
def generate_class_diagrams(self):
|
53
|
+
"""Generate Mermaid class diagrams for the specified subset of classes
|
54
|
+
or all classes if none are specified.
|
55
|
+
"""
|
56
|
+
self.output_directory.mkdir(parents=True, exist_ok=True)
|
57
|
+
|
58
|
+
template_folder = os.path.dirname(self.template_file)
|
59
|
+
template_name = os.path.basename(self.template_file)
|
60
|
+
loader = FileSystemLoader(template_folder)
|
61
|
+
env = Environment(loader=loader)
|
62
|
+
customize_environment(env)
|
63
|
+
|
64
|
+
template = env.get_template(template_name)
|
65
|
+
|
66
|
+
all_classes = self.schemaview.all_classes()
|
67
|
+
|
68
|
+
if self.classes:
|
69
|
+
class_items = [(cn, all_classes[cn]) for cn in self.classes if cn in all_classes]
|
70
|
+
else:
|
71
|
+
class_items = list(all_classes.items())
|
72
|
+
|
73
|
+
for cn, class_def in class_items:
|
74
|
+
self.logger.info(f"Generating Mermaid diagram for class: {cn}")
|
75
|
+
rendered = template.render(gen=self, element=class_def, schemaview=self.schemaview)
|
76
|
+
outfile = self.output_directory / f"{cn}.md"
|
77
|
+
with open(outfile, "w", encoding="utf-8") as f:
|
78
|
+
f.write(rendered)
|
79
|
+
|
80
|
+
def cardinality(self, slot: SlotDefinition) -> str:
|
81
|
+
"""Reuses the cardinality logic from DocGenerator."""
|
82
|
+
return DocGenerator.cardinality(slot)
|
83
|
+
|
84
|
+
def mermaid_directive(self) -> str:
|
85
|
+
"""Provides the code fence directive (e.g., `mermaid` or `{mermaid}`)."""
|
86
|
+
return "mermaid"
|
87
|
+
|
88
|
+
def name(self, element: Element) -> str:
|
89
|
+
"""Returns the canonical name for an element."""
|
90
|
+
return element.name
|
91
|
+
|
92
|
+
def all_type_object_names(self):
|
93
|
+
return list(self.schemaview.all_types().keys())
|
94
|
+
|
95
|
+
|
96
|
+
@shared_arguments(MermaidClassDiagramGenerator)
|
97
|
+
@click.command()
|
98
|
+
@click.option(
|
99
|
+
"--template-file",
|
100
|
+
"-t",
|
101
|
+
type=click.Path(exists=True),
|
102
|
+
default=None,
|
103
|
+
help="Path to Jinja template for class diagrams.",
|
104
|
+
)
|
105
|
+
@click.option(
|
106
|
+
"--directory",
|
107
|
+
"-d",
|
108
|
+
type=click.Path(),
|
109
|
+
required=True,
|
110
|
+
help="Folder in which to write the Markdown files.",
|
111
|
+
)
|
112
|
+
@click.option(
|
113
|
+
"--classes",
|
114
|
+
"-c",
|
115
|
+
multiple=True,
|
116
|
+
help="One or more classes in the schema for which to generate diagrams. "
|
117
|
+
"If omitted, diagrams for all classes are generated.",
|
118
|
+
)
|
119
|
+
@click.version_option(click.__version__, "-V", "--version")
|
120
|
+
def cli(yamlfile, template_file, directory, classes, **args):
|
121
|
+
logging.basicConfig(level=logging.INFO)
|
122
|
+
gen = MermaidClassDiagramGenerator(
|
123
|
+
schema=yamlfile,
|
124
|
+
template_file=template_file,
|
125
|
+
directory=directory,
|
126
|
+
classes=list(classes), # convert tuple to a list
|
127
|
+
**args,
|
128
|
+
)
|
129
|
+
gen.generate_class_diagrams()
|
130
|
+
|
131
|
+
|
132
|
+
if __name__ == "__main__":
|
133
|
+
cli()
|
linkml/generators/owlgen.py
CHANGED
@@ -708,18 +708,10 @@ class OwlSchemaGenerator(Generator):
|
|
708
708
|
owl_exprs.append(eq_uri)
|
709
709
|
if element.equals_string_in:
|
710
710
|
equals_string_in = element.equals_string_in
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
self._datatype_restriction(XSD.string, [self._facet(XSD.pattern, s)]) for s in equals_string_in
|
716
|
-
]
|
717
|
-
union_expr = self._union_of(dt_exprs, owl_types={RDFS.Literal})
|
718
|
-
owl_exprs.append(union_expr)
|
719
|
-
owl_types.add(RDFS.Literal)
|
720
|
-
else:
|
721
|
-
eq_uris = [URIRef(self.schemaview.expand_curie(s)) for s in equals_string_in]
|
722
|
-
owl_exprs.append(self._union_of(eq_uris))
|
711
|
+
literals = [Literal(s) for s in equals_string_in]
|
712
|
+
one_of_expr = self._boolean_expression(literals, OWL.oneOf, owl_types={RDFS.Literal})
|
713
|
+
owl_exprs.append(one_of_expr)
|
714
|
+
owl_types.add(RDFS.Literal)
|
723
715
|
for constraint_prop, constraint_val in constraints.items():
|
724
716
|
if is_literal is not None and not is_literal:
|
725
717
|
# In LinkML, it is permissible to have a literal constraints on slots that refer to
|
@@ -1140,7 +1132,7 @@ class OwlSchemaGenerator(Generator):
|
|
1140
1132
|
|
1141
1133
|
def _boolean_expression(
|
1142
1134
|
self,
|
1143
|
-
exprs: List[Union[BNode, URIRef]],
|
1135
|
+
exprs: List[Union[BNode, URIRef, Literal]],
|
1144
1136
|
predicate: URIRef,
|
1145
1137
|
node: Optional[URIRef] = None,
|
1146
1138
|
owl_types: Set[OWL_TYPE] = None,
|
@@ -62,7 +62,8 @@ class ShaclIfAbsentProcessor(IfAbsentProcessor):
|
|
62
62
|
return Literal(f"{year}-{month}-{day}T{hour}:{minutes}:{seconds}", datatype=ShaclDataType.DATETIME.uri_ref)
|
63
63
|
|
64
64
|
def map_uri_or_curie_default_value(self, default_value: str, slot: SlotDefinition, cls: ClassDefinition):
|
65
|
-
|
65
|
+
uri = URIRef(self.schema_view.expand_curie(default_value))
|
66
|
+
return Literal(uri, datatype=ShaclDataType.URI.uri_ref)
|
66
67
|
|
67
68
|
def map_curie_default_value(self, default_value: str, slot: SlotDefinition, cls: ClassDefinition):
|
68
69
|
return Literal(default_value, datatype=ShaclDataType.CURIE.uri_ref)
|
linkml/generators/shaclgen.py
CHANGED
@@ -30,6 +30,8 @@ class ShaclGenerator(Generator):
|
|
30
30
|
"""parameterized suffix to be appended. No suffix per default."""
|
31
31
|
include_annotations: bool = False
|
32
32
|
"""True means include all class / slot / type annotations in generated Node or Property shapes"""
|
33
|
+
exclude_imports: bool = False
|
34
|
+
"""If True, elements from imported ontologies won't be included in the generator's output"""
|
33
35
|
generatorname = os.path.basename(__file__)
|
34
36
|
generatorversion = "0.0.1"
|
35
37
|
valid_formats = ["ttl"]
|
@@ -63,7 +65,7 @@ class ShaclGenerator(Generator):
|
|
63
65
|
for pfx in self.schema.prefixes.values():
|
64
66
|
g.bind(str(pfx.prefix_prefix), pfx.prefix_reference)
|
65
67
|
|
66
|
-
for c in sv.all_classes().values():
|
68
|
+
for c in sv.all_classes(imports=not self.exclude_imports).values():
|
67
69
|
|
68
70
|
def shape_pv(p, v):
|
69
71
|
if v is not None:
|
@@ -364,6 +366,13 @@ def add_simple_data_type(func: Callable, r: ElementName) -> None:
|
|
364
366
|
show_default=True,
|
365
367
|
help="Use --include-annotations to include annotations of slots, types, and classes in the generated SHACL shapes.",
|
366
368
|
)
|
369
|
+
@click.option(
|
370
|
+
"--exclude-imports/--include-imports",
|
371
|
+
default=False,
|
372
|
+
show_default=True,
|
373
|
+
help="Use --exclude-imports to exclude imported elements from the generated SHACL shapes. This is useful when "
|
374
|
+
"extending a substantial ontology to avoid large output files.",
|
375
|
+
)
|
367
376
|
@click.version_option(__version__, "-V", "--version")
|
368
377
|
def cli(yamlfile, **args):
|
369
378
|
"""Generate SHACL turtle from a LinkML model"""
|
linkml/generators/shexgen.py
CHANGED
linkml/generators/summarygen.py
CHANGED
linkml/generators/yamlgen.py
CHANGED
@@ -409,11 +409,13 @@ class LogicalModelTransformer(ModelTransformer):
|
|
409
409
|
target_class_name: ClassDefinitionName,
|
410
410
|
ancestors: List[ClassDefinitionName],
|
411
411
|
):
|
412
|
-
anc_classes = [self.schemaview.get_class(
|
412
|
+
anc_classes = [self.schemaview.get_class(ancestor) for ancestor in ancestors]
|
413
413
|
attributes: Dict[SlotDefinitionName, SlotDefinition] = {}
|
414
|
-
for
|
415
|
-
top_level_slots = [(s, target_schema.slots[s]) for s in
|
416
|
-
for slot_name, slot_expr in
|
414
|
+
for ancestor_class in anc_classes:
|
415
|
+
top_level_slots = [(s, target_schema.slots[s]) for s in ancestor_class.slots]
|
416
|
+
for slot_name, slot_expr in (
|
417
|
+
list(ancestor_class.attributes.items()) + list(ancestor_class.slot_usage.items()) + top_level_slots
|
418
|
+
):
|
417
419
|
if slot_name not in attributes:
|
418
420
|
attributes[slot_name] = SlotDefinition(slot_name)
|
419
421
|
sx = attributes[slot_name]
|
@@ -644,7 +646,7 @@ class LogicalModelTransformer(ModelTransformer):
|
|
644
646
|
if slot_expression.all_of:
|
645
647
|
exprs.append(logictools.And(*[self._as_logical_expression(subx) for subx in slot_expression.all_of]))
|
646
648
|
if slot_expression.exactly_one_of:
|
647
|
-
# TODO:
|
649
|
+
# TODO: disjointedness
|
648
650
|
exprs.append(logictools.Or(*[self._as_logical_expression(subx) for subx in slot_expression.exactly_one_of]))
|
649
651
|
if slot_expression.none_of:
|
650
652
|
exprs.append(
|
linkml/utils/generator.py
CHANGED
@@ -27,6 +27,7 @@ from typing import Callable, ClassVar, Dict, List, Mapping, Optional, Set, TextI
|
|
27
27
|
|
28
28
|
import click
|
29
29
|
from click import Argument, Command, Option
|
30
|
+
from jsonasobj2 import JsonObj
|
30
31
|
from linkml_runtime import SchemaView
|
31
32
|
from linkml_runtime.linkml_model.meta import (
|
32
33
|
ClassDefinition,
|
@@ -265,8 +266,16 @@ class Generator(metaclass=abc.ABCMeta):
|
|
265
266
|
def _init_namespaces(self):
|
266
267
|
if self.namespaces is None:
|
267
268
|
self.namespaces = Namespaces()
|
268
|
-
|
269
|
-
self.
|
269
|
+
if isinstance(self.schema.prefixes, dict):
|
270
|
+
for key, value in self.schema.prefixes.items():
|
271
|
+
self.namespaces[key] = value
|
272
|
+
elif isinstance(self.schema.prefixes, JsonObj):
|
273
|
+
prefixes = vars(self.schema.prefixes)
|
274
|
+
for key, value in prefixes.items():
|
275
|
+
self.namespaces[key] = value
|
276
|
+
else:
|
277
|
+
for prefix in self.schema.prefixes.values():
|
278
|
+
self.namespaces[prefix.prefix_prefix] = prefix.prefix_reference
|
270
279
|
|
271
280
|
def serialize(self, **kwargs) -> str:
|
272
281
|
"""
|
@@ -15,16 +15,16 @@ linkml/generators/common/template.py,sha256=bjcSNiC85MYl9oGhk0ZpqwZpRxxy_NqxG8XB
|
|
15
15
|
linkml/generators/common/type_designators.py,sha256=lgVcIRJJ-yCvVGeP9U_gQZpm77UmJBQo9Bh3lGJITno,1956
|
16
16
|
linkml/generators/csvgen.py,sha256=O20K3IuDxomGJAyNFJmm1_HbPyl6xUK0l-aKY0A3KcM,3253
|
17
17
|
linkml/generators/dbmlgen.py,sha256=IrtY65iFdXg4wHBP9vHQeV20HUOUB1XlggPtmt_YvGM,5466
|
18
|
-
linkml/generators/docgen/class.md.jinja2,sha256
|
18
|
+
linkml/generators/docgen/class.md.jinja2,sha256=LqQSKfH-wWR1ELTbhuEK5QFypU__uqwLmbGvS9rZsKo,3602
|
19
19
|
linkml/generators/docgen/class_diagram.md.jinja2,sha256=gzskx4hOpU_s6BqOXdYZ9DwKxuClnsEgDzPurm30PeY,3469
|
20
20
|
linkml/generators/docgen/common_metadata.md.jinja2,sha256=gy9J8rghBfKDKimwtHj_XuHY4PJRRYHLXVlBHqWrUzU,1604
|
21
|
-
linkml/generators/docgen/enum.md.jinja2,sha256=
|
21
|
+
linkml/generators/docgen/enum.md.jinja2,sha256=BCi4PUamCjszM17yrg2KNltR_JfrBjNdH87S5uz9DtY,1112
|
22
22
|
linkml/generators/docgen/index.md.jinja2,sha256=suXRgJydHrxcMm3quXukaKkThtdzYA9i7BTuMAVKOP0,1502
|
23
23
|
linkml/generators/docgen/index.tex.jinja2,sha256=Go_EA-_N4JUpbOYbk3OY11mz5yV70VF2l2sMtgIPWw4,501
|
24
|
-
linkml/generators/docgen/schema.md.jinja2,sha256=
|
25
|
-
linkml/generators/docgen/slot.md.jinja2,sha256=
|
26
|
-
linkml/generators/docgen/subset.md.jinja2,sha256=
|
27
|
-
linkml/generators/docgen/type.md.jinja2,sha256=
|
24
|
+
linkml/generators/docgen/schema.md.jinja2,sha256=b52xmnlTheigxKgP_2Sq1nnQUEW6XNi_ScPnqxptjps,167
|
25
|
+
linkml/generators/docgen/slot.md.jinja2,sha256=_0xgRUlSYJMpxwGcboFoCAcELFDEzzXSTwBduPvwY-Q,3501
|
26
|
+
linkml/generators/docgen/subset.md.jinja2,sha256=ttcsDa2fLYOU1_tDzHOyEsplhc1UHY_cy1_apQZyk6A,2803
|
27
|
+
linkml/generators/docgen/type.md.jinja2,sha256=K0f7x5b3Nfjm1W-rDI4OHj2sU-RNm9hP1nuRJjHHJMU,733
|
28
28
|
linkml/generators/docgen.py,sha256=iDSu2LsZ7MStrzXdxFwK-oBlVevq2MwBc1n5WzHzTyw,38996
|
29
29
|
linkml/generators/dotgen.py,sha256=vjHveFtKBItHRkowi1I4FHffcn4u4wLpBydYgVxB-vE,5028
|
30
30
|
linkml/generators/erdiagramgen.py,sha256=BteqzyVgKeUXfdCq3VHiiJMbuMrsn_D08IoNq8QMBcY,11462
|
@@ -36,14 +36,15 @@ linkml/generators/javagen/example_template.java.jinja2,sha256=ec4CVTv_0zS7V5Y-1E
|
|
36
36
|
linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMltvrYyVeut7l2Q-tzK7AOiVmWs,1729
|
37
37
|
linkml/generators/javagen.py,sha256=BTAXgvOOvRa3AOfaaiVFyuyaqg4XFR_JbO6_7tT_AnQ,5335
|
38
38
|
linkml/generators/jsonldcontextgen.py,sha256=LpuTtzU4H6BH_615E4Fbt0QBCEopvqRMVOMwDva1kGk,8958
|
39
|
-
linkml/generators/jsonldgen.py,sha256=
|
40
|
-
linkml/generators/jsonschemagen.py,sha256=
|
39
|
+
linkml/generators/jsonldgen.py,sha256=d94TEPu9zeHDZqPU6cSaiQiJnv0kc_AXkXahi1xOBZ8,7789
|
40
|
+
linkml/generators/jsonschemagen.py,sha256=8luthDkItlZ5bU4Lxt9b7tZx0HTIP4FZEZ5C2nwMMqA,30867
|
41
41
|
linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
|
-
linkml/generators/linkmlgen.py,sha256=
|
42
|
+
linkml/generators/linkmlgen.py,sha256=xYgS4i-Xo5Z3t9gqEdqxHKv5KGUxOerpy8M9kX6WeuI,4225
|
43
43
|
linkml/generators/markdowngen.py,sha256=0gjMPJ0Ycm9se4Y4cyqjbTntGYqRRZu4RL-9Qf5n4lk,34464
|
44
|
+
linkml/generators/mermaidclassdiagramgen.py,sha256=NzRDXmy2qMOUHmvrcd7LrKZiVR1J___pLRhQpGstGyA,4946
|
44
45
|
linkml/generators/namespacegen.py,sha256=C4p9LSwsnDqf6sv-wG5l0VQniWFJ1HA1hRXJBDOg3pM,6467
|
45
46
|
linkml/generators/oocodegen.py,sha256=aBJgy-S-8FL5cW9p4hf986iSTxXwvkM7ZajKlari4us,7820
|
46
|
-
linkml/generators/owlgen.py,sha256=
|
47
|
+
linkml/generators/owlgen.py,sha256=FxfEpJSybw11qEjcE3ozVvFuu_eKp1qhQmFOK566CGg,58086
|
47
48
|
linkml/generators/plantumlgen.py,sha256=G12fBFh8qqHuXTtGEndcQJzAtarWJFE7qcUaMXLTJrE,15614
|
48
49
|
linkml/generators/prefixmapgen.py,sha256=oISFtSt_s5OWx65tYasWk0bUJIDIU1MjnsWqfBE7ZQA,4257
|
49
50
|
linkml/generators/projectgen.py,sha256=XQdOjAJroroT2JNNPbrUauv2DTJ3tfJoFNYGSLKky24,9791
|
@@ -70,9 +71,9 @@ linkml/generators/pythongen.py,sha256=-W8ZgvgDP-Hm4Q9weQiB7xtXMJyadtyfZ6BHC1CmCl
|
|
70
71
|
linkml/generators/rdfgen.py,sha256=OT8oS8MPUVf5UK3OKvRWgAh9iQiWwdyWJSA69PncOw4,2969
|
71
72
|
linkml/generators/shacl/__init__.py,sha256=KgMOyESGTdKk2Vhx9uuUYgEJPuJQ-iT1vDQVIMoiXCM,58
|
72
73
|
linkml/generators/shacl/shacl_data_type.py,sha256=gX3Y2KyTVPwMyef0cJMTEpU9h0oH-H0ThVDORdNW170,1828
|
73
|
-
linkml/generators/shacl/shacl_ifabsent_processor.py,sha256=
|
74
|
-
linkml/generators/shaclgen.py,sha256=
|
75
|
-
linkml/generators/shexgen.py,sha256
|
74
|
+
linkml/generators/shacl/shacl_ifabsent_processor.py,sha256=usmqdCvAPiivHzXWkNzW0G_KOaAG8bHdTCkEH2pI0b4,4364
|
75
|
+
linkml/generators/shaclgen.py,sha256=Gvg6Tm7S1FMQxPZ7fJErMrJ3mUbi5rj1yYPTiuuDf-Y,15283
|
76
|
+
linkml/generators/shexgen.py,sha256=cr4x4ORZlre6XlToWKho5F4XjFwOlzR1SpOpbeOvRA4,9939
|
76
77
|
linkml/generators/sparqlgen.py,sha256=2DaFrFIeMI7QQfiPn79J8ERILlkJALrabDnKK7usDJQ,6188
|
77
78
|
linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
|
78
79
|
linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
|
@@ -81,10 +82,10 @@ linkml/generators/sqlalchemygen.py,sha256=MYzEkg8BAgFChiRNqOZK9aMqH-aNGa6-CnpZdb
|
|
81
82
|
linkml/generators/sqltablegen.py,sha256=BaWAuvwVHsXVt85GYxzH5_UL3ZeqRI9SojlvMmh4KkE,12395
|
82
83
|
linkml/generators/sssomgen.py,sha256=zrZy0WL9fF5bk-XAcB-MZYZkhHhqVRHt2rGBUtfqnLY,6891
|
83
84
|
linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
|
84
|
-
linkml/generators/summarygen.py,sha256=
|
85
|
+
linkml/generators/summarygen.py,sha256=abNd39Z-Kn3FX2fjXLeCqvXvFunpqM7UFPimtiCB2p0,3081
|
85
86
|
linkml/generators/terminusdbgen.py,sha256=ItJ-HTMkkX22Ex1-UjJZmtEtE2fn6UdjAxDtn20RXV8,4713
|
86
87
|
linkml/generators/typescriptgen.py,sha256=xxi7LzWNjbRFjjC6AR7NO4tfXx5CVCWNJ1urSiu5FNo,8876
|
87
|
-
linkml/generators/yamlgen.py,sha256=
|
88
|
+
linkml/generators/yamlgen.py,sha256=PWexYoR3wHRoAUk6zK67fRYjBF6sAmX_iGlOAT0PJq0,1623
|
88
89
|
linkml/generators/yumlgen.py,sha256=Bg1MGlhCCQoswB19mFKh8xB0UcL9MQGHlUrAVGZSWkc,12208
|
89
90
|
linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
91
|
linkml/linter/cli.py,sha256=tXJ3vwjohCnj4EApEJXvXUSI3NLJ3fI3u6tJVxbgLQg,4505
|
@@ -105,7 +106,7 @@ linkml/linter/rules.py,sha256=NFCSBnEU_D0V9tqYbJvzhJlxhtyNuyqRzt4nrTc7xeA,11621
|
|
105
106
|
linkml/reporting/__init__.py,sha256=Jo0V_nyEcnWhMukMW-bqW9dlbgCfaRlWm3CO-XzgU84,92
|
106
107
|
linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,8622
|
107
108
|
linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
|
-
linkml/transformers/logical_model_transformer.py,sha256=
|
109
|
+
linkml/transformers/logical_model_transformer.py,sha256=5p6y41bTt3nJULznqINb8BJqPeCYgHGPuv8qQRycJ_E,29923
|
109
110
|
linkml/transformers/model_transformer.py,sha256=tK_MpRDI-q2qfe8KHT6qJHP8ZruKjYx1FcM-Fnjse-E,678
|
110
111
|
linkml/transformers/relmodel_transformer.py,sha256=2AwLVqto1to_9IaTjicweFVIPa8dcNPKK0EJWdHfWMo,19675
|
111
112
|
linkml/transformers/schema_renamer.py,sha256=DYRbgL9j41M9FdbHYLY3u4YIdDM98laD3cv_lHcgWHQ,5275
|
@@ -117,7 +118,7 @@ linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA
|
|
117
118
|
linkml/utils/deprecation.py,sha256=SlAS6L27I65fkaSape2uC49CFgeOTGzUwwERZMp134E,8484
|
118
119
|
linkml/utils/exceptions.py,sha256=3S6lf5WAUgVvjPRaES597_YjUjbbJ5KqjKjpjcaRLoU,217
|
119
120
|
linkml/utils/execute_tutorial.py,sha256=X2sdb4fBBnBmNKg9k5_fhWeY9DXCbYEb4NXUCPv4TJ0,7057
|
120
|
-
linkml/utils/generator.py,sha256=
|
121
|
+
linkml/utils/generator.py,sha256=w90ASqaXZnu4aezf8YpFfH7khU5HHvJa5Qqfk50Pd6c,39572
|
121
122
|
linkml/utils/helpers.py,sha256=IoLaG8XE8WOorOFQF-XKfaWKSEoVDShC2E9Rd1596uo,3364
|
122
123
|
linkml/utils/logictools.py,sha256=BGtcoqr_Rsu08Ywa6lNiL881uZzQmNWk1p4FEIVKYe0,23641
|
123
124
|
linkml/utils/mergeutils.py,sha256=FdcSiYUmPkxxwnEv_43SR3BN6lCUeEkNndRpxJQWE2c,9080
|
@@ -153,9 +154,9 @@ linkml/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
153
154
|
linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
154
155
|
linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
|
155
156
|
linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
|
156
|
-
linkml/workspaces/example_runner.py,sha256=
|
157
|
-
linkml-1.
|
158
|
-
linkml-1.
|
159
|
-
linkml-1.
|
160
|
-
linkml-1.
|
161
|
-
linkml-1.
|
157
|
+
linkml/workspaces/example_runner.py,sha256=oViQ5gT8NkFTZbg0dW5LAOSAOAfJK8_QmKdYwzzGhgQ,12919
|
158
|
+
linkml-1.9.0rc1.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
|
159
|
+
linkml-1.9.0rc1.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
160
|
+
linkml-1.9.0rc1.dist-info/entry_points.txt,sha256=CtvrM-5f3NuMEBTXONEnIo5UUJegBRWJvXUmrYfdIfM,2194
|
161
|
+
linkml-1.9.0rc1.dist-info/METADATA,sha256=U1wGvCcI0OTj9vrh7K-P_Avet2QMD1jGe1IA_jKCuuA,3877
|
162
|
+
linkml-1.9.0rc1.dist-info/RECORD,,
|
@@ -14,6 +14,7 @@ gen-jsonld=linkml.generators.jsonldgen:cli
|
|
14
14
|
gen-jsonld-context=linkml.generators.jsonldcontextgen:cli
|
15
15
|
gen-linkml=linkml.generators.linkmlgen:cli
|
16
16
|
gen-markdown=linkml.generators.markdowngen:cli
|
17
|
+
gen-mermaid-class-diagram=linkml.generators.mermaidclassdiagramgen:cli
|
17
18
|
gen-namespaces=linkml.generators.namespacegen:cli
|
18
19
|
gen-owl=linkml.generators.owlgen:cli
|
19
20
|
gen-plantuml=linkml.generators.plantumlgen:cli
|
File without changes
|
File without changes
|