linkml 1.6.9__py3-none-any.whl → 1.7.0rc2__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.
@@ -4,6 +4,7 @@ representation such as JsonSchema
4
4
  """
5
5
 
6
6
  from linkml.generators.javagen import JavaGenerator
7
+ from linkml.generators.jsonldcontextgen import ContextGenerator
7
8
  from linkml.generators.jsonschemagen import JsonSchemaGenerator
8
9
  from linkml.generators.owlgen import OwlSchemaGenerator
9
10
  from linkml.generators.pydanticgen import PydanticGenerator
@@ -41,6 +42,7 @@ __all__ = [
41
42
  "PydanticGenerator",
42
43
  "PythonGenerator",
43
44
  "JavaGenerator",
45
+ "ContextGenerator",
44
46
  "JsonSchemaGenerator",
45
47
  "ShaclGenerator",
46
48
  "ShExGenerator",
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Generate CSVs
3
3
  """
4
+
4
5
  import os
5
6
  import sys
6
7
  from csv import DictWriter
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Generate dotfiles
3
3
  """
4
+
4
5
  import os
5
6
  from dataclasses import dataclass
6
7
  from typing import List, Optional
@@ -6,6 +6,7 @@ These can be converted to solr schema-xml, and used in amigo-bbop tools
6
6
  See the golr-views directory in this repo for examples
7
7
 
8
8
  """
9
+
9
10
  import os
10
11
  from dataclasses import dataclass
11
12
  from typing import List, Optional
@@ -70,6 +70,7 @@ class JavaGenerator(OOCodeGenerator):
70
70
  generatorname = os.path.basename(__file__)
71
71
  generatorversion = "0.0.1"
72
72
  valid_formats = ["java"]
73
+ file_extension = "java"
73
74
 
74
75
  # ObjectVars
75
76
  generate_records: bool = False
@@ -2,6 +2,7 @@
2
2
  Generate JSON-LD contexts
3
3
 
4
4
  """
5
+
5
6
  import os
6
7
  import re
7
8
  from dataclasses import dataclass, field
@@ -37,6 +38,7 @@ class ContextGenerator(Generator):
37
38
  visit_all_class_slots = False
38
39
  uses_schemaloader = True
39
40
  requires_metamodel = True
41
+ file_extension = "context.jsonld"
40
42
 
41
43
  # ObjectVars
42
44
  emit_prefixes: Set[str] = field(default_factory=lambda: set())
@@ -1,6 +1,7 @@
1
1
  """ Generate JSONld
2
2
 
3
3
  """
4
+
4
5
  import os
5
6
  from copy import deepcopy
6
7
  from dataclasses import dataclass
@@ -99,13 +100,15 @@ class JSONLDGenerator(Generator):
99
100
  return (
100
101
  ClassDefinitionName(camelcase(node))
101
102
  if node in self.schema.classes
102
- else SlotDefinitionName(underscore(node))
103
- if node in self.schema.slots
104
- else SubsetDefinitionName(camelcase(node))
105
- if node in self.schema.subsets
106
- else TypeDefinitionName(underscore(node))
107
- if node in self.schema.types
108
- else None
103
+ else (
104
+ SlotDefinitionName(underscore(node))
105
+ if node in self.schema.slots
106
+ else (
107
+ SubsetDefinitionName(camelcase(node))
108
+ if node in self.schema.subsets
109
+ else TypeDefinitionName(underscore(node)) if node in self.schema.types else None
110
+ )
111
+ )
109
112
  )
110
113
  return None
111
114
 
@@ -193,6 +193,9 @@ class JsonSchemaGenerator(Generator):
193
193
  Note that if the range of a slot has a type designator, descendants will always be included.
194
194
  """
195
195
 
196
+ title_from: str = "name"
197
+ """The slot from which to populate JSONSchema title annotation."""
198
+
196
199
  top_level_schema: JsonSchema = None
197
200
 
198
201
  def __post_init__(self):
@@ -215,7 +218,7 @@ class JsonSchemaGenerator(Generator):
215
218
  "$id": self.schema.id,
216
219
  "metamodel_version": metamodel_version,
217
220
  "version": self.schema.version if self.schema.version else None,
218
- "title": self.schema.name,
221
+ "title": self.schema.title if self.title_from == "title" and self.schema.title else self.schema.name,
219
222
  "type": "object",
220
223
  "additionalProperties": self.not_closed,
221
224
  }
@@ -238,6 +241,8 @@ class JsonSchemaGenerator(Generator):
238
241
  "description": be(cls.description),
239
242
  }
240
243
  )
244
+ if self.title_from == "title" and cls.title:
245
+ class_subschema["title"] = cls.title
241
246
 
242
247
  for slot_definition in self.schemaview.class_induced_slots(cls.name):
243
248
  self.handle_class_slot(subschema=class_subschema, cls=cls, slot=slot_definition)
@@ -364,6 +369,9 @@ class JsonSchemaGenerator(Generator):
364
369
  "description": be(enum.description),
365
370
  }
366
371
  )
372
+ if self.title_from == "title" and enum.title:
373
+ enum_schema["title"] = enum.title
374
+
367
375
  if permissible_values_texts:
368
376
  enum_schema["enum"] = permissible_values_texts
369
377
  self.top_level_schema.add_def(enum.name, enum_schema)
@@ -480,6 +488,8 @@ class JsonSchemaGenerator(Generator):
480
488
  prop = JsonSchema.array_of(prop)
481
489
 
482
490
  prop.add_keyword("description", slot.description)
491
+ if self.title_from == "title" and slot.title:
492
+ prop.add_keyword("title", slot.title)
483
493
 
484
494
  own_constraints = self.get_value_constraints_for_slot(slot)
485
495
 
@@ -619,6 +629,14 @@ If this is a positive number the resulting JSON will be pretty-printed with that
619
629
  disable pretty-printing and return the most compact JSON representation
620
630
  """,
621
631
  )
632
+ @click.option(
633
+ "--title-from",
634
+ type=click.Choice(["name", "title"], case_sensitive=False),
635
+ default="name",
636
+ help="""
637
+ Specify from which slot are JSON Schema 'title' annotations generated.
638
+ """,
639
+ )
622
640
  @click.version_option(__version__, "-V", "--version")
623
641
  def cli(yamlfile, **kwargs):
624
642
  """Generate JSON Schema representation of a LinkML model"""
@@ -456,11 +456,11 @@ class MarkdownGenerator(Generator):
456
456
  filename = (
457
457
  self.formatted_element_name(obj)
458
458
  if isinstance(obj, ClassDefinition)
459
- else underscore(obj.name)
460
- if isinstance(obj, SlotDefinition)
461
- else underscore(obj.name)
462
- if isinstance(obj, EnumDefinition)
463
- else camelcase(obj.name)
459
+ else (
460
+ underscore(obj.name)
461
+ if isinstance(obj, SlotDefinition)
462
+ else underscore(obj.name) if isinstance(obj, EnumDefinition) else camelcase(obj.name)
463
+ )
464
464
  )
465
465
  subdir = "/types" if isinstance(obj, TypeDefinition) and not self.no_types_dir else ""
466
466
  return f"{self.directory}{subdir}/{filename}.md"
@@ -1,4 +1,5 @@
1
1
  """Generate OWL ontology representation of a LinkML schema."""
2
+
2
3
  import logging
3
4
  import os
4
5
  from collections import defaultdict
@@ -1219,6 +1220,12 @@ class OwlSchemaGenerator(Generator):
1219
1220
  show_default=True,
1220
1221
  help="If true, then mixins are represented as existential expressions",
1221
1222
  )
1223
+ @click.option(
1224
+ "--use-native-uris/--no-use-native-uris",
1225
+ default=True,
1226
+ show_default=True,
1227
+ help="Use model URIs rather than class/slot URIs",
1228
+ )
1222
1229
  @click.version_option(__version__, "-V", "--version")
1223
1230
  def cli(yamlfile, metadata_profile: str, **kwargs):
1224
1231
  """Generate an OWL representation of a LinkML model
@@ -1238,7 +1245,8 @@ def cli(yamlfile, metadata_profile: str, **kwargs):
1238
1245
  metadata_profiles = [MetadataProfile(metadata_profile)]
1239
1246
  else:
1240
1247
  metadata_profiles = [MetadataProfile.linkml]
1241
- print(OwlSchemaGenerator(yamlfile, metadata_profiles=metadata_profiles, **kwargs).serialize(**kwargs))
1248
+ gen = OwlSchemaGenerator(yamlfile, metadata_profiles=metadata_profiles, **kwargs)
1249
+ print(gen.serialize(**kwargs))
1242
1250
 
1243
1251
 
1244
1252
  if __name__ == "__main__":
@@ -3,6 +3,7 @@
3
3
  https://plantuml.com/
4
4
 
5
5
  """
6
+
6
7
  import base64
7
8
  import os
8
9
  import zlib
@@ -2,6 +2,7 @@
2
2
  Generate JSON-LD contexts
3
3
 
4
4
  """
5
+
5
6
  import csv
6
7
  import os
7
8
  from dataclasses import dataclass, field
@@ -4,6 +4,7 @@ YAML Schema to RDF Generator
4
4
  Generate a JSON LD representation of the model
5
5
 
6
6
  """
7
+
7
8
  import os
8
9
  import urllib.parse as urlparse
9
10
  from dataclasses import dataclass, field
@@ -116,6 +116,7 @@ class ShaclGenerator(Generator):
116
116
  prop_pv_literal(SH.minCount, 1)
117
117
  prop_pv_literal(SH.minInclusive, s.minimum_value)
118
118
  prop_pv_literal(SH.maxInclusive, s.maximum_value)
119
+ prop_pv_literal(SH.hasValue, s.equals_number)
119
120
  r = s.range
120
121
  if r in sv.all_classes():
121
122
  range_ref = sv.get_uri(r, expand=True)
@@ -1,6 +1,7 @@
1
1
  """Generate ShEx definition of a model
2
2
 
3
3
  """
4
+
4
5
  import os
5
6
  import urllib.parse as urlparse
6
7
  from dataclasses import dataclass, field
@@ -1,4 +1,5 @@
1
1
  """DEPRECATED: Use SQLTableGenerator instead"""
2
+
2
3
  import logging
3
4
  import os
4
5
  from contextlib import redirect_stdout
@@ -1,6 +1,7 @@
1
1
  """Generate Summary Spreadsheets
2
2
 
3
3
  """
4
+
4
5
  import os
5
6
  import sys
6
7
  from csv import DictWriter
@@ -1,6 +1,7 @@
1
1
  """Validate linkml input and optionally emit completely resolved biolink yaml output
2
2
 
3
3
  """
4
+
4
5
  import os
5
6
  from dataclasses import dataclass, field
6
7
 
@@ -3,6 +3,7 @@
3
3
  https://yuml.me/diagram/scruffy/class/samples
4
4
 
5
5
  """
6
+
6
7
  import os
7
8
  from dataclasses import dataclass, field
8
9
  from typing import Callable, List, Optional, Set, cast
@@ -12,6 +12,7 @@ of constraints in both classes hold.
12
12
  These logical constraints are then simplified by translating to disjunctive normal form,
13
13
  and applying simplification rules.
14
14
  """
15
+
15
16
  import logging
16
17
  from copy import deepcopy
17
18
  from dataclasses import dataclass
linkml/utils/generator.py CHANGED
@@ -14,6 +14,7 @@ New generators should always using the latter approach
14
14
  See: https://github.com/linkml/linkml/issues/923
15
15
 
16
16
  """
17
+
17
18
  import abc
18
19
  import logging
19
20
  import os
@@ -453,9 +454,11 @@ class Generator(metaclass=abc.ABCMeta):
453
454
  return (
454
455
  None
455
456
  if element.is_a is None
456
- else self.schema.classes[element.is_a]
457
- if isinstance(element, ClassDefinition)
458
- else self.schema.slots[element.is_a]
457
+ else (
458
+ self.schema.classes[element.is_a]
459
+ if isinstance(element, ClassDefinition)
460
+ else self.schema.slots[element.is_a]
461
+ )
459
462
  )
460
463
 
461
464
  def ancestors(self, element: Union[ClassDefinition, SlotDefinition]) -> List[ElementName]:
@@ -904,7 +907,7 @@ def shared_arguments(g: Type[Generator]) -> Callable[[Command], Command]:
904
907
  ("--useuris/--metauris",),
905
908
  default=True,
906
909
  show_default=True,
907
- help="Include metadata in output",
910
+ help="Use class and slot URIs over model uris",
908
911
  )
909
912
  )
910
913
  f.params.append(Option(("--importmap", "-im"), type=click.File(), help="Import mapping file"))
@@ -113,7 +113,13 @@ default_library: List[
113
113
 
114
114
  def isabsent_match(
115
115
  txt: Text,
116
- ) -> Optional[Tuple[Match[str], bool, Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str],]]:
116
+ ) -> Optional[
117
+ Tuple[
118
+ Match[str],
119
+ bool,
120
+ Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str],
121
+ ]
122
+ ]:
117
123
  txt = str(txt)
118
124
  for pattern, postinit, f in default_library:
119
125
  m = re.match(pattern + "$", txt)
@@ -120,13 +120,11 @@ class SchemaSynopsis:
120
120
  self.add_ref(
121
121
  SlotType,
122
122
  k,
123
- ClassType
124
- if v.range in self.schema.classes
125
- else EnumType
126
- if v.range in self.schema.enums
127
- else TypeType
128
- if v.range in self.schema.types
129
- else None,
123
+ (
124
+ ClassType
125
+ if v.range in self.schema.classes
126
+ else EnumType if v.range in self.schema.enums else TypeType if v.range in self.schema.types else None
127
+ ),
130
128
  v.range,
131
129
  )
132
130
 
@@ -3,6 +3,7 @@ The ``linkml.validator`` package contains a new LinkML validation framework that
3
3
  than the ``linkml.validators`` package. While that package still exists, it may become deprecated
4
4
  in the future.
5
5
  """
6
+
6
7
  import os
7
8
  from pathlib import Path
8
9
  from typing import Any, Optional, Union
@@ -4,6 +4,7 @@ instance from a source. Instances of these classes are passed to
4
4
  :meth:`linkml.validator.Validator.validate_source` and
5
5
  :meth:`linkml.validator.Validator.iter_results_from_source`
6
6
  """
7
+
7
8
  import os
8
9
  from typing import Union
9
10
 
@@ -0,0 +1,93 @@
1
+ import os
2
+ from typing import Any, Iterator, Optional
3
+
4
+ import rdflib
5
+ from linkml_runtime.dumpers import rdflib_dumper
6
+
7
+ from linkml.generators import PythonGenerator, ShaclGenerator
8
+ from linkml.validator.plugins.validation_plugin import ValidationPlugin
9
+ from linkml.validator.report import Severity, ValidationResult
10
+ from linkml.validator.validation_context import ValidationContext
11
+
12
+ SH = rdflib.Namespace("http://www.w3.org/ns/shacl#")
13
+
14
+
15
+ class ShaclValidationPlugin(ValidationPlugin):
16
+ """A validation plugin which validates instances using SHACL.
17
+
18
+ :param shacl_path: If provided, SHACL will not be generated from the schema,
19
+ instead it will be read from this path.
20
+ :param closed: If ``True``, additional properties are not allowed on instances.
21
+ Defaults to ``False``.
22
+ :param raise_on_conversion_error: If ``True``, raise an exception if the instance
23
+ cannot be converted to a Python class. Otherwise, treat as a ValidationError.
24
+ Defaults to ``False``.
25
+ """
26
+
27
+ def __init__(
28
+ self,
29
+ *,
30
+ closed: bool = False,
31
+ shacl_path: Optional[os.PathLike] = None,
32
+ raise_on_conversion_error: bool = False,
33
+ ) -> None:
34
+ self.closed = closed
35
+ self.shacl_path = shacl_path
36
+ self.raise_on_conversion_error = raise_on_conversion_error
37
+
38
+ def _shacl_graph(self, context: ValidationContext) -> Optional[rdflib.Graph]:
39
+ g = rdflib.Graph()
40
+ if self.shacl_path:
41
+ g.parse(str(self.shacl_path))
42
+ else:
43
+ gen = ShaclGenerator(context._schema)
44
+ g = gen.as_graph()
45
+ return g
46
+
47
+ def process(self, instance: Any, context: ValidationContext) -> Iterator[ValidationResult]:
48
+ """Perform JSON Schema validation on the provided instance
49
+
50
+ :param instance: The instance to validate
51
+ :param context: The validation context which provides a JSON Schema artifact
52
+ :return: Iterator over validation results
53
+ :rtype: Iterator[ValidationResult]
54
+ """
55
+ import pyshacl
56
+
57
+ shacl_graph = self._shacl_graph(context)
58
+ if isinstance(instance, dict):
59
+ pygen = PythonGenerator(context._schema)
60
+ mod = pygen.compile_module()
61
+ py_cls = getattr(mod, context._target_class)
62
+ if self.raise_on_conversion_error:
63
+ instance = py_cls(**instance)
64
+ else:
65
+ try:
66
+ instance = py_cls(**instance)
67
+ except (ValueError, TypeError):
68
+ yield ValidationResult(
69
+ type="shacl validation",
70
+ severity=Severity.ERROR,
71
+ instance=instance,
72
+ instantiates=context.target_class,
73
+ message="failed at class instantiation stage",
74
+ )
75
+ return
76
+ data_graph = rdflib_dumper.as_rdf_graph(instance, schemaview=context.schema_view)
77
+ validator = pyshacl.Validator(
78
+ shacl_graph=shacl_graph,
79
+ data_graph=data_graph,
80
+ inference="rdfs",
81
+ )
82
+ conforms, report_graph, report_text = validator.run()
83
+ for s, _, o in report_graph.triples((None, SH.result, None)):
84
+ msg = ""
85
+ for p, o2 in report_graph.predicate_objects(o):
86
+ msg += f"{p} {o2}\n"
87
+ yield ValidationResult(
88
+ type="shacl validation",
89
+ severity=Severity.ERROR,
90
+ instance=instance,
91
+ instantiates=context.target_class,
92
+ message=f"{msg}",
93
+ )
@@ -29,7 +29,7 @@ class Validator:
29
29
  schema: Union[str, dict, TextIO, Path, SchemaDefinition],
30
30
  validation_plugins: Optional[List[ValidationPlugin]] = None,
31
31
  *,
32
- strict: bool = False
32
+ strict: bool = False,
33
33
  ) -> None:
34
34
  if isinstance(schema, Path):
35
35
  schema = str(schema)
@@ -1,6 +1,7 @@
1
1
  """Iterate through all examples in a folder testing them for validity.
2
2
 
3
3
  """
4
+
4
5
  import glob
5
6
  import json
6
7
  import logging
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: linkml
3
- Version: 1.6.9
3
+ Version: 1.7.0rc2
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
@@ -31,7 +31,7 @@ Requires-Dist: jinja2 (>=3.1.0)
31
31
  Requires-Dist: jsonasobj2 (>=1.0.3,<2.0.0)
32
32
  Requires-Dist: jsonschema[format] (>=4.0.0)
33
33
  Requires-Dist: linkml-dataops
34
- Requires-Dist: linkml-runtime (>=1.6.0)
34
+ Requires-Dist: linkml-runtime (>=1.7.0rc1)
35
35
  Requires-Dist: openpyxl
36
36
  Requires-Dist: parse
37
37
  Requires-Dist: prefixcommons (>=0.1.7)
@@ -2,10 +2,10 @@ linkml/__init__.py,sha256=Ofc1RAB9gfvvRqinXih4eExeeSi2hTGhwTHbIGr5gLE,3215
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=qa22iTeBrcds6ndst_iTPVWLQtBF6NGyhVngBhbhIpc,1350
5
+ linkml/generators/__init__.py,sha256=0KxTxNpQBnq4JTsDtwXQ1RYsRdmxfkegVBJKupti4Jg,1438
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
- linkml/generators/csvgen.py,sha256=h-Mj-uNrzuETx_G3dW6eFbk1jj0NHSwqbehqR5tA6PM,2955
8
+ linkml/generators/csvgen.py,sha256=X0f4qKXahSDtkzM9Y47rwWqdseP1O6PTZ_WKiOqOrQI,2956
9
9
  linkml/generators/docgen/class.md.jinja2,sha256=_nQr8ge57ZkX3Hrh-cqPUm8Z7HCnJuuRCgYm0g21mS8,3381
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
@@ -17,47 +17,47 @@ linkml/generators/docgen/slot.md.jinja2,sha256=XVd0M4gKx9Q2fONcsUGBRj_bJivyN4P9j
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
19
  linkml/generators/docgen.py,sha256=Kwg4ZIXL2e9G-q-_CUoj8Bgnpyyvvh5fKPnseDcTK04,33755
20
- linkml/generators/dotgen.py,sha256=CnbVY6CO1OMuiYXYnvxgNN2IW1mtOQW-J-QnwZlXkUI,5012
20
+ linkml/generators/dotgen.py,sha256=kzp1EYtF8bBqOuycJokDmsvHVDVkkW-J-6-MiUhwJH0,5013
21
21
  linkml/generators/erdiagramgen.py,sha256=Gu-_nhLuEPTsYYaoV6tNS1V6cZ2dNJdm6YwxC0VGl7g,10315
22
22
  linkml/generators/excelgen.py,sha256=OhVzuQaDESYpAGR8Zv13hiWlDDJA8ugtSZatBJH0hzA,7737
23
23
  linkml/generators/golanggen.py,sha256=Dnl7dhmb1AIK3Is7KRaUbxPd3kBTjWuspFqardiBTJ8,5751
24
- linkml/generators/golrgen.py,sha256=tIsbsr4SM9HxeK7TCUwnq-GdSKZ_qW5f7fybg_aqCZE,3436
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
- linkml/generators/javagen.py,sha256=oZfUowKnBQNdklRqOM-yKptO4Te4y4N5ItIc5jTuWKU,5427
29
- linkml/generators/jsonldcontextgen.py,sha256=2TUzEzFBX7wDOYJ51Kg0hp2CVXcOzJhgIbq0CrzL2oc,7832
30
- linkml/generators/jsonldgen.py,sha256=KQYurjqp3gI0bevjzmrw4WDEgz4Yf4o4TJfZsqK4_vs,7575
31
- linkml/generators/jsonschemagen.py,sha256=8fzOoR5ZRgchg7r-QxZsbkxlnfD7ytrLw6qKjIRgmWo,25294
28
+ linkml/generators/javagen.py,sha256=l3NUWCQMtJOTOIuao237hLYlILliLilVQXxdlJ5haIQ,5455
29
+ linkml/generators/jsonldcontextgen.py,sha256=nLcASMmxoT57dRj1A9W5qqwg-5TDpsGblMb9gt940Zs,7871
30
+ linkml/generators/jsonldgen.py,sha256=BtPXLYbnXTXorUcoe6y4DL0xa-TPjHOvtXdhv-ppW3I,7656
31
+ linkml/generators/jsonschemagen.py,sha256=7et3IaWmgYCgB_nPnrZpXx92LrPa9fiTIFGGwYxSSAg,25987
32
32
  linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  linkml/generators/linkmlgen.py,sha256=QhIPA1v2g_g5fien3ZKN-L6TkDk3t7puVFrcoEnwkwY,3540
34
- linkml/generators/markdowngen.py,sha256=ZPLahEPjWsrAsKq4CHbVDXeVd0n1NO-2STs068-g0Ac,32948
34
+ linkml/generators/markdowngen.py,sha256=LU4Z8k9ag6aDURQKZAsEa_p9PEUGWsc_oMLJRx_pamI,32964
35
35
  linkml/generators/namespacegen.py,sha256=vVcIyM0zlKd7XRvtdzwTwHjG4Pg49801gy4FUmjJlqQ,6450
36
36
  linkml/generators/oocodegen.py,sha256=l-5zck_NNAUxJiApJrnDPkqxCv3b6v5s4hC_smelszU,7620
37
- linkml/generators/owlgen.py,sha256=omOfL5oKHeQs-JARbGbTvydZ6DX4Bzyv5pukgW02kds,52419
38
- linkml/generators/plantumlgen.py,sha256=Vs__5x9ioiT4IBTbvZUpgT8MsYJ0amfBL64MB_nmQPc,14870
39
- linkml/generators/prefixmapgen.py,sha256=JJ7hgzuqKVfFZrbDV76Dk8dR2NHsmpp-eNUAspXkfwA,4626
37
+ linkml/generators/owlgen.py,sha256=ir91YE4ky7-HNlhcZ8VbouAW_jGPpTKqgKERcoO2LVQ,52593
38
+ linkml/generators/plantumlgen.py,sha256=jN40_1_0_YI6Dir8wbxdVm-Upy6rxIYLFSNW-V0WKFY,14871
39
+ linkml/generators/prefixmapgen.py,sha256=-IGKre3rRxCdNs0BP3Oo7Wzv8edeUQXkjjwN7od3qjU,4627
40
40
  linkml/generators/projectgen.py,sha256=g3JR2oXPM_QXhWUGukP9ts1P7tqxIeABaRdv130gbo4,9578
41
41
  linkml/generators/protogen.py,sha256=9YfxBZkQdBWwsUbstxEUR4xRWNuAKSfz9zXPhgIYePU,2328
42
42
  linkml/generators/pydanticgen.py,sha256=Ak0bpRoQsirnnBd091NiJvMZ-2d0qaQbhxADHy5ocwY,25529
43
43
  linkml/generators/pythongen.py,sha256=yGYlRJ4rNm2QQLFDjyuUnqCyKlzz-b3eSOhkSu8aCwI,52491
44
- linkml/generators/rdfgen.py,sha256=LxzYBaFEkV7rlf54nWv_6H6AGcWMRXwkaeVXq9VYEc8,2693
45
- linkml/generators/shaclgen.py,sha256=KxNmDZW2ciCuSqUhJ65TxLTjF8jME1FmN5SaWJCuW9k,8662
46
- linkml/generators/shexgen.py,sha256=E-R8jg5Z3JzzsVAIPu6Fs9FtFF7k-I5-5vMwG1jGW2U,9858
44
+ linkml/generators/rdfgen.py,sha256=94SRun1DDJwMiKVJU-BpU0jwhac2GW7gv4Gaug7iJ6o,2694
45
+ linkml/generators/shaclgen.py,sha256=H63DCUjTGYdrKRG5j7Ep8sOgFTXqmaEkH8Rne8ANvFo,8724
46
+ linkml/generators/shexgen.py,sha256=VVlSrGCighLf0YSStK_VeMnCK0imAL4BJNDRVTpUFkw,9859
47
47
  linkml/generators/sparqlgen.py,sha256=xIT4abjYTjPvAjczZ2mkqfap5z8-AImK_jaCvgZyRGs,6120
48
48
  linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
49
49
  linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
50
50
  linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
51
51
  linkml/generators/sqlalchemygen.py,sha256=XjvyCYr9h0EsFaKy4y-lMXunYw4dnk9vSpwlPjZK8gU,9186
52
- linkml/generators/sqlddlgen.py,sha256=t7U0-ZOWnulA7CMrlaih73H7fQdaGNRhdVLmvWGxFT4,18436
52
+ linkml/generators/sqlddlgen.py,sha256=ickgQovcWunsBRMpHBDTGxGlZKU9kfExb-XQPBS6qPs,18437
53
53
  linkml/generators/sqltablegen.py,sha256=h_zVuNC8huRzzTa9nSHNWBxq-4TuLq7nR5nZfpDnWiM,11481
54
54
  linkml/generators/sssomgen.py,sha256=yur3q7so9uwIELWZaZRzkJwNbz_ppBL7IQki9XLIM3k,6879
55
55
  linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
56
- linkml/generators/summarygen.py,sha256=aeWAUeOaWhn1WHZKnJ3TcKVku_6psrw88ubMc-GQzEc,2924
56
+ linkml/generators/summarygen.py,sha256=67XKbzM_aCwJXEpgtsffWf7RGljeHJYE8dCIjMHXlH8,2925
57
57
  linkml/generators/terminusdbgen.py,sha256=_po9KnOz6Uoctb9Y4fJuU_voW4uA5pepvZTmHLQ2_DE,4470
58
58
  linkml/generators/typescriptgen.py,sha256=VDJ-97jk7zqYx6XlnIcxZmY8mCv885T7D2brKJHaihI,8565
59
- linkml/generators/yamlgen.py,sha256=bI4ebWe8vebR3xGVgto5TH0ZDej-RlZPTYqJ26BxKpg,1651
60
- linkml/generators/yumlgen.py,sha256=547atFkqJd9WtL_LdR-tUME9g7lWaFa3yHFvpnX6J1E,12145
59
+ linkml/generators/yamlgen.py,sha256=0hYw2hW4A92As9x3k_7T7y05y25unfK2v3NPFfrtdbw,1652
60
+ linkml/generators/yumlgen.py,sha256=nIwOYCCBWPnS8xk2y922qGlYSpoHNtMQcdB4L716iqo,12146
61
61
  linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  linkml/linter/cli.py,sha256=BpQiETcRfQlZsI1-JALyU9wXPgPOm_KE_n11p0iJaC8,4494
63
63
  linkml/linter/config/datamodel/.linkmllint.yaml,sha256=40rNhcL35FXQSjlVBMWnyPgplwEUqFT_sJmeZqUzxMw,292
@@ -77,7 +77,7 @@ linkml/linter/rules.py,sha256=Bk87FMKgdF_aSBqeLe1uQartcTxV3-ZwUu-QRp2iK4s,11164
77
77
  linkml/reporting/__init__.py,sha256=Jo0V_nyEcnWhMukMW-bqW9dlbgCfaRlWm3CO-XzgU84,92
78
78
  linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,8622
79
79
  linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- linkml/transformers/logical_model_transformer.py,sha256=fD9cFwnOf_Zur6-8wvPcXgagf8n4-ApV83HwaHn5Jvc,26509
80
+ linkml/transformers/logical_model_transformer.py,sha256=1ZSB-HBoI0E2X2NV9TSgbTghp2GO4HQA27JaK0XiPBE,26510
81
81
  linkml/transformers/model_transformer.py,sha256=tK_MpRDI-q2qfe8KHT6qJHP8ZruKjYx1FcM-Fnjse-E,678
82
82
  linkml/transformers/relmodel_transformer.py,sha256=hRUVtH4gylDssOXoWvVxTetF9ESbITrAZOFu53b_Eg0,17836
83
83
  linkml/transformers/schema_renamer.py,sha256=Cr18TyktX64b5iFh5V6R_ILPVzXjbDYVDDZQyqFiAv8,5271
@@ -87,22 +87,22 @@ linkml/utils/converter.py,sha256=rdhCI7Tsjddr3o1rVBfMq5gQubk_GE6fqlBBmyxI5_M,627
87
87
  linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
88
88
  linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
89
89
  linkml/utils/execute_tutorial.py,sha256=T4kHTSyz3ItJGEUZxVjR-3yLVKnOr5Ix4NMGE47-IuE,6912
90
- linkml/utils/generator.py,sha256=WAlP_gfZfAZYNklsh8l4GtiWZ338kjLg7xpQAANgUNg,38217
90
+ linkml/utils/generator.py,sha256=fIoBa5zVXXOpW7ibIRCh0FADycdSXcrH98fMuzq6sng,38271
91
91
  linkml/utils/helpers.py,sha256=yR8n4zFA5wPcYC7xzRuNF3wO16vG80v6j7DM3qTNmIc,447
92
- linkml/utils/ifabsent_functions.py,sha256=FZwceqwlq81lMPDsdNfSHhtzDXSf8F4cbbhRdnDzjss,5765
92
+ linkml/utils/ifabsent_functions.py,sha256=C2mllfh7aIZgVqqJjN5nydurVUk0hV62Wy7uVMYfPDg,5801
93
93
  linkml/utils/logictools.py,sha256=GSmBiobC49TcQjE08RtXEE3JwJEOV7eEREio25uJiFs,21184
94
94
  linkml/utils/mergeutils.py,sha256=QVm2iQB4v_L2rSvPBsPe9C865R03BgV3TzlPoTTTwWQ,9044
95
95
  linkml/utils/rawloader.py,sha256=QB7Rdvy4o4ZJEWBWa2_2xzz2TOh_6Oe4slvUn8IBVIc,4329
96
96
  linkml/utils/schema_builder.py,sha256=WLSit3J4lTifaFLLWTwjqIRiTru1pqvTIUuC1TrxS6Y,9902
97
97
  linkml/utils/schema_fixer.py,sha256=ajsxpwD4yMjDk1iDtoKJTsa34SIqGshWxlnSNXVZ52w,16745
98
98
  linkml/utils/schemaloader.py,sha256=bBSTqimMDTFH2FcKtRz99dKNJzV_myPsZSkIFp_6-A0,46421
99
- linkml/utils/schemasynopsis.py,sha256=6NKa89bkZfZQE9QM0St-6xQcrsHPkYmBgnnWnlgAcQ4,18455
99
+ linkml/utils/schemasynopsis.py,sha256=jKf5ZJxpNgSZ5x9oAcdGO3m1IwzcIU2Ni1ugm0SQq1g,18447
100
100
  linkml/utils/sqlutils.py,sha256=86XeEbfY0Dk-EObw4q5-dxyzSeBtmIhjqqyDcR8ALS0,16591
101
101
  linkml/utils/typereferences.py,sha256=8Yfuz9-HAwOPoJLbIcO_sY9zf32hvPRzGeSOzECfMWA,2232
102
102
  linkml/utils/validation.py,sha256=eLw1-d8x3N1V14bSc6H_mJJXo59ryKvvUIBcOJ1dVMw,1438
103
- linkml/validator/__init__.py,sha256=59EBUp0G0MckoMFjhBEczXbQq7SweUINjD5Mya-Youk,5001
103
+ linkml/validator/__init__.py,sha256=djKc1IyxGKvVYaX5jSxsqjfcEYaw3rFgKbFJxI2wDNk,5002
104
104
  linkml/validator/cli.py,sha256=VwYWDvR2fN37tOyz9L2k_TlE_NpUQx-MYeJ9p1O0qaI,7261
105
- linkml/validator/loaders/__init__.py,sha256=jmnzKaSxhacVPFDQTvfFr3bp1jtyGAD7_vgd1-26RhA,1164
105
+ linkml/validator/loaders/__init__.py,sha256=FjUqEfBHeT5PEMBEZ9XwpclyQOysr4OCI1M0w_MYPVc,1165
106
106
  linkml/validator/loaders/delimited_file_loader.py,sha256=fdh61ZMPTfH29_DM93f5dY0jLP7KQPNh_QAHZppsdNw,2616
107
107
  linkml/validator/loaders/json_loader.py,sha256=Qy42naS2clb0fNXbUushckRu5AIX32b3UFUL6KMhxDE,809
108
108
  linkml/validator/loaders/loader.py,sha256=YKQXmSZhCymvvb2Dbr4lVCKVDt-lOIayzRD7CWrdsJI,559
@@ -112,10 +112,11 @@ linkml/validator/plugins/__init__.py,sha256=F7Un7bfdpSRXvk8LTb7Z4Q22rCtJJKjNkqUf
112
112
  linkml/validator/plugins/jsonschema_validation_plugin.py,sha256=hMPlCyAdMg_N_OHiHMaxcG0fsOA50V4oBNqorNz_oqE,2528
113
113
  linkml/validator/plugins/pydantic_validation_plugin.py,sha256=C-Vp74bz5oqp5V-iuhXW8p0PPDoFY8NCU5x36Ur5Og4,1985
114
114
  linkml/validator/plugins/recommended_slots_plugin.py,sha256=kOdoYQyye47nLA7BjorVmydS84nGpiVy3MoCbPq1Ymo,2308
115
+ linkml/validator/plugins/shacl_validation_plugin.py,sha256=A6x3tiX-p03_i_VmR2xnw28j0dpiUw6WIAG-gllwJ8Q,3624
115
116
  linkml/validator/plugins/validation_plugin.py,sha256=9SMHF8b2bgG9-8351e8bY676e0A4aEBJSXvMjMF5kXg,1548
116
117
  linkml/validator/report.py,sha256=kkkuh-IZF9--cO-2wGjwP3PDLvOcjjvC8AOlxXUIOAM,870
117
118
  linkml/validator/validation_context.py,sha256=2BYbw0czAYepJUNoIINyTnmW6SrgK6et7SNvH5ejzgU,2700
118
- linkml/validator/validator.py,sha256=sdWbAOlnNYQWnZSEIuLpGQqH3W4cNq_8M_CdLtsNMH0,5648
119
+ linkml/validator/validator.py,sha256=BFgfKdu9Nad2dc9XTpmz9daQTj_FTcvo6mBq3e8fhJs,5649
119
120
  linkml/validators/__init__.py,sha256=43W3J5NPKhwa3ZFHLRYsJMocwQKWGYCF9Ki9r0ccGbc,202
120
121
  linkml/validators/jsonschemavalidator.py,sha256=_ku7MQGqA6KplbHMiyzDRqgRwwXGloobhLptuXqLCp4,7951
121
122
  linkml/validators/sparqlvalidator.py,sha256=JowuZ5KxmWkldgWIXAb8DJi7YCPm8x3it0QkgM4lSi0,4612
@@ -123,9 +124,9 @@ linkml/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
123
124
  linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
125
  linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
125
126
  linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
126
- linkml/workspaces/example_runner.py,sha256=uumXyPZ7xUJSZyRtjDP4TCCxgKSSOfebpufXc0_l0jY,11610
127
- linkml-1.6.9.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
128
- linkml-1.6.9.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
129
- linkml-1.6.9.dist-info/entry_points.txt,sha256=za8r49Z5gcz3rAYTZLbxw5EPZr1rGuxSe1uiRUpf8R0,2143
130
- linkml-1.6.9.dist-info/METADATA,sha256=KsqVPfLcVUKxAlb-hz4AFdd6Pk5VGUjtmGx3wj5x7U8,3446
131
- linkml-1.6.9.dist-info/RECORD,,
127
+ linkml/workspaces/example_runner.py,sha256=OmC_yZLIb4KXGQrstBVZL0UAQ9ZAaraguQF0RSf-snk,11611
128
+ linkml-1.7.0rc2.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
129
+ linkml-1.7.0rc2.dist-info/METADATA,sha256=4j95xO9BK-__KAt6WJemZf1EPUg6Z6TFC1othLAB974,3452
130
+ linkml-1.7.0rc2.dist-info/entry_points.txt,sha256=za8r49Z5gcz3rAYTZLbxw5EPZr1rGuxSe1uiRUpf8R0,2143
131
+ linkml-1.7.0rc2.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
132
+ linkml-1.7.0rc2.dist-info/RECORD,,