diff --git a/README.md b/README.md index 8eac914..2dc1758 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,6 @@ And you can skip the backup (simply edit in place): python -m opencloning_linkml.migrations.migrate file.json --no-backup ``` - - ## Developer Documentation The python package can be installed from PyPI: @@ -45,6 +43,23 @@ Use the `make` command to generate project artefacts: * `make deploy`: deploys site +### Creating a migration + +To add a migration from version `X.Y.Z` to a new version `A.B.C`, follow these steps: + +1. **Archive the current model**: Save a copy of the current Pydantic model to `src/opencloning_linkml/migrations/model_archive/vA_B_C.py`. This file should contain the complete model classes for version `A.B.C` (typically copied from `src/opencloning_linkml/datamodel/_models.py` after generating the new version). + +2. **Create the transformation file**: Create a new file `src/opencloning_linkml/migrations/transformations/vX_Y_Z_to_vA_B_C.py` with a migration function + +3. **Register the migration**: Add the migration to `src/opencloning_linkml/migrations/__init__.py`: + - Import the migration function: `from .transformations.vX_Y_Z_to_vA_B_C import migrate_X_Y_Z_to_A_B_C` + - Add it to the `load_migrations()` return dictionary: `("X.Y.Z", "A.B.C"): migrate_X_Y_Z_to_A_B_C` + +4. **Add a test**: Add a test to `tests/test_migration.py` to ensure the migration works as expected. + +**Example**: See `v0_2_8_to_v0_2_9.py` for a simple transformation example, or `v0_2_9_to_v_0_4_0.py` for a more complex migration with ID remapping and structural changes. + + ## Credits This project was made with diff --git a/project/excel/opencloning_linkml.xlsx b/project/excel/opencloning_linkml.xlsx index 57ff653..43f258e 100644 Binary files a/project/excel/opencloning_linkml.xlsx and b/project/excel/opencloning_linkml.xlsx differ diff --git a/project/jsonld/opencloning_linkml.context.jsonld b/project/jsonld/opencloning_linkml.context.jsonld index 712d092..06af72c 100644 --- a/project/jsonld/opencloning_linkml.context.jsonld +++ b/project/jsonld/opencloning_linkml.context.jsonld @@ -1,7 +1,7 @@ { "comments": { "description": "Auto generated by LinkML jsonld context generator", - "generation_date": "2025-10-20T16:29:26", + "generation_date": "2025-11-17T18:53:28", "source": "opencloning_linkml.yaml" }, "@context": { diff --git a/project/jsonld/opencloning_linkml.jsonld b/project/jsonld/opencloning_linkml.jsonld index 13038a0..a2fd849 100644 --- a/project/jsonld/opencloning_linkml.jsonld +++ b/project/jsonld/opencloning_linkml.jsonld @@ -3542,9 +3542,9 @@ ], "metamodel_version": "1.7.0", "source_file": "opencloning_linkml.yaml", - "source_file_date": "2025-10-20T16:11:45", + "source_file_date": "2025-11-17T18:34:01", "source_file_size": 26051, - "generation_date": "2025-10-20T16:29:26", + "generation_date": "2025-11-17T18:53:29", "@type": "SchemaDefinition", "@context": [ "project/jsonld/opencloning_linkml.context.jsonld", diff --git a/project/owl/opencloning_linkml.owl.ttl b/project/owl/opencloning_linkml.owl.ttl index a64e28a..35aac1d 100644 --- a/project/owl/opencloning_linkml.owl.ttl +++ b/project/owl/opencloning_linkml.owl.ttl @@ -15,65 +15,65 @@ opencloning_linkml:CloningStrategy a owl:Class, linkml:ClassDefinition ; rdfs:label "CloningStrategy" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:version_number ; - owl:onProperty opencloning_linkml:backend_version ], + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:primers ], + owl:onProperty opencloning_linkml:files ], + [ a owl:Restriction ; + owl:allValuesFrom opencloning_linkml:Sequence ; + owl:onProperty opencloning_linkml:sequences ], [ a owl:Restriction ; owl:allValuesFrom opencloning_linkml:Primer ; owl:onProperty opencloning_linkml:primers ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:backend_version ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:AssociatedFile ; - owl:onProperty opencloning_linkml:files ], + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:sources ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:frontend_version ], + owl:allValuesFrom opencloning_linkml:Source ; + owl:onProperty opencloning_linkml:sources ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:files ], + owl:onProperty opencloning_linkml:frontend_version ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:description ], + owl:allValuesFrom opencloning_linkml:AssociatedFile ; + owl:onProperty opencloning_linkml:files ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty opencloning_linkml:sequences ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom opencloning_linkml:version_number ; owl:onProperty opencloning_linkml:frontend_version ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:Sequence ; - owl:onProperty opencloning_linkml:sequences ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:Source ; - owl:onProperty opencloning_linkml:sources ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:version_number ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:schema_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:schema_version ], + owl:onProperty opencloning_linkml:primers ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:schema_version ], + owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:backend_version ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:sources ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; owl:allValuesFrom opencloning_linkml:version_number ; + owl:onProperty opencloning_linkml:backend_version ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:frontend_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:description ] ; + owl:onProperty opencloning_linkml:schema_version ], + [ a owl:Restriction ; + owl:allValuesFrom opencloning_linkml:version_number ; + owl:onProperty opencloning_linkml:schema_version ] ; skos:definition "Represents a cloning strategy" ; skos:inScheme . @@ -91,26 +91,26 @@ opencloning_linkml:CollectionOption a owl:Class, linkml:ClassDefinition ; rdfs:label "CollectionOption" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:source ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:info ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty opencloning_linkml:name ], + [ a owl:Restriction ; + owl:allValuesFrom opencloning_linkml:Source ; + owl:onProperty opencloning_linkml:source ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:info ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:source ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:Source ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:source ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:name ], @@ -124,49 +124,49 @@ opencloning_linkml:CollectionOptionInfo a owl:Class, linkml:ClassDefinition ; rdfs:label "CollectionOptionInfo" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:CollectionOptionType ; - owl:onProperty opencloning_linkml:type ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:well ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:well ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:description ], + owl:onProperty opencloning_linkml:resistance ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:type ], + owl:onProperty opencloning_linkml:resistance ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty opencloning_linkml:resistance ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:name ], + owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:resistance ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:well ], + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:well ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:resistance ], + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom opencloning_linkml:CollectionOptionType ; owl:onProperty opencloning_linkml:type ] ; skos:definition "Additional information about a collection option" ; skos:inScheme . @@ -175,26 +175,26 @@ opencloning_linkml:AddgeneIdSource a owl:Class, linkml:ClassDefinition ; rdfs:label "AddgeneIdSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:addgene_sequence_type ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:addgene_sequence_type ], - [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:AddgeneSequenceType ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:addgene_sequence_type ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:sequence_file_url ], + owl:allValuesFrom opencloning_linkml:AddgeneSequenceType ; + owl:onProperty opencloning_linkml:addgene_sequence_type ], [ a owl:Restriction ; owl:allValuesFrom [ a rdfs:Datatype ; owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; owl:onDatatype xsd:string ; owl:withRestrictions ( [ xsd:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ] ) ] ) ] ; owl:onProperty opencloning_linkml:sequence_file_url ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:sequence_file_url ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:addgene_sequence_type ], opencloning_linkml:RepositoryIdSource ; skos:definition "Represents the source of a sequence that is identified by an Addgene id" ; skos:inScheme . @@ -216,25 +216,25 @@ opencloning_linkml:AnnotationSource a owl:Class, owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:annotation_tool_version ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:annotation_tool_version ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:AnnotationTool ; - owl:onProperty opencloning_linkml:annotation_tool ], + owl:allValuesFrom opencloning_linkml:AnnotationReport ; + owl:onProperty opencloning_linkml:annotation_report ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:annotation_report ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:annotation_tool ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:annotation_tool_version ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:annotation_tool_version ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:AnnotationReport ; - owl:onProperty opencloning_linkml:annotation_report ], + owl:allValuesFrom opencloning_linkml:AnnotationTool ; + owl:onProperty opencloning_linkml:annotation_tool ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:annotation_tool ], opencloning_linkml:Source ; skos:definition "Represents a computational step in which sequence features are annotated in a sequence" ; @@ -244,31 +244,31 @@ opencloning_linkml:AssemblyFragment a owl:Class, linkml:ClassDefinition ; rdfs:label "AssemblyFragment" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:left_location ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty opencloning_linkml:reverse_complemented ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:sequence_range ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:left_location ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:right_location ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:reverse_complemented ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:left_location ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom opencloning_linkml:sequence_range ; owl:onProperty opencloning_linkml:right_location ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:sequence_range ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:right_location ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:reverse_complemented ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:allValuesFrom opencloning_linkml:sequence_range ; + owl:onProperty opencloning_linkml:left_location ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:reverse_complemented ], opencloning_linkml:SourceInput ; skos:definition "Represents a fragment in an assembly" ; @@ -278,6 +278,9 @@ opencloning_linkml:BenchlingUrlSource a owl:Class, linkml:ClassDefinition ; rdfs:label "BenchlingUrlSource" ; rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:repository_id ], + [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; @@ -285,9 +288,6 @@ opencloning_linkml:BenchlingUrlSource a owl:Class, owl:onDatatype xsd:string ; owl:withRestrictions ( [ xsd:pattern "^https:\\/\\/benchling\\.com\\/.+\\.gb$" ] ) ] ; owl:onProperty opencloning_linkml:repository_id ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:repository_id ], opencloning_linkml:RepositoryIdSource ; skos:definition "Represents the source of a sequence that is identified by a Benchling URL" ; skos:inScheme . @@ -323,44 +323,44 @@ opencloning_linkml:CollectionSource a owl:Class, linkml:ClassDefinition ; rdfs:label "CollectionSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:title ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:description ], - [ a owl:Restriction ; owl:allValuesFrom opencloning_linkml:CollectionOption ; owl:onProperty opencloning_linkml:options ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:description ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:category_id ], + owl:onProperty opencloning_linkml:image ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:title ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:description ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:category_id ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:options ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:image ], + owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:title ], + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:category_id ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:image ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:category_id ], + owl:onProperty opencloning_linkml:description ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:category_id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:title ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:description ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:title ], opencloning_linkml:Source ; skos:definition "Represents a collection of possible sources in a template" ; skos:inScheme . @@ -379,10 +379,10 @@ opencloning_linkml:DatabaseSource a owl:Class, owl:minCardinality 1 ; owl:onProperty opencloning_linkml:database_id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:database_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:database_id ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is identified by a database id" ; @@ -392,6 +392,9 @@ opencloning_linkml:EuroscarfSource a owl:Class, linkml:ClassDefinition ; rdfs:label "EuroscarfSource" ; rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:repository_id ], + [ a owl:Restriction ; owl:allValuesFrom [ a rdfs:Datatype ; owl:onDatatype xsd:string ; owl:withRestrictions ( [ xsd:pattern "^P\\d+$" ] ) ] ; @@ -399,9 +402,6 @@ opencloning_linkml:EuroscarfSource a owl:Class, [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:repository_id ], opencloning_linkml:RepositoryIdSource ; skos:definition "Represents the source of a sequence from the Euroscarf plasmid library" ; skos:inScheme . @@ -420,13 +420,10 @@ opencloning_linkml:GatewaySource a owl:Class, linkml:ClassDefinition ; rdfs:label "GatewaySource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom opencloning_linkml:GatewayReactionType ; owl:onProperty opencloning_linkml:reaction_type ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:greedy ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:GatewayReactionType ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:reaction_type ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -434,6 +431,9 @@ opencloning_linkml:GatewaySource a owl:Class, [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty opencloning_linkml:greedy ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:greedy ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:greedy ], @@ -445,68 +445,68 @@ opencloning_linkml:GenomeCoordinatesSource a owl:Class, linkml:ClassDefinition ; rdfs:label "GenomeCoordinatesSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:assembly_accession ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:strand ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:gene_id ], - [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty opencloning_linkml:start ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:end ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:end ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:gene_id ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:end ], + owl:onProperty opencloning_linkml:strand ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:strand ], + owl:onProperty opencloning_linkml:gene_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:assembly_accession ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:sequence_accession ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:locus_tag ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:start ], + owl:onProperty opencloning_linkml:end ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:sequence_accession ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:strand ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:locus_tag ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:assembly_accession ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:start ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:sequence_accession ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:start ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:locus_tag ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:assembly_accession ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:gene_id ], + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:sequence_accession ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:locus_tag ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:sequence_accession ], + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:end ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:assembly_accession ], + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:strand ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:end ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:gene_id ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is identified by genome coordinates, requested from NCBI" ; skos:inScheme . @@ -522,11 +522,11 @@ opencloning_linkml:IGEMSource a owl:Class, linkml:ClassDefinition ; rdfs:label "IGEMSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:sequence_file_url ], + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:repository_id ], + owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; owl:allValuesFrom [ a rdfs:Datatype ; owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; @@ -534,7 +534,7 @@ opencloning_linkml:IGEMSource a owl:Class, owl:withRestrictions ( [ xsd:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ] ) ] ) ] ; owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -571,44 +571,44 @@ opencloning_linkml:ManuallyTypedSource a owl:Class, linkml:ClassDefinition ; rdfs:label "ManuallyTypedSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:circular ], - [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^[acgtACGT]+$" ] ) ] ) ] ; - owl:onProperty opencloning_linkml:user_input ], - [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:overhang_crick_3prime ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:user_input ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:overhang_crick_3prime ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty opencloning_linkml:circular ], + owl:onProperty opencloning_linkml:overhang_watson_3prime ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:overhang_watson_3prime ], + owl:onProperty opencloning_linkml:circular ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:overhang_watson_3prime ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:overhang_crick_3prime ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty opencloning_linkml:user_input ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:overhang_watson_3prime ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:overhang_crick_3prime ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:circular ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:user_input ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:overhang_crick_3prime ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty opencloning_linkml:circular ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; + owl:onDatatype xsd:string ; + owl:withRestrictions ( [ xsd:pattern "^[acgtACGT]+$" ] ) ] ) ] ; + owl:onProperty opencloning_linkml:user_input ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is manually typed by the user" ; skos:inScheme . @@ -632,14 +632,14 @@ opencloning_linkml:OligoHybridizationSource a owl:Class, linkml:ClassDefinition ; rdfs:label "OligoHybridizationSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:overhang_crick_3prime ], - [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:overhang_crick_3prime ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:overhang_crick_3prime ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty opencloning_linkml:overhang_crick_3prime ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is generated by oligo hybridization" ; skos:inScheme . @@ -648,25 +648,25 @@ opencloning_linkml:OpenDNACollectionsSource a owl:Class, linkml:ClassDefinition ; rdfs:label "OpenDNACollectionsSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:repository_id ], + owl:allValuesFrom [ a rdfs:Datatype ; + owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; + owl:onDatatype xsd:string ; + owl:withRestrictions ( [ xsd:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ] ) ] ) ] ; + owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:sequence_file_url ], + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ] ) ] ) ] ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:sequence_file_url ], opencloning_linkml:RepositoryIdSource ; skos:definition "Represents the source of a sequence from the Open DNA collections" ; @@ -683,14 +683,14 @@ opencloning_linkml:PCRSource a owl:Class, linkml:ClassDefinition ; rdfs:label "PCRSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:add_primer_features ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:add_primer_features ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty opencloning_linkml:add_primer_features ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:add_primer_features ], opencloning_linkml:AssemblySource ; skos:definition "Represents the source of a sequence that is generated by PCR" ; skos:inScheme . @@ -699,131 +699,131 @@ opencloning_linkml:PlannotateAnnotationReport a owl:Class, linkml:ClassDefinition ; rdfs:label "PlannotateAnnotationReport" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:Description ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:fragment ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty opencloning_linkml:strand ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:length_of_found_feature ], + owl:onProperty opencloning_linkml:strand ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:sseqid ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:percent_identity ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:database ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:strand ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:fragment ], + owl:allValuesFrom linkml:Float ; + owl:onProperty opencloning_linkml:percent_identity ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:percent_identity ], + owl:onProperty opencloning_linkml:Type ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:strand ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:sequence ], + owl:onProperty opencloning_linkml:full_length_of_feature_in_db ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:end_location ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:percent_match_length ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:database ], - [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:sequence ], + [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:end_location ], + owl:onProperty opencloning_linkml:database ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:strand ], + owl:onProperty opencloning_linkml:start_location ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:end_location ], + owl:onProperty opencloning_linkml:length_of_found_feature ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:percent_match_length ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:Feature ], + owl:onProperty opencloning_linkml:percent_identity ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:Description ], + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:end_location ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:fragment ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:length_of_found_feature ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:Feature ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:Description ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:start_location ], + owl:onProperty opencloning_linkml:sequence ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:full_length_of_feature_in_db ], + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:Type ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:fragment ], + owl:onProperty opencloning_linkml:percent_match_length ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:sequence ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:Feature ], + owl:onProperty opencloning_linkml:end_location ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty opencloning_linkml:percent_identity ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty opencloning_linkml:fragment ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:length_of_found_feature ], + owl:onProperty opencloning_linkml:start_location ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:database ], + owl:onProperty opencloning_linkml:Feature ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:start_location ], + owl:onProperty opencloning_linkml:full_length_of_feature_in_db ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Float ; owl:onProperty opencloning_linkml:percent_match_length ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:sseqid ], + owl:onProperty opencloning_linkml:Description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty opencloning_linkml:fragment ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:Feature ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:Type ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:sseqid ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:sequence ], + owl:onProperty opencloning_linkml:sseqid ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:database ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:full_length_of_feature_in_db ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:Type ], + owl:onProperty opencloning_linkml:start_location ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:full_length_of_feature_in_db ], + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:Description ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:start_location ], + owl:onProperty opencloning_linkml:full_length_of_feature_in_db ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:Type ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:sseqid ], + owl:onProperty opencloning_linkml:percent_identity ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty opencloning_linkml:length_of_found_feature ], opencloning_linkml:AnnotationReport ; skos:definition "Represents a report of an annotation step using Plannotate" ; skos:inScheme . @@ -906,13 +906,13 @@ opencloning_linkml:RestrictionEnzymeDigestionSource a owl:Class, owl:minCardinality 0 ; owl:onProperty opencloning_linkml:left_edge ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:right_edge ], [ a owl:Restriction ; owl:allValuesFrom opencloning_linkml:RestrictionSequenceCut ; owl:onProperty opencloning_linkml:left_edge ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:right_edge ], opencloning_linkml:SequenceCutSource ; skos:definition "Represents the source of a sequence that is a subfragment of another sequence, generated by sequence cutting using restriction enzymes." ; @@ -922,10 +922,10 @@ opencloning_linkml:RestrictionSequenceCut a owl:Class, linkml:ClassDefinition ; rdfs:label "RestrictionSequenceCut" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:restriction_enzyme ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:restriction_enzyme ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -957,16 +957,16 @@ opencloning_linkml:SEVASource a owl:Class, owl:minCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^pSEVA\\d+.*$" ] ) ] ; - owl:onProperty opencloning_linkml:repository_id ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:sequence_file_url ], + owl:allValuesFrom [ a rdfs:Datatype ; + owl:onDatatype xsd:string ; + owl:withRestrictions ( [ xsd:pattern "^pSEVA\\d+.*$" ] ) ] ; + owl:onProperty opencloning_linkml:repository_id ], opencloning_linkml:RepositoryIdSource ; skos:definition "Represents the source of a sequence that is identified by a SEVA id" ; skos:inScheme . @@ -1027,15 +1027,9 @@ opencloning_linkml:TemplateSequence a owl:Class, rdfs:label "TemplateSequence" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:circular ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:primer_design ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:primer_design ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; owl:onProperty opencloning_linkml:circular ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -1043,6 +1037,12 @@ opencloning_linkml:TemplateSequence a owl:Class, [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:primer_design ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:primer_design ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty opencloning_linkml:circular ], opencloning_linkml:Sequence ; skos:definition "Represents a sequence that is part of a template, where the actual sequence content will be determined by the user's actions" ; skos:inScheme . @@ -1051,41 +1051,41 @@ opencloning_linkml:TextFileSequence a owl:Class, linkml:ClassDefinition ; rdfs:label "TextFileSequence" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom opencloning_linkml:SequenceFileFormat ; owl:onProperty opencloning_linkml:sequence_file_format ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:overhang_watson_3prime ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:sequence_file_format ], + owl:onProperty opencloning_linkml:file_content ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:overhang_watson_3prime ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:file_content ], + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:overhang_crick_3prime ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:overhang_crick_3prime ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:overhang_watson_3prime ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:overhang_crick_3prime ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:sequence_file_format ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:sequence_file_format ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:file_content ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:overhang_crick_3prime ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:SequenceFileFormat ; - owl:onProperty opencloning_linkml:sequence_file_format ], + owl:onProperty opencloning_linkml:overhang_watson_3prime ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:file_content ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty opencloning_linkml:overhang_crick_3prime ], opencloning_linkml:Sequence ; skos:definition "A sequence (may have features) defined by the content of a text file" ; skos:inScheme . @@ -1094,50 +1094,50 @@ opencloning_linkml:UploadedFileSource a owl:Class, linkml:ClassDefinition ; rdfs:label "UploadedFileSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:file_name ], - [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:file_name ], + owl:onProperty opencloning_linkml:index_in_file ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:index_in_file ], + owl:onProperty opencloning_linkml:coordinates ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:circularize ], + owl:allValuesFrom opencloning_linkml:SequenceFileFormat ; + owl:onProperty opencloning_linkml:sequence_file_format ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:sequence_range ; - owl:onProperty opencloning_linkml:coordinates ], + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:file_name ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:sequence_file_format ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; owl:onProperty opencloning_linkml:circularize ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:sequence_file_format ], + owl:onProperty opencloning_linkml:coordinates ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:index_in_file ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:file_name ], + owl:onProperty opencloning_linkml:circularize ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty opencloning_linkml:index_in_file ], + [ a owl:Restriction ; + owl:allValuesFrom opencloning_linkml:sequence_range ; owl:onProperty opencloning_linkml:coordinates ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:circularize ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:coordinates ], + owl:onProperty opencloning_linkml:file_name ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence_file_format ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:index_in_file ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:SequenceFileFormat ; - owl:onProperty opencloning_linkml:sequence_file_format ], + owl:onProperty opencloning_linkml:file_name ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is uploaded as a file" ; skos:inScheme . @@ -1146,8 +1146,16 @@ opencloning_linkml:WekWikGeneIdSource a owl:Class, linkml:ClassDefinition ; rdfs:label "WekWikGeneIdSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:repository_id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence_file_url ], + [ a owl:Restriction ; + owl:allValuesFrom [ a rdfs:Datatype ; + owl:onDatatype xsd:string ; + owl:withRestrictions ( [ xsd:pattern "^\\d+$" ] ) ] ; + owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; owl:allValuesFrom [ a rdfs:Datatype ; owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; @@ -1155,19 +1163,11 @@ opencloning_linkml:WekWikGeneIdSource a owl:Class, owl:withRestrictions ( [ xsd:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ] ) ] ) ] ; owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:sequence_file_url ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], - [ a owl:Restriction ; - owl:allValuesFrom [ a rdfs:Datatype ; - owl:onDatatype xsd:string ; - owl:withRestrictions ( [ xsd:pattern "^\\d+$" ] ) ] ; - owl:onProperty opencloning_linkml:repository_id ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:repository_id ], opencloning_linkml:RepositoryIdSource ; skos:definition "Represents the source of a sequence that is identified by a WeKwikGene id" ; skos:inScheme . @@ -1261,34 +1261,34 @@ opencloning_linkml:Primer a owl:Class, linkml:ClassDefinition ; rdfs:label "Primer" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty opencloning_linkml:database_id ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:sequence ], + [ a owl:Restriction ; owl:allValuesFrom [ a rdfs:Datatype ; owl:intersectionOf ( linkml:String [ a rdfs:Datatype ; owl:onDatatype xsd:string ; owl:withRestrictions ( [ xsd:pattern "^[acgtACGT]+$" ] ) ] ) ] ; owl:onProperty opencloning_linkml:sequence ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:sequence ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:database_id ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:database_id ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:database_id ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:name ], opencloning_linkml:Sequence ; skos:definition "An oligonucleotide or primer" ; @@ -1299,22 +1299,22 @@ opencloning_linkml:SequenceCut a owl:Class, rdfs:label "SequenceCut" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:overhang ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:overhang ], + owl:onProperty opencloning_linkml:cut_watson ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:cut_watson ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty opencloning_linkml:cut_watson ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:overhang ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty opencloning_linkml:cut_watson ] ; + owl:onProperty opencloning_linkml:overhang ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:overhang ] ; skos:definition "Represents a cut in a DNA sequence" ; skos:inScheme . @@ -1325,10 +1325,10 @@ opencloning_linkml:SequenceCutSource a owl:Class, owl:allValuesFrom opencloning_linkml:SequenceCut ; owl:onProperty opencloning_linkml:left_edge ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:SequenceCut ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:right_edge ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom opencloning_linkml:SequenceCut ; owl:onProperty opencloning_linkml:right_edge ], [ a owl:Restriction ; owl:minCardinality 0 ; @@ -1621,10 +1621,10 @@ opencloning_linkml:AnnotationReport a owl:Class, linkml:ClassDefinition ; rdfs:label "AnnotationReport" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -1636,41 +1636,41 @@ opencloning_linkml:AssociatedFile a owl:Class, linkml:ClassDefinition ; rdfs:label "AssociatedFile" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:sequence_id ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:file_name ], + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:type ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:file_name ], [ a owl:Restriction ; owl:allValuesFrom opencloning_linkml:Sequence ; owl:onProperty opencloning_linkml:sequence_id ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty opencloning_linkml:file_name ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:file_name ], + owl:onProperty opencloning_linkml:sequence_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom opencloning_linkml:AssociatedFileType ; owl:onProperty opencloning_linkml:file_type ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:type ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:file_type ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:file_name ], + owl:onProperty opencloning_linkml:file_type ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:AssociatedFileType ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:file_type ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:type ] ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:file_name ] ; skos:definition "Represents a file associated with a sequence" ; skos:inScheme . @@ -1684,22 +1684,22 @@ opencloning_linkml:SourceInput a owl:Class, linkml:ClassDefinition ; rdfs:label "SourceInput" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:type ], + [ a owl:Restriction ; + owl:allValuesFrom opencloning_linkml:Sequence ; + owl:onProperty opencloning_linkml:sequence ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:Sequence ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:sequence ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:sequence ] ; skos:definition "Represents an input to a source" ; skos:exactMatch schema1:Role ; @@ -1763,20 +1763,20 @@ opencloning_linkml:Sequence a owl:Class, owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:id ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:id ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:type ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:id ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:type ], + owl:minCardinality 1 ; + owl:onProperty opencloning_linkml:id ], opencloning_linkml:NamedThing ; skos:definition "Represents a sequence" ; skos:exactMatch bioschemas:DNA ; @@ -1816,23 +1816,23 @@ opencloning_linkml:RepositoryIdSource a owl:Class, linkml:ClassDefinition ; rdfs:label "RepositoryIdSource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom opencloning_linkml:RepositoryName ; + owl:onProperty opencloning_linkml:repository_name ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty opencloning_linkml:repository_name ], + owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:RepositoryName ; + owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:repository_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty opencloning_linkml:repository_name ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:repository_id ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is identified by a repository id" ; skos:inScheme . @@ -1849,14 +1849,14 @@ opencloning_linkml:AssemblySource a owl:Class, linkml:ClassDefinition ; rdfs:label "AssemblySource" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty opencloning_linkml:circular ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty opencloning_linkml:circular ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty opencloning_linkml:circular ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty opencloning_linkml:circular ], opencloning_linkml:Source ; skos:definition "Represents the source of a sequence that is an assembly of other sequences" ; skos:inScheme . @@ -1875,38 +1875,38 @@ opencloning_linkml:Source a owl:Class, linkml:ClassDefinition ; rdfs:label "Source" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:database_id ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty opencloning_linkml:output_name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty opencloning_linkml:type ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty opencloning_linkml:input ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:type ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom opencloning_linkml:SourceInput ; + owl:onProperty opencloning_linkml:input ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty opencloning_linkml:output_name ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty opencloning_linkml:database_id ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:database_id ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:database_id ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:output_name ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty opencloning_linkml:input ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty opencloning_linkml:output_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty opencloning_linkml:type ], - [ a owl:Restriction ; - owl:allValuesFrom opencloning_linkml:SourceInput ; - owl:onProperty opencloning_linkml:input ], opencloning_linkml:NamedThing ; skos:definition "Represents the source of a sequence" ; skos:exactMatch schema1:CreateAction ; @@ -1948,214 +1948,214 @@ opencloning_linkml:type a owl:ObjectProperty, skos:definition "A LinkML data model for OpenCloning" . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:Primer ; + rdfs:subClassOf opencloning_linkml:TextFileSequence ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:Primer . + owl:someValuesFrom opencloning_linkml:TextFileSequence . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:IGEMSource ; + rdfs:subClassOf opencloning_linkml:UploadedFileSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:IGEMSource . + owl:someValuesFrom opencloning_linkml:UploadedFileSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:PlannotateAnnotationReport ; + rdfs:subClassOf opencloning_linkml:DatabaseSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:PlannotateAnnotationReport . + owl:someValuesFrom opencloning_linkml:DatabaseSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:AssociatedFile ; + rdfs:subClassOf opencloning_linkml:RestrictionAndLigationSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:AssociatedFile . + owl:someValuesFrom opencloning_linkml:RestrictionAndLigationSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:OverlapExtensionPCRLigationSource ; + rdfs:subClassOf opencloning_linkml:CreLoxRecombinationSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:OverlapExtensionPCRLigationSource . + owl:someValuesFrom opencloning_linkml:CreLoxRecombinationSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:UploadedFileSource ; + rdfs:subClassOf opencloning_linkml:AnnotationSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:UploadedFileSource . + owl:someValuesFrom opencloning_linkml:AnnotationSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:AnnotationReport ; + rdfs:subClassOf opencloning_linkml:OligoHybridizationSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:AnnotationReport . + owl:someValuesFrom opencloning_linkml:OligoHybridizationSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:TextFileSequence ; + rdfs:subClassOf opencloning_linkml:PolymeraseExtensionSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:TextFileSequence . + owl:someValuesFrom opencloning_linkml:PolymeraseExtensionSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:Sequence ; + rdfs:subClassOf opencloning_linkml:RepositoryIdSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:Sequence . + owl:someValuesFrom opencloning_linkml:RepositoryIdSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:AssemblyFragment ; + rdfs:subClassOf opencloning_linkml:SEVASource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:AssemblyFragment . + owl:someValuesFrom opencloning_linkml:SEVASource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:CRISPRSource ; + rdfs:subClassOf opencloning_linkml:OpenDNACollectionsSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:CRISPRSource . + owl:someValuesFrom opencloning_linkml:OpenDNACollectionsSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:RestrictionAndLigationSource ; + rdfs:subClassOf opencloning_linkml:SnapGenePlasmidSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:RestrictionAndLigationSource . + owl:someValuesFrom opencloning_linkml:SnapGenePlasmidSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:Source ; + rdfs:subClassOf opencloning_linkml:SequenceCutSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:Source . + owl:someValuesFrom opencloning_linkml:SequenceCutSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:SequencingFile ; + rdfs:subClassOf opencloning_linkml:EuroscarfSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:SequencingFile . + owl:someValuesFrom opencloning_linkml:EuroscarfSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:SnapGenePlasmidSource ; + rdfs:subClassOf opencloning_linkml:GatewaySource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:SnapGenePlasmidSource . + owl:someValuesFrom opencloning_linkml:GatewaySource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:AddgeneIdSource ; + rdfs:subClassOf opencloning_linkml:InFusionSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:AddgeneIdSource . + owl:someValuesFrom opencloning_linkml:InFusionSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:AssemblySource ; + rdfs:subClassOf opencloning_linkml:CRISPRSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:AssemblySource . + owl:someValuesFrom opencloning_linkml:CRISPRSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:SEVASource ; + rdfs:subClassOf opencloning_linkml:AnnotationReport ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:SEVASource . + owl:someValuesFrom opencloning_linkml:AnnotationReport . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:GibsonAssemblySource ; + rdfs:subClassOf opencloning_linkml:SourceInput ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:GibsonAssemblySource . + owl:someValuesFrom opencloning_linkml:SourceInput . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:CollectionSource ; + rdfs:subClassOf opencloning_linkml:Sequence ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:CollectionSource . + owl:someValuesFrom opencloning_linkml:Sequence . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:TemplateSequence ; + rdfs:subClassOf opencloning_linkml:RestrictionEnzymeDigestionSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:TemplateSequence . + owl:someValuesFrom opencloning_linkml:RestrictionEnzymeDigestionSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:WekWikGeneIdSource ; + rdfs:subClassOf opencloning_linkml:CollectionSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:WekWikGeneIdSource . + owl:someValuesFrom opencloning_linkml:CollectionSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:EuroscarfSource ; + rdfs:subClassOf opencloning_linkml:ManuallyTypedSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:EuroscarfSource . + owl:someValuesFrom opencloning_linkml:ManuallyTypedSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:InFusionSource ; + rdfs:subClassOf opencloning_linkml:SequencingFile ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:InFusionSource . + owl:someValuesFrom opencloning_linkml:SequencingFile . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:OligoHybridizationSource ; + rdfs:subClassOf opencloning_linkml:AssemblySource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:OligoHybridizationSource . + owl:someValuesFrom opencloning_linkml:AssemblySource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:HomologousRecombinationSource ; + rdfs:subClassOf opencloning_linkml:Primer ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:HomologousRecombinationSource . + owl:someValuesFrom opencloning_linkml:Primer . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:SourceInput ; + rdfs:subClassOf opencloning_linkml:AssociatedFile ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:SourceInput . + owl:someValuesFrom opencloning_linkml:AssociatedFile . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:SequenceCutSource ; + rdfs:subClassOf opencloning_linkml:GenomeCoordinatesSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:SequenceCutSource . + owl:someValuesFrom opencloning_linkml:GenomeCoordinatesSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:ReverseComplementSource ; + rdfs:subClassOf opencloning_linkml:Source ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:ReverseComplementSource . + owl:someValuesFrom opencloning_linkml:Source . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:OpenDNACollectionsSource ; + rdfs:subClassOf opencloning_linkml:PCRSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:OpenDNACollectionsSource . + owl:someValuesFrom opencloning_linkml:PCRSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:AnnotationSource ; + rdfs:subClassOf opencloning_linkml:BenchlingUrlSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:AnnotationSource . + owl:someValuesFrom opencloning_linkml:BenchlingUrlSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:CreLoxRecombinationSource ; + rdfs:subClassOf opencloning_linkml:HomologousRecombinationSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:CreLoxRecombinationSource . + owl:someValuesFrom opencloning_linkml:HomologousRecombinationSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:GatewaySource ; + rdfs:subClassOf opencloning_linkml:InVivoAssemblySource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:GatewaySource . + owl:someValuesFrom opencloning_linkml:InVivoAssemblySource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:InVivoAssemblySource ; + rdfs:subClassOf opencloning_linkml:PlannotateAnnotationReport ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:InVivoAssemblySource . + owl:someValuesFrom opencloning_linkml:PlannotateAnnotationReport . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:DatabaseSource ; + rdfs:subClassOf opencloning_linkml:IGEMSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:DatabaseSource . + owl:someValuesFrom opencloning_linkml:IGEMSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:PolymeraseExtensionSource ; + rdfs:subClassOf opencloning_linkml:ReverseComplementSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:PolymeraseExtensionSource . + owl:someValuesFrom opencloning_linkml:ReverseComplementSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:BenchlingUrlSource ; + rdfs:subClassOf opencloning_linkml:GibsonAssemblySource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:BenchlingUrlSource . + owl:someValuesFrom opencloning_linkml:GibsonAssemblySource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:RepositoryIdSource ; + rdfs:subClassOf opencloning_linkml:TemplateSequence ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:RepositoryIdSource . + owl:someValuesFrom opencloning_linkml:TemplateSequence . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:GenomeCoordinatesSource ; + rdfs:subClassOf opencloning_linkml:AssemblyFragment ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:GenomeCoordinatesSource . + owl:someValuesFrom opencloning_linkml:AssemblyFragment . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:RestrictionEnzymeDigestionSource ; + rdfs:subClassOf opencloning_linkml:OverlapExtensionPCRLigationSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:RestrictionEnzymeDigestionSource . + owl:someValuesFrom opencloning_linkml:OverlapExtensionPCRLigationSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:ManuallyTypedSource ; + rdfs:subClassOf opencloning_linkml:AddgeneIdSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:ManuallyTypedSource . + owl:someValuesFrom opencloning_linkml:AddgeneIdSource . [] a owl:Restriction ; - rdfs:subClassOf opencloning_linkml:PCRSource ; + rdfs:subClassOf opencloning_linkml:WekWikGeneIdSource ; owl:onProperty opencloning_linkml:type ; - owl:someValuesFrom opencloning_linkml:PCRSource . + owl:someValuesFrom opencloning_linkml:WekWikGeneIdSource . [] a owl:Restriction ; rdfs:subClassOf opencloning_linkml:LigationSource ; diff --git a/project/python/opencloning_linkml.py b/project/python/opencloning_linkml.py index 4f4fa79..9694ba9 100644 --- a/project/python/opencloning_linkml.py +++ b/project/python/opencloning_linkml.py @@ -1,5 +1,5 @@ # Auto generated from opencloning_linkml.yaml by pythongen.py version: 0.0.1 -# Generation date: 2025-10-20T16:29:27 +# Generation date: 2025-11-17T18:53:30 # Schema: OpenCloning_LinkML # # id: https://opencloning.github.io/OpenCloning_LinkML diff --git a/project/shacl/opencloning_linkml.shacl.ttl b/project/shacl/opencloning_linkml.shacl.ttl index ab569dd..33a1f13 100644 --- a/project/shacl/opencloning_linkml.shacl.ttl +++ b/project/shacl/opencloning_linkml.shacl.ttl @@ -8,7 +8,7 @@ schema1:Thing a sh:NodeShape ; sh:closed true ; - sh:ignoredProperties ( opencloning_linkml:left_edge opencloning_linkml:locus_tag opencloning_linkml:image opencloning_linkml:gene_id opencloning_linkml:file_content opencloning_linkml:strand opencloning_linkml:start opencloning_linkml:type opencloning_linkml:sequence opencloning_linkml:options opencloning_linkml:circular opencloning_linkml:sequence_file_url opencloning_linkml:add_primer_features opencloning_linkml:coordinates opencloning_linkml:title opencloning_linkml:end opencloning_linkml:user_input opencloning_linkml:index_in_file opencloning_linkml:description opencloning_linkml:circularize opencloning_linkml:annotation_tool opencloning_linkml:greedy schema1:object opencloning_linkml:right_edge opencloning_linkml:annotation_report opencloning_linkml:file_name opencloning_linkml:sequence_file_format rdf:type opencloning_linkml:assembly_accession schema1:name opencloning_linkml:primer_design opencloning_linkml:overhang_watson_3prime opencloning_linkml:annotation_tool_version opencloning_linkml:restriction_enzymes opencloning_linkml:repository_name opencloning_linkml:addgene_sequence_type opencloning_linkml:category_id opencloning_linkml:reaction_type opencloning_linkml:output_name opencloning_linkml:sequence_accession opencloning_linkml:overhang_crick_3prime opencloning_linkml:repository_id ) ; + sh:ignoredProperties ( opencloning_linkml:repository_name opencloning_linkml:repository_id opencloning_linkml:sequence_file_url opencloning_linkml:title opencloning_linkml:locus_tag opencloning_linkml:coordinates opencloning_linkml:gene_id opencloning_linkml:options opencloning_linkml:file_content schema1:name opencloning_linkml:addgene_sequence_type opencloning_linkml:description opencloning_linkml:restriction_enzymes opencloning_linkml:image opencloning_linkml:user_input opencloning_linkml:file_name opencloning_linkml:sequence_file_format opencloning_linkml:output_name opencloning_linkml:end opencloning_linkml:assembly_accession opencloning_linkml:sequence_accession opencloning_linkml:right_edge opencloning_linkml:start opencloning_linkml:add_primer_features opencloning_linkml:circular opencloning_linkml:overhang_watson_3prime opencloning_linkml:reaction_type opencloning_linkml:annotation_report opencloning_linkml:overhang_crick_3prime rdf:type opencloning_linkml:sequence opencloning_linkml:circularize opencloning_linkml:category_id opencloning_linkml:strand opencloning_linkml:annotation_tool_version schema1:object opencloning_linkml:annotation_tool opencloning_linkml:type opencloning_linkml:index_in_file opencloning_linkml:greedy opencloning_linkml:primer_design opencloning_linkml:left_edge ) ; sh:property [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -21,18 +21,35 @@ opencloning_linkml:AddgeneIdSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is identified by an Addgene id" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:in ( "depositor-full" "addgene-full" ) ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path opencloning_linkml:addgene_sequence_type ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path opencloning_linkml:type ], + [ sh:datatype xsd:string ; sh:description "The id of the sequence in the repository" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:repository_id ], - [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 3 ; - sh:path opencloning_linkml:repository_name ], + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:string ; sh:description "The URL of a sequence file" ; sh:maxCount 1 ; @@ -40,15 +57,6 @@ opencloning_linkml:AddgeneIdSource a sh:NodeShape ; sh:order 0 ; sh:path opencloning_linkml:sequence_file_url ; sh:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ], - [ sh:in ( "depositor-full" "addgene-full" ) ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path opencloning_linkml:addgene_sequence_type ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -56,50 +64,33 @@ opencloning_linkml:AddgeneIdSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 8 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path opencloning_linkml:output_name ] ; + sh:minCount 1 ; + sh:order 3 ; + sh:path opencloning_linkml:repository_name ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 7 ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:AddgeneIdSource . opencloning_linkml:AnnotationSource a sh:NodeShape ; sh:closed true ; sh:description "Represents a computational step in which sequence features are annotated in a sequence" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path schema1:object ], - [ sh:class opencloning_linkml:AnnotationReport ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path opencloning_linkml:annotation_report ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:output_name ], - [ sh:in ( "plannotate" ) ; + sh:property [ sh:in ( "plannotate" ) ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 0 ; sh:path opencloning_linkml:annotation_tool ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:string ; sh:description "The version of the annotation tool" ; sh:maxCount 1 ; @@ -107,23 +98,32 @@ opencloning_linkml:AnnotationSource a sh:NodeShape ; sh:order 1 ; sh:path opencloning_linkml:annotation_tool_version ], [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:type ], + sh:order 4 ; + sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; + sh:order 5 ; sh:path schema1:identifier ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path schema1:object ], + [ sh:class opencloning_linkml:AnnotationReport ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path opencloning_linkml:annotation_report ], [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; + sh:order 7 ; sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:AnnotationSource . @@ -132,10 +132,6 @@ opencloning_linkml:AssemblyFragment a sh:NodeShape ; sh:description "Represents a fragment in an assembly" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:right_location ], - [ sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:left_location ], @@ -145,6 +141,13 @@ opencloning_linkml:AssemblyFragment a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path opencloning_linkml:type ], + [ sh:class bioschemas:DNA ; + sh:description "The input sequence" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path opencloning_linkml:sequence ], [ sh:datatype xsd:boolean ; sh:description "Whether the sequence is reverse complemented in the assembly" ; sh:maxCount 1 ; @@ -152,30 +155,28 @@ opencloning_linkml:AssemblyFragment a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:reverse_complemented ], - [ sh:class bioschemas:DNA ; - sh:description "The input sequence" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path opencloning_linkml:sequence ] ; + [ sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:right_location ] ; sh:targetClass opencloning_linkml:AssemblyFragment . opencloning_linkml:AssemblySource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is an assembly of other sequences" ; - sh:ignoredProperties ( opencloning_linkml:add_primer_features rdf:type opencloning_linkml:reaction_type opencloning_linkml:restriction_enzymes opencloning_linkml:greedy ) ; - sh:property [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + sh:ignoredProperties ( opencloning_linkml:add_primer_features opencloning_linkml:greedy rdf:type opencloning_linkml:reaction_type opencloning_linkml:restriction_enzymes ) ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:output_name ], + sh:order 0 ; + sh:path opencloning_linkml:circular ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path schema1:identifier ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -183,41 +184,59 @@ opencloning_linkml:AssemblySource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:type ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:circular ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path schema1:identifier ] ; + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:AssemblySource . opencloning_linkml:BenchlingUrlSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is identified by a Benchling URL" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + sh:property [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:output_name ], + sh:order 4 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "The url of the gb file associated with the sequence" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:repository_id ; + sh:pattern "^https:\\/\\/benchling\\.com\\/.+\\.gb$" ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 5 ; sh:path schema1:object ], + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path opencloning_linkml:repository_name ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -230,134 +249,129 @@ opencloning_linkml:BenchlingUrlSource a sh:NodeShape ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path opencloning_linkml:type ], - [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 1 ; - sh:path opencloning_linkml:repository_name ], - [ sh:datatype xsd:string ; - sh:description "The url of the gb file associated with the sequence" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:repository_id ; - sh:pattern "^https:\\/\\/benchling\\.com\\/.+\\.gb$" ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ] ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:BenchlingUrlSource . opencloning_linkml:CRISPRSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by CRISPR" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:boolean ; + sh:property [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:type ], + [ sh:datatype xsd:boolean ; sh:description "Whether the assembly is circular or not" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:circular ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path schema1:identifier ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; - sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path schema1:identifier ] ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:CRISPRSource . opencloning_linkml:CloningStrategy a sh:NodeShape ; sh:closed true ; sh:description "Represents a cloning strategy" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "The version of the schema that was used to generate this cloning strategy" ; + sh:property [ sh:class bioschemas:DNA ; + sh:description "The sequences that are used in the cloning strategy" ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path opencloning_linkml:sequences ], + [ sh:class schema1:CreateAction ; + sh:description "The sources of the sequences that are used in the cloning strategy" ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path opencloning_linkml:sources ], + [ sh:description "The version of the frontend that was used to generate this cloning strategy" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path opencloning_linkml:schema_version ], - [ sh:class opencloning_linkml:AssociatedFile ; - sh:description "Files associated with this cloning strategy" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path opencloning_linkml:files ], + sh:order 7 ; + sh:path opencloning_linkml:frontend_version ], [ sh:description "The version of the backend that was used to generate this cloning strategy" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 6 ; sh:path opencloning_linkml:backend_version ], + [ sh:class opencloning_linkml:AssociatedFile ; + sh:description "Files associated with this cloning strategy" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path opencloning_linkml:files ], [ sh:datatype xsd:string ; sh:description "A description of the cloning strategy" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path opencloning_linkml:description ], - [ sh:class schema1:CreateAction ; - sh:description "The sources of the sequences that are used in the cloning strategy" ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path opencloning_linkml:sources ], - [ sh:description "The version of the frontend that was used to generate this cloning strategy" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path opencloning_linkml:frontend_version ], - [ sh:class bioschemas:DNA ; - sh:description "The sequences that are used in the cloning strategy" ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path opencloning_linkml:sequences ], [ sh:class opencloning_linkml:Primer ; sh:description "The primers that are used in the cloning strategy" ; sh:nodeKind sh:IRI ; sh:order 2 ; - sh:path opencloning_linkml:primers ] ; + sh:path opencloning_linkml:primers ], + [ sh:description "The version of the schema that was used to generate this cloning strategy" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path opencloning_linkml:schema_version ] ; sh:targetClass opencloning_linkml:CloningStrategy . opencloning_linkml:CollectionSource a sh:NodeShape ; sh:closed true ; sh:description "Represents a collection of possible sources in a template" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:property [ sh:class opencloning_linkml:CollectionOption ; + sh:description "The options available in this category." ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 8 ; - sh:path schema1:object ], + sh:order 4 ; + sh:path opencloning_linkml:options ], [ sh:datatype xsd:string ; - sh:description "The identifier of the category of the part in the template" ; + sh:description "A description of the category" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path opencloning_linkml:description ], + [ sh:datatype xsd:string ; + sh:description "The title of the category" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:title ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:category_id ], + sh:order 9 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; @@ -365,34 +379,22 @@ opencloning_linkml:CollectionSource a sh:NodeShape ; sh:order 6 ; sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:string ; - sh:description "A description of the category" ; + sh:description "The identifier of the category of the part in the template" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:description ], - [ sh:datatype xsd:string ; - sh:description "URL and size of the image representing this category. For images with size specification, this is a list with two elements: [url, size]." ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:image ], - [ sh:class opencloning_linkml:CollectionOption ; - sh:description "The options available in this category." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path opencloning_linkml:options ], + sh:order 0 ; + sh:path opencloning_linkml:category_id ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path schema1:identifier ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 8 ; + sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; @@ -400,48 +402,46 @@ opencloning_linkml:CollectionSource a sh:NodeShape ; sh:order 7 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "The title of the category" ; - sh:maxCount 1 ; - sh:minCount 1 ; + sh:description "URL and size of the image representing this category. For images with size specification, this is a list with two elements: [url, size]." ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:title ] ; + sh:order 3 ; + sh:path opencloning_linkml:image ] ; sh:targetClass opencloning_linkml:CollectionSource . opencloning_linkml:CreLoxRecombinationSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by Cre - Lox recombination" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:integer ; + sh:property [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:type ], [ sh:datatype xsd:boolean ; sh:description "Whether the assembly is circular or not" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:circular ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path opencloning_linkml:output_name ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; sh:path schema1:object ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; @@ -454,19 +454,7 @@ opencloning_linkml:DatabaseSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is identified by a database id" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; + sh:property [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; @@ -480,6 +468,18 @@ opencloning_linkml:DatabaseSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:type ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -491,11 +491,19 @@ opencloning_linkml:EuroscarfSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence from the Euroscarf plasmid library" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:property [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 1 ; - sh:path opencloning_linkml:repository_name ], + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "The id of the plasmid in the Euroscarf plasmid library" ; sh:maxCount 1 ; @@ -504,89 +512,81 @@ opencloning_linkml:EuroscarfSource a sh:NodeShape ; sh:order 0 ; sh:path opencloning_linkml:repository_id ; sh:pattern "^P\\d+$" ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:output_name ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 5 ; sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; sh:maxCount 1 ; sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path schema1:identifier ], + sh:order 1 ; + sh:path opencloning_linkml:repository_name ], [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:output_name ] ; + sh:order 2 ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:EuroscarfSource . opencloning_linkml:GatewaySource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by Gateway cloning" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:type ], + sh:order 2 ; + sh:path opencloning_linkml:circular ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:identifier ], - [ sh:in ( "LR" "BP" ) ; + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path opencloning_linkml:reaction_type ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:type ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:circular ], + sh:order 7 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 4 ; sh:path opencloning_linkml:output_name ], + [ sh:in ( "LR" "BP" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path opencloning_linkml:reaction_type ], [ sh:datatype xsd:boolean ; sh:description "Whether to use a greedy consensus sequence for att sites (see https://github.com/manulera/GateWayMine)" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path opencloning_linkml:greedy ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path schema1:object ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path schema1:identifier ] ; + sh:path opencloning_linkml:greedy ] ; sh:targetClass opencloning_linkml:GatewaySource . opencloning_linkml:GenomeCoordinatesSource a sh:NodeShape ; @@ -600,48 +600,24 @@ opencloning_linkml:GenomeCoordinatesSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path opencloning_linkml:end ], - [ sh:datatype xsd:string ; - sh:description "The accession of the sequence" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:sequence_accession ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 10 ; sh:path schema1:object ], - [ sh:datatype xsd:integer ; - sh:description "The gene id of the sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:gene_id ], [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + sh:description "The accession of the sequence" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path opencloning_linkml:type ], + sh:order 1 ; + sh:path opencloning_linkml:sequence_accession ], [ sh:datatype xsd:string ; sh:description "The accession of the assembly" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:assembly_accession ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path schema1:identifier ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -655,6 +631,19 @@ opencloning_linkml:GenomeCoordinatesSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:locus_tag ], + [ sh:datatype xsd:integer ; + sh:description "The gene id of the sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:gene_id ], + [ sh:datatype xsd:integer ; + sh:description "The strand of the sequence in the sequence accession, should be 1 or -1" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path opencloning_linkml:strand ], [ sh:datatype xsd:integer ; sh:description "The starting coordinate (1-based) of the sequence in the sequence accession" ; sh:maxCount 1 ; @@ -663,12 +652,23 @@ opencloning_linkml:GenomeCoordinatesSource a sh:NodeShape ; sh:order 4 ; sh:path opencloning_linkml:start ], [ sh:datatype xsd:integer ; - sh:description "The strand of the sequence in the sequence accession, should be 1 or -1" ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path opencloning_linkml:strand ] ; + sh:order 9 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path opencloning_linkml:type ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 8 ; + sh:path opencloning_linkml:output_name ] ; sh:targetClass opencloning_linkml:GenomeCoordinatesSource . opencloning_linkml:GibsonAssemblySource a sh:NodeShape ; @@ -682,58 +682,52 @@ opencloning_linkml:GibsonAssemblySource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:identifier ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path schema1:object ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:circular ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path schema1:identifier ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path schema1:object ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:circular ] ; + sh:order 3 ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:GibsonAssemblySource . opencloning_linkml:HomologousRecombinationSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by homologous recombination" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path schema1:object ], + [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:type ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:circular ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -741,18 +735,24 @@ opencloning_linkml:HomologousRecombinationSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path opencloning_linkml:output_name ] ; + sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:circular ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:HomologousRecombinationSource . opencloning_linkml:IGEMSource a sh:NodeShape ; @@ -760,21 +760,19 @@ opencloning_linkml:IGEMSource a sh:NodeShape ; sh:description "Represents the source of a sequence from an iGEM collection" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + sh:description "The URL of the sequence file, for now github repository" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:output_name ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path schema1:object ], - [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:order 0 ; + sh:path opencloning_linkml:sequence_file_url ; + sh:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 2 ; - sh:path opencloning_linkml:repository_name ], + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -782,33 +780,35 @@ opencloning_linkml:IGEMSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 7 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "The unique identifier of the sequence in the iGEM collection (for now, {part_id}-{plasmid_backbone})" ; + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; sh:maxCount 1 ; sh:minCount 1 ; + sh:order 2 ; + sh:path opencloning_linkml:repository_name ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:repository_id ], + sh:order 4 ; + sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:string ; - sh:description "The URL of the sequence file, for now github repository" ; + sh:description "The unique identifier of the sequence in the iGEM collection (for now, {part_id}-{plasmid_backbone})" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:sequence_file_url ; - sh:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ], + sh:order 1 ; + sh:path opencloning_linkml:repository_id ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path schema1:object ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path schema1:identifier ] ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:IGEMSource . opencloning_linkml:InFusionSource a sh:NodeShape ; @@ -816,18 +816,22 @@ opencloning_linkml:InFusionSource a sh:NodeShape ; sh:description "Represents the source of a sequence that is generated by In-Fusion cloning by Takara Bio" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path schema1:identifier ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path schema1:object ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; @@ -840,36 +844,20 @@ opencloning_linkml:InFusionSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:circular ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:output_name ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path schema1:object ] ; + sh:order 5 ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:InFusionSource . opencloning_linkml:InVivoAssemblySource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by in vivo assembly. Algorithmically equivalent to Gibson assembly." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; + sh:property [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; @@ -880,6 +868,18 @@ opencloning_linkml:InVivoAssemblySource a sh:NodeShape ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; sh:path schema1:object ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:circular ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -887,36 +887,35 @@ opencloning_linkml:InVivoAssemblySource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path schema1:identifier ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:circular ] ; + sh:order 2 ; + sh:path opencloning_linkml:output_name ] ; sh:targetClass opencloning_linkml:InVivoAssemblySource . opencloning_linkml:LigationSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by ligation with sticky or blunt ends." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + sh:property [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path schema1:object ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:type ], + sh:order 0 ; + sh:path opencloning_linkml:circular ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path schema1:identifier ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:circular ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -930,52 +929,43 @@ opencloning_linkml:LigationSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:output_name ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path schema1:object ] ; + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:LigationSource . opencloning_linkml:ManuallyTypedSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is manually typed by the user" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path schema1:object ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the sequence is circular or not" ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:circular ], + sh:order 2 ; + sh:path opencloning_linkml:user_input ; + sh:pattern "^[acgtACGT]+$" ], [ sh:datatype xsd:integer ; sh:description "Taken from pydna's `dseq::ovhg`An integer describing the length of the crick strand overhang in the 5' of the molecule, or 3' of the crick strand" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:overhang_crick_3prime ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the sequence is circular or not" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:circular ], [ sh:datatype xsd:integer ; sh:description "The equivalent of `overhang_crick_3prime` but for the watson strand" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:overhang_watson_3prime ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -983,19 +973,29 @@ opencloning_linkml:ManuallyTypedSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 8 ; sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path opencloning_linkml:output_name ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 7 ; + sh:path schema1:object ], [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:user_input ; - sh:pattern "^[acgtACGT]+$" ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path schema1:identifier ] ; + sh:order 4 ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:ManuallyTypedSource . opencloning_linkml:OligoHybridizationSource a sh:NodeShape ; @@ -1008,6 +1008,17 @@ opencloning_linkml:OligoHybridizationSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:type ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -1021,23 +1032,12 @@ opencloning_linkml:OligoHybridizationSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:overhang_crick_3prime ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path schema1:identifier ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path schema1:object ] ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:OligoHybridizationSource . opencloning_linkml:OpenDNACollectionsSource a sh:NodeShape ; @@ -1064,23 +1064,18 @@ opencloning_linkml:OpenDNACollectionsSource a sh:NodeShape ; sh:order 2 ; sh:path opencloning_linkml:repository_name ], [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; + sh:order 5 ; sh:path schema1:identifier ], [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; + sh:order 7 ; sh:path schema1:identifier ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path schema1:object ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; @@ -1092,7 +1087,12 @@ opencloning_linkml:OpenDNACollectionsSource a sh:NodeShape ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path opencloning_linkml:type ] ; + sh:path opencloning_linkml:type ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:OpenDNACollectionsSource . opencloning_linkml:OverlapExtensionPCRLigationSource a sh:NodeShape ; @@ -1105,54 +1105,43 @@ opencloning_linkml:OverlapExtensionPCRLigationSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path schema1:identifier ], + sh:order 2 ; + sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:circular ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; - sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:circular ] ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:OverlapExtensionPCRLigationSource . opencloning_linkml:PCRSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by PCR" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; + sh:property [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; @@ -1164,25 +1153,36 @@ opencloning_linkml:PCRSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:circular ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:boolean ; sh:description "Whether to add primer features to the PCR product" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:add_primer_features ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:output_name ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 6 ; - sh:path schema1:identifier ] ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:output_name ] ; sh:targetClass opencloning_linkml:PCRSource . opencloning_linkml:PlannotateAnnotationReport a sh:NodeShape ; @@ -1194,94 +1194,89 @@ opencloning_linkml:PlannotateAnnotationReport a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 9 ; sh:path opencloning_linkml:database ], - [ sh:datatype xsd:float ; + [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path opencloning_linkml:percent_match_length ], - [ sh:datatype xsd:integer ; + sh:order 8 ; + sh:path opencloning_linkml:fragment ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path opencloning_linkml:full_length_of_feature_in_db ], + sh:order 13 ; + sh:path opencloning_linkml:sequence ], [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:end_location ], + [ sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:strand ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path opencloning_linkml:Type ], - [ sh:datatype xsd:boolean ; + sh:order 12 ; + sh:path opencloning_linkml:Description ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path opencloning_linkml:fragment ], - [ sh:datatype xsd:integer ; + sh:order 10 ; + sh:path opencloning_linkml:Feature ], + [ sh:datatype xsd:float ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:start_location ], + sh:order 4 ; + sh:path opencloning_linkml:percent_identity ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; sh:path opencloning_linkml:sseqid ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path opencloning_linkml:Description ], - [ sh:datatype xsd:string ; + [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 13 ; - sh:path opencloning_linkml:sequence ], - [ sh:datatype xsd:integer ; + sh:order 1 ; + sh:path opencloning_linkml:start_location ], + [ sh:datatype xsd:float ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:strand ], + sh:order 7 ; + sh:path opencloning_linkml:percent_match_length ], [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 6 ; sh:path opencloning_linkml:length_of_found_feature ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 11 ; + sh:path opencloning_linkml:Type ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 14 ; sh:path opencloning_linkml:type ], - [ sh:datatype xsd:float ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:percent_identity ], - [ sh:datatype xsd:string ; + [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path opencloning_linkml:Feature ] ; + sh:order 5 ; + sh:path opencloning_linkml:full_length_of_feature_in_db ] ; sh:targetClass opencloning_linkml:PlannotateAnnotationReport . opencloning_linkml:PolymeraseExtensionSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is generated by polymerase extension" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path schema1:identifier ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path schema1:object ], + sh:order 0 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -1289,37 +1284,59 @@ opencloning_linkml:PolymeraseExtensionSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 4 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:type ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path opencloning_linkml:output_name ] ; + sh:path opencloning_linkml:output_name ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path schema1:object ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:PolymeraseExtensionSource . opencloning_linkml:RepositoryIdSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is identified by a repository id" ; sh:ignoredProperties ( opencloning_linkml:sequence_file_url opencloning_linkml:addgene_sequence_type rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "The id of the sequence in the repository" ; + sh:property [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path opencloning_linkml:repository_name ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:repository_id ], + sh:order 6 ; + sh:path schema1:identifier ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path schema1:object ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ], + sh:order 4 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "The id of the sequence in the repository" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:repository_id ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; @@ -1331,24 +1348,7 @@ opencloning_linkml:RepositoryIdSource a sh:NodeShape ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path schema1:identifier ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path schema1:object ], - [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 1 ; - sh:path opencloning_linkml:repository_name ] ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:RepositoryIdSource . opencloning_linkml:RestrictionAndLigationSource a sh:NodeShape ; @@ -1356,23 +1356,17 @@ opencloning_linkml:RestrictionAndLigationSource a sh:NodeShape ; sh:description "Represents the source of a sequence that is generated by restriction and ligation" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 4 ; sh:path schema1:identifier ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path schema1:object ], + [ sh:datatype xsd:boolean ; + sh:description "Whether the assembly is circular or not" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:circular ], [ sh:datatype xsd:string ; sh:minCount 1 ; sh:nodeKind sh:Literal ; @@ -1384,18 +1378,24 @@ opencloning_linkml:RestrictionAndLigationSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:type ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path schema1:object ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the assembly is circular or not" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:circular ] ; + sh:path opencloning_linkml:output_name ] ; sh:targetClass opencloning_linkml:RestrictionAndLigationSource . opencloning_linkml:RestrictionEnzymeDigestionSource a sh:NodeShape ; @@ -1408,12 +1408,22 @@ opencloning_linkml:RestrictionEnzymeDigestionSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 4 ; sh:path schema1:identifier ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path schema1:object ], [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:output_name ], + sh:order 2 ; + sh:path opencloning_linkml:type ], + [ sh:class opencloning_linkml:RestrictionSequenceCut ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 0 ; + sh:path opencloning_linkml:left_edge ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -1422,26 +1432,16 @@ opencloning_linkml:RestrictionEnzymeDigestionSource a sh:NodeShape ; sh:order 6 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:type ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path schema1:object ], + sh:order 3 ; + sh:path opencloning_linkml:output_name ], [ sh:class opencloning_linkml:RestrictionSequenceCut ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 1 ; - sh:path opencloning_linkml:right_edge ], - [ sh:class opencloning_linkml:RestrictionSequenceCut ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path opencloning_linkml:left_edge ] ; + sh:path opencloning_linkml:right_edge ] ; sh:targetClass opencloning_linkml:RestrictionEnzymeDigestionSource . opencloning_linkml:ReverseComplementSource a sh:NodeShape ; @@ -1449,16 +1449,23 @@ opencloning_linkml:ReverseComplementSource a sh:NodeShape ; sh:description "Represents the in-silico transformation of a sequence into its reverse complement" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:type ], + sh:order 1 ; + sh:path opencloning_linkml:output_name ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path schema1:object ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path schema1:identifier ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; @@ -1466,43 +1473,36 @@ opencloning_linkml:ReverseComplementSource a sh:NodeShape ; sh:order 2 ; sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:description "Designates the class" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ] ; + sh:order 0 ; + sh:path opencloning_linkml:type ] ; sh:targetClass opencloning_linkml:ReverseComplementSource . opencloning_linkml:SEVASource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is identified by a SEVA id" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:property [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 2 ; - sh:path opencloning_linkml:repository_name ], + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 4 ; sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:string ; - sh:description "The SEVA plasmid name" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:repository_id ; - sh:pattern "^pSEVA\\d+.*$" ], [ sh:datatype xsd:string ; sh:description "The URL of the sequence file, which can refer to a a gb file hosted on the SEVA website or an entry in the NCBI." ; sh:maxCount 1 ; @@ -1511,6 +1511,19 @@ opencloning_linkml:SEVASource a sh:NodeShape ; sh:order 0 ; sh:path opencloning_linkml:sequence_file_url ; sh:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ], + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 2 ; + sh:path opencloning_linkml:repository_name ], + [ sh:datatype xsd:string ; + sh:description "The SEVA plasmid name" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:repository_id ; + sh:pattern "^pSEVA\\d+.*$" ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; @@ -1521,66 +1534,53 @@ opencloning_linkml:SEVASource a sh:NodeShape ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 6 ; - sh:path schema1:object ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path schema1:identifier ] ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:SEVASource . opencloning_linkml:SequenceCutSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence that is a subfragment of another sequence, generated by sequence cutting." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class opencloning_linkml:SequenceCut ; + sh:property [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path opencloning_linkml:output_name ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path schema1:object ], + [ sh:class opencloning_linkml:SequenceCut ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 0 ; sh:path opencloning_linkml:left_edge ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ], + sh:order 2 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 6 ; + sh:order 4 ; sh:path schema1:identifier ], [ sh:class opencloning_linkml:SequenceCut ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 1 ; sh:path opencloning_linkml:right_edge ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path opencloning_linkml:type ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:output_name ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path schema1:object ] ; + sh:order 6 ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:SequenceCutSource . opencloning_linkml:SequencingFile a sh:NodeShape ; @@ -1588,11 +1588,12 @@ opencloning_linkml:SequencingFile a sh:NodeShape ; sh:description "Represents a sequencing file and its alignment to a sequence" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "The alignment of the sequencing read to the sequence. List of strings representing aligned sequences." ; + sh:description "The name of the file" ; + sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:alignment ], + sh:order 3 ; + sh:path opencloning_linkml:file_name ], [ sh:class bioschemas:DNA ; sh:description "The sequence this file is associated with" ; sh:maxCount 1 ; @@ -1601,12 +1602,11 @@ opencloning_linkml:SequencingFile a sh:NodeShape ; sh:order 2 ; sh:path opencloning_linkml:sequence_id ], [ sh:datatype xsd:string ; - sh:description "The name of the file" ; - sh:maxCount 1 ; + sh:description "The alignment of the sequencing read to the sequence. List of strings representing aligned sequences." ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:file_name ], + sh:order 0 ; + sh:path opencloning_linkml:alignment ], [ sh:description "The type of file" ; sh:in ( NCIT:C171177 ) ; sh:maxCount 1 ; @@ -1625,31 +1625,31 @@ opencloning_linkml:SnapGenePlasmidSource a sh:NodeShape ; sh:closed true ; sh:description "Represents the source of a sequence from the SnapGene plasmid library identified by a SnapGene subpath of https://www.snapgene.com/plasmids/" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:property [ sh:datatype xsd:string ; + sh:description "The subpath of the plasmid in the SnapGene plasmid library. Requesting the plasmid is possible with https://www.snapgene.com/local/fetch.php?set={category_path}&plasmid={plasmid['subpath']} where category_path is the left part of the subpath before the first / and plasmid is the subpath after the /." ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ], + sh:order 0 ; + sh:path opencloning_linkml:repository_id ; + sh:pattern "^.+\\/.+$" ], + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 1 ; + sh:path opencloning_linkml:repository_name ], [ sh:datatype xsd:string ; sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path opencloning_linkml:output_name ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "The subpath of the plasmid in the SnapGene plasmid library. Requesting the plasmid is possible with https://www.snapgene.com/local/fetch.php?set={category_path}&plasmid={plasmid['subpath']} where category_path is the left part of the subpath before the first / and plasmid is the subpath after the /." ; + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:repository_id ; - sh:pattern "^.+\\/.+$" ], + sh:order 4 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; @@ -1663,49 +1663,55 @@ opencloning_linkml:SnapGenePlasmidSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 6 ; sh:path schema1:identifier ], - [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 1 ; - sh:path opencloning_linkml:repository_name ] ; + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path schema1:object ] ; sh:targetClass opencloning_linkml:SnapGenePlasmidSource . opencloning_linkml:TemplateSequence a sh:NodeShape ; sh:closed true ; sh:description "Represents a sequence that is part of a template, where the actual sequence content will be determined by the user's actions" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Designates the class" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path schema1:identifier ], + sh:order 3 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:string ; sh:description "Can be used to indicate the intended primer design for this sequence in the template" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:primer_design ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path schema1:identifier ], [ sh:datatype xsd:boolean ; sh:description "Whether the sequence is circular or linear" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path opencloning_linkml:circular ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:type ] ; + sh:path opencloning_linkml:circular ] ; sh:targetClass opencloning_linkml:TemplateSequence . opencloning_linkml:TextFileSequence a sh:NodeShape ; sh:closed true ; sh:description "A sequence (may have features) defined by the content of a text file" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "The format of a sequence file" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path opencloning_linkml:type ], + [ sh:description "The format of a sequence file" ; sh:in ( "fasta" "genbank" "snapgene" "embl" ) ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1716,31 +1722,25 @@ opencloning_linkml:TextFileSequence a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path opencloning_linkml:file_content ], + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path schema1:identifier ], [ sh:datatype xsd:integer ; sh:description "Taken from pydna's `dseq::ovhg`An integer describing the length of the crick strand overhang in the 5' of the molecule, or 3' of the crick strand" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path opencloning_linkml:overhang_crick_3prime ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "The equivalent of `overhang_crick_3prime` but for the watson strand" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path opencloning_linkml:overhang_watson_3prime ], - [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path schema1:identifier ] ; + sh:path opencloning_linkml:overhang_watson_3prime ] ; sh:targetClass opencloning_linkml:TextFileSequence . opencloning_linkml:UploadedFileSource a sh:NodeShape ; @@ -1748,52 +1748,52 @@ opencloning_linkml:UploadedFileSource a sh:NodeShape ; sh:description "Represents the source of a sequence that is uploaded as a file" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "The name of the file" ; + sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:file_name ], - [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:order 5 ; + sh:path opencloning_linkml:type ], + [ sh:description "If provided, coordinates within the sequence of the file to extract a subsequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:boolean ; - sh:description "Whether the sequence should be circularized (FASTA only)" ; + sh:order 4 ; + sh:path opencloning_linkml:coordinates ], + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path opencloning_linkml:circularize ], - [ sh:description "If provided, coordinates within the sequence of the file to extract a subsequence" ; + sh:order 6 ; + sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:coordinates ], + sh:order 7 ; + sh:path schema1:identifier ], [ sh:datatype xsd:integer ; sh:description "The index of the sequence in the file" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:index_in_file ], + [ sh:datatype xsd:string ; + sh:description "The name of the file" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:file_name ], [ sh:description "The format of a sequence file" ; sh:in ( "fasta" "genbank" "snapgene" "embl" ) ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 0 ; sh:path opencloning_linkml:sequence_file_format ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + [ sh:datatype xsd:boolean ; + sh:description "Whether the sequence should be circularized (FASTA only)" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path opencloning_linkml:type ], + sh:order 3 ; + sh:path opencloning_linkml:circularize ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -1813,25 +1813,6 @@ opencloning_linkml:WekWikGeneIdSource a sh:NodeShape ; sh:description "Represents the source of a sequence that is identified by a WeKwikGene id" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:output_name ], - [ sh:datatype xsd:string ; - sh:description "The id of the gene in the WeKwikGene database" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:repository_id ; - sh:pattern "^\\d+$" ], - [ sh:class schema1:Role ; - sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path schema1:object ], - [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; @@ -1850,6 +1831,24 @@ opencloning_linkml:WekWikGeneIdSource a sh:NodeShape ; sh:order 0 ; sh:path opencloning_linkml:sequence_file_url ; sh:pattern "^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$" ], + [ sh:class schema1:Role ; + sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path schema1:object ], + [ sh:datatype xsd:string ; + sh:description "The id of the gene in the WeKwikGene database" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path opencloning_linkml:repository_id ; + sh:pattern "^\\d+$" ], + [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 2 ; + sh:path opencloning_linkml:repository_name ], [ sh:datatype xsd:integer ; sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; @@ -1857,17 +1856,18 @@ opencloning_linkml:WekWikGeneIdSource a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 7 ; sh:path schema1:identifier ], - [ sh:in ( "addgene" "genbank" "benchling" "snapgene" "euroscarf" "igem" "wekwikgene" "seva" "open_dna_collections" ) ; + [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 2 ; - sh:path opencloning_linkml:repository_name ] ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path opencloning_linkml:output_name ] ; sh:targetClass opencloning_linkml:WekWikGeneIdSource . opencloning_linkml:AnnotationReport a sh:NodeShape ; sh:closed true ; sh:description "Represents a report of an annotation step" ; - sh:ignoredProperties ( opencloning_linkml:sequence opencloning_linkml:Feature opencloning_linkml:Description opencloning_linkml:strand opencloning_linkml:fragment rdf:type opencloning_linkml:end_location opencloning_linkml:length_of_found_feature opencloning_linkml:start_location opencloning_linkml:sseqid opencloning_linkml:full_length_of_feature_in_db opencloning_linkml:Type opencloning_linkml:percent_match_length opencloning_linkml:percent_identity opencloning_linkml:database ) ; + sh:ignoredProperties ( opencloning_linkml:fragment opencloning_linkml:Feature opencloning_linkml:sequence opencloning_linkml:strand opencloning_linkml:percent_match_length opencloning_linkml:sseqid opencloning_linkml:database opencloning_linkml:full_length_of_feature_in_db opencloning_linkml:Type opencloning_linkml:Description opencloning_linkml:percent_identity opencloning_linkml:end_location rdf:type opencloning_linkml:length_of_found_feature opencloning_linkml:start_location ) ; sh:property [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; @@ -1879,20 +1879,20 @@ opencloning_linkml:AnnotationReport a sh:NodeShape ; opencloning_linkml:AssociatedFile a sh:NodeShape ; sh:closed true ; sh:description "Represents a file associated with a sequence" ; - sh:ignoredProperties ( rdf:type opencloning_linkml:alignment ) ; - sh:property [ sh:class bioschemas:DNA ; + sh:ignoredProperties ( opencloning_linkml:alignment rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path opencloning_linkml:type ], + [ sh:class bioschemas:DNA ; sh:description "The sequence this file is associated with" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 1 ; sh:path opencloning_linkml:sequence_id ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path opencloning_linkml:type ], [ sh:description "The type of file" ; sh:in ( NCIT:C171177 ) ; sh:maxCount 1 ; @@ -1912,13 +1912,7 @@ opencloning_linkml:CollectionOption a sh:NodeShape ; sh:closed true ; sh:description "Represents an option in a collection" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class opencloning_linkml:CollectionOptionInfo ; - sh:description "Additional information about this option" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path opencloning_linkml:info ], - [ sh:class schema1:CreateAction ; + sh:property [ sh:class schema1:CreateAction ; sh:description "The source of the sequence for this option" ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1931,103 +1925,108 @@ opencloning_linkml:CollectionOption a sh:NodeShape ; sh:minCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path schema1:name ] ; + sh:path schema1:name ], + [ sh:class opencloning_linkml:CollectionOptionInfo ; + sh:description "Additional information about this option" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path opencloning_linkml:info ] ; sh:targetClass opencloning_linkml:CollectionOption . opencloning_linkml:CollectionOptionInfo a sh:NodeShape ; sh:closed true ; sh:description "Additional information about a collection option" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "The type of the option, this is redundant with the type of the source, and could be removed." ; + sh:property [ sh:datatype xsd:string ; + sh:description "The well position in the kit plate" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path opencloning_linkml:well ], + [ sh:description "The type of the option, this is redundant with the type of the source, and could be removed." ; sh:in ( "OligoPair" "AddgenePlasmid" ) ; sh:maxCount 1 ; sh:order 2 ; sh:path opencloning_linkml:type ], [ sh:datatype xsd:string ; - sh:description "A description of the option" ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:description ], + sh:order 0 ; + sh:path schema1:name ], [ sh:datatype xsd:string ; - sh:description "The well position in the kit plate" ; + sh:description "A description of the option" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:well ], + sh:order 1 ; + sh:path opencloning_linkml:description ], [ sh:datatype xsd:string ; sh:description "The antibiotic resistance of the plasmid" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; - sh:path opencloning_linkml:resistance ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path schema1:name ] ; + sh:path opencloning_linkml:resistance ] ; sh:targetClass opencloning_linkml:CollectionOptionInfo . opencloning_linkml:Primer a sh:NodeShape ; sh:closed true ; sh:description "An oligonucleotide or primer" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable name for a thing" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path schema1:identifier ], + sh:order 0 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Designates the class" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; sh:description "The id of an entity in a database" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a thing" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path schema1:name ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; sh:path opencloning_linkml:sequence ; sh:pattern "^[acgtACGT]+$" ], - [ sh:datatype xsd:string ; - sh:description "Designates the class" ; + [ sh:datatype xsd:integer ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path opencloning_linkml:type ] ; + sh:order 3 ; + sh:path schema1:identifier ] ; sh:targetClass opencloning_linkml:Primer . schema1:CreateAction a sh:NodeShape ; sh:closed false ; sh:description "Represents the source of a sequence" ; - sh:ignoredProperties ( opencloning_linkml:left_edge opencloning_linkml:locus_tag opencloning_linkml:image opencloning_linkml:gene_id opencloning_linkml:strand opencloning_linkml:start opencloning_linkml:options opencloning_linkml:circular opencloning_linkml:sequence_file_url opencloning_linkml:add_primer_features opencloning_linkml:coordinates opencloning_linkml:title opencloning_linkml:end opencloning_linkml:user_input opencloning_linkml:index_in_file opencloning_linkml:description opencloning_linkml:overhang_crick_3prime opencloning_linkml:circularize opencloning_linkml:annotation_tool opencloning_linkml:greedy opencloning_linkml:right_edge opencloning_linkml:annotation_report opencloning_linkml:file_name opencloning_linkml:sequence_file_format rdf:type opencloning_linkml:assembly_accession opencloning_linkml:overhang_watson_3prime opencloning_linkml:annotation_tool_version opencloning_linkml:restriction_enzymes opencloning_linkml:repository_name opencloning_linkml:addgene_sequence_type opencloning_linkml:category_id opencloning_linkml:reaction_type opencloning_linkml:sequence_accession opencloning_linkml:repository_id ) ; - sh:property [ sh:datatype xsd:integer ; - sh:description "A unique identifier for a thing" ; + sh:ignoredProperties ( opencloning_linkml:repository_name opencloning_linkml:repository_id opencloning_linkml:sequence_file_url opencloning_linkml:title opencloning_linkml:locus_tag opencloning_linkml:coordinates opencloning_linkml:gene_id opencloning_linkml:options opencloning_linkml:addgene_sequence_type opencloning_linkml:description opencloning_linkml:restriction_enzymes opencloning_linkml:image opencloning_linkml:user_input opencloning_linkml:file_name opencloning_linkml:sequence_file_format opencloning_linkml:end opencloning_linkml:assembly_accession opencloning_linkml:sequence_accession opencloning_linkml:right_edge opencloning_linkml:start opencloning_linkml:add_primer_features opencloning_linkml:circular opencloning_linkml:reaction_type opencloning_linkml:annotation_report opencloning_linkml:overhang_crick_3prime rdf:type opencloning_linkml:circularize opencloning_linkml:category_id opencloning_linkml:strand opencloning_linkml:annotation_tool_version opencloning_linkml:annotation_tool opencloning_linkml:index_in_file opencloning_linkml:greedy opencloning_linkml:overhang_watson_3prime opencloning_linkml:left_edge ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "Used to specify the name of the output sequence" ; sh:maxCount 1 ; - sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; + sh:order 1 ; + sh:path opencloning_linkml:output_name ], + [ sh:datatype xsd:integer ; + sh:description "The id of an entity in a database" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; sh:path schema1:identifier ], [ sh:class schema1:Role ; sh:description "The inputs to this source. If the source represents external import of a sequence, it's empty." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path schema1:object ], - [ sh:datatype xsd:string ; - sh:description "Used to specify the name of the output sequence" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path opencloning_linkml:output_name ], [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; @@ -2035,10 +2034,11 @@ schema1:CreateAction a sh:NodeShape ; sh:order 0 ; sh:path opencloning_linkml:type ], [ sh:datatype xsd:integer ; - sh:description "The id of an entity in a database" ; + sh:description "A unique identifier for a thing" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; + sh:order 4 ; sh:path schema1:identifier ] ; sh:targetClass schema1:CreateAction . @@ -2091,7 +2091,7 @@ opencloning_linkml:SequenceCut a sh:NodeShape ; bioschemas:DNA a sh:NodeShape ; sh:closed false ; sh:description "Represents a sequence" ; - sh:ignoredProperties ( opencloning_linkml:circular opencloning_linkml:sequence opencloning_linkml:sequence_file_format opencloning_linkml:file_content rdf:type opencloning_linkml:overhang_crick_3prime schema1:name opencloning_linkml:primer_design opencloning_linkml:overhang_watson_3prime ) ; + sh:ignoredProperties ( opencloning_linkml:sequence_file_format opencloning_linkml:overhang_crick_3prime opencloning_linkml:circular opencloning_linkml:file_content schema1:name rdf:type opencloning_linkml:overhang_watson_3prime opencloning_linkml:primer_design opencloning_linkml:sequence ) ; sh:property [ sh:datatype xsd:string ; sh:description "Designates the class" ; sh:maxCount 1 ; @@ -2110,7 +2110,7 @@ bioschemas:DNA a sh:NodeShape ; schema1:Role a sh:NodeShape ; sh:closed true ; sh:description "Represents an input to a source" ; - sh:ignoredProperties ( opencloning_linkml:reverse_complemented opencloning_linkml:right_location rdf:type opencloning_linkml:left_location ) ; + sh:ignoredProperties ( opencloning_linkml:reverse_complemented rdf:type opencloning_linkml:right_location opencloning_linkml:left_location ) ; sh:property [ sh:class bioschemas:DNA ; sh:description "The input sequence" ; sh:maxCount 1 ; diff --git a/src/opencloning_linkml/migrations/__init__.py b/src/opencloning_linkml/migrations/__init__.py index 2de9c6b..9747c29 100644 --- a/src/opencloning_linkml/migrations/__init__.py +++ b/src/opencloning_linkml/migrations/__init__.py @@ -19,11 +19,13 @@ def load_migrations() -> MigrationDict: from .transformations.v0_2_6_1_to_v_0_2_8 import migrate_0_2_6_1_to_0_2_8 # noqa: F401 from .transformations.v0_2_8_to_v0_2_9 import migrate_0_2_8_to_0_2_9 # noqa: F401 from .transformations.v0_2_9_to_v_0_4_0 import migrate_0_2_9_to_0_4_0 # noqa: F401 + from .transformations.v0_4_0_to_v0_4_6 import migrate_0_4_0_to_0_4_6 # noqa: F401 return { ("0.2.6.1", "0.2.8"): migrate_0_2_6_1_to_0_2_8, ("0.2.8", "0.2.9"): migrate_0_2_8_to_0_2_9, ("0.2.9", "0.4.0"): migrate_0_2_9_to_0_4_0, + ("0.4.0", "0.4.6"): migrate_0_4_0_to_0_4_6, } diff --git a/src/opencloning_linkml/migrations/model_archive/v0_4_6.py b/src/opencloning_linkml/migrations/model_archive/v0_4_6.py new file mode 100644 index 0000000..d420572 --- /dev/null +++ b/src/opencloning_linkml/migrations/model_archive/v0_4_6.py @@ -0,0 +1,3672 @@ +from __future__ import annotations + +import re +import sys +from datetime import date, datetime, time +from decimal import Decimal +from enum import Enum +from typing import Any, ClassVar, Literal, Optional, Union + +from pydantic import BaseModel, ConfigDict, Field, RootModel, field_validator + + +metamodel_version = "None" +version = "None" + + +class ConfiguredBaseModel(BaseModel): + model_config = ConfigDict( + validate_assignment=True, + validate_default=True, + extra="forbid", + arbitrary_types_allowed=True, + use_enum_values=True, + strict=False, + ) + pass + + +class LinkMLMeta(RootModel): + root: dict[str, Any] = {} + model_config = ConfigDict(frozen=True) + + def __getattr__(self, key: str): + return getattr(self.root, key) + + def __getitem__(self, key: str): + return self.root[key] + + def __setitem__(self, key: str, value): + self.root[key] = value + + def __contains__(self, key: str) -> bool: + return key in self.root + + +linkml_meta = LinkMLMeta( + { + "default_prefix": "opencloning_linkml", + "default_range": "string", + "description": "A LinkML data model for OpenCloning", + "id": "https://opencloning.github.io/OpenCloning_LinkML", + "imports": ["linkml:types"], + "license": "MIT", + "name": "OpenCloning_LinkML", + "prefixes": { + "GENO": {"prefix_prefix": "GENO", "prefix_reference": "http://purl.obolibrary.org/obo/GENO_"}, + "IAO": {"prefix_prefix": "IAO", "prefix_reference": "http://purl.obolibrary.org/obo/IAO_"}, + "NCIT": {"prefix_prefix": "NCIT", "prefix_reference": "http://purl.obolibrary.org/obo/NCIT_"}, + "OBI": {"prefix_prefix": "OBI", "prefix_reference": "http://purl.obolibrary.org/obo/OBI_"}, + "PATO": {"prefix_prefix": "PATO", "prefix_reference": "http://purl.obolibrary.org/obo/PATO_"}, + "biolink": {"prefix_prefix": "biolink", "prefix_reference": "https://w3id.org/biolink/"}, + "bioschemas": {"prefix_prefix": "bioschemas", "prefix_reference": "https://bioschemas.org/"}, + "example": {"prefix_prefix": "example", "prefix_reference": "https://example.org/"}, + "linkml": {"prefix_prefix": "linkml", "prefix_reference": "https://w3id.org/linkml/"}, + "opencloning_linkml": { + "prefix_prefix": "opencloning_linkml", + "prefix_reference": "https://opencloning.github.io/OpenCloning_LinkML/", + }, + "schema": {"prefix_prefix": "schema", "prefix_reference": "http://schema.org/"}, + }, + "see_also": ["https://pypi.org/project/opencloning-linkml/"], + "source_file": "src/opencloning_linkml/schema/opencloning_linkml.yaml", + "title": "OpenCloning_LinkML", + "types": { + "sequence_range": { + "description": "A sequence range defined using " + "genbank syntax (e.g. 1..100), " + "note that 1..100 in genbank is " + "equivalent to 0:100 in python", + "exact_mappings": ["GENO:0000965"], + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "name": "sequence_range", + "pattern": "^(\\d+)\\.\\.(\\d+)$", + "typeof": "string", + }, + "version_number": { + "description": "A version number", + "exact_mappings": ["IAO:0000129"], + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "name": "version_number", + "typeof": "string", + }, + }, + } +) + + +class RepositoryName(str, Enum): + addgene = "addgene" + """ + Addgene + """ + genbank = "genbank" + """ + GenBank + """ + benchling = "benchling" + """ + Benchling + """ + snapgene = "snapgene" + """ + SnapGene plasmid library + """ + euroscarf = "euroscarf" + """ + Euroscarf (plasmids only) + """ + igem = "igem" + """ + iGEM collection + """ + wekwikgene = "wekwikgene" + """ + WekWikGene + """ + seva = "seva" + """ + SEVA (Standard European Vector Architecture) + """ + open_dna_collections = "open_dna_collections" + """ + Open DNA collections + """ + + +class Collection(str, Enum): + AddgenePlasmid = "AddgenePlasmid" + """ + A plasmid from Addgene + """ + OligoPair = "OligoPair" + """ + A pair of oligonucleotides for hybridization + """ + + +class SequenceFileFormat(str, Enum): + fasta = "fasta" + genbank = "genbank" + snapgene = "snapgene" + embl = "embl" + + +class AddgeneSequenceType(str, Enum): + depositor_full = "depositor-full" + """ + Full sequence of the plasmid submitted by the depositor + """ + addgene_full = "addgene-full" + """ + Full sequence of the plasmid performed by Addgene + """ + + +class GatewayReactionType(str, Enum): + LR = "LR" + """ + LR reaction + """ + BP = "BP" + """ + BP reaction + """ + + +class AnnotationTool(str, Enum): + plannotate = "plannotate" + + +class AssociatedFileType(str, Enum): + Sequencing_file = "Sequencing file" + """ + A file containing sequencing data + """ + + +class CollectionOptionType(str, Enum): + OligoPair = "OligoPair" + """ + A pair of oligonucleotides for hybridization + """ + AddgenePlasmid = "AddgenePlasmid" + """ + A plasmid from Addgene + """ + + +class NamedThing(ConfiguredBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"class_uri": "schema:Thing", "from_schema": "https://opencloning.github.io/OpenCloning_LinkML"} + ) + + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class Sequence(NamedThing): + """ + Represents a sequence + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "abstract": True, + "class_uri": "bioschemas:DNA", + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + } + ) + + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + type: Literal["Sequence"] = Field( + default="Sequence", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + + +class TemplateSequence(Sequence): + """ + Represents a sequence that is part of a template, where the actual sequence content will be determined by the user's actions + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the sequence is circular or linear""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + primer_design: Optional[str] = Field( + default=None, + description="""Can be used to indicate the intended primer design for this sequence in the template""", + json_schema_extra={"linkml_meta": {"alias": "primer_design", "domain_of": ["TemplateSequence"]}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + type: Literal["TemplateSequence"] = Field( + default="TemplateSequence", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + + +class TextFileSequence(Sequence): + """ + A sequence (may have features) defined by the content of a text file + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "overhang_crick_3prime": {"ifabsent": "int(0)", "name": "overhang_crick_3prime"}, + "overhang_watson_3prime": {"ifabsent": "int(0)", "name": "overhang_watson_3prime"}, + "sequence_file_format": {"name": "sequence_file_format", "required": True}, + }, + } + ) + + sequence_file_format: SequenceFileFormat = Field( + default=..., + description="""The format of a sequence file""", + json_schema_extra={ + "linkml_meta": {"alias": "sequence_file_format", "domain_of": ["TextFileSequence", "UploadedFileSource"]} + }, + ) + overhang_crick_3prime: Optional[int] = Field( + default=0, + description="""Taken from pydna's `dseq::ovhg`An integer describing the length of the crick strand overhang in the 5' of the molecule, or 3' of the crick strand""", + json_schema_extra={ + "linkml_meta": { + "alias": "overhang_crick_3prime", + "domain_of": ["TextFileSequence", "ManuallyTypedSource", "OligoHybridizationSource"], + "ifabsent": "int(0)", + } + }, + ) + overhang_watson_3prime: Optional[int] = Field( + default=0, + description="""The equivalent of `overhang_crick_3prime` but for the watson strand""", + json_schema_extra={ + "linkml_meta": { + "alias": "overhang_watson_3prime", + "domain_of": ["TextFileSequence", "ManuallyTypedSource"], + "ifabsent": "int(0)", + } + }, + ) + file_content: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"alias": "file_content", "domain_of": ["TextFileSequence"]}} + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + type: Literal["TextFileSequence"] = Field( + default="TextFileSequence", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + + +class Primer(Sequence): + """ + An oligonucleotide or primer + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + name: Optional[str] = Field( + default=None, + description="""A human-readable name for a thing""", + json_schema_extra={ + "linkml_meta": { + "alias": "name", + "domain_of": ["Primer", "CollectionOption", "CollectionOptionInfo"], + "slot_uri": "schema:name", + } + }, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + sequence: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"alias": "sequence", "domain_of": ["Primer", "SourceInput", "PlannotateAnnotationReport"]} + }, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + type: Literal["Primer"] = Field( + default="Primer", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + + @field_validator("sequence") + def pattern_sequence(cls, v): + pattern = re.compile(r"^[acgtACGT]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sequence format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sequence format: {v}" + raise ValueError(err_msg) + return v + + +class SourceInput(ConfiguredBaseModel): + """ + Represents an input to a source + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "class_uri": "schema:Role", + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "represents_relationship": True, + } + ) + + type: Literal["SourceInput"] = Field( + default="SourceInput", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + sequence: int = Field( + default=..., + description="""The input sequence""", + json_schema_extra={ + "linkml_meta": {"alias": "sequence", "domain_of": ["Primer", "SourceInput", "PlannotateAnnotationReport"]} + }, + ) + + +class SequenceCut(ConfiguredBaseModel): + """ + Represents a cut in a DNA sequence + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + cut_watson: int = Field( + default=..., + description="""The position of the cut in the watson strand. The cut is made before the base at this position (zero-based), so that cut position 1 cuts after the first base.""", + json_schema_extra={"linkml_meta": {"alias": "cut_watson", "domain_of": ["SequenceCut"]}}, + ) + overhang: int = Field( + default=..., + description="""The length of the overhang that is left after the cut. It can be negative, same meaning as in pydna's `dseq::ovhg` and biopython's `Bio.Restriction.RestrictionType.ovhg`.""", + json_schema_extra={"linkml_meta": {"alias": "overhang", "domain_of": ["SequenceCut"]}}, + ) + + +class RestrictionSequenceCut(SequenceCut): + """ + Represents a cut in a DNA sequence that is made by a restriction enzyme + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": {"restriction_enzyme": {"name": "restriction_enzyme", "required": True}}, + } + ) + + restriction_enzyme: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "alias": "restriction_enzyme", + "domain_of": ["RestrictionSequenceCut"], + "exact_mappings": ["OBI:0000732"], + } + }, + ) + cut_watson: int = Field( + default=..., + description="""The position of the cut in the watson strand. The cut is made before the base at this position (zero-based), so that cut position 1 cuts after the first base.""", + json_schema_extra={"linkml_meta": {"alias": "cut_watson", "domain_of": ["SequenceCut"]}}, + ) + overhang: int = Field( + default=..., + description="""The length of the overhang that is left after the cut. It can be negative, same meaning as in pydna's `dseq::ovhg` and biopython's `Bio.Restriction.RestrictionType.ovhg`.""", + json_schema_extra={"linkml_meta": {"alias": "overhang", "domain_of": ["SequenceCut"]}}, + ) + + +class Source(NamedThing): + """ + Represents the source of a sequence + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "abstract": True, + "class_uri": "schema:CreateAction", + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + } + ) + + type: Literal["Source"] = Field( + default="Source", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class DatabaseSource(Source): + """ + Represents the source of a sequence that is identified by a database id + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": {"database_id": {"name": "database_id", "required": True}}, + } + ) + + database_id: int = Field( + default=..., + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + type: Literal["DatabaseSource"] = Field( + default="DatabaseSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class CollectionSource(Source): + """ + Represents a collection of possible sources in a template + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + category_id: Optional[str] = Field( + default=None, + description="""The identifier of the category of the part in the template""", + json_schema_extra={"linkml_meta": {"alias": "category_id", "domain_of": ["CollectionSource"]}}, + ) + title: str = Field( + default=..., + description="""The title of the category""", + json_schema_extra={"linkml_meta": {"alias": "title", "domain_of": ["CollectionSource"]}}, + ) + description: Optional[str] = Field( + default=None, + description="""A description of the category""", + json_schema_extra={ + "linkml_meta": { + "alias": "description", + "domain_of": ["CollectionSource", "CollectionOptionInfo", "CloningStrategy"], + } + }, + ) + image: Optional[list[str]] = Field( + default=None, + description="""URL and size of the image representing this category. For images with size specification, this is a list with two elements: [url, size].""", + json_schema_extra={"linkml_meta": {"alias": "image", "domain_of": ["CollectionSource"]}}, + ) + options: Optional[list[CollectionOption]] = Field( + default=None, + description="""The options available in this category.""", + json_schema_extra={"linkml_meta": {"alias": "options", "domain_of": ["CollectionSource"]}}, + ) + type: Literal["CollectionSource"] = Field( + default="CollectionSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class CollectionOption(ConfiguredBaseModel): + """ + Represents an option in a collection + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": {"name": {"name": "name", "required": True}}, + } + ) + + name: str = Field( + default=..., + description="""A human-readable name for a thing""", + json_schema_extra={ + "linkml_meta": { + "alias": "name", + "domain_of": ["Primer", "CollectionOption", "CollectionOptionInfo"], + "slot_uri": "schema:name", + } + }, + ) + source: Union[ + Source, + DatabaseSource, + CollectionSource, + ManuallyTypedSource, + UploadedFileSource, + RepositoryIdSource, + GenomeCoordinatesSource, + SequenceCutSource, + AssemblySource, + OligoHybridizationSource, + PolymeraseExtensionSource, + AnnotationSource, + ReverseComplementSource, + PCRSource, + LigationSource, + HomologousRecombinationSource, + GibsonAssemblySource, + InFusionSource, + OverlapExtensionPCRLigationSource, + InVivoAssemblySource, + RestrictionAndLigationSource, + GatewaySource, + CreLoxRecombinationSource, + CRISPRSource, + RestrictionEnzymeDigestionSource, + AddgeneIdSource, + WekWikGeneIdSource, + SEVASource, + BenchlingUrlSource, + SnapGenePlasmidSource, + EuroscarfSource, + IGEMSource, + OpenDNACollectionsSource, + ] = Field( + default=..., + description="""The source of the sequence for this option""", + json_schema_extra={"linkml_meta": {"alias": "source", "domain_of": ["CollectionOption"]}}, + ) + info: Optional[CollectionOptionInfo] = Field( + default=None, + description="""Additional information about this option""", + json_schema_extra={"linkml_meta": {"alias": "info", "domain_of": ["CollectionOption"]}}, + ) + + +class CollectionOptionInfo(ConfiguredBaseModel): + """ + Additional information about a collection option + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": {"name": {"name": "name", "required": False}}, + } + ) + + name: Optional[str] = Field( + default=None, + description="""A human-readable name for a thing""", + json_schema_extra={ + "linkml_meta": { + "alias": "name", + "domain_of": ["Primer", "CollectionOption", "CollectionOptionInfo"], + "slot_uri": "schema:name", + } + }, + ) + description: Optional[str] = Field( + default=None, + description="""A description of the option""", + json_schema_extra={ + "linkml_meta": { + "alias": "description", + "domain_of": ["CollectionSource", "CollectionOptionInfo", "CloningStrategy"], + } + }, + ) + type: Optional[CollectionOptionType] = Field( + default=None, + description="""The type of the option, this is redundant with the type of the source, and could be removed.""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + resistance: Optional[str] = Field( + default=None, + description="""The antibiotic resistance of the plasmid""", + json_schema_extra={"linkml_meta": {"alias": "resistance", "domain_of": ["CollectionOptionInfo"]}}, + ) + well: Optional[str] = Field( + default=None, + description="""The well position in the kit plate""", + json_schema_extra={"linkml_meta": {"alias": "well", "domain_of": ["CollectionOptionInfo"]}}, + ) + + +class ManuallyTypedSource(Source): + """ + Represents the source of a sequence that is manually typed by the user + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "overhang_crick_3prime": {"ifabsent": "int(0)", "name": "overhang_crick_3prime"}, + "overhang_watson_3prime": {"ifabsent": "int(0)", "name": "overhang_watson_3prime"}, + }, + } + ) + + overhang_crick_3prime: Optional[int] = Field( + default=0, + description="""Taken from pydna's `dseq::ovhg`An integer describing the length of the crick strand overhang in the 5' of the molecule, or 3' of the crick strand""", + json_schema_extra={ + "linkml_meta": { + "alias": "overhang_crick_3prime", + "domain_of": ["TextFileSequence", "ManuallyTypedSource", "OligoHybridizationSource"], + "ifabsent": "int(0)", + } + }, + ) + overhang_watson_3prime: Optional[int] = Field( + default=0, + description="""The equivalent of `overhang_crick_3prime` but for the watson strand""", + json_schema_extra={ + "linkml_meta": { + "alias": "overhang_watson_3prime", + "domain_of": ["TextFileSequence", "ManuallyTypedSource"], + "ifabsent": "int(0)", + } + }, + ) + user_input: str = Field( + default=..., json_schema_extra={"linkml_meta": {"alias": "user_input", "domain_of": ["ManuallyTypedSource"]}} + ) + circular: Optional[bool] = Field( + default=None, + description="""Whether the sequence is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["ManuallyTypedSource"] = Field( + default="ManuallyTypedSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("user_input") + def pattern_user_input(cls, v): + pattern = re.compile(r"^[acgtACGT]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid user_input format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid user_input format: {v}" + raise ValueError(err_msg) + return v + + +class UploadedFileSource(Source): + """ + Represents the source of a sequence that is uploaded as a file + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": {"sequence_file_format": {"name": "sequence_file_format", "required": True}}, + } + ) + + sequence_file_format: SequenceFileFormat = Field( + default=..., + description="""The format of a sequence file""", + json_schema_extra={ + "linkml_meta": {"alias": "sequence_file_format", "domain_of": ["TextFileSequence", "UploadedFileSource"]} + }, + ) + file_name: Optional[str] = Field( + default=None, + description="""The name of the file""", + json_schema_extra={ + "linkml_meta": {"alias": "file_name", "domain_of": ["UploadedFileSource", "AssociatedFile"]} + }, + ) + index_in_file: Optional[int] = Field( + default=None, + description="""The index of the sequence in the file""", + json_schema_extra={"linkml_meta": {"alias": "index_in_file", "domain_of": ["UploadedFileSource"]}}, + ) + circularize: Optional[bool] = Field( + default=None, + description="""Whether the sequence should be circularized (FASTA only)""", + json_schema_extra={"linkml_meta": {"alias": "circularize", "domain_of": ["UploadedFileSource"]}}, + ) + coordinates: Optional[str] = Field( + default=None, + description="""If provided, coordinates within the sequence of the file to extract a subsequence""", + json_schema_extra={"linkml_meta": {"alias": "coordinates", "domain_of": ["UploadedFileSource"]}}, + ) + type: Literal["UploadedFileSource"] = Field( + default="UploadedFileSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class RepositoryIdSource(Source): + """ + Represents the source of a sequence that is identified by a repository id + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + repository_id: str = Field( + default=..., + description="""The id of the sequence in the repository""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["RepositoryIdSource"] = Field( + default="RepositoryIdSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class AddgeneIdSource(RepositoryIdSource): + """ + Represents the source of a sequence that is identified by an Addgene id + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + sequence_file_url: Optional[str] = Field( + default=None, + description="""The URL of a sequence file""", + json_schema_extra={ + "linkml_meta": { + "alias": "sequence_file_url", + "domain_of": [ + "AddgeneIdSource", + "WekWikGeneIdSource", + "SEVASource", + "IGEMSource", + "OpenDNACollectionsSource", + ], + } + }, + ) + addgene_sequence_type: Optional[AddgeneSequenceType] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "addgene_sequence_type", "domain_of": ["AddgeneIdSource"]}}, + ) + repository_id: str = Field( + default=..., + description="""The id of the sequence in the repository""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["AddgeneIdSource"] = Field( + default="AddgeneIdSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("sequence_file_url") + def pattern_sequence_file_url(cls, v): + pattern = re.compile( + r"^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sequence_file_url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sequence_file_url format: {v}" + raise ValueError(err_msg) + return v + + +class WekWikGeneIdSource(RepositoryIdSource): + """ + Represents the source of a sequence that is identified by a WeKwikGene id + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "The id of the gene in the " "WeKwikGene database", + "name": "repository_id", + "pattern": "^\\d+$", + } + }, + } + ) + + sequence_file_url: Optional[str] = Field( + default=None, + description="""The URL of a sequence file""", + json_schema_extra={ + "linkml_meta": { + "alias": "sequence_file_url", + "domain_of": [ + "AddgeneIdSource", + "WekWikGeneIdSource", + "SEVASource", + "IGEMSource", + "OpenDNACollectionsSource", + ], + } + }, + ) + repository_id: str = Field( + default=..., + description="""The id of the gene in the WeKwikGene database""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["WekWikGeneIdSource"] = Field( + default="WekWikGeneIdSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("sequence_file_url") + def pattern_sequence_file_url(cls, v): + pattern = re.compile( + r"^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sequence_file_url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sequence_file_url format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("repository_id") + def pattern_repository_id(cls, v): + pattern = re.compile(r"^\d+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository_id format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository_id format: {v}" + raise ValueError(err_msg) + return v + + +class SEVASource(RepositoryIdSource): + """ + Represents the source of a sequence that is identified by a SEVA id + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "The SEVA plasmid name", + "name": "repository_id", + "pattern": "^pSEVA\\d+.*$", + }, + "sequence_file_url": { + "description": "The URL of the sequence " + "file, which can refer to " + "a a gb file hosted on " + "the SEVA website or an " + "entry in the NCBI.", + "name": "sequence_file_url", + "required": True, + }, + }, + } + ) + + sequence_file_url: str = Field( + default=..., + description="""The URL of the sequence file, which can refer to a a gb file hosted on the SEVA website or an entry in the NCBI.""", + json_schema_extra={ + "linkml_meta": { + "alias": "sequence_file_url", + "domain_of": [ + "AddgeneIdSource", + "WekWikGeneIdSource", + "SEVASource", + "IGEMSource", + "OpenDNACollectionsSource", + ], + } + }, + ) + repository_id: str = Field( + default=..., + description="""The SEVA plasmid name""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["SEVASource"] = Field( + default="SEVASource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("sequence_file_url") + def pattern_sequence_file_url(cls, v): + pattern = re.compile( + r"^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sequence_file_url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sequence_file_url format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("repository_id") + def pattern_repository_id(cls, v): + pattern = re.compile(r"^pSEVA\d+.*$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository_id format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository_id format: {v}" + raise ValueError(err_msg) + return v + + +class BenchlingUrlSource(RepositoryIdSource): + """ + Represents the source of a sequence that is identified by a Benchling URL + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "The url of the gb file " "associated with the sequence", + "name": "repository_id", + "pattern": "^https:\\/\\/benchling\\.com\\/.+\\.gb$", + } + }, + } + ) + + repository_id: str = Field( + default=..., + description="""The url of the gb file associated with the sequence""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["BenchlingUrlSource"] = Field( + default="BenchlingUrlSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("repository_id") + def pattern_repository_id(cls, v): + pattern = re.compile(r"^https:\/\/benchling\.com\/.+\.gb$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository_id format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository_id format: {v}" + raise ValueError(err_msg) + return v + + +class SnapGenePlasmidSource(RepositoryIdSource): + """ + Represents the source of a sequence from the SnapGene plasmid library identified by a SnapGene subpath of https://www.snapgene.com/plasmids/ + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "The subpath of the plasmid " + "in the SnapGene plasmid " + "library. Requesting the " + "plasmid is possible with " + "https://www.snapgene.com/local/fetch.php?set={category_path}&plasmid={plasmid['subpath']} " + "where category_path is the " + "left part of the subpath " + "before the first / and " + "plasmid is the subpath after " + "the /.", + "name": "repository_id", + "pattern": "^.+\\/.+$", + } + }, + } + ) + + repository_id: str = Field( + default=..., + description="""The subpath of the plasmid in the SnapGene plasmid library. Requesting the plasmid is possible with https://www.snapgene.com/local/fetch.php?set={category_path}&plasmid={plasmid['subpath']} where category_path is the left part of the subpath before the first / and plasmid is the subpath after the /.""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["SnapGenePlasmidSource"] = Field( + default="SnapGenePlasmidSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("repository_id") + def pattern_repository_id(cls, v): + pattern = re.compile(r"^.+\/.+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository_id format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository_id format: {v}" + raise ValueError(err_msg) + return v + + +class EuroscarfSource(RepositoryIdSource): + """ + Represents the source of a sequence from the Euroscarf plasmid library + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "The id of the plasmid in the " "Euroscarf plasmid library", + "name": "repository_id", + "pattern": "^P\\d+$", + } + }, + } + ) + + repository_id: str = Field( + default=..., + description="""The id of the plasmid in the Euroscarf plasmid library""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["EuroscarfSource"] = Field( + default="EuroscarfSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("repository_id") + def pattern_repository_id(cls, v): + pattern = re.compile(r"^P\d+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository_id format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository_id format: {v}" + raise ValueError(err_msg) + return v + + +class IGEMSource(RepositoryIdSource): + """ + Represents the source of a sequence from an iGEM collection + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "The unique identifier of the " + "sequence in the iGEM " + "collection (for now, " + "{part_id}-{plasmid_backbone})", + "name": "repository_id", + }, + "sequence_file_url": { + "description": "The URL of the sequence " "file, for now github " "repository", + "name": "sequence_file_url", + "required": True, + }, + }, + } + ) + + sequence_file_url: str = Field( + default=..., + description="""The URL of the sequence file, for now github repository""", + json_schema_extra={ + "linkml_meta": { + "alias": "sequence_file_url", + "domain_of": [ + "AddgeneIdSource", + "WekWikGeneIdSource", + "SEVASource", + "IGEMSource", + "OpenDNACollectionsSource", + ], + } + }, + ) + repository_id: str = Field( + default=..., + description="""The unique identifier of the sequence in the iGEM collection (for now, {part_id}-{plasmid_backbone})""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["IGEMSource"] = Field( + default="IGEMSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("sequence_file_url") + def pattern_sequence_file_url(cls, v): + pattern = re.compile( + r"^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sequence_file_url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sequence_file_url format: {v}" + raise ValueError(err_msg) + return v + + +class OpenDNACollectionsSource(RepositoryIdSource): + """ + Represents the source of a sequence from the Open DNA collections + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": { + "repository_id": { + "description": "Subpath of the sequence in " "the Open DNA collections " "repository", + "name": "repository_id", + } + }, + } + ) + + sequence_file_url: Optional[str] = Field( + default=None, + description="""The URL of a sequence file""", + json_schema_extra={ + "linkml_meta": { + "alias": "sequence_file_url", + "domain_of": [ + "AddgeneIdSource", + "WekWikGeneIdSource", + "SEVASource", + "IGEMSource", + "OpenDNACollectionsSource", + ], + } + }, + ) + repository_id: str = Field( + default=..., + description="""Subpath of the sequence in the Open DNA collections repository""", + json_schema_extra={"linkml_meta": {"alias": "repository_id", "domain_of": ["RepositoryIdSource"]}}, + ) + repository_name: RepositoryName = Field( + default=..., + json_schema_extra={"linkml_meta": {"alias": "repository_name", "domain_of": ["RepositoryIdSource"]}}, + ) + type: Literal["OpenDNACollectionsSource"] = Field( + default="OpenDNACollectionsSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + @field_validator("sequence_file_url") + def pattern_sequence_file_url(cls, v): + pattern = re.compile( + r"^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sequence_file_url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sequence_file_url format: {v}" + raise ValueError(err_msg) + return v + + +class GenomeCoordinatesSource(Source): + """ + Represents the source of a sequence that is identified by genome coordinates, requested from NCBI + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + assembly_accession: Optional[str] = Field( + default=None, + description="""The accession of the assembly""", + json_schema_extra={"linkml_meta": {"alias": "assembly_accession", "domain_of": ["GenomeCoordinatesSource"]}}, + ) + sequence_accession: str = Field( + default=..., + description="""The accession of the sequence""", + json_schema_extra={"linkml_meta": {"alias": "sequence_accession", "domain_of": ["GenomeCoordinatesSource"]}}, + ) + locus_tag: Optional[str] = Field( + default=None, + description="""The locus tag of the sequence""", + json_schema_extra={"linkml_meta": {"alias": "locus_tag", "domain_of": ["GenomeCoordinatesSource"]}}, + ) + gene_id: Optional[int] = Field( + default=None, + description="""The gene id of the sequence""", + json_schema_extra={"linkml_meta": {"alias": "gene_id", "domain_of": ["GenomeCoordinatesSource"]}}, + ) + start: int = Field( + default=..., + description="""The starting coordinate (1-based) of the sequence in the sequence accession""", + json_schema_extra={"linkml_meta": {"alias": "start", "domain_of": ["GenomeCoordinatesSource"]}}, + ) + end: int = Field( + default=..., + description="""The ending coordinate (1-based) of the sequence in the sequence accession""", + json_schema_extra={"linkml_meta": {"alias": "end", "domain_of": ["GenomeCoordinatesSource"]}}, + ) + strand: int = Field( + default=..., + description="""The strand of the sequence in the sequence accession, should be 1 or -1""", + json_schema_extra={ + "linkml_meta": {"alias": "strand", "domain_of": ["GenomeCoordinatesSource", "PlannotateAnnotationReport"]} + }, + ) + type: Literal["GenomeCoordinatesSource"] = Field( + default="GenomeCoordinatesSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class SequenceCutSource(Source): + """ + Represents the source of a sequence that is a subfragment of another sequence, generated by sequence cutting. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + left_edge: Optional[SequenceCut] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "alias": "left_edge", + "domain_of": ["SequenceCutSource", "RestrictionEnzymeDigestionSource"], + } + }, + ) + right_edge: Optional[SequenceCut] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "alias": "right_edge", + "domain_of": ["SequenceCutSource", "RestrictionEnzymeDigestionSource"], + } + }, + ) + type: Literal["SequenceCutSource"] = Field( + default="SequenceCutSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class RestrictionEnzymeDigestionSource(SequenceCutSource): + """ + Represents the source of a sequence that is a subfragment of another sequence, generated by sequence cutting using restriction enzymes. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + left_edge: Optional[RestrictionSequenceCut] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "alias": "left_edge", + "domain_of": ["SequenceCutSource", "RestrictionEnzymeDigestionSource"], + } + }, + ) + right_edge: Optional[RestrictionSequenceCut] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "alias": "right_edge", + "domain_of": ["SequenceCutSource", "RestrictionEnzymeDigestionSource"], + } + }, + ) + type: Literal["RestrictionEnzymeDigestionSource"] = Field( + default="RestrictionEnzymeDigestionSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class AssemblyFragment(SourceInput): + """ + Represents a fragment in an assembly + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + left_location: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"alias": "left_location", "domain_of": ["AssemblyFragment"]}} + ) + right_location: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"alias": "right_location", "domain_of": ["AssemblyFragment"]}} + ) + reverse_complemented: bool = Field( + default=..., + description="""Whether the sequence is reverse complemented in the assembly""", + json_schema_extra={"linkml_meta": {"alias": "reverse_complemented", "domain_of": ["AssemblyFragment"]}}, + ) + type: Literal["AssemblyFragment"] = Field( + default="AssemblyFragment", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + sequence: int = Field( + default=..., + description="""The input sequence""", + json_schema_extra={ + "linkml_meta": {"alias": "sequence", "domain_of": ["Primer", "SourceInput", "PlannotateAnnotationReport"]} + }, + ) + + +class AssemblySource(Source): + """ + Represents the source of a sequence that is an assembly of other sequences + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["AssemblySource"] = Field( + default="AssemblySource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class PCRSource(AssemblySource): + """ + Represents the source of a sequence that is generated by PCR + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + add_primer_features: Optional[bool] = Field( + default=False, + description="""Whether to add primer features to the PCR product""", + json_schema_extra={ + "linkml_meta": {"alias": "add_primer_features", "domain_of": ["PCRSource"], "ifabsent": "boolean(false)"} + }, + ) + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["PCRSource"] = Field( + default="PCRSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class LigationSource(AssemblySource): + """ + Represents the source of a sequence that is generated by ligation with sticky or blunt ends. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["LigationSource"] = Field( + default="LigationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class HomologousRecombinationSource(AssemblySource): + """ + Represents the source of a sequence that is generated by homologous recombination + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["HomologousRecombinationSource"] = Field( + default="HomologousRecombinationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class GibsonAssemblySource(AssemblySource): + """ + Represents the source of a sequence that is generated by Gibson assembly + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["GibsonAssemblySource"] = Field( + default="GibsonAssemblySource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class InFusionSource(AssemblySource): + """ + Represents the source of a sequence that is generated by In-Fusion cloning by Takara Bio + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["InFusionSource"] = Field( + default="InFusionSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class OverlapExtensionPCRLigationSource(AssemblySource): + """ + Represents the source of a sequence that is generated by ligation of PCR products as part of overlap extension PCR. Algorithmically equivalent to Gibson assembly. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["OverlapExtensionPCRLigationSource"] = Field( + default="OverlapExtensionPCRLigationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class InVivoAssemblySource(AssemblySource): + """ + Represents the source of a sequence that is generated by in vivo assembly. Algorithmically equivalent to Gibson assembly. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["InVivoAssemblySource"] = Field( + default="InVivoAssemblySource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class RestrictionAndLigationSource(AssemblySource): + """ + Represents the source of a sequence that is generated by restriction and ligation + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://opencloning.github.io/OpenCloning_LinkML", + "slot_usage": {"restriction_enzymes": {"name": "restriction_enzymes", "required": True}}, + } + ) + + restriction_enzymes: list[str] = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "alias": "restriction_enzymes", + "domain_of": ["RestrictionAndLigationSource"], + "exact_mappings": ["OBI:0000732"], + } + }, + ) + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["RestrictionAndLigationSource"] = Field( + default="RestrictionAndLigationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class GatewaySource(AssemblySource): + """ + Represents the source of a sequence that is generated by Gateway cloning + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + reaction_type: GatewayReactionType = Field( + default=..., json_schema_extra={"linkml_meta": {"alias": "reaction_type", "domain_of": ["GatewaySource"]}} + ) + greedy: Optional[bool] = Field( + default=False, + description="""Whether to use a greedy consensus sequence for att sites (see https://github.com/manulera/GateWayMine)""", + json_schema_extra={ + "linkml_meta": {"alias": "greedy", "domain_of": ["GatewaySource"], "ifabsent": "boolean(false)"} + }, + ) + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["GatewaySource"] = Field( + default="GatewaySource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class CreLoxRecombinationSource(AssemblySource): + """ + Represents the source of a sequence that is generated by Cre - Lox recombination + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["CreLoxRecombinationSource"] = Field( + default="CreLoxRecombinationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class CRISPRSource(HomologousRecombinationSource): + """ + Represents the source of a sequence that is generated by CRISPR + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + circular: Optional[bool] = Field( + default=None, + description="""Whether the assembly is circular or not""", + json_schema_extra={ + "linkml_meta": { + "alias": "circular", + "domain_of": ["TemplateSequence", "ManuallyTypedSource", "AssemblySource"], + } + }, + ) + type: Literal["CRISPRSource"] = Field( + default="CRISPRSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class OligoHybridizationSource(Source): + """ + Represents the source of a sequence that is generated by oligo hybridization + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + overhang_crick_3prime: Optional[int] = Field( + default=None, + description="""Taken from pydna's `dseq::ovhg`An integer describing the length of the crick strand overhang in the 5' of the molecule, or 3' of the crick strand""", + json_schema_extra={ + "linkml_meta": { + "alias": "overhang_crick_3prime", + "domain_of": ["TextFileSequence", "ManuallyTypedSource", "OligoHybridizationSource"], + } + }, + ) + type: Literal["OligoHybridizationSource"] = Field( + default="OligoHybridizationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class PolymeraseExtensionSource(Source): + """ + Represents the source of a sequence that is generated by polymerase extension + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + type: Literal["PolymeraseExtensionSource"] = Field( + default="PolymeraseExtensionSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class CloningStrategy(ConfiguredBaseModel): + """ + Represents a cloning strategy + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + sequences: list[Union[Sequence, TemplateSequence, TextFileSequence, Primer]] = Field( + default=..., + description="""The sequences that are used in the cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "sequences", "domain_of": ["CloningStrategy"]}}, + ) + sources: list[ + Union[ + Source, + DatabaseSource, + CollectionSource, + ManuallyTypedSource, + UploadedFileSource, + RepositoryIdSource, + GenomeCoordinatesSource, + SequenceCutSource, + AssemblySource, + OligoHybridizationSource, + PolymeraseExtensionSource, + AnnotationSource, + ReverseComplementSource, + PCRSource, + LigationSource, + HomologousRecombinationSource, + GibsonAssemblySource, + InFusionSource, + OverlapExtensionPCRLigationSource, + InVivoAssemblySource, + RestrictionAndLigationSource, + GatewaySource, + CreLoxRecombinationSource, + CRISPRSource, + RestrictionEnzymeDigestionSource, + AddgeneIdSource, + WekWikGeneIdSource, + SEVASource, + BenchlingUrlSource, + SnapGenePlasmidSource, + EuroscarfSource, + IGEMSource, + OpenDNACollectionsSource, + ] + ] = Field( + default=..., + description="""The sources of the sequences that are used in the cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "sources", "domain_of": ["CloningStrategy"]}}, + ) + primers: Optional[list[Primer]] = Field( + default=None, + description="""The primers that are used in the cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "primers", "domain_of": ["CloningStrategy"]}}, + ) + description: Optional[str] = Field( + default=None, + description="""A description of the cloning strategy""", + json_schema_extra={ + "linkml_meta": { + "alias": "description", + "domain_of": ["CollectionSource", "CollectionOptionInfo", "CloningStrategy"], + } + }, + ) + files: Optional[list[Union[AssociatedFile, SequencingFile]]] = Field( + default=None, + description="""Files associated with this cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "files", "domain_of": ["CloningStrategy"]}}, + ) + schema_version: Optional[str] = Field( + default=None, + description="""The version of the schema that was used to generate this cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "schema_version", "domain_of": ["CloningStrategy"]}}, + ) + backend_version: Optional[str] = Field( + default=None, + description="""The version of the backend that was used to generate this cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "backend_version", "domain_of": ["CloningStrategy"]}}, + ) + frontend_version: Optional[str] = Field( + default=None, + description="""The version of the frontend that was used to generate this cloning strategy""", + json_schema_extra={"linkml_meta": {"alias": "frontend_version", "domain_of": ["CloningStrategy"]}}, + ) + + +class AnnotationReport(ConfiguredBaseModel): + """ + Represents a report of an annotation step + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + type: Literal["AnnotationReport"] = Field( + default="AnnotationReport", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + + +class PlannotateAnnotationReport(AnnotationReport): + """ + Represents a report of an annotation step using Plannotate + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + sseqid: Optional[str] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "sseqid", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + start_location: Optional[int] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "start_location", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + end_location: Optional[int] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "end_location", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + strand: Optional[int] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"alias": "strand", "domain_of": ["GenomeCoordinatesSource", "PlannotateAnnotationReport"]} + }, + ) + percent_identity: Optional[float] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "percent_identity", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + full_length_of_feature_in_db: Optional[int] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"alias": "full_length_of_feature_in_db", "domain_of": ["PlannotateAnnotationReport"]} + }, + ) + length_of_found_feature: Optional[int] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"alias": "length_of_found_feature", "domain_of": ["PlannotateAnnotationReport"]} + }, + ) + percent_match_length: Optional[float] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"alias": "percent_match_length", "domain_of": ["PlannotateAnnotationReport"]} + }, + ) + fragment: Optional[bool] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "fragment", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + database: Optional[str] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "database", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + Feature: Optional[str] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "Feature", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + Type: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"alias": "Type", "domain_of": ["PlannotateAnnotationReport"]}} + ) + Description: Optional[str] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "Description", "domain_of": ["PlannotateAnnotationReport"]}}, + ) + sequence: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"alias": "sequence", "domain_of": ["Primer", "SourceInput", "PlannotateAnnotationReport"]} + }, + ) + type: Literal["PlannotateAnnotationReport"] = Field( + default="PlannotateAnnotationReport", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + + +class AnnotationSource(Source): + """ + Represents a computational step in which sequence features are annotated in a sequence + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + annotation_tool: AnnotationTool = Field( + default=..., json_schema_extra={"linkml_meta": {"alias": "annotation_tool", "domain_of": ["AnnotationSource"]}} + ) + annotation_tool_version: Optional[str] = Field( + default=None, + description="""The version of the annotation tool""", + json_schema_extra={"linkml_meta": {"alias": "annotation_tool_version", "domain_of": ["AnnotationSource"]}}, + ) + annotation_report: Optional[list[Union[AnnotationReport, PlannotateAnnotationReport]]] = Field( + default=None, + json_schema_extra={"linkml_meta": {"alias": "annotation_report", "domain_of": ["AnnotationSource"]}}, + ) + type: Literal["AnnotationSource"] = Field( + default="AnnotationSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class ReverseComplementSource(Source): + """ + Represents the in-silico transformation of a sequence into its reverse complement + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + type: Literal["ReverseComplementSource"] = Field( + default="ReverseComplementSource", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + output_name: Optional[str] = Field( + default=None, + description="""Used to specify the name of the output sequence""", + json_schema_extra={"linkml_meta": {"alias": "output_name", "domain_of": ["Source"]}}, + ) + database_id: Optional[int] = Field( + default=None, + description="""The id of an entity in a database""", + json_schema_extra={ + "linkml_meta": { + "alias": "database_id", + "domain_of": ["Primer", "Source", "DatabaseSource"], + "slot_uri": "schema:identifier", + } + }, + ) + input: Optional[list[Union[SourceInput, AssemblyFragment]]] = Field( + default_factory=list, + description="""The inputs to this source. If the source represents external import of a sequence, it's empty.""", + json_schema_extra={"linkml_meta": {"alias": "input", "domain_of": ["Source"], "slot_uri": "schema:object"}}, + ) + id: int = Field( + default=..., + description="""A unique identifier for a thing""", + json_schema_extra={ + "linkml_meta": {"alias": "id", "domain_of": ["NamedThing", "Sequence"], "slot_uri": "schema:identifier"} + }, + ) + + +class AssociatedFile(ConfiguredBaseModel): + """ + Represents a file associated with a sequence + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + type: Literal["AssociatedFile"] = Field( + default="AssociatedFile", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + sequence_id: int = Field( + default=..., + description="""The sequence this file is associated with""", + json_schema_extra={"linkml_meta": {"alias": "sequence_id", "domain_of": ["AssociatedFile"]}}, + ) + file_name: str = Field( + default=..., + description="""The name of the file""", + json_schema_extra={ + "linkml_meta": {"alias": "file_name", "domain_of": ["UploadedFileSource", "AssociatedFile"]} + }, + ) + file_type: AssociatedFileType = Field( + default=..., + description="""The type of file""", + json_schema_extra={"linkml_meta": {"alias": "file_type", "domain_of": ["AssociatedFile"]}}, + ) + + +class SequencingFile(AssociatedFile): + """ + Represents a sequencing file and its alignment to a sequence + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({"from_schema": "https://opencloning.github.io/OpenCloning_LinkML"}) + + alignment: list[str] = Field( + default=..., + description="""The alignment of the sequencing read to the sequence. List of strings representing aligned sequences.""", + json_schema_extra={"linkml_meta": {"alias": "alignment", "domain_of": ["SequencingFile"]}}, + ) + type: Literal["SequencingFile"] = Field( + default="SequencingFile", + description="""Designates the class""", + json_schema_extra={ + "linkml_meta": { + "alias": "type", + "designates_type": True, + "domain_of": [ + "Sequence", + "SourceInput", + "Source", + "CollectionOptionInfo", + "AnnotationReport", + "AssociatedFile", + ], + } + }, + ) + sequence_id: int = Field( + default=..., + description="""The sequence this file is associated with""", + json_schema_extra={"linkml_meta": {"alias": "sequence_id", "domain_of": ["AssociatedFile"]}}, + ) + file_name: str = Field( + default=..., + description="""The name of the file""", + json_schema_extra={ + "linkml_meta": {"alias": "file_name", "domain_of": ["UploadedFileSource", "AssociatedFile"]} + }, + ) + file_type: AssociatedFileType = Field( + default=..., + description="""The type of file""", + json_schema_extra={"linkml_meta": {"alias": "file_type", "domain_of": ["AssociatedFile"]}}, + ) + + +# Model rebuild +# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model +NamedThing.model_rebuild() +Sequence.model_rebuild() +TemplateSequence.model_rebuild() +TextFileSequence.model_rebuild() +Primer.model_rebuild() +SourceInput.model_rebuild() +SequenceCut.model_rebuild() +RestrictionSequenceCut.model_rebuild() +Source.model_rebuild() +DatabaseSource.model_rebuild() +CollectionSource.model_rebuild() +CollectionOption.model_rebuild() +CollectionOptionInfo.model_rebuild() +ManuallyTypedSource.model_rebuild() +UploadedFileSource.model_rebuild() +RepositoryIdSource.model_rebuild() +AddgeneIdSource.model_rebuild() +WekWikGeneIdSource.model_rebuild() +SEVASource.model_rebuild() +BenchlingUrlSource.model_rebuild() +SnapGenePlasmidSource.model_rebuild() +EuroscarfSource.model_rebuild() +IGEMSource.model_rebuild() +OpenDNACollectionsSource.model_rebuild() +GenomeCoordinatesSource.model_rebuild() +SequenceCutSource.model_rebuild() +RestrictionEnzymeDigestionSource.model_rebuild() +AssemblyFragment.model_rebuild() +AssemblySource.model_rebuild() +PCRSource.model_rebuild() +LigationSource.model_rebuild() +HomologousRecombinationSource.model_rebuild() +GibsonAssemblySource.model_rebuild() +InFusionSource.model_rebuild() +OverlapExtensionPCRLigationSource.model_rebuild() +InVivoAssemblySource.model_rebuild() +RestrictionAndLigationSource.model_rebuild() +GatewaySource.model_rebuild() +CreLoxRecombinationSource.model_rebuild() +CRISPRSource.model_rebuild() +OligoHybridizationSource.model_rebuild() +PolymeraseExtensionSource.model_rebuild() +CloningStrategy.model_rebuild() +AnnotationReport.model_rebuild() +PlannotateAnnotationReport.model_rebuild() +AnnotationSource.model_rebuild() +ReverseComplementSource.model_rebuild() +AssociatedFile.model_rebuild() +SequencingFile.model_rebuild() diff --git a/src/opencloning_linkml/migrations/transformations/v0_4_0_to_v0_4_6.py b/src/opencloning_linkml/migrations/transformations/v0_4_0_to_v0_4_6.py new file mode 100644 index 0000000..9881cd3 --- /dev/null +++ b/src/opencloning_linkml/migrations/transformations/v0_4_0_to_v0_4_6.py @@ -0,0 +1,23 @@ +from ..model_archive.v0_4_6 import CloningStrategy as new_CloningStrategy +from copy import deepcopy + + +def migrate_0_4_0_to_0_4_6(data: dict) -> dict: + """ + Migrate data from version 0.4.0 to 0.4.6. + + In this case, it's just removing the output field from the sources, + which were sometimes wrongly added in the frontend. + + https://github.com/OpenCloning/OpenCloning_LinkML/issues/63 + """ + new_data = deepcopy(data) + + for source in new_data["sources"]: + if "output" in source: + del source["output"] + + new = new_CloningStrategy.model_validate(new_data) + new.schema_version = "0.4.6" + + return new.model_dump() diff --git a/tests/migration/v0.4.0/output_field.json b/tests/migration/v0.4.0/output_field.json new file mode 100644 index 0000000..9304b9e --- /dev/null +++ b/tests/migration/v0.4.0/output_field.json @@ -0,0 +1,32 @@ +{ + "sequences": [ + { + "id": 1, + "type": "TextFileSequence", + "sequence_file_format": "genbank", + "overhang_crick_3prime": 0, + "overhang_watson_3prime": 0, + "file_content": "LOCUS hm_repair 997 bp DNA linear UNA 14-NOV-2025\nDEFINITION natural linear DNA.\nACCESSION .\nVERSION .\nKEYWORDS .\nSOURCE natural DNA sequence\n ORGANISM unspecified\n .\nREFERENCE 1 (bases 1 to 997)\n AUTHORS Trial User\n TITLE Direct Submission\n JOURNAL Exported Nov 14, 2025 from SnapGene 8.2.1 https://www.snapgene.com\nFEATURES Location/Qualifiers\n source 1..997\n /mol_type=\"genomic DNA\"\n /organism=\"unspecified\"\n misc_feature 590..595\n /label=\"modification\"\nORIGIN\n 1 tttagcggtt tagtacaata tggttaattt gataaccaca tacttgatac ctgttgtatc\n 61 tagagttgta tataacaaaa ttagaattat attctattgg ctaagccaat ttctctccac\n 121 caatcagttt acatcggtta tttggaacat tattatcgat aagcaatgtc attatccaaa\n 181 attttggaat gttatcgtat gaagaagagt gtagaagtat cttgatcaca tatgaatggc\n 241 ttacctcaat cctcaaaaaa aaaaaaaaaa acaatgattt tccaaagcat atgtggtaat\n 301 aaataatgtt ataatcttca cttgaaaaaa aaaacaaatc cattggcaca gattagccat\n 361 ttgacgacaa cctcataaac atattccacg tggaccaatc aaaatagaat cctcctaatc\n 421 atcttcctcg tggcaacttg gccaatccgc atcgtgtggc gatcagagag ttaagccttg\n 481 aagacgaaga gataacgaat tggttgttga tcactcgctt tataaatctc tcagtttctt\n 541 gctcacacca acatctctct aagcttcttc ttctaccaat ctaattccta aaaaagcttc\n 601 ttgtgttgtg acgcatactc gtcgcagtct tgagatatgg ccgccgcagt ttccaccgtc\n 661 ggtgccatca acagagctcc ggtacacttc aatctccatt agtggtttaa tgttactttt\n 721 aacataatct taacgctttg tgcttatcca ccacttgaat agctttggtt tttacaaata\n 781 tagctcaaga atttgatcgt ttgaatcact ttgagattct ctgacagaac agaagaatca\n 841 ggactttaac taggaaatct aaagatactt tgatgcttct tttattctct acttgtgaac\n 901 tatagattta gtagatgtgt ttaaatcgat gtatagtaat tgaactgaaa ctgtagagac\n 961 tactactact ctttagtctt caggactagt ctatacc\n//" + } + ], + "sources": [ + { + "id": 1, + "type": "UploadedFileSource", + "output_name": null, + "database_id": null, + "input": [], + "sequence_file_format": "genbank", + "file_name": "hm_repair.gb", + "index_in_file": 0, + "circularize": false, + "coordinates": null, + "output": 1 + } + ], + "description": "", + "primers": [], + "backend_version": "0.4.8", + "schema_version": "0.4.4", + "frontend_version": "v0.4.17" +} diff --git a/tests/test_migration.py b/tests/test_migration.py index 3baa15d..b549142 100644 --- a/tests/test_migration.py +++ b/tests/test_migration.py @@ -98,6 +98,17 @@ def test_0_2_8_to_0_2_9(self): self.assertEqual(cs.sources[0].assembly[0].right_location, "0^1") self.assertEqual(cs.sources[1].coordinates, "1..100") + def test_0_4_0_to_0_4_6(self): + from opencloning_linkml.migrations.model_archive.v0_4_6 import CloningStrategy as new_CloningStrategy + + with open(os.path.join(test_folder, "migration/v0.4.0/output_field.json"), "r") as f: + data = json.load(f) + self.assertIn("output", data["sources"][0]) + migrated_data = migrate(data, "0.4.6") + # Just has to pass the validation + new_CloningStrategy(**migrated_data) + self.assertNotIn("output", migrated_data["sources"][0]) + def test_0_2_9_to_0_4_0(self): from opencloning_linkml.migrations.model_archive.v0_2_9 import CloningStrategy as old_CloningStrategy from opencloning_linkml.migrations.model_archive.v0_4_0 import CloningStrategy as new_CloningStrategy