From 0f7333355171dbbf42511deea1d7d6ff17377da3 Mon Sep 17 00:00:00 2001 From: hsolbrig Date: Tue, 20 Aug 2019 14:10:15 -0500 Subject: [PATCH] Newest biolinkml output + changes from dataset push --- Pipfile | 2 +- Pipfile.lock | 58 +- biolink-model.graphql | 109 ++ biolink-model.owl | 530 +++++---- biolink-model.proto | 63 ++ biolink-model.shex | 121 +- biolink-model.ttl | 479 +++++--- biolink/__init__.py | 3 +- biolink/model.py | 1230 +++++++++++++++------ context.jsonld | 45 +- contextn.jsonld | 17 +- docs/DataFile.md | 42 + docs/DataSet.md | 42 + docs/DataSetSummary.md | 65 ++ docs/DataSetVersion.md | 68 ++ docs/DistributionLevel.md | 66 ++ docs/NamedThing.md | 2 + docs/SourceFile.md | 51 + docs/category.md | 6 + docs/description.md | 6 + docs/distribution.md | 24 + docs/downloadURL.md | 22 + docs/full_name.md | 6 + docs/id.md | 6 + docs/images/DataFile.png | Bin 0 -> 12660 bytes docs/images/DataSet.png | Bin 0 -> 10749 bytes docs/images/DataSetSummary.png | Bin 0 -> 22017 bytes docs/images/DataSetVersion.png | Bin 0 -> 18678 bytes docs/images/DistributionLevel.png | Bin 0 -> 18481 bytes docs/images/NamedThing.png | Bin 34562 -> 40278 bytes docs/images/SourceFile.png | Bin 0 -> 8213 bytes docs/index.md | 17 + docs/interacts_with.md | 6 + docs/iri.md | 6 + docs/name.md | 6 + docs/node_property.md | 15 + docs/related_to.md | 6 + docs/retrievedOn.md | 22 + docs/source_data_file.md | 24 + docs/source_version.md | 22 + docs/source_web_page.md | 22 + docs/synonym.md | 6 + docs/systematic_synonym.md | 6 + docs/title.md | 24 + docs/type.md | 24 + docs/versionOf.md | 24 + golr-views/data_file-config.yaml | 61 + golr-views/data_set-config.yaml | 61 + golr-views/data_set_summary-config.yaml | 79 ++ golr-views/data_set_version-config.yaml | 76 ++ golr-views/distribution_level-config.yaml | 79 ++ golr-views/source_file-config.yaml | 67 ++ graphviz/data_file.gv | 125 +++ graphviz/data_file.svg | 175 +++ graphviz/data_set.gv | 125 +++ graphviz/data_set.svg | 175 +++ graphviz/data_set_summary.gv | 185 ++++ graphviz/data_set_summary.svg | 253 +++++ graphviz/data_set_version.gv | 175 +++ graphviz/data_set_version.svg | 240 ++++ graphviz/distribution_level.gv | 185 ++++ graphviz/distribution_level.svg | 253 +++++ graphviz/source_file.gv | 145 +++ graphviz/source_file.svg | 201 ++++ java/BiolinkModel.java | 198 +++- java/DataFile.java | 43 + java/DataSet.java | 43 + java/DataSetSummary.java | 56 + java/DataSetVersion.java | 108 ++ java/DistributionLevel.java | 56 + java/SourceFile.java | 69 ++ json-schema/biolink-model.json | 94 ++ setup.cfg | 2 +- 73 files changed, 5856 insertions(+), 766 deletions(-) create mode 100644 docs/DataFile.md create mode 100644 docs/DataSet.md create mode 100644 docs/DataSetSummary.md create mode 100644 docs/DataSetVersion.md create mode 100644 docs/DistributionLevel.md create mode 100644 docs/SourceFile.md create mode 100644 docs/distribution.md create mode 100644 docs/downloadURL.md create mode 100644 docs/images/DataFile.png create mode 100644 docs/images/DataSet.png create mode 100644 docs/images/DataSetSummary.png create mode 100644 docs/images/DataSetVersion.png create mode 100644 docs/images/DistributionLevel.png create mode 100644 docs/images/SourceFile.png create mode 100644 docs/retrievedOn.md create mode 100644 docs/source_data_file.md create mode 100644 docs/source_version.md create mode 100644 docs/source_web_page.md create mode 100644 docs/title.md create mode 100644 docs/type.md create mode 100644 docs/versionOf.md create mode 100644 golr-views/data_file-config.yaml create mode 100644 golr-views/data_set-config.yaml create mode 100644 golr-views/data_set_summary-config.yaml create mode 100644 golr-views/data_set_version-config.yaml create mode 100644 golr-views/distribution_level-config.yaml create mode 100644 golr-views/source_file-config.yaml create mode 100644 graphviz/data_file.gv create mode 100644 graphviz/data_file.svg create mode 100644 graphviz/data_set.gv create mode 100644 graphviz/data_set.svg create mode 100644 graphviz/data_set_summary.gv create mode 100644 graphviz/data_set_summary.svg create mode 100644 graphviz/data_set_version.gv create mode 100644 graphviz/data_set_version.svg create mode 100644 graphviz/distribution_level.gv create mode 100644 graphviz/distribution_level.svg create mode 100644 graphviz/source_file.gv create mode 100644 graphviz/source_file.svg create mode 100644 java/DataFile.java create mode 100644 java/DataSet.java create mode 100644 java/DataSetSummary.java create mode 100644 java/DataSetVersion.java create mode 100644 java/DistributionLevel.java create mode 100644 java/SourceFile.java diff --git a/Pipfile b/Pipfile index 07f4270930..5b7566a5de 100644 --- a/Pipfile +++ b/Pipfile @@ -4,7 +4,7 @@ verify_ssl = true name = "pypi" [packages] -biolinkml = ">=1.4.2" +biolinkml = ">=1.4.5" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index d59967ce46..3b4ce74c67 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "81d360339ce1c446dfb673465d5d30c53fdeb9fa67035b1bb5a2a3056de3e92a" + "sha256": "3ba9a44f446e2d72cb1d99954e9863ae5d96fd0926d37e15fb65d20bdf43c1c5" }, "pipfile-spec": 6, "requires": { @@ -45,11 +45,11 @@ }, "biolinkml": { "hashes": [ - "sha256:ad3f7b22fd0d83677ebe9dba2d77855b942fccd1270776a52aca08eb3716d8b1", - "sha256:df55c7954ca128972c09c1729793c5347aacb6933b046d882a24222b9a13c8ba" + "sha256:67de3183c18cb51fc74bee2f3e01e0d1cdb200c07faeead31e10b1bfe6e1e22f", + "sha256:ec671dbb7590698343ff62b98d635edf14b7fc5938a4ef6cf23af8ca501ef589" ], "index": "pypi", - "version": "==1.4.2" + "version": "==1.4.5" }, "cachier": { "hashes": [ @@ -114,10 +114,10 @@ }, "jsonschema": { "hashes": [ - "sha256:0c0a81564f181de3212efa2d17de1910f8732fa1b71c42266d983cd74304e20d", - "sha256:a5f6559964a3851f59040d3b961de5e68e70971afb88ba519d27e6a039efff1a" + "sha256:5f9c0a719ca2ce14c5de2fd350a64fd2d13e8539db29836a86adc990bb1a068f", + "sha256:8d4a2b7b6c2237e0199c8ea1a6d3e05bf118e289ae2b9d7ba444182a2959560d" ], - "version": "==3.0.1" + "version": "==3.0.2" }, "pathtools": { "hashes": [ @@ -127,10 +127,10 @@ }, "portalocker": { "hashes": [ - "sha256:40477dff70ba7e6ffa0b272da6e9cdd2ab8b9b54b90f71ea362bea69d2d6c09d", - "sha256:d9af6b298554286a05b9fd361289fe8a86b2b0f41a82cd93b147155bd398c523" + "sha256:1ed88cff4807267ec3331d2a843529399256043851509c39487db97146dda821", + "sha256:934a848531ecd03b78d780402ddbf57e518172c67f0b4b9fbe2ea253fdaf6c3f" ], - "version": "==1.5.0" + "version": "==1.5.1" }, "prefixcommons": { "hashes": [ @@ -147,16 +147,16 @@ }, "pyparsing": { "hashes": [ - "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", - "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" + "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", + "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4" ], - "version": "==2.4.0" + "version": "==2.4.2" }, "pyrsistent": { "hashes": [ - "sha256:50cffebc87ca91b9d4be2dcc2e479272bcb466b5a0487b6c271f7ddea6917e14" + "sha256:34b47fa169d6006b32e99d4b3c4031f155e6e68ebcc107d6454852e8e0ee6533" ], - "version": "==0.15.3" + "version": "==0.15.4" }, "pyshex": { "hashes": [ @@ -173,19 +173,21 @@ }, "pyyaml": { "hashes": [ - "sha256:57acc1d8533cbe51f6662a55434f0dbecfa2b9eaf115bede8f6fd00115a0c0d3", - "sha256:588c94b3d16b76cfed8e0be54932e5729cc185caffaa5a451e7ad2f7ed8b4043", - "sha256:68c8dd247f29f9a0d09375c9c6b8fdc64b60810ebf07ba4cdd64ceee3a58c7b7", - "sha256:70d9818f1c9cd5c48bb87804f2efc8692f1023dac7f1a1a5c61d454043c1d265", - "sha256:86a93cccd50f8c125286e637328ff4eef108400dd7089b46a7be3445eecfa391", - "sha256:a0f329125a926876f647c9fa0ef32801587a12328b4a3c741270464e3e4fa778", - "sha256:a3c252ab0fa1bb0d5a3f6449a4826732f3eb6c0270925548cac342bc9b22c225", - "sha256:b4bb4d3f5e232425e25dda21c070ce05168a786ac9eda43768ab7f3ac2770955", - "sha256:cd0618c5ba5bda5f4039b9398bb7fb6a317bb8298218c3de25c47c4740e4b95e", - "sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190", - "sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd" - ], - "version": "==5.1.1" + "sha256:0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9", + "sha256:01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4", + "sha256:5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8", + "sha256:5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696", + "sha256:7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34", + "sha256:7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9", + "sha256:87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73", + "sha256:9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299", + "sha256:a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b", + "sha256:b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae", + "sha256:b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681", + "sha256:bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41", + "sha256:f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8" + ], + "version": "==5.1.2" }, "rdflib": { "hashes": [ diff --git a/biolink-model.graphql b/biolink-model.graphql index 7778842003..4d459695bc 100644 --- a/biolink-model.graphql +++ b/biolink-model.graphql @@ -719,6 +719,77 @@ type ConfidenceLevel systematicSynonym: [LabelType] } +type DataFile + { + id: IdentifierType! + name: LabelType! + category: [IriType]! + relatedTo: [NamedThing] + interactsWith: [NamedThing] + nodeProperty: String + iri: IriType + synonym: [LabelType] + fullName: LabelType + description: NarrativeText + systematicSynonym: [LabelType] + } + +type DataSet + { + id: IdentifierType! + name: LabelType! + category: [IriType]! + relatedTo: [NamedThing] + interactsWith: [NamedThing] + nodeProperty: String + iri: IriType + synonym: [LabelType] + fullName: LabelType + description: NarrativeText + systematicSynonym: [LabelType] + } + +interface DataSetSummary + { + id: IdentifierType! + name: LabelType! + category: [IriType]! + relatedTo: [NamedThing] + interactsWith: [NamedThing] + nodeProperty: String + iri: IriType + synonym: [LabelType] + fullName: LabelType + description: NarrativeText + systematicSynonym: [LabelType] + title: String + sourceDataFile: DataFile + versionOf: DataSet + type: String + distribution: DistributionLevel + sourceWebPage: String + } + +type DataSetVersion + { + id: IdentifierType! + name: LabelType! + category: [IriType]! + relatedTo: [NamedThing] + interactsWith: [NamedThing] + nodeProperty: String + iri: IriType + synonym: [LabelType] + fullName: LabelType + description: NarrativeText + systematicSynonym: [LabelType] + title: String + sourceDataFile: DataFile + versionOf: DataSet + type: String + distribution: DistributionLevel + } + type Device { id: IdentifierType! @@ -838,6 +909,27 @@ interface DiseaseToThingAssociation edgeLabel: LabelType! } +interface DistributionLevel + { + id: IdentifierType! + name: LabelType! + category: [IriType]! + relatedTo: [NamedThing] + interactsWith: [NamedThing] + nodeProperty: String + iri: IriType + synonym: [LabelType] + fullName: LabelType + description: NarrativeText + systematicSynonym: [LabelType] + title: String + sourceDataFile: DataFile + versionOf: DataSet + type: String + distribution: DistributionLevel + downloadURL: String + } + type Drug { id: IdentifierType! @@ -3517,6 +3609,23 @@ type SeverityValue subclassOf: [IriType] } +type SourceFile + { + id: IdentifierType! + name: LabelType! + category: [IriType]! + relatedTo: [NamedThing] + interactsWith: [NamedThing] + nodeProperty: String + iri: IriType + synonym: [LabelType] + fullName: LabelType + description: NarrativeText + systematicSynonym: [LabelType] + sourceVersion: String + retrievedOn: Date + } + interface SpecificityQuantifier { } diff --git a/biolink-model.owl b/biolink-model.owl index fee8fc919e..333ea11e51 100644 --- a/biolink-model.owl +++ b/biolink-model.owl @@ -13,11 +13,11 @@ rdfs:label "biolink_model" ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; skos:definition "Entity and association taxonomy and datamodel for life-sciences data" ; - meta:generation_date "2019-07-22 10:57" ; - meta:metamodel_version "1.4.0" ; + meta:generation_date "2019-08-20 14:05" ; + meta:metamodel_version "1.4.1" ; meta:source_file "biolink-model.yaml" ; - meta:source_file_date "Fri Jul 19 16:13:28 2019" ; - meta:source_file_size 107096 . + meta:source_file_date "Tue Aug 20 14:02:33 2019" ; + meta:source_file_size 108746 . meta:ActivityAndBehavior a owl:Class, meta:ClassDefinition ; @@ -98,15 +98,15 @@ meta:EnvironmentalProcess a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom meta:Occurrent ; owl:onProperty meta:regulates_process_to_process ], + [ a owl:Restriction ; + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:has_input ], [ a owl:Restriction ; owl:allValuesFrom meta:Occurrent ; owl:onProperty meta:precedes ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:has_participant ], - [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:has_input ], meta:Occurrent, meta:PlanetaryEntity . @@ -228,7 +228,7 @@ meta:anatomical_entity_to_anatomical_entity_ontogenic_association_relation a owl meta:SlotDefinition ; rdfs:label "anatomical entity to anatomical entity ontogenic association_relation" ; rdfs:domain meta:AnatomicalEntityToAnatomicalEntityOntogenicAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:anatomical_entity_to_anatomical_entity_ontogenic_association_subject a owl:AnnotationProperty, @@ -249,7 +249,7 @@ meta:anatomical_entity_to_anatomical_entity_part_of_association_relation a owl:A meta:SlotDefinition ; rdfs:label "anatomical entity to anatomical entity part of association_relation" ; rdfs:domain meta:AnatomicalEntityToAnatomicalEntityPartOfAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:anatomical_entity_to_anatomical_entity_part_of_association_subject a owl:AnnotationProperty, @@ -377,6 +377,20 @@ meta:disease_to_thing_association_subject a owl:AnnotationProperty, rdfs:range meta:Disease ; rdfs:subPropertyOf meta:subject . +meta:distribution a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "distribution" ; + rdfs:domain meta:DataSetVersion ; + rdfs:range meta:DistributionLevel ; + rdfs:subPropertyOf meta:node_property . + +meta:downloadURL a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "downloadURL" ; + rdfs:domain meta:DistributionLevel ; + rdfs:range meta:string ; + rdfs:subPropertyOf meta:node_property . + meta:drug a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "drug" ; @@ -389,7 +403,7 @@ meta:edge_label a owl:AnnotationProperty, rdfs:domain meta:Association ; rdfs:range meta:label_type ; rdfs:subPropertyOf meta:association_slot ; - skos:definition "A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes. " ; + skos:definition "A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes." ; skos:editorialNote "in neo4j this corresponds to the relationship type and the convention is for a snake_case label" . meta:end_interbase_coordinate a owl:AnnotationProperty, @@ -495,7 +509,7 @@ meta:gene_regulatory_relationship_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "gene regulatory relationship_relation" ; rdfs:domain meta:GeneRegulatoryRelationship ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:gene_regulatory_relationship_subject a owl:AnnotationProperty, @@ -523,7 +537,7 @@ meta:gene_to_expression_site_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "gene to expression site association_relation" ; rdfs:domain meta:GeneToExpressionSiteAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:gene_to_expression_site_association_stage_qualifier a owl:AnnotationProperty, @@ -558,7 +572,7 @@ meta:gene_to_gene_homology_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "gene to gene homology association_relation" ; rdfs:domain meta:GeneToGeneHomologyAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:gene_to_gene_product_relationship_object a owl:AnnotationProperty, @@ -572,7 +586,7 @@ meta:gene_to_gene_product_relationship_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "gene to gene product relationship_relation" ; rdfs:domain meta:GeneToGeneProductRelationship ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:gene_to_gene_product_relationship_subject a owl:AnnotationProperty, @@ -643,7 +657,7 @@ meta:genotype_to_gene_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "genotype to gene association_relation" ; rdfs:domain meta:GenotypeToGeneAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:genotype_to_gene_association_subject a owl:AnnotationProperty, @@ -664,7 +678,7 @@ meta:genotype_to_genotype_part_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "genotype to genotype part association_relation" ; rdfs:domain meta:GenotypeToGenotypePartAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:genotype_to_genotype_part_association_subject a owl:AnnotationProperty, @@ -678,7 +692,7 @@ meta:genotype_to_phenotypic_feature_association_relation a owl:AnnotationPropert meta:SlotDefinition ; rdfs:label "genotype to phenotypic feature association_relation" ; rdfs:domain meta:GenotypeToPhenotypicFeatureAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:genotype_to_phenotypic_feature_association_subject a owl:AnnotationProperty, @@ -706,7 +720,7 @@ meta:genotype_to_variant_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "genotype to variant association_relation" ; rdfs:domain meta:GenotypeToVariantAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:genotype_to_variant_association_subject a owl:AnnotationProperty, @@ -823,14 +837,14 @@ meta:model_to_disease_mixin_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "model to disease mixin_relation" ; rdfs:domain meta:ModelToDiseaseMixin ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:model_to_disease_mixin_subject a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "model to disease mixin_subject" ; rdfs:domain meta:ModelToDiseaseMixin ; - rdfs:range meta:iri_type ; + rdfs:range meta:NamedThing ; rdfs:subPropertyOf meta:subject . meta:ncname a owl:Class, @@ -881,7 +895,7 @@ meta:pairwise_gene_to_gene_interaction_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "pairwise gene to gene interaction_relation" ; rdfs:domain meta:PairwiseGeneToGeneInteraction ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:pairwise_interaction_association_id a owl:AnnotationProperty, @@ -902,7 +916,7 @@ meta:pairwise_interaction_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "pairwise interaction association_relation" ; rdfs:domain meta:PairwiseInteractionAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:pairwise_interaction_association_subject a owl:AnnotationProperty, @@ -936,7 +950,7 @@ meta:population_to_population_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "population to population association_relation" ; rdfs:domain meta:PopulationToPopulationAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:population_to_population_association_subject a owl:AnnotationProperty, @@ -975,6 +989,13 @@ meta:quotient a owl:Class, rdfs:label "quotient" ; rdfs:subClassOf meta:double . +meta:retrievedOn a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "retrievedOn" ; + rdfs:domain meta:SourceFile ; + rdfs:range meta:date ; + rdfs:subPropertyOf meta:node_property . + meta:sequence_variant_has_biological_sequence a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "sequence variant_has biological sequence" ; @@ -1034,6 +1055,27 @@ meta:sex_qualifier a owl:AnnotationProperty, rdfs:subPropertyOf meta:association_slot ; skos:definition "a qualifier used in a phenotypic association to state whether the association is specific to a particular sex." . +meta:source_data_file a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "source data file" ; + rdfs:domain meta:DataSetVersion ; + rdfs:range meta:DataFile ; + rdfs:subPropertyOf meta:node_property . + +meta:source_version a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "source version" ; + rdfs:domain meta:SourceFile ; + rdfs:range meta:string ; + rdfs:subPropertyOf meta:node_property . + +meta:source_web_page a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "source web page" ; + rdfs:domain meta:DataSetSummary ; + rdfs:range meta:string ; + rdfs:subPropertyOf meta:node_property . + meta:start_interbase_coordinate a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "start interbase coordinate" ; @@ -1072,6 +1114,13 @@ meta:timepoint a owl:AnnotationProperty, rdfs:subPropertyOf meta:node_property ; skos:definition "a point in time" . +meta:title a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "title" ; + rdfs:domain meta:DataSetVersion ; + rdfs:range meta:string ; + rdfs:subPropertyOf meta:node_property . + meta:transcript_to_gene_relationship_object a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "transcript to gene relationship_object" ; @@ -1086,6 +1135,13 @@ meta:transcript_to_gene_relationship_subject a owl:AnnotationProperty, rdfs:range meta:Transcript ; rdfs:subPropertyOf meta:sequence_feature_relationship_subject . +meta:type a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "type" ; + rdfs:domain meta:DataSetVersion ; + rdfs:range meta:string ; + rdfs:subPropertyOf meta:node_property . + meta:unit a owl:Class, meta:TypeDefinition ; rdfs:label "unit" ; @@ -1099,34 +1155,34 @@ meta:update_date a owl:AnnotationProperty, rdfs:subPropertyOf meta:node_property ; skos:definition "date on which thing was updated. This can be applied to nodes or edges" . -meta:uriorcurie a owl:Class, +meta:uri a owl:Class, meta:TypeDefinition ; - rdfs:label "uriorcurie" ; + rdfs:label "uri" ; rdfs:subClassOf [ a owl:Restriction ; owl:onDataRange xsd:anyURI ; owl:onProperty meta:topValue ; owl:qualifiedCardinality 1 ] ; - skos:definition "a URI or a CURIE" . + skos:definition "a complete URI" . meta:variant_to_disease_association_object a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "variant to disease association_object" ; rdfs:domain meta:VariantToDiseaseAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:NamedThing ; rdfs:subPropertyOf meta:object . meta:variant_to_disease_association_relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "variant to disease association_relation" ; rdfs:domain meta:VariantToDiseaseAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:relation . meta:variant_to_disease_association_subject a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "variant to disease association_subject" ; rdfs:domain meta:VariantToDiseaseAssociation ; - rdfs:range meta:iri_type ; + rdfs:range meta:NamedThing ; rdfs:subPropertyOf meta:subject . meta:variant_to_phenotypic_feature_association_subject a owl:AnnotationProperty, @@ -1178,6 +1234,13 @@ meta:variant_to_thing_association_subject a owl:AnnotationProperty, rdfs:range meta:SequenceVariant ; rdfs:subPropertyOf meta:subject . +meta:versionOf a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "versionOf" ; + rdfs:domain meta:DataSetVersion ; + rdfs:range meta:DataSet ; + rdfs:subPropertyOf meta:node_property . + meta:AdministrativeEntity a owl:Class, meta:ClassDefinition ; rdfs:label "administrative entity" ; @@ -1242,6 +1305,12 @@ meta:ConfidenceLevel a owl:Class, rdfs:subClassOf meta:InformationContentEntity ; skos:definition "Level of confidence in a statement" . +meta:DataSetSummary a owl:Class, + meta:ClassDefinition ; + rdfs:label "data set summary" ; + rdfs:subClassOf meta:DataSetVersion, + meta:mixin . + meta:DiseaseOrPhenotypicFeatureAssociationToLocationAssociation a owl:Class, meta:ClassDefinition ; rdfs:label "disease or phenotypic feature association to location association" ; @@ -1339,14 +1408,14 @@ meta:MolecularActivity a owl:Class, owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:has_input ], [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:has_participant ], + owl:allValuesFrom meta:Occurrent ; + owl:onProperty meta:precedes ], [ a owl:Restriction ; owl:allValuesFrom meta:Occurrent ; owl:onProperty meta:regulates_process_to_process ], [ a owl:Restriction ; - owl:allValuesFrom meta:Occurrent ; - owl:onProperty meta:precedes ], + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:has_participant ], meta:BiologicalProcessOrActivity, meta:Occurrent ; skos:definition "An execution of a molecular function carried out by a gene product or macromolecular complex." . @@ -2101,15 +2170,6 @@ meta:treated_by a owl:ObjectProperty, rdfs:subPropertyOf meta:related_to ; skos:definition "holds between a disease or phenotypic feature and a therapeutic process or chemical substance that is used to treat the condition" . -meta:uri a owl:Class, - meta:TypeDefinition ; - rdfs:label "uri" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:onDataRange xsd:anyURI ; - owl:onProperty meta:topValue ; - owl:qualifiedCardinality 1 ] ; - skos:definition "a complete URI" . - meta:xenologous_to a owl:ObjectProperty, meta:SlotDefinition ; rdfs:label "xenologous to" ; @@ -2157,6 +2217,16 @@ meta:ClinicalEntity a owl:Class, rdfs:subClassOf meta:NamedThing ; skos:definition "Any entity or process that exists in the clinical domain and outside the biological realm. Diseases are placed under biological entities" . +meta:DataFile a owl:Class, + meta:ClassDefinition ; + rdfs:label "data file" ; + rdfs:subClassOf meta:NamedThing . + +meta:DataSet a owl:Class, + meta:ClassDefinition ; + rdfs:label "data set" ; + rdfs:subClassOf meta:NamedThing . + meta:DiseaseOrPhenotypicFeatureAssociationToThingAssociation a owl:Class, meta:ClassDefinition ; rdfs:label "disease or phenotypic feature association to thing association" ; @@ -2167,6 +2237,12 @@ meta:DiseaseToThingAssociation a owl:Class, rdfs:label "disease to thing association" ; rdfs:subClassOf meta:Association . +meta:DistributionLevel a owl:Class, + meta:ClassDefinition ; + rdfs:label "distribution level" ; + rdfs:subClassOf meta:DataSetVersion, + meta:mixin . + meta:DrugExposure a owl:Class, meta:ClassDefinition ; rdfs:label "drug exposure" ; @@ -2236,6 +2312,11 @@ meta:SequenceVariantModulatesTreatmentAssociation a owl:Class, skos:definition "An association between a sequence variant and a treatment or health intervention. The treatment object itself encompasses both the disease and the drug used." ; skos:note "An alternate way to model the same information could be via a qualifier" . +meta:SourceFile a owl:Class, + meta:ClassDefinition ; + rdfs:label "source file" ; + rdfs:subClassOf meta:DataFile . + meta:TranscriptToGeneRelationship a owl:Class, meta:ClassDefinition ; rdfs:label "transcript to gene relationship" ; @@ -2277,16 +2358,6 @@ meta:contributes_to a owl:ObjectProperty, rdfs:subPropertyOf meta:related_to ; skos:definition "holds between two entities where the occurrence, existence, or activity of one causes or contributes to the occurrence or generation of the other" . -meta:date a owl:Class, - meta:TypeDefinition ; - rdfs:label "date" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:onDataRange xsd:date ; - owl:onProperty meta:topValue ; - owl:qualifiedCardinality 1 ] ; - skos:definition "a date (year, month and day) in an idealized calendar" ; - skos:editorialNote "URI is dateTime because OWL reasoners don't work with straight date or time" . - meta:float a owl:Class, meta:TypeDefinition ; rdfs:label "float" ; @@ -2337,7 +2408,7 @@ meta:subclass_of a owl:ObjectProperty, meta:SlotDefinition ; rdfs:label "subclass of" ; rdfs:domain meta:OntologyClass ; - rdfs:range meta:OntologyClass ; + rdfs:range meta:iri_type ; rdfs:subPropertyOf meta:related_to ; skos:definition "holds between two classes where the domain class is a specialization of the range class" . @@ -2654,6 +2725,16 @@ meta:correlated_with a owl:ObjectProperty, rdfs:subPropertyOf meta:related_to ; skos:definition "holds between a disease or phenotypic feature and a measurable molecular entity that is used as an indicator of the presence or state of the disease or feature." . +meta:date a owl:Class, + meta:TypeDefinition ; + rdfs:label "date" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onDataRange xsd:date ; + owl:onProperty meta:topValue ; + owl:qualifiedCardinality 1 ] ; + skos:definition "a date (year, month and day) in an idealized calendar" ; + skos:editorialNote "URI is dateTime because OWL reasoners don't work with straight date or time" . + meta:negatively_regulates a owl:ObjectProperty, meta:SlotDefinition ; rdfs:label "negatively regulates" ; @@ -2786,7 +2867,10 @@ meta:homologous_to a owl:ObjectProperty, meta:identifier_type a owl:Class, meta:TypeDefinition ; rdfs:label "identifier type" ; - rdfs:subClassOf meta:string ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onDataRange xsd:anyURI ; + owl:onProperty meta:topValue ; + owl:qualifiedCardinality 1 ] ; skos:definition "A string that is intended to uniquely identify a thing May be URI in full or compact (CURIE) form" . meta:integer a owl:Class, @@ -2872,6 +2956,12 @@ meta:has_participant a owl:ObjectProperty, rdfs:subPropertyOf meta:related_to ; skos:definition "holds between a process and a continuant, where the continuant is somehow involved in the process" . +meta:iri_type a owl:Class, + meta:TypeDefinition ; + rdfs:label "iri type" ; + rdfs:subClassOf meta:uriorcurie ; + skos:definition "An IRI" . + meta:label_type a owl:Class, meta:TypeDefinition ; rdfs:label "label type" ; @@ -2890,14 +2980,14 @@ meta:Attribute a owl:Class, meta:ClassDefinition ; rdfs:label "attribute" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom meta:OntologyClass ; - owl:onProperty meta:subclass_of ], + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:related_to ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:interacts_with ], [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:related_to ], + owl:allValuesFrom meta:iri_type ; + owl:onProperty meta:subclass_of ], meta:OntologyClass ; skos:definition "A property or characteristic of an entity" . @@ -2941,6 +3031,11 @@ meta:regulates_process_to_process a owl:ObjectProperty, rdfs:range meta:Occurrent ; rdfs:subPropertyOf meta:regulates . +meta:DataSetVersion a owl:Class, + meta:ClassDefinition ; + rdfs:label "data set version" ; + rdfs:subClassOf meta:DataSet . + meta:GeneToExpressionSiteAssociation a owl:Class, meta:ClassDefinition ; rdfs:label "gene to expression site association" ; @@ -3016,14 +3111,14 @@ meta:Gene a owl:Class, meta:ClassDefinition ; rdfs:label "gene" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom meta:GeneProduct ; - owl:onProperty meta:has_gene_product ], - [ a owl:Restriction ; owl:allValuesFrom meta:DiseaseOrPhenotypicFeature ; owl:onProperty meta:gene_associated_with_condition ], [ a owl:Restriction ; owl:allValuesFrom meta:Gene ; owl:onProperty meta:genetically_interacts_with ], + [ a owl:Restriction ; + owl:allValuesFrom meta:GeneProduct ; + owl:onProperty meta:has_gene_product ], meta:GeneOrGeneProduct . meta:SequenceVariant a owl:Class, @@ -3033,6 +3128,15 @@ meta:SequenceVariant a owl:Class, skos:definition "An allele that varies in its sequence from what is considered the reference allele at that locus." ; skos:note "This class is for modeling the specific state at a locus. A single dbSNP rs ID could correspond to more than one sequence variants (e.g CIViC:1252 and CIViC:1253, two distinct BRCA2 alleles for rs28897743)" . +meta:OntologyClass a owl:Class, + meta:ClassDefinition ; + rdfs:label "ontology class" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom meta:iri_type ; + owl:onProperty meta:subclass_of ], + meta:NamedThing ; + skos:definition "a concept or class in an ontology, vocabulary or thesaurus" . + meta:AnatomicalEntity a owl:Class, meta:ClassDefinition ; rdfs:label "anatomical entity" ; @@ -3046,34 +3150,16 @@ meta:AnatomicalEntity a owl:Class, meta:ThingWithTaxon ; skos:definition "A subcellular location, cell type or gross anatomical part" . -meta:topValue a owl:DatatypeProperty ; - rdfs:label "value" . - -meta:OntologyClass a owl:Class, - meta:ClassDefinition ; - rdfs:label "ontology class" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom meta:OntologyClass ; - owl:onProperty meta:subclass_of ], - meta:NamedThing ; - skos:definition "a concept or class in an ontology, vocabulary or thesaurus" . - meta:relation a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "relation" ; rdfs:domain meta:Association ; - rdfs:range meta:iri_type ; + rdfs:range meta:uriorcurie ; rdfs:subPropertyOf meta:association_slot ; skos:definition "the relationship type by which a subject is connected to an object in an association" . -meta:string a owl:Class, - meta:TypeDefinition ; - rdfs:label "string" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:onDataRange xsd:string ; - owl:onProperty meta:topValue ; - owl:qualifiedCardinality 1 ] ; - skos:definition "A character string" . +meta:topValue a owl:DatatypeProperty ; + rdfs:label "value" . meta:DiseaseOrPhenotypicFeature a owl:Class, meta:ClassDefinition ; @@ -3094,6 +3180,15 @@ meta:DiseaseOrPhenotypicFeature a owl:Class, meta:ThingWithTaxon ; skos:definition "Either one of a disease or an individual phenotypic feature. Some knowledge resources such as Monarch treat these as distinct, others such as MESH conflate." . +meta:uriorcurie a owl:Class, + meta:TypeDefinition ; + rdfs:label "uriorcurie" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onDataRange xsd:anyURI ; + owl:onProperty meta:topValue ; + owl:qualifiedCardinality 1 ] ; + skos:definition "a URI or a CURIE" . + meta:association_slot a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "association slot" ; @@ -3101,6 +3196,15 @@ meta:association_slot a owl:AnnotationProperty, rdfs:range meta:string ; skos:definition "any slot that relates an association to another entity" . +meta:string a owl:Class, + meta:TypeDefinition ; + rdfs:label "string" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:onDataRange xsd:string ; + owl:onProperty meta:topValue ; + owl:qualifiedCardinality 1 ] ; + skos:definition "A character string" . + meta:affects a owl:ObjectProperty, meta:SlotDefinition ; rdfs:label "affects" ; @@ -3113,27 +3217,17 @@ meta:object a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "object" ; rdfs:domain meta:Association ; - rdfs:range meta:iri_type ; + rdfs:range meta:NamedThing ; rdfs:subPropertyOf meta:association_slot ; skos:definition "connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object." . -meta:iri_type a owl:Class, - meta:TypeDefinition ; - rdfs:label "iri type" ; - rdfs:subClassOf meta:uri ; - skos:definition "An IRI" . - -meta:node_property a owl:AnnotationProperty, - meta:SlotDefinition ; - rdfs:label "node property" ; - rdfs:domain meta:NamedThing ; - rdfs:range meta:string ; - skos:definition "A grouping for any property that holds between a node and a value" . - meta:GeneOrGeneProduct a owl:Class, meta:ClassDefinition ; rdfs:label "gene or gene product" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom meta:AnatomicalEntity ; + owl:onProperty meta:expressed_in ], + [ a owl:Restriction ; owl:allValuesFrom meta:GeneOrGeneProduct ; owl:onProperty meta:in_pathway_with ], [ a owl:Restriction ; @@ -3142,9 +3236,6 @@ meta:GeneOrGeneProduct a owl:Class, [ a owl:Restriction ; owl:allValuesFrom meta:GeneOrGeneProduct ; owl:onProperty meta:in_complex_with ], - [ a owl:Restriction ; - owl:allValuesFrom meta:AnatomicalEntity ; - owl:onProperty meta:expressed_in ], meta:MacromolecularMachine ; skos:definition "a union of genes or gene products. Frequently an identifier for one will be used as proxy for another" . @@ -3169,7 +3260,7 @@ meta:subject a owl:AnnotationProperty, meta:SlotDefinition ; rdfs:label "subject" ; rdfs:domain meta:Association ; - rdfs:range meta:iri_type ; + rdfs:range meta:NamedThing ; rdfs:subPropertyOf meta:association_slot ; skos:definition "connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object." . @@ -3177,6 +3268,9 @@ meta:Occurrent a owl:Class, meta:ClassDefinition ; rdfs:label "occurrent" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom meta:Occurrent ; + owl:onProperty meta:precedes ], + [ a owl:Restriction ; owl:allValuesFrom meta:Occurrent ; owl:onProperty meta:positively_regulates_process_to_process ], [ a owl:Restriction ; @@ -3185,18 +3279,22 @@ meta:Occurrent a owl:Class, [ a owl:Restriction ; owl:allValuesFrom meta:Occurrent ; owl:onProperty meta:regulates_process_to_process ], - [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:has_participant ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:has_input ], [ a owl:Restriction ; - owl:allValuesFrom meta:Occurrent ; - owl:onProperty meta:precedes ], + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:has_participant ], meta:NamedThing ; skos:definition "A processual entity" . +meta:node_property a owl:AnnotationProperty, + meta:SlotDefinition ; + rdfs:label "node property" ; + rdfs:domain meta:NamedThing ; + rdfs:range meta:string ; + skos:definition "A grouping for any property that holds between a node and a value" . + meta:Association a owl:Class, meta:ClassDefinition ; rdfs:label "association" ; @@ -3207,285 +3305,285 @@ meta:NamedThing a owl:Class, meta:ClassDefinition ; rdfs:label "named thing" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom meta:Disease ; - owl:onProperty meta:manifestation_of ], - [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:derives_from ], - [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:prevents ], + owl:onProperty meta:homologous_to ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:positively_regulates ], + owl:onProperty meta:same_as ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:homologous_to ], + owl:onProperty meta:negatively_regulates ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:overlaps ], + owl:onProperty meta:affects_risk_for ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:causes ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:colocalizes_with ], + owl:onProperty meta:produces ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:contributes_to ], + owl:onProperty meta:paralogous_to ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:xenologous_to ], + owl:onProperty meta:colocalizes_with ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:physically_interacts_with ], + owl:onProperty meta:located_in ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:paralogous_to ], + owl:onProperty meta:contributes_to ], [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:location_of ], + owl:allValuesFrom meta:Occurrent ; + owl:onProperty meta:participates_in ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:predisposes ], + owl:onProperty meta:model_of ], + [ a owl:Restriction ; + owl:allValuesFrom meta:Occurrent ; + owl:onProperty meta:actively_involved_in ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:regulates ], + owl:onProperty meta:derives_into ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:located_in ], + owl:onProperty meta:predisposes ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:has_part ], + owl:onProperty meta:related_to ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:same_as ], + owl:onProperty meta:location_of ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:affects_risk_for ], + owl:onProperty meta:derives_from ], [ a owl:Restriction ; owl:allValuesFrom meta:Occurrent ; owl:onProperty meta:capable_of ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:derives_into ], + owl:onProperty meta:coexists_with ], [ a owl:Restriction ; - owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:produces ], + owl:allValuesFrom meta:OntologyClass ; + owl:onProperty meta:has_molecular_consequence ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:model_of ], + owl:onProperty meta:part_of ], [ a owl:Restriction ; - owl:allValuesFrom meta:OntologyClass ; - owl:onProperty meta:has_molecular_consequence ], + owl:allValuesFrom meta:Disease ; + owl:onProperty meta:manifestation_of ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:affects ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:interacts_with ], + owl:onProperty meta:overlaps ], [ a owl:Restriction ; - owl:allValuesFrom meta:Occurrent ; - owl:onProperty meta:actively_involved_in ], + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:prevents ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:related_to ], + owl:onProperty meta:has_part ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:occurs_in ], + owl:onProperty meta:interacts_with ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:part_of ], + owl:onProperty meta:disrupts ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; owl:onProperty meta:orthologous_to ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:disrupts ], + owl:onProperty meta:occurs_in ], [ a owl:Restriction ; - owl:allValuesFrom meta:Occurrent ; - owl:onProperty meta:participates_in ], + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:regulates ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:coexists_with ], + owl:onProperty meta:positively_regulates ], [ a owl:Restriction ; owl:allValuesFrom meta:NamedThing ; - owl:onProperty meta:negatively_regulates ] ; + owl:onProperty meta:xenologous_to ], + [ a owl:Restriction ; + owl:allValuesFrom meta:NamedThing ; + owl:onProperty meta:physically_interacts_with ] ; skos:definition "a databased entity or concept/class" . -meta:ClassDefinition a owl:Class ; - rdfs:label "class_definition" ; - skos:definition "the definition of a class or interface" . - meta:MolecularEntity a owl:Class, meta:ClassDefinition ; rdfs:label "molecular entity" ; rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_activity_of ], - [ a owl:Restriction ; - owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_localization_of ], + owl:onProperty meta:decreases_folding_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_folding_of ], + owl:onProperty meta:increases_molecular_modification_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_metabolic_processing_of ], - [ a owl:Restriction ; - owl:allValuesFrom meta:GenomicEntity ; - owl:onProperty meta:affects_expression_of ], + owl:onProperty meta:affects_secretion_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:negatively_regulates_entity_to_entity ], + owl:onProperty meta:decreases_stability_of ], [ a owl:Restriction ; owl:allValuesFrom meta:GenomicEntity ; - owl:onProperty meta:increases_mutation_rate_of ], + owl:onProperty meta:decreases_mutation_rate_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_stability_of ], - [ a owl:Restriction ; - owl:allValuesFrom meta:Transcript ; - owl:onProperty meta:decreases_splicing_of ], + owl:onProperty meta:decreases_localization_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_stability_of ], + owl:onProperty meta:increases_secretion_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:positively_regulates_entity_to_entity ], + owl:onProperty meta:decreases_transport_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_activity_of ], + owl:onProperty meta:affects_response_to ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_uptake_of ], + owl:onProperty meta:decreases_metabolic_processing_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_uptake_of ], + owl:onProperty meta:affects_folding_of ], [ a owl:Restriction ; owl:allValuesFrom meta:Transcript ; owl:onProperty meta:increases_splicing_of ], - [ a owl:Restriction ; - owl:allValuesFrom meta:DiseaseOrPhenotypicFeature ; - owl:onProperty meta:biomarker_for ], - [ a owl:Restriction ; - owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_stability_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:molecularly_interacts_with ], + owl:onProperty meta:decreases_uptake_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_folding_of ], + owl:onProperty meta:increases_transport_of ], [ a owl:Restriction ; owl:allValuesFrom meta:GenomicEntity ; - owl:onProperty meta:increases_expression_of ], + owl:onProperty meta:increases_mutation_rate_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_degradation_of ], + owl:onProperty meta:decreases_abundance_of ], + [ a owl:Restriction ; + owl:allValuesFrom meta:GenomicEntity ; + owl:onProperty meta:affects_expression_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_abundance_of ], + owl:onProperty meta:decreases_molecular_modification_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; owl:onProperty meta:increases_response_to ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_synthesis_of ], + owl:onProperty meta:affects_abundance_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_transport_of ], + owl:onProperty meta:affects_degradation_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_folding_of ], + owl:onProperty meta:decreases_secretion_of ], [ a owl:Restriction ; - owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_abundance_of ], + owl:allValuesFrom meta:Transcript ; + owl:onProperty meta:affects_splicing_of ], [ a owl:Restriction ; - owl:allValuesFrom meta:OrganismTaxon ; - owl:onProperty meta:in_taxon ], + owl:allValuesFrom meta:MolecularEntity ; + owl:onProperty meta:affects_uptake_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_degradation_of ], + owl:onProperty meta:increases_activity_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_secretion_of ], + owl:onProperty meta:regulates_entity_to_entity ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_synthesis_of ], + owl:onProperty meta:decreases_response_to ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_secretion_of ], + owl:onProperty meta:affects_metabolic_processing_of ], [ a owl:Restriction ; - owl:allValuesFrom meta:GenomicEntity ; - owl:onProperty meta:decreases_expression_of ], + owl:allValuesFrom meta:MolecularEntity ; + owl:onProperty meta:decreases_synthesis_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_uptake_of ], + owl:onProperty meta:increases_metabolic_processing_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_transport_of ], + owl:onProperty meta:affects_transport_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_molecular_modification_of ], + owl:onProperty meta:decreases_activity_of ], [ a owl:Restriction ; - owl:allValuesFrom meta:GenomicEntity ; - owl:onProperty meta:decreases_mutation_rate_of ], + owl:allValuesFrom meta:Transcript ; + owl:onProperty meta:decreases_splicing_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_degradation_of ], + owl:onProperty meta:negatively_regulates_entity_to_entity ], [ a owl:Restriction ; - owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_localization_of ], + owl:allValuesFrom meta:DiseaseOrPhenotypicFeature ; + owl:onProperty meta:biomarker_for ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_activity_of ], + owl:onProperty meta:increases_folding_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_molecular_modification_of ], + owl:onProperty meta:increases_stability_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_response_to ], + owl:onProperty meta:molecularly_interacts_with ], [ a owl:Restriction ; owl:allValuesFrom meta:GenomicEntity ; - owl:onProperty meta:affects_mutation_rate_of ], + owl:onProperty meta:increases_expression_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_metabolic_processing_of ], + owl:onProperty meta:positively_regulates_entity_to_entity ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_synthesis_of ], + owl:onProperty meta:affects_activity_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_secretion_of ], + owl:onProperty meta:affects_molecular_modification_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_abundance_of ], + owl:onProperty meta:increases_degradation_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:increases_molecular_modification_of ], + owl:onProperty meta:affects_localization_of ], + [ a owl:Restriction ; + owl:allValuesFrom meta:GenomicEntity ; + owl:onProperty meta:decreases_expression_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_metabolic_processing_of ], + owl:onProperty meta:increases_uptake_of ], + [ a owl:Restriction ; + owl:allValuesFrom meta:OrganismTaxon ; + owl:onProperty meta:in_taxon ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:decreases_response_to ], + owl:onProperty meta:affects_synthesis_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:regulates_entity_to_entity ], + owl:onProperty meta:decreases_degradation_of ], [ a owl:Restriction ; - owl:allValuesFrom meta:Transcript ; - owl:onProperty meta:affects_splicing_of ], + owl:allValuesFrom meta:MolecularEntity ; + owl:onProperty meta:increases_abundance_of ], + [ a owl:Restriction ; + owl:allValuesFrom meta:GenomicEntity ; + owl:onProperty meta:affects_mutation_rate_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; - owl:onProperty meta:affects_transport_of ], + owl:onProperty meta:increases_synthesis_of ], [ a owl:Restriction ; owl:allValuesFrom meta:MolecularEntity ; owl:onProperty meta:increases_localization_of ], + [ a owl:Restriction ; + owl:allValuesFrom meta:MolecularEntity ; + owl:onProperty meta:affects_stability_of ], meta:BiologicalEntity, meta:ThingWithTaxon ; skos:definition "A gene, gene product, small molecule or macromolecule (including protein complex)" . +meta:ClassDefinition a owl:Class ; + rdfs:label "class_definition" ; + skos:definition "the definition of a class or interface" . + meta:SlotDefinition a owl:Class ; rdfs:label "slot_definition" ; skos:definition "the definition of a property or a slot" . diff --git a/biolink-model.proto b/biolink-model.proto index d09e51b9dd..38e3cf1aff 100644 --- a/biolink-model.proto +++ b/biolink-model.proto @@ -619,6 +619,53 @@ message ConfidenceLevel optional description None = 10 repeated systematicSynonym None = 11 } +message DataFile + { + id None = 1 + name None = 2 + repeated category None = 3 + repeated relatedTo None = 4 + repeated interactsWith None = 5 + optional nodeProperty None = 6 + optional iri None = 7 + repeated synonym None = 8 + optional fullName None = 9 + optional description None = 10 + repeated systematicSynonym None = 11 + } +message DataSet + { + id None = 1 + name None = 2 + repeated category None = 3 + repeated relatedTo None = 4 + repeated interactsWith None = 5 + optional nodeProperty None = 6 + optional iri None = 7 + repeated synonym None = 8 + optional fullName None = 9 + optional description None = 10 + repeated systematicSynonym None = 11 + } +message DataSetVersion + { + id None = 1 + name None = 2 + repeated category None = 3 + repeated relatedTo None = 4 + repeated interactsWith None = 5 + optional nodeProperty None = 6 + optional iri None = 7 + repeated synonym None = 8 + optional fullName None = 9 + optional description None = 10 + repeated systematicSynonym None = 11 + optional title None = 12 + optional sourceDataFile None = 13 + optional versionOf None = 14 + optional type None = 15 + optional distribution None = 16 + } // A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment message Device { @@ -3118,6 +3165,22 @@ message SeverityValue repeated systematicSynonym None = 11 repeated subclassOf None = 12 } +message SourceFile + { + id None = 1 + name None = 2 + repeated category None = 3 + repeated relatedTo None = 4 + repeated interactsWith None = 5 + optional nodeProperty None = 6 + optional iri None = 7 + repeated synonym None = 8 + optional fullName None = 9 + optional description None = 10 + repeated systematicSynonym None = 11 + optional sourceVersion None = 12 + optional retrievedOn None = 13 + } // An RNA synthesized on a DNA or RNA template by an RNA polymerase message Transcript { diff --git a/biolink-model.shex b/biolink-model.shex index 36263973d8..f6b915e75b 100644 --- a/biolink-model.shex +++ b/biolink-model.shex @@ -8,14 +8,16 @@ PREFIX dcterms: PREFIX faldo: PREFIX owl: PREFIX pav: +PREFIX void: PREFIX metatype: PREFIX SEMMEDDB: PREFIX WD: +PREFIX dct: xsd:string - xsd:string + IRI IRI @@ -111,7 +113,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -122,7 +124,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -131,9 +133,9 @@ metatype:Nodeidentifier NONLITERAL ( CLOSED { - ( $ ( rdf:subject @ ; - rdf:predicate @ ; - rdf:object @ ; + ( $ ( rdf:subject @ ; + rdf:predicate @metatype:Uriorcurie ; + rdf:object @ ; @metatype:Boolean ? ; rdf:type @ ? ; @ * ; @@ -175,8 +177,8 @@ metatype:Nodeidentifier NONLITERAL @ * ; @ ? ; dcterms:description @ ? ; - @ ? ; - rdfs:subClassOf @ * + @ * ; + rdfs:subClassOf @ * ) ; rdf:type [ ] ) @@ -457,6 +459,50 @@ metatype:Nodeidentifier NONLITERAL ) } + ( + CLOSED { + ( $ ( & ; + rdf:type [ WD:Q35120 ] ? + ) ; + rdf:type [ OBO:EFO_0004095 ] + ) + } OR @ +) + + ( + CLOSED { + ( $ ( & ; + rdf:type [ WD:Q35120 ] ? + ) ; + rdf:type [ OBO:IAO_0000100 ] + ) + } OR @ +) + + { + ( $ ( & ; + rdf:type [ ] ? ; + dcterms:source @metatype:String ? + ) ; + rdf:type [ ] + ) +} + + ( + CLOSED { + ( $ ( & ; + rdf:type [ OBO:IAO_0000100 ] ? ; + dct:title @metatype:String ? ; + dcterms:source @ ? ; + dct:isVersionOf @ ? ; + rdf:type @metatype:String ? ; + void:Dataset @ ? + ) ; + rdf:type [ ] + ) + } OR @ OR @ +) + CLOSED { ( $ ( & ; rdf:type [ WD:Q35120 ] ? @@ -535,6 +581,15 @@ metatype:Nodeidentifier NONLITERAL ) } + { + ( $ ( & ; + rdf:type [ ] ? ; + dct:downloadURL @metatype:String ? + ) ; + rdf:type [ ] + ) +} + CLOSED { ( $ ( & ; rdf:type [ ] ? @@ -797,7 +852,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -826,7 +881,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ; @ ? ; @ ? @@ -852,7 +907,7 @@ metatype:Nodeidentifier NONLITERAL CLOSED { ( $ ( & ; rdf:type [ ] ? ; - @ + @metatype:Uriorcurie ) ; rdf:type [ ] ) @@ -862,7 +917,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -952,7 +1007,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -963,7 +1018,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -978,7 +1033,7 @@ metatype:Nodeidentifier NONLITERAL & ; rdf:type [ ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ? ; @ ? ; @ ? ; @@ -1001,7 +1056,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -1152,8 +1207,8 @@ metatype:Nodeidentifier NONLITERAL } { - ( $ ( @ ; - @ + ( $ ( @ ; + @metatype:Uriorcurie ) ; rdf:type [ ] ? ) @@ -1250,7 +1305,7 @@ metatype:Nodeidentifier NONLITERAL @ * ; @ ? ; dcterms:description @ ? ; - @ ? ; + @ * ; WD:P129 @ * ; SEMMEDDB:AFFECTS @ * ; SEMMEDDB:DISRUPTS @ * ; @@ -1289,8 +1344,8 @@ metatype:Nodeidentifier NONLITERAL ) ; rdf:type [ WD:Q35120 ] ) - } OR @ OR @ OR @ OR @ OR @ OR - @ OR @ OR @ + } OR @ OR @ OR @ OR @ OR @ OR @ OR + @ OR @ OR @ OR @ ) ( @@ -1331,7 +1386,7 @@ metatype:Nodeidentifier NONLITERAL CLOSED { ( $ ( & ; rdf:type [ WD:Q35120 ] ? ; - rdfs:subClassOf @ * + rdfs:subClassOf @ * ) ; rdf:type [ ] ) @@ -1363,7 +1418,7 @@ metatype:Nodeidentifier NONLITERAL rdf:type [ ] ? ; & ; rdf:type [ ] ? ; - @ + @metatype:Uriorcurie ) ; rdf:type [ ] ) @@ -1373,7 +1428,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ; @ ? ) ; @@ -1454,7 +1509,7 @@ metatype:Nodeidentifier NONLITERAL ( $ ( & ; rdf:type [ OBAN:association ] ? ; @ ; - @ ; + @metatype:Uriorcurie ; @ ) ; rdf:type [ ] @@ -1591,6 +1646,16 @@ metatype:Nodeidentifier NONLITERAL ) } + CLOSED { + ( $ ( & ; + rdf:type [ OBO:EFO_0004095 ] ? ; + pav:version @metatype:String ? ; + pav:retrievedOn @metatype:Date ? + ) ; + rdf:type [ ] + ) +} + ( { ( $ ( & ; @@ -1651,9 +1716,9 @@ metatype:Nodeidentifier NONLITERAL rdf:type [ ] ? ; & ; rdf:type [ ] ? ; - @ ; - @ ; - @ ; + @ ; + @metatype:Uriorcurie ; + @ ; @ ? ; @ ? ; @ ? diff --git a/biolink-model.ttl b/biolink-model.ttl index 467b88564d..c1b6135908 100644 --- a/biolink-model.ttl +++ b/biolink-model.ttl @@ -49,6 +49,10 @@ , , , + , + , + , + , , , , @@ -56,6 +60,7 @@ , , , + , , , , @@ -149,6 +154,7 @@ , , , + , , , , @@ -172,32 +178,32 @@ "rdfs", "skos", "xsd" ; - :generation_date "2019-07-22 10:57"^^xsd:dateTime ; + :generation_date "2019-08-20 14:05"^^xsd:dateTime ; :id ; :imports ; - :metamodel_version "1.4.0" ; - :prefixes [ :prefix_prefix "metatype" ; - :prefix_reference metatype: ], - [ :prefix_prefix "OBAN" ; - :prefix_reference ], - [ :prefix_prefix "xsd" ; + :metamodel_version "1.4.1" ; + :prefixes [ :prefix_prefix "xsd" ; :prefix_reference xsd: ], - [ :prefix_prefix "SIO" ; - :prefix_reference ], - [ :prefix_prefix "UMLSST" ; - :prefix_reference ], - [ :prefix_prefix "biolink" ; - :prefix_reference ], - [ :prefix_prefix "biolinkml" ; - :prefix_reference ], + [ :prefix_prefix "metatype" ; + :prefix_reference metatype: ], + [ :prefix_prefix "wgs" ; + :prefix_reference ], [ :prefix_prefix "UMLSSG" ; :prefix_reference ], + [ :prefix_prefix "biolink" ; + :prefix_reference ], [ :prefix_prefix "shex" ; :prefix_reference shex: ], [ :prefix_prefix "UMLSSC" ; :prefix_reference ], - [ :prefix_prefix "wgs" ; - :prefix_reference ] ; + [ :prefix_prefix "biolinkml" ; + :prefix_reference ], + [ :prefix_prefix "SIO" ; + :prefix_reference ], + [ :prefix_prefix "UMLSST" ; + :prefix_reference ], + [ :prefix_prefix "OBAN" ; + :prefix_reference ] ; :slots , , , @@ -270,6 +276,8 @@ , , , + , + , , , , @@ -421,6 +429,7 @@ , , , + , , , , @@ -432,6 +441,9 @@ , , , + , + , + , , , , @@ -440,10 +452,12 @@ , , , + , , , , , + , , , , @@ -455,10 +469,11 @@ , , , + , ; :source_file "biolink-model.yaml" ; - :source_file_date "Fri Jul 19 16:13:28 2019"^^xsd:dateTime ; - :source_file_size 107096 ; + :source_file_date "Tue Aug 20 14:02:33 2019"^^xsd:dateTime ; + :source_file_size 108746 ; :subsets , ; :types , @@ -1129,10 +1144,10 @@ :typeof ; :uri . - a :TypeDefinition ; - skos:definition "a URI or a CURIE" ; + a :TypeDefinition ; + skos:definition "a complete URI" ; skos:inScheme ; - :base "URIorCURIE" ; + :base "URI" ; :imported_from "https://w3id.org/biolink/biolinkml/types" ; :repr "str" ; :uri xsd:anyURI . @@ -2281,7 +2296,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2314,7 +2329,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2453,6 +2468,15 @@ :required true ; :slot_uri . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri . + a :SlotDefinition ; skos:inScheme ; :alias "object" ; @@ -2538,7 +2562,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2582,7 +2606,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2614,7 +2638,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2636,7 +2660,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2735,7 +2759,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2768,7 +2792,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2790,7 +2814,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2834,7 +2858,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2889,7 +2913,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2898,6 +2922,7 @@ :alias "id" ; :domain ; :identifier true ; + :ifabsent "bnode" ; :is_a ; :is_usage_slot true ; :owner ; @@ -2923,7 +2948,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2956,7 +2981,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -2971,6 +2996,15 @@ :required true ; :slot_uri . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation pav:retrievedOn ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri pav:retrievedOn . + a :SlotDefinition ; skos:inScheme ; :alias "has biological sequence" ; @@ -3026,6 +3060,24 @@ :required true ; :slot_uri . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation pav:version ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri pav:version . + + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation dcterms:source ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri dcterms:source . + a :TypeDefinition ; skos:inScheme ; :base "str" ; @@ -3085,14 +3137,6 @@ :required true ; :slot_uri . - a :TypeDefinition ; - skos:definition "a complete URI" ; - skos:inScheme ; - :base "URI" ; - :imported_from "https://w3id.org/biolink/biolinkml/types" ; - :repr "str" ; - :uri xsd:anyURI . - a :SlotDefinition ; skos:inScheme ; :alias "object" ; @@ -3100,7 +3144,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -3111,7 +3155,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -3122,7 +3166,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -3343,6 +3387,40 @@ , . + a :ClassDefinition ; + skos:inScheme ; + skos:mappingRelation ; + :class_uri ; + :is_a ; + :slots , + , + , + , + , + , + , + , + , + , + . + + a :ClassDefinition ; + skos:inScheme ; + skos:mappingRelation ; + :class_uri ; + :is_a ; + :slots , + , + , + , + , + , + , + , + , + , + . + a :ClassDefinition ; skos:definition "An association between either a disease or a phenotypic feature and an anatomical entity, where the disease/feature manifests in that site." ; skos:inScheme ; @@ -3629,15 +3707,6 @@ :range ; :slot_uri dcterms:created . - a :TypeDefinition ; - skos:definition "a date (year, month and day) in an idealized calendar" ; - skos:editorialNote "URI is dateTime because OWL reasoners don't work with straight date or time" ; - skos:inScheme ; - :base "XSDDate" ; - :imported_from "https://w3id.org/biolink/biolinkml/types" ; - :repr "str" ; - :uri xsd:date . - a :SlotDefinition ; skos:inScheme ; :alias "subject" ; @@ -3829,7 +3898,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -3840,7 +3909,7 @@ :is_a ; :is_usage_slot true ; :owner ; - :range ; + :range ; :required true ; :slot_uri . @@ -3945,11 +4014,11 @@ :inherited true ; :is_a ; :local_names [ a :LocalName ; - skos:altLabel "positively regulates" ; - :local_name_source "translator" ], - [ a :LocalName ; skos:altLabel "activity directly positively regulates activity of" ; - :local_name_source "ro" ] ; + :local_name_source "ro" ], + [ a :LocalName ; + skos:altLabel "positively regulates" ; + :local_name_source "translator" ] ; :mixins ; :multivalued true ; :owner ; @@ -4149,6 +4218,29 @@ , . + a :ClassDefinition ; + skos:inScheme ; + :class_uri ; + :is_a ; + :mixin true ; + :slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a :ClassDefinition ; skos:altLabel "environment", "experimental condition", @@ -4534,10 +4626,10 @@ :is_a ; :local_names [ a :LocalName ; skos:altLabel "population" ; - :local_name_source "agr" ], + :local_name_source "ga4gh" ], [ a :LocalName ; skos:altLabel "population" ; - :local_name_source "ga4gh" ] ; + :local_name_source "agr" ] ; :mixins ; :slots , , @@ -4735,6 +4827,15 @@ :range ; :slot_uri . + a :TypeDefinition ; + skos:definition "a date (year, month and day) in an idealized calendar" ; + skos:editorialNote "URI is dateTime because OWL reasoners don't work with straight date or time" ; + skos:inScheme ; + :base "XSDDate" ; + :imported_from "https://w3id.org/biolink/biolinkml/types" ; + :repr "str" ; + :uri xsd:date . + a :SlotDefinition ; OIO:inSubset ; owl:inverseOf ; @@ -4764,6 +4865,15 @@ :range ; :slot_uri . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri . + a :SlotDefinition ; skos:inScheme ; :domain ; @@ -4878,6 +4988,14 @@ :range ; :slot_uri . + a :TypeDefinition ; + skos:definition "An IRI" ; + skos:inScheme ; + :base "URIorCURIE" ; + :repr "str" ; + :typeof ; + :uri xsd:anyURI . + a :SlotDefinition ; OIO:inSubset ; owl:inverseOf ; @@ -4939,6 +5057,24 @@ :slot_uri ; :symmetric true . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation dcterms:source ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri dcterms:source . + + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri . + a :SlotDefinition ; OIO:inSubset ; owl:inverseOf ; @@ -4958,6 +5094,15 @@ :required true ; :slot_uri . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation rdf:type ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri rdf:type . + a :SlotDefinition ; skos:definition "date on which thing was updated. This can be applied to nodes or edges" ; skos:inScheme ; @@ -4967,6 +5112,15 @@ :range ; :slot_uri . + a :SlotDefinition ; + skos:inScheme ; + skos:mappingRelation ; + :domain ; + :is_a ; + :owner ; + :range ; + :slot_uri . + a :ClassDefinition ; rdfs:subClassOf ; skos:inScheme ; @@ -5126,6 +5280,29 @@ , . + a :ClassDefinition ; + skos:inScheme ; + :class_uri ; + :is_a ; + :mixin true ; + :slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a :ClassDefinition ; skos:inScheme ; skos:mappingRelation ; @@ -5250,9 +5427,8 @@ a :TypeDefinition ; skos:definition "A string that is intended to uniquely identify a thing May be URI in full or compact (CURIE) form" ; skos:inScheme ; - :base "str" ; - :typeof ; - :uri xsd:string . + :base "ElementIdentifier" ; + :uri xsd:anyURI . a :TypeDefinition ; skos:definition "An integer" ; @@ -5570,6 +5746,24 @@ , . + a :ClassDefinition ; + skos:inScheme ; + :class_uri ; + :is_a ; + :slots , + , + , + , + , + , + , + , + , + , + , + , + . + a :ClassDefinition ; skos:definition "An RNA synthesized on a DNA or RNA template by an RNA polymerase" ; skos:inScheme ; @@ -6727,6 +6921,24 @@ , . + a :ClassDefinition ; + skos:definition "a concept or class in an ontology, vocabulary or thesaurus" ; + skos:inScheme ; + :class_uri ; + :is_a ; + :slots , + , + , + , + , + , + , + , + , + , + , + . + a :SlotDefinition ; OIO:inSubset ; owl:inverseOf ; @@ -6847,6 +7059,27 @@ , . + a :ClassDefinition ; + skos:inScheme ; + :class_uri ; + :is_a ; + :slots , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + . + a :ClassDefinition ; skos:altLabel "phenome" ; skos:definition "Either one of a disease or an individual phenotypic feature. Some knowledge resources such as Monarch treat these as distinct, others such as MESH conflate." ; @@ -6923,24 +7156,6 @@ , . - a :ClassDefinition ; - skos:definition "a concept or class in an ontology, vocabulary or thesaurus" ; - skos:inScheme ; - :class_uri ; - :is_a ; - :slots , - , - , - , - , - , - , - , - , - , - , - . - a :ClassDefinition ; skos:altLabel "allele" ; skos:definition "An allele that varies in its sequence from what is considered the reference allele at that locus." ; @@ -7062,7 +7277,7 @@ :is_a ; :multivalued true ; :owner ; - :range ; + :range ; :slot_uri rdfs:subClassOf . a :SlotDefinition ; @@ -7074,12 +7289,13 @@ :range ; :slot_uri . - a :TypeDefinition ; - skos:definition "A character string" ; + a :TypeDefinition ; + skos:definition "a URI or a CURIE" ; skos:inScheme ; - :base "str" ; + :base "URIorCURIE" ; :imported_from "https://w3id.org/biolink/biolinkml/types" ; - :uri xsd:string . + :repr "str" ; + :uri xsd:anyURI . a :ClassDefinition ; skos:definition "A processual entity" ; @@ -7182,6 +7398,13 @@ , . + a :TypeDefinition ; + skos:definition "A character string" ; + skos:inScheme ; + :base "str" ; + :imported_from "https://w3id.org/biolink/biolinkml/types" ; + :uri xsd:string . + a :SlotDefinition ; OIO:inSubset ; skos:definition "describes an entity that has a direct affect on the state or quality of another existing entity. Use of the 'affects' predicate implies that the affected entity already exists, unlike predicates such as 'affects risk for' and 'prevents, where the outcome is something that may or may not come to be." ; @@ -7282,14 +7505,6 @@ :range ; :slot_uri . - a :TypeDefinition ; - skos:definition "An IRI" ; - skos:inScheme ; - :base "URI" ; - :repr "str" ; - :typeof ; - :uri xsd:anyURI . - a :SlotDefinition ; OIO:inSubset ; skos:inScheme ; @@ -7946,6 +8161,7 @@ :alias "id" ; :domain ; :identifier true ; + :ifabsent "bnode" ; :is_a ; :owner ; :range ; @@ -8007,7 +8223,7 @@ :slot_uri . a :SlotDefinition ; - skos:definition "A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes. " ; + skos:definition "A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes." ; skos:editorialNote "in neo4j this corresponds to the relationship type and the convention is for a snake_case label" ; skos:inScheme ; :domain ; @@ -8040,20 +8256,6 @@ , . - a :SlotDefinition ; - OIO:inSubset ; - skos:altLabel "display name", - "label" ; - skos:definition "A human-readable name for a thing" ; - skos:inScheme ; - skos:mappingRelation rdfs:label ; - :domain ; - :is_a ; - :owner ; - :range ; - :required true ; - :slot_uri rdfs:label . - a :SlotDefinition ; skos:altLabel "edge property", "statement property" ; @@ -8074,16 +8276,30 @@ :domain ; :is_a ; :local_names [ a :LocalName ; - skos:altLabel "annotation predicate" ; - :local_name_source "ga4gh" ], - [ a :LocalName ; skos:altLabel "predicate" ; - :local_name_source "translator" ] ; + :local_name_source "translator" ], + [ a :LocalName ; + skos:altLabel "annotation predicate" ; + :local_name_source "ga4gh" ] ; :owner ; - :range ; + :range ; :required true ; :slot_uri rdf:predicate . + a :SlotDefinition ; + OIO:inSubset ; + skos:altLabel "display name", + "label" ; + skos:definition "A human-readable name for a thing" ; + skos:inScheme ; + skos:mappingRelation rdfs:label ; + :domain ; + :is_a ; + :owner ; + :range ; + :required true ; + :slot_uri rdfs:label . + a :SlotDefinition ; OIO:inSubset ; skos:definition "Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag" ; @@ -8134,6 +8350,7 @@ skos:inScheme ; :domain ; :is_a ; + :multivalued true ; :owner ; :range ; :slot_uri . @@ -8319,14 +8536,6 @@ , . - a :SlotDefinition ; - skos:definition "A grouping for any property that holds between a node and a value" ; - skos:inScheme ; - :domain ; - :owner ; - :range ; - :slot_uri . - a :SlotDefinition ; skos:definition "connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object." ; skos:inScheme ; @@ -8336,13 +8545,13 @@ :domain ; :is_a ; :local_names [ a :LocalName ; - skos:altLabel "node with incoming relationship" ; - :local_name_source "neo4j" ], - [ a :LocalName ; skos:altLabel "descriptor" ; - :local_name_source "ga4gh" ] ; + :local_name_source "ga4gh" ], + [ a :LocalName ; + skos:altLabel "node with incoming relationship" ; + :local_name_source "neo4j" ] ; :owner ; - :range ; + :range ; :required true ; :slot_uri rdf:object . @@ -8377,9 +8586,17 @@ skos:altLabel "annotation subject" ; :local_name_source "ga4gh" ] ; :owner ; - :range ; + :range ; :required true ; :slot_uri rdf:subject . + a :SlotDefinition ; + skos:definition "A grouping for any property that holds between a node and a value" ; + skos:inScheme ; + :domain ; + :owner ; + :range ; + :slot_uri . + diff --git a/biolink/__init__.py b/biolink/__init__.py index d7adceb5f4..8987fe87ca 100644 --- a/biolink/__init__.py +++ b/biolink/__init__.py @@ -1,9 +1,8 @@ # Biolink model file locations import os -from typing import Union basedir = os.path.abspath(os.path.join(__file__, '..', '..')) -BIOLINK_MODEL_YAML = os.path.join(basedir, 'biolink-model.yaml') # type: Union[bytes, str] +BIOLINK_MODEL_YAML = os.path.join(basedir, 'biolink-model.yaml') BIOLINK_MODEL_JSONLD = os.path.join(basedir, 'context.jsonld') BIOLINK_MODEL_SHEX = os.path.join(basedir, 'shex', 'biolink-model.shex') BIOLINK_MODEL_RDF = os.path.join(basedir, 'rdf', 'biolink-model.ttl') diff --git a/biolink/model.py b/biolink/model.py index dc546459f7..e99da2b4f8 100644 --- a/biolink/model.py +++ b/biolink/model.py @@ -1,5 +1,5 @@ # Auto generated from biolink-model.yaml by pythongen.py version: 0.2.1 -# Generation date: 2019-07-19 16:59 +# Generation date: 2019-08-20 14:05 # Schema: biolink_model # # id: https://w3id.org/biolink/biolink-model @@ -12,10 +12,10 @@ from biolinkml.utils.yamlutils import YAMLRoot from biolinkml.utils.formatutils import camelcase, underscore, sfx from rdflib import Namespace, URIRef -from biolinkml.utils.metamodelcore import Bool, URI, XSDDate, XSDTime -from includes.types import Boolean, Date, Double, Float, Integer, String, Time, Uri +from biolinkml.utils.metamodelcore import Bool, ElementIdentifier, URIorCURIE, XSDDate, XSDTime +from includes.types import Boolean, Date, Double, Float, Integer, String, Time, Uriorcurie -metamodel_version = "1.4.0" +metamodel_version = "1.4.1" # Namespaces @@ -31,6 +31,7 @@ CLINVAR = Namespace('http://www.ncbi.nlm.nih.gov/clinvar/') ECO = Namespace('http://purl.obolibrary.org/obo/ECO_') ECTO = Namespace('http://example.org/UNKNOWN/ECTO/') +EFO = Namespace('http://purl.obolibrary.org/obo/EFO_') ENSEMBL = Namespace('http://ensembl.org/id/') FAO = Namespace('http://purl.obolibrary.org/obo/FAO_') GENO = Namespace('http://purl.obolibrary.org/obo/GENO_') @@ -73,6 +74,7 @@ WD = Namespace('http://example.org/UNKNOWN/WD/') ZFIN = Namespace('http://zfin.org/') BIOLINK = Namespace('https://w3id.org/biolink/vocab/') +DCT = Namespace('http://example.org/UNKNOWN/dct/') DCTERMS = Namespace('http://purl.org/dc/terms/') DICTYBASE = Namespace('http://dictybase.org/gene/') FALDO = Namespace('http://biohackathon.org/resource/faldo#') @@ -83,6 +85,7 @@ RDFS = Namespace('http://www.w3.org/2000/01/rdf-schema#') SHEX = Namespace('http://www.w3.org/ns/shex#') SKOS = Namespace('https://www.w3.org/TR/skos-reference/#') +VOID = Namespace('http://rdfs.org/ns/void#') WGS = Namespace('http://www.w3.org/2003/01/geo/wgs84_pos') XSD = Namespace('http://www.w3.org/2001/XMLSchema#') DEFAULT_ = BIOLINK @@ -97,15 +100,15 @@ class ChemicalFormulaValue(str): type_model_uri = BIOLINK.ChemicalFormulaValue -class IdentifierType(String): +class IdentifierType(ElementIdentifier): """ A string that is intended to uniquely identify a thing May be URI in full or compact (CURIE) form """ - type_class_uri = XSD.string - type_class_curie = "xsd:string" + type_class_uri = XSD.anyURI + type_class_curie = "xsd:anyURI" type_name = "identifier type" type_model_uri = BIOLINK.IdentifierType -class IriType(Uri): +class IriType(Uriorcurie): """ An IRI """ type_class_uri = XSD.anyURI type_class_curie = "xsd:anyURI" @@ -179,7 +182,7 @@ class BiologicalSequence(String): # Class references -class AttributeId(IdentifierType): +class AttributeId(ElementIdentifier): pass @@ -211,7 +214,31 @@ class OnsetId(AttributeId): pass -class NamedThingId(IdentifierType): +class NamedThingId(ElementIdentifier): + pass + + +class DataFileId(NamedThingId): + pass + + +class SourceFileId(DataFileId): + pass + + +class DataSetId(NamedThingId): + pass + + +class DataSetVersionId(DataSetId): + pass + + +class DistributionLevelId(DataSetVersionId): + pass + + +class DataSetSummaryId(DataSetVersionId): pass @@ -455,7 +482,7 @@ class GeographicLocationAtTimeId(GeographicLocationId): pass -class AssociationId(IdentifierType): +class AssociationId(ElementIdentifier): pass @@ -731,12 +758,14 @@ class Attribute(YAMLRoot): class_name: ClassVar[str] = "attribute" class_model_uri: ClassVar[URIRef] = BIOLINK.Attribute - id: Union[str, AttributeId] + id: Union[ElementIdentifier, AttributeId] name: Union[str, LabelType] category: List[Union[str, IriType]] = empty_list() def __post_init__(self): - if not isinstance(self.id, AttributeId): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, AttributeId): self.id = AttributeId(self.id) super().__post_init__() @@ -750,11 +779,13 @@ class BiologicalSex(Attribute): class_name: ClassVar[str] = "biological sex" class_model_uri: ClassVar[URIRef] = BIOLINK.BiologicalSex - id: Union[str, BiologicalSexId] = None + id: Union[ElementIdentifier, BiologicalSexId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, BiologicalSexId): self.id = BiologicalSexId(self.id) super().__post_init__() @@ -772,11 +803,13 @@ class PhenotypicSex(BiologicalSex): class_name: ClassVar[str] = "phenotypic sex" class_model_uri: ClassVar[URIRef] = BIOLINK.PhenotypicSex - id: Union[str, PhenotypicSexId] = None + id: Union[ElementIdentifier, PhenotypicSexId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PhenotypicSexId): self.id = PhenotypicSexId(self.id) super().__post_init__() @@ -795,11 +828,13 @@ class GenotypicSex(BiologicalSex): class_name: ClassVar[str] = "genotypic sex" class_model_uri: ClassVar[URIRef] = BIOLINK.GenotypicSex - id: Union[str, GenotypicSexId] = None + id: Union[ElementIdentifier, GenotypicSexId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenotypicSexId): self.id = GenotypicSexId(self.id) super().__post_init__() @@ -817,11 +852,13 @@ class SeverityValue(Attribute): class_name: ClassVar[str] = "severity value" class_model_uri: ClassVar[URIRef] = BIOLINK.SeverityValue - id: Union[str, SeverityValueId] = None + id: Union[ElementIdentifier, SeverityValueId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, SeverityValueId): self.id = SeverityValueId(self.id) super().__post_init__() @@ -839,11 +876,13 @@ class FrequencyValue(Attribute): class_name: ClassVar[str] = "frequency value" class_model_uri: ClassVar[URIRef] = BIOLINK.FrequencyValue - id: Union[str, FrequencyValueId] = None + id: Union[ElementIdentifier, FrequencyValueId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, FrequencyValueId): self.id = FrequencyValueId(self.id) super().__post_init__() @@ -862,11 +901,13 @@ class ClinicalModifier(Attribute): class_name: ClassVar[str] = "clinical modifier" class_model_uri: ClassVar[URIRef] = BIOLINK.ClinicalModifier - id: Union[str, ClinicalModifierId] = None + id: Union[ElementIdentifier, ClinicalModifierId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ClinicalModifierId): self.id = ClinicalModifierId(self.id) super().__post_init__() @@ -884,11 +925,13 @@ class Onset(Attribute): class_name: ClassVar[str] = "onset" class_model_uri: ClassVar[URIRef] = BIOLINK.Onset - id: Union[str, OnsetId] = None + id: Union[ElementIdentifier, OnsetId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, OnsetId): self.id = OnsetId(self.id) super().__post_init__() @@ -906,17 +949,122 @@ class NamedThing(YAMLRoot): class_name: ClassVar[str] = "named thing" class_model_uri: ClassVar[URIRef] = BIOLINK.NamedThing - id: Union[str, NamedThingId] + id: Union[ElementIdentifier, NamedThingId] name: Union[str, LabelType] category: List[Union[str, IriType]] = empty_list() def __post_init__(self): - if not isinstance(self.id, NamedThingId): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, NamedThingId): self.id = NamedThingId(self.id) - if not isinstance(self.name, LabelType): + if self.name is None: + raise ValueError(f"name must be supplied") + if self.name is not None and not isinstance(self.name, LabelType): self.name = LabelType(self.name) - if not isinstance(self.category, IriType): - self.category = IriType(self.category) + if not isinstance(self.category, list) or len(self.category) == 0: + raise ValueError(f"category must be a non-empty list") + self.category = [v if isinstance(v, IriType) + else IriType(v) for v in self.category] + super().__post_init__() + + +@dataclass +class DataFile(NamedThing): + _inherited_slots: ClassVar[List[str]] = ["related_to", "interacts_with"] + + class_class_uri: ClassVar[URIRef] = EFO["0004095"] + class_class_curie: ClassVar[str] = "EFO:0004095" + class_name: ClassVar[str] = "data file" + class_model_uri: ClassVar[URIRef] = BIOLINK.DataFile + + id: Union[ElementIdentifier, DataFileId] = None + name: Union[str, LabelType] = None + category: List[Union[str, IriType]] = empty_list() + + def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, DataFileId): + self.id = DataFileId(self.id) + super().__post_init__() + + +@dataclass +class SourceFile(DataFile): + _inherited_slots: ClassVar[List[str]] = ["related_to", "interacts_with"] + + class_class_uri: ClassVar[URIRef] = BIOLINK.SourceFile + class_class_curie: ClassVar[str] = "biolink:SourceFile" + class_name: ClassVar[str] = "source file" + class_model_uri: ClassVar[URIRef] = BIOLINK.SourceFile + + id: Union[ElementIdentifier, SourceFileId] = None + name: Union[str, LabelType] = None + category: List[Union[str, IriType]] = empty_list() + source_version: Optional[str] = None + retrievedOn: Optional[Union[str, XSDDate]] = None + + def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, SourceFileId): + self.id = SourceFileId(self.id) + if self.retrievedOn is not None and not isinstance(self.retrievedOn, XSDDate): + self.retrievedOn = XSDDate(self.retrievedOn) + super().__post_init__() + + +@dataclass +class DataSet(NamedThing): + _inherited_slots: ClassVar[List[str]] = ["related_to", "interacts_with"] + + class_class_uri: ClassVar[URIRef] = IAO["0000100"] + class_class_curie: ClassVar[str] = "IAO:0000100" + class_name: ClassVar[str] = "data set" + class_model_uri: ClassVar[URIRef] = BIOLINK.DataSet + + id: Union[ElementIdentifier, DataSetId] = None + name: Union[str, LabelType] = None + category: List[Union[str, IriType]] = empty_list() + + def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, DataSetId): + self.id = DataSetId(self.id) + super().__post_init__() + + +@dataclass +class DataSetVersion(DataSet): + _inherited_slots: ClassVar[List[str]] = ["related_to", "interacts_with"] + + class_class_uri: ClassVar[URIRef] = BIOLINK.DataSetVersion + class_class_curie: ClassVar[str] = "biolink:DataSetVersion" + class_name: ClassVar[str] = "data set version" + class_model_uri: ClassVar[URIRef] = BIOLINK.DataSetVersion + + id: Union[ElementIdentifier, DataSetVersionId] = None + name: Union[str, LabelType] = None + category: List[Union[str, IriType]] = empty_list() + title: Optional[str] = None + source_data_file: Optional[Union[ElementIdentifier, DataFileId]] = None + versionOf: Optional[Union[ElementIdentifier, DataSetId]] = None + type: Optional[str] = None + distribution: Optional[Union[ElementIdentifier, DistributionLevelId]] = None + + def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, DataSetVersionId): + self.id = DataSetVersionId(self.id) + if self.source_data_file is not None and not isinstance(self.source_data_file, DataFileId): + self.source_data_file = DataFileId(self.source_data_file) + if self.versionOf is not None and not isinstance(self.versionOf, DataSetId): + self.versionOf = DataSetId(self.versionOf) + if self.distribution is not None and not isinstance(self.distribution, DistributionLevelId): + self.distribution = DistributionLevelId(self.distribution) super().__post_init__() @@ -929,7 +1077,7 @@ class BiologicalEntity(NamedThing): class_name: ClassVar[str] = "biological entity" class_model_uri: ClassVar[URIRef] = BIOLINK.BiologicalEntity - id: Union[str, BiologicalEntityId] = None + id: Union[ElementIdentifier, BiologicalEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() @@ -945,11 +1093,13 @@ class OntologyClass(NamedThing): class_name: ClassVar[str] = "ontology class" class_model_uri: ClassVar[URIRef] = BIOLINK.OntologyClass - id: Union[str, OntologyClassId] = None + id: Union[ElementIdentifier, OntologyClassId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, OntologyClassId): self.id = OntologyClassId(self.id) super().__post_init__() @@ -967,11 +1117,13 @@ class RelationshipType(OntologyClass): class_name: ClassVar[str] = "relationship type" class_model_uri: ClassVar[URIRef] = BIOLINK.RelationshipType - id: Union[str, RelationshipTypeId] = None + id: Union[ElementIdentifier, RelationshipTypeId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, RelationshipTypeId): self.id = RelationshipTypeId(self.id) super().__post_init__() @@ -989,11 +1141,13 @@ class GeneOntologyClass(OntologyClass): class_name: ClassVar[str] = "gene ontology class" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneOntologyClass - id: Union[str, GeneOntologyClassId] = None + id: Union[ElementIdentifier, GeneOntologyClassId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneOntologyClassId): self.id = GeneOntologyClassId(self.id) super().__post_init__() @@ -1008,11 +1162,13 @@ class OrganismTaxon(OntologyClass): class_name: ClassVar[str] = "organism taxon" class_model_uri: ClassVar[URIRef] = BIOLINK.OrganismTaxon - id: Union[str, OrganismTaxonId] = None + id: Union[ElementIdentifier, OrganismTaxonId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, OrganismTaxonId): self.id = OrganismTaxonId(self.id) super().__post_init__() @@ -1031,7 +1187,7 @@ class OrganismalEntity(BiologicalEntity): class_name: ClassVar[str] = "organismal entity" class_model_uri: ClassVar[URIRef] = BIOLINK.OrganismalEntity - id: Union[str, OrganismalEntityId] = None + id: Union[ElementIdentifier, OrganismalEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() @@ -1044,11 +1200,13 @@ class IndividualOrganism(OrganismalEntity): class_name: ClassVar[str] = "individual organism" class_model_uri: ClassVar[URIRef] = BIOLINK.IndividualOrganism - id: Union[str, IndividualOrganismId] = None + id: Union[ElementIdentifier, IndividualOrganismId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, IndividualOrganismId): self.id = IndividualOrganismId(self.id) super().__post_init__() @@ -1066,11 +1224,13 @@ class Case(IndividualOrganism): class_name: ClassVar[str] = "case" class_model_uri: ClassVar[URIRef] = BIOLINK.Case - id: Union[str, CaseId] = None + id: Union[ElementIdentifier, CaseId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CaseId): self.id = CaseId(self.id) super().__post_init__() @@ -1090,11 +1250,13 @@ class PopulationOfIndividualOrganisms(OrganismalEntity): class_name: ClassVar[str] = "population of individual organisms" class_model_uri: ClassVar[URIRef] = BIOLINK.PopulationOfIndividualOrganisms - id: Union[str, PopulationOfIndividualOrganismsId] = None + id: Union[ElementIdentifier, PopulationOfIndividualOrganismsId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PopulationOfIndividualOrganismsId): self.id = PopulationOfIndividualOrganismsId(self.id) super().__post_init__() @@ -1109,11 +1271,13 @@ class Biosample(OrganismalEntity): class_name: ClassVar[str] = "biosample" class_model_uri: ClassVar[URIRef] = BIOLINK.Biosample - id: Union[str, BiosampleId] = None + id: Union[ElementIdentifier, BiosampleId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, BiosampleId): self.id = BiosampleId(self.id) super().__post_init__() @@ -1132,11 +1296,13 @@ class DiseaseOrPhenotypicFeature(BiologicalEntity): class_name: ClassVar[str] = "disease or phenotypic feature" class_model_uri: ClassVar[URIRef] = BIOLINK.DiseaseOrPhenotypicFeature - id: Union[str, DiseaseOrPhenotypicFeatureId] = None + id: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DiseaseOrPhenotypicFeatureId): self.id = DiseaseOrPhenotypicFeatureId(self.id) super().__post_init__() @@ -1151,11 +1317,13 @@ class Disease(DiseaseOrPhenotypicFeature): class_name: ClassVar[str] = "disease" class_model_uri: ClassVar[URIRef] = BIOLINK.Disease - id: Union[str, DiseaseId] = None + id: Union[ElementIdentifier, DiseaseId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DiseaseId): self.id = DiseaseId(self.id) super().__post_init__() @@ -1170,11 +1338,13 @@ class PhenotypicFeature(DiseaseOrPhenotypicFeature): class_name: ClassVar[str] = "phenotypic feature" class_model_uri: ClassVar[URIRef] = BIOLINK.PhenotypicFeature - id: Union[str, PhenotypicFeatureId] = None + id: Union[ElementIdentifier, PhenotypicFeatureId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PhenotypicFeatureId): self.id = PhenotypicFeatureId(self.id) super().__post_init__() @@ -1193,11 +1363,13 @@ class Environment(BiologicalEntity): class_name: ClassVar[str] = "environment" class_model_uri: ClassVar[URIRef] = BIOLINK.Environment - id: Union[str, EnvironmentId] = None + id: Union[ElementIdentifier, EnvironmentId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, EnvironmentId): self.id = EnvironmentId(self.id) super().__post_init__() @@ -1215,7 +1387,7 @@ class InformationContentEntity(NamedThing): class_name: ClassVar[str] = "information content entity" class_model_uri: ClassVar[URIRef] = BIOLINK.InformationContentEntity - id: Union[str, InformationContentEntityId] = None + id: Union[ElementIdentifier, InformationContentEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() @@ -1231,11 +1403,13 @@ class ConfidenceLevel(InformationContentEntity): class_name: ClassVar[str] = "confidence level" class_model_uri: ClassVar[URIRef] = BIOLINK.ConfidenceLevel - id: Union[str, ConfidenceLevelId] = None + id: Union[ElementIdentifier, ConfidenceLevelId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ConfidenceLevelId): self.id = ConfidenceLevelId(self.id) super().__post_init__() @@ -1253,11 +1427,13 @@ class EvidenceType(InformationContentEntity): class_name: ClassVar[str] = "evidence type" class_model_uri: ClassVar[URIRef] = BIOLINK.EvidenceType - id: Union[str, EvidenceTypeId] = None + id: Union[ElementIdentifier, EvidenceTypeId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, EvidenceTypeId): self.id = EvidenceTypeId(self.id) super().__post_init__() @@ -1277,11 +1453,13 @@ class Publication(InformationContentEntity): class_name: ClassVar[str] = "publication" class_model_uri: ClassVar[URIRef] = BIOLINK.Publication - id: Union[str, PublicationId] = None + id: Union[ElementIdentifier, PublicationId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PublicationId): self.id = PublicationId(self.id) super().__post_init__() @@ -1296,7 +1474,7 @@ class AdministrativeEntity(NamedThing): class_name: ClassVar[str] = "administrative entity" class_model_uri: ClassVar[URIRef] = BIOLINK.AdministrativeEntity - id: Union[str, AdministrativeEntityId] = None + id: Union[ElementIdentifier, AdministrativeEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() @@ -1312,11 +1490,13 @@ class Provider(AdministrativeEntity): class_name: ClassVar[str] = "provider" class_model_uri: ClassVar[URIRef] = BIOLINK.Provider - id: Union[str, ProviderId] = None + id: Union[ElementIdentifier, ProviderId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ProviderId): self.id = ProviderId(self.id) super().__post_init__() @@ -1334,11 +1514,13 @@ class MolecularEntity(BiologicalEntity): class_name: ClassVar[str] = "molecular entity" class_model_uri: ClassVar[URIRef] = BIOLINK.MolecularEntity - id: Union[str, MolecularEntityId] = None + id: Union[ElementIdentifier, MolecularEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MolecularEntityId): self.id = MolecularEntityId(self.id) super().__post_init__() @@ -1357,11 +1539,13 @@ class ChemicalSubstance(MolecularEntity): class_name: ClassVar[str] = "chemical substance" class_model_uri: ClassVar[URIRef] = BIOLINK.ChemicalSubstance - id: Union[str, ChemicalSubstanceId] = None + id: Union[ElementIdentifier, ChemicalSubstanceId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ChemicalSubstanceId): self.id = ChemicalSubstanceId(self.id) super().__post_init__() @@ -1376,11 +1560,13 @@ class Carbohydrate(ChemicalSubstance): class_name: ClassVar[str] = "carbohydrate" class_model_uri: ClassVar[URIRef] = BIOLINK.Carbohydrate - id: Union[str, CarbohydrateId] = None + id: Union[ElementIdentifier, CarbohydrateId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CarbohydrateId): self.id = CarbohydrateId(self.id) super().__post_init__() @@ -1398,11 +1584,13 @@ class Drug(ChemicalSubstance): class_name: ClassVar[str] = "drug" class_model_uri: ClassVar[URIRef] = BIOLINK.Drug - id: Union[str, DrugId] = None + id: Union[ElementIdentifier, DrugId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DrugId): self.id = DrugId(self.id) super().__post_init__() @@ -1420,11 +1608,13 @@ class Metabolite(ChemicalSubstance): class_name: ClassVar[str] = "metabolite" class_model_uri: ClassVar[URIRef] = BIOLINK.Metabolite - id: Union[str, MetaboliteId] = None + id: Union[ElementIdentifier, MetaboliteId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MetaboliteId): self.id = MetaboliteId(self.id) super().__post_init__() @@ -1442,11 +1632,13 @@ class AnatomicalEntity(OrganismalEntity): class_name: ClassVar[str] = "anatomical entity" class_model_uri: ClassVar[URIRef] = BIOLINK.AnatomicalEntity - id: Union[str, AnatomicalEntityId] = None + id: Union[ElementIdentifier, AnatomicalEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, AnatomicalEntityId): self.id = AnatomicalEntityId(self.id) super().__post_init__() @@ -1464,11 +1656,13 @@ class LifeStage(OrganismalEntity): class_name: ClassVar[str] = "life stage" class_model_uri: ClassVar[URIRef] = BIOLINK.LifeStage - id: Union[str, LifeStageId] = None + id: Union[ElementIdentifier, LifeStageId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, LifeStageId): self.id = LifeStageId(self.id) super().__post_init__() @@ -1486,11 +1680,13 @@ class PlanetaryEntity(NamedThing): class_name: ClassVar[str] = "planetary entity" class_model_uri: ClassVar[URIRef] = BIOLINK.PlanetaryEntity - id: Union[str, PlanetaryEntityId] = None + id: Union[ElementIdentifier, PlanetaryEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PlanetaryEntityId): self.id = PlanetaryEntityId(self.id) super().__post_init__() @@ -1505,11 +1701,13 @@ class EnvironmentalProcess(PlanetaryEntity): class_name: ClassVar[str] = "environmental process" class_model_uri: ClassVar[URIRef] = BIOLINK.EnvironmentalProcess - id: Union[str, EnvironmentalProcessId] = None + id: Union[ElementIdentifier, EnvironmentalProcessId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, EnvironmentalProcessId): self.id = EnvironmentalProcessId(self.id) super().__post_init__() @@ -1524,11 +1722,13 @@ class EnvironmentalFeature(PlanetaryEntity): class_name: ClassVar[str] = "environmental feature" class_model_uri: ClassVar[URIRef] = BIOLINK.EnvironmentalFeature - id: Union[str, EnvironmentalFeatureId] = None + id: Union[ElementIdentifier, EnvironmentalFeatureId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, EnvironmentalFeatureId): self.id = EnvironmentalFeatureId(self.id) super().__post_init__() @@ -1547,11 +1747,13 @@ class ClinicalEntity(NamedThing): class_name: ClassVar[str] = "clinical entity" class_model_uri: ClassVar[URIRef] = BIOLINK.ClinicalEntity - id: Union[str, ClinicalEntityId] = None + id: Union[ElementIdentifier, ClinicalEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ClinicalEntityId): self.id = ClinicalEntityId(self.id) super().__post_init__() @@ -1566,11 +1768,13 @@ class ClinicalTrial(ClinicalEntity): class_name: ClassVar[str] = "clinical trial" class_model_uri: ClassVar[URIRef] = BIOLINK.ClinicalTrial - id: Union[str, ClinicalTrialId] = None + id: Union[ElementIdentifier, ClinicalTrialId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ClinicalTrialId): self.id = ClinicalTrialId(self.id) super().__post_init__() @@ -1585,11 +1789,13 @@ class ClinicalIntervention(ClinicalEntity): class_name: ClassVar[str] = "clinical intervention" class_model_uri: ClassVar[URIRef] = BIOLINK.ClinicalIntervention - id: Union[str, ClinicalInterventionId] = None + id: Union[ElementIdentifier, ClinicalInterventionId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ClinicalInterventionId): self.id = ClinicalInterventionId(self.id) super().__post_init__() @@ -1607,11 +1813,13 @@ class Device(NamedThing): class_name: ClassVar[str] = "device" class_model_uri: ClassVar[URIRef] = BIOLINK.Device - id: Union[str, DeviceId] = None + id: Union[ElementIdentifier, DeviceId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DeviceId): self.id = DeviceId(self.id) super().__post_init__() @@ -1630,12 +1838,14 @@ class GenomicEntity(MolecularEntity): class_name: ClassVar[str] = "genomic entity" class_model_uri: ClassVar[URIRef] = BIOLINK.GenomicEntity - id: Union[str, GenomicEntityId] = None + id: Union[ElementIdentifier, GenomicEntityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenomicEntityId): self.id = GenomicEntityId(self.id) if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence): @@ -1655,11 +1865,13 @@ class Genome(GenomicEntity): class_name: ClassVar[str] = "genome" class_model_uri: ClassVar[URIRef] = BIOLINK.Genome - id: Union[str, GenomeId] = None + id: Union[ElementIdentifier, GenomeId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenomeId): self.id = GenomeId(self.id) super().__post_init__() @@ -1677,11 +1889,13 @@ class Transcript(GenomicEntity): class_name: ClassVar[str] = "transcript" class_model_uri: ClassVar[URIRef] = BIOLINK.Transcript - id: Union[str, TranscriptId] = None + id: Union[ElementIdentifier, TranscriptId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, TranscriptId): self.id = TranscriptId(self.id) super().__post_init__() @@ -1700,11 +1914,13 @@ class Exon(GenomicEntity): class_name: ClassVar[str] = "exon" class_model_uri: ClassVar[URIRef] = BIOLINK.Exon - id: Union[str, ExonId] = None + id: Union[ElementIdentifier, ExonId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ExonId): self.id = ExonId(self.id) super().__post_init__() @@ -1719,11 +1935,13 @@ class CodingSequence(GenomicEntity): class_name: ClassVar[str] = "coding sequence" class_model_uri: ClassVar[URIRef] = BIOLINK.CodingSequence - id: Union[str, CodingSequenceId] = None + id: Union[ElementIdentifier, CodingSequenceId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CodingSequenceId): self.id = CodingSequenceId(self.id) super().__post_init__() @@ -1742,13 +1960,17 @@ class MacromolecularMachine(GenomicEntity): class_name: ClassVar[str] = "macromolecular machine" class_model_uri: ClassVar[URIRef] = BIOLINK.MacromolecularMachine - id: Union[str, MacromolecularMachineId] = None + id: Union[ElementIdentifier, MacromolecularMachineId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MacromolecularMachineId): self.id = MacromolecularMachineId(self.id) + if self.name is None: + raise ValueError(f"name must be supplied") if self.name is not None and not isinstance(self.name, SymbolType): self.name = SymbolType(self.name) super().__post_init__() @@ -1766,11 +1988,13 @@ class GeneOrGeneProduct(MacromolecularMachine): class_name: ClassVar[str] = "gene or gene product" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneOrGeneProduct - id: Union[str, GeneOrGeneProductId] = None + id: Union[ElementIdentifier, GeneOrGeneProductId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneOrGeneProductId): self.id = GeneOrGeneProductId(self.id) super().__post_init__() @@ -1785,11 +2009,13 @@ class Gene(GeneOrGeneProduct): class_name: ClassVar[str] = "gene" class_model_uri: ClassVar[URIRef] = BIOLINK.Gene - id: Union[str, GeneId] = None + id: Union[ElementIdentifier, GeneId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneId): self.id = GeneId(self.id) super().__post_init__() @@ -1807,11 +2033,13 @@ class GeneProduct(GeneOrGeneProduct): class_name: ClassVar[str] = "gene product" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneProduct - id: Union[str, GeneProductId] = None + id: Union[ElementIdentifier, GeneProductId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneProductId): self.id = GeneProductId(self.id) super().__post_init__() @@ -1830,11 +2058,13 @@ class Protein(GeneProduct): class_name: ClassVar[str] = "protein" class_model_uri: ClassVar[URIRef] = BIOLINK.Protein - id: Union[str, ProteinId] = None + id: Union[ElementIdentifier, ProteinId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ProteinId): self.id = ProteinId(self.id) super().__post_init__() @@ -1854,7 +2084,7 @@ class GeneProductIsoform(GeneProduct): class_name: ClassVar[str] = "gene product isoform" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneProductIsoform - id: Union[str, GeneProductIsoformId] = None + id: Union[ElementIdentifier, GeneProductIsoformId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() @@ -1871,11 +2101,13 @@ class ProteinIsoform(Protein): class_name: ClassVar[str] = "protein isoform" class_model_uri: ClassVar[URIRef] = BIOLINK.ProteinIsoform - id: Union[str, ProteinIsoformId] = None + id: Union[ElementIdentifier, ProteinIsoformId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ProteinIsoformId): self.id = ProteinIsoformId(self.id) super().__post_init__() @@ -1890,11 +2122,13 @@ class RNAProduct(GeneProduct): class_name: ClassVar[str] = "RNA product" class_model_uri: ClassVar[URIRef] = BIOLINK.RNAProduct - id: Union[str, RNAProductId] = None + id: Union[ElementIdentifier, RNAProductId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, RNAProductId): self.id = RNAProductId(self.id) super().__post_init__() @@ -1912,11 +2146,13 @@ class RNAProductIsoform(RNAProduct): class_name: ClassVar[str] = "RNA product isoform" class_model_uri: ClassVar[URIRef] = BIOLINK.RNAProductIsoform - id: Union[str, RNAProductIsoformId] = None + id: Union[ElementIdentifier, RNAProductIsoformId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, RNAProductIsoformId): self.id = RNAProductIsoformId(self.id) super().__post_init__() @@ -1931,11 +2167,13 @@ class NoncodingRNAProduct(RNAProduct): class_name: ClassVar[str] = "noncoding RNA product" class_model_uri: ClassVar[URIRef] = BIOLINK.NoncodingRNAProduct - id: Union[str, NoncodingRNAProductId] = None + id: Union[ElementIdentifier, NoncodingRNAProductId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, NoncodingRNAProductId): self.id = NoncodingRNAProductId(self.id) super().__post_init__() @@ -1950,11 +2188,13 @@ class MicroRNA(NoncodingRNAProduct): class_name: ClassVar[str] = "microRNA" class_model_uri: ClassVar[URIRef] = BIOLINK.MicroRNA - id: Union[str, MicroRNAId] = None + id: Union[ElementIdentifier, MicroRNAId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MicroRNAId): self.id = MicroRNAId(self.id) super().__post_init__() @@ -1969,11 +2209,13 @@ class MacromolecularComplex(MacromolecularMachine): class_name: ClassVar[str] = "macromolecular complex" class_model_uri: ClassVar[URIRef] = BIOLINK.MacromolecularComplex - id: Union[str, MacromolecularComplexId] = None + id: Union[ElementIdentifier, MacromolecularComplexId] = None name: Union[str, SymbolType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MacromolecularComplexId): self.id = MacromolecularComplexId(self.id) super().__post_init__() @@ -1991,11 +2233,13 @@ class GeneFamily(MolecularEntity): class_name: ClassVar[str] = "gene family" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneFamily - id: Union[str, GeneFamilyId] = None + id: Union[ElementIdentifier, GeneFamilyId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneFamilyId): self.id = GeneFamilyId(self.id) super().__post_init__() @@ -2010,11 +2254,13 @@ class Zygosity(Attribute): class_name: ClassVar[str] = "zygosity" class_model_uri: ClassVar[URIRef] = BIOLINK.Zygosity - id: Union[str, ZygosityId] = None + id: Union[ElementIdentifier, ZygosityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ZygosityId): self.id = ZygosityId(self.id) super().__post_init__() @@ -2033,12 +2279,14 @@ class Genotype(GenomicEntity): class_name: ClassVar[str] = "genotype" class_model_uri: ClassVar[URIRef] = BIOLINK.Genotype - id: Union[str, GenotypeId] = None + id: Union[ElementIdentifier, GenotypeId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() - has_zygosity: Optional[Union[str, ZygosityId]] = None + has_zygosity: Optional[Union[ElementIdentifier, ZygosityId]] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenotypeId): self.id = GenotypeId(self.id) if self.has_zygosity is not None and not isinstance(self.has_zygosity, ZygosityId): @@ -2058,11 +2306,13 @@ class Haplotype(GenomicEntity): class_name: ClassVar[str] = "haplotype" class_model_uri: ClassVar[URIRef] = BIOLINK.Haplotype - id: Union[str, HaplotypeId] = None + id: Union[ElementIdentifier, HaplotypeId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, HaplotypeId): self.id = HaplotypeId(self.id) super().__post_init__() @@ -2080,13 +2330,15 @@ class SequenceVariant(GenomicEntity): class_name: ClassVar[str] = "sequence variant" class_model_uri: ClassVar[URIRef] = BIOLINK.SequenceVariant - id: Union[str, SequenceVariantId] = None + id: Union[ElementIdentifier, SequenceVariantId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None - has_gene: List[Union[str, GeneId]] = empty_list() + has_gene: List[Union[ElementIdentifier, GeneId]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, SequenceVariantId): self.id = SequenceVariantId(self.id) if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence): @@ -2108,12 +2360,14 @@ class DrugExposure(Environment): class_name: ClassVar[str] = "drug exposure" class_model_uri: ClassVar[URIRef] = BIOLINK.DrugExposure - id: Union[str, DrugExposureId] = None + id: Union[ElementIdentifier, DrugExposureId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() - drug: List[Union[str, ChemicalSubstanceId]] = empty_list() + drug: List[Union[ElementIdentifier, ChemicalSubstanceId]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DrugExposureId): self.id = DrugExposureId(self.id) super().__post_init__() @@ -2131,13 +2385,15 @@ class Treatment(Environment): class_name: ClassVar[str] = "treatment" class_model_uri: ClassVar[URIRef] = BIOLINK.Treatment - id: Union[str, TreatmentId] = None + id: Union[ElementIdentifier, TreatmentId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() - treats: List[Union[str, DiseaseOrPhenotypicFeatureId]] = empty_list() - has_exposure_parts: List[Union[str, DrugExposureId]] = empty_list() + treats: List[Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId]] = empty_list() + has_exposure_parts: List[Union[ElementIdentifier, DrugExposureId]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, TreatmentId): self.id = TreatmentId(self.id) super().__post_init__() @@ -2155,13 +2411,15 @@ class GeographicLocation(PlanetaryEntity): class_name: ClassVar[str] = "geographic location" class_model_uri: ClassVar[URIRef] = BIOLINK.GeographicLocation - id: Union[str, GeographicLocationId] = None + id: Union[ElementIdentifier, GeographicLocationId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() latitude: Optional[float] = None longitude: Optional[float] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeographicLocationId): self.id = GeographicLocationId(self.id) super().__post_init__() @@ -2179,12 +2437,14 @@ class GeographicLocationAtTime(GeographicLocation): class_name: ClassVar[str] = "geographic location at time" class_model_uri: ClassVar[URIRef] = BIOLINK.GeographicLocationAtTime - id: Union[str, GeographicLocationAtTimeId] = None + id: Union[ElementIdentifier, GeographicLocationAtTimeId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() timepoint: Optional[Union[str, TimeType]] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeographicLocationAtTimeId): self.id = GeographicLocationAtTimeId(self.id) if self.timepoint is not None and not isinstance(self.timepoint, TimeType): @@ -2204,26 +2464,34 @@ class Association(YAMLRoot): class_name: ClassVar[str] = "association" class_model_uri: ClassVar[URIRef] = BIOLINK.Association - id: Union[str, AssociationId] - subject: Union[str, IriType] - relation: Union[str, IriType] - object: Union[str, IriType] + subject: Union[ElementIdentifier, NamedThingId] + relation: Union[str, URIorCURIE] + object: Union[ElementIdentifier, NamedThingId] edge_label: Union[str, LabelType] + id: Union[ElementIdentifier, AssociationId] = bnode() negated: Optional[Bool] = None - association_type: Optional[Union[str, OntologyClassId]] = None - qualifiers: List[Union[str, OntologyClassId]] = empty_list() - publications: List[Union[str, PublicationId]] = empty_list() - provided_by: Optional[Union[str, ProviderId]] = None + association_type: Optional[Union[ElementIdentifier, OntologyClassId]] = None + qualifiers: List[Union[ElementIdentifier, OntologyClassId]] = empty_list() + publications: List[Union[ElementIdentifier, PublicationId]] = empty_list() + provided_by: Optional[Union[ElementIdentifier, ProviderId]] = None def __post_init__(self): - if not isinstance(self.id, AssociationId): + if self.id is None: + raise ValueError(f"id must be supplied") + if self.id is not None and not isinstance(self.id, AssociationId): self.id = AssociationId(self.id) - if not isinstance(self.subject, IriType): - self.subject = IriType(self.subject) - if not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) - if not isinstance(self.object, IriType): - self.object = IriType(self.object) + if self.subject is None: + raise ValueError(f"subject must be supplied") + if self.subject is not None and not isinstance(self.subject, NamedThingId): + self.subject = NamedThingId(self.subject) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") + if self.object is not None and not isinstance(self.object, NamedThingId): + self.object = NamedThingId(self.object) if self.association_type is not None and not isinstance(self.association_type, OntologyClassId): self.association_type = OntologyClassId(self.association_type) self.qualifiers = [v if isinstance(v, OntologyClassId) @@ -2247,19 +2515,27 @@ class GenotypeToGenotypePartAssociation(Association): class_name: ClassVar[str] = "genotype to genotype part association" class_model_uri: ClassVar[URIRef] = BIOLINK.GenotypeToGenotypePartAssociation - id: Union[str, GenotypeToGenotypePartAssociationId] = None - subject: Union[str, GenotypeId] = None - relation: Union[str, IriType] = None - object: Union[str, GenotypeId] = None + subject: Union[ElementIdentifier, GenotypeId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GenotypeId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GenotypeToGenotypePartAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenotypeToGenotypePartAssociationId): self.id = GenotypeToGenotypePartAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenotypeId): self.subject = GenotypeId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GenotypeId): self.object = GenotypeId(self.object) super().__post_init__() @@ -2278,19 +2554,27 @@ class GenotypeToGeneAssociation(Association): class_name: ClassVar[str] = "genotype to gene association" class_model_uri: ClassVar[URIRef] = BIOLINK.GenotypeToGeneAssociation - id: Union[str, GenotypeToGeneAssociationId] = None - subject: Union[str, GenotypeId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneId] = None + subject: Union[ElementIdentifier, GenotypeId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GenotypeToGeneAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenotypeToGeneAssociationId): self.id = GenotypeToGeneAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenotypeId): self.subject = GenotypeId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneId): self.object = GeneId(self.object) super().__post_init__() @@ -2308,19 +2592,27 @@ class GenotypeToVariantAssociation(Association): class_name: ClassVar[str] = "genotype to variant association" class_model_uri: ClassVar[URIRef] = BIOLINK.GenotypeToVariantAssociation - id: Union[str, GenotypeToVariantAssociationId] = None - subject: Union[str, GenotypeId] = None - relation: Union[str, IriType] = None - object: Union[str, SequenceVariantId] = None + subject: Union[ElementIdentifier, GenotypeId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, SequenceVariantId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GenotypeToVariantAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenotypeToVariantAssociationId): self.id = GenotypeToVariantAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenotypeId): self.subject = GenotypeId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, SequenceVariantId): self.object = SequenceVariantId(self.object) super().__post_init__() @@ -2339,15 +2631,19 @@ class GeneToGeneAssociation(Association): class_name: ClassVar[str] = "gene to gene association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToGeneAssociation - id: Union[str, GeneToGeneAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOrGeneProductId] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOrGeneProductId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToGeneAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneOrGeneProductId): self.object = GeneOrGeneProductId(self.object) super().__post_init__() @@ -2366,17 +2662,21 @@ class GeneToGeneHomologyAssociation(GeneToGeneAssociation): class_name: ClassVar[str] = "gene to gene homology association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToGeneHomologyAssociation - id: Union[str, GeneToGeneHomologyAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOrGeneProductId] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOrGeneProductId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToGeneHomologyAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneToGeneHomologyAssociationId): self.id = GeneToGeneHomologyAssociationId(self.id) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) super().__post_init__() @@ -2393,17 +2693,21 @@ class PairwiseGeneToGeneInteraction(GeneToGeneAssociation): class_name: ClassVar[str] = "pairwise gene to gene interaction" class_model_uri: ClassVar[URIRef] = BIOLINK.PairwiseGeneToGeneInteraction - id: Union[str, PairwiseGeneToGeneInteractionId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOrGeneProductId] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOrGeneProductId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, PairwiseGeneToGeneInteractionId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PairwiseGeneToGeneInteractionId): self.id = PairwiseGeneToGeneInteractionId(self.id) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) super().__post_init__() @@ -2419,13 +2723,15 @@ class CellLineToThingAssociation(Association): class_name: ClassVar[str] = "cell line to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.CellLineToThingAssociation - id: Union[str, CellLineToThingAssociationId] = None - subject: Union[str, CellLineId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, CellLineId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, CellLineToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, CellLineId): self.subject = CellLineId(self.subject) super().__post_init__() @@ -2444,15 +2750,19 @@ class CellLineToDiseaseOrPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "cell line to disease or phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.CellLineToDiseaseOrPhenotypicFeatureAssociation - id: Union[str, CellLineToDiseaseOrPhenotypicFeatureAssociationId] = None - subject: Union[str, DiseaseOrPhenotypicFeatureId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, CellLineToDiseaseOrPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CellLineToDiseaseOrPhenotypicFeatureAssociationId): self.id = CellLineToDiseaseOrPhenotypicFeatureAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, DiseaseOrPhenotypicFeatureId): self.subject = DiseaseOrPhenotypicFeatureId(self.subject) super().__post_init__() @@ -2470,13 +2780,15 @@ class ChemicalToThingAssociation(Association): class_name: ClassVar[str] = "chemical to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.ChemicalToThingAssociation - id: Union[str, ChemicalToThingAssociationId] = None - subject: Union[str, ChemicalSubstanceId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, ChemicalSubstanceId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, ChemicalToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, ChemicalSubstanceId): self.subject = ChemicalSubstanceId(self.subject) super().__post_init__() @@ -2494,13 +2806,15 @@ class CaseToThingAssociation(Association): class_name: ClassVar[str] = "case to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.CaseToThingAssociation - id: Union[str, CaseToThingAssociationId] = None - subject: Union[str, CaseId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, CaseId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, CaseToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, CaseId): self.subject = CaseId(self.subject) super().__post_init__() @@ -2519,15 +2833,19 @@ class ChemicalToDiseaseOrPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "chemical to disease or phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.ChemicalToDiseaseOrPhenotypicFeatureAssociation - id: Union[str, ChemicalToDiseaseOrPhenotypicFeatureAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, DiseaseOrPhenotypicFeatureId] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, ChemicalToDiseaseOrPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ChemicalToDiseaseOrPhenotypicFeatureAssociationId): self.id = ChemicalToDiseaseOrPhenotypicFeatureAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, DiseaseOrPhenotypicFeatureId): self.object = DiseaseOrPhenotypicFeatureId(self.object) super().__post_init__() @@ -2545,15 +2863,19 @@ class ChemicalToPathwayAssociation(Association): class_name: ClassVar[str] = "chemical to pathway association" class_model_uri: ClassVar[URIRef] = BIOLINK.ChemicalToPathwayAssociation - id: Union[str, ChemicalToPathwayAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, PathwayId] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, PathwayId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, ChemicalToPathwayAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ChemicalToPathwayAssociationId): self.id = ChemicalToPathwayAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, PathwayId): self.object = PathwayId(self.object) super().__post_init__() @@ -2571,15 +2893,19 @@ class ChemicalToGeneAssociation(Association): class_name: ClassVar[str] = "chemical to gene association" class_model_uri: ClassVar[URIRef] = BIOLINK.ChemicalToGeneAssociation - id: Union[str, ChemicalToGeneAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOrGeneProductId] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOrGeneProductId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, ChemicalToGeneAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ChemicalToGeneAssociationId): self.id = ChemicalToGeneAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneOrGeneProductId): self.object = GeneOrGeneProductId(self.object) super().__post_init__() @@ -2597,13 +2923,15 @@ class BiosampleToThingAssociation(Association): class_name: ClassVar[str] = "biosample to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.BiosampleToThingAssociation - id: Union[str, BiosampleToThingAssociationId] = None - subject: Union[str, BiosampleId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, BiosampleId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, BiosampleToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, BiosampleId): self.subject = BiosampleId(self.subject) super().__post_init__() @@ -2621,13 +2949,15 @@ class BiosampleToDiseaseOrPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "biosample to disease or phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.BiosampleToDiseaseOrPhenotypicFeatureAssociation - id: Union[str, BiosampleToDiseaseOrPhenotypicFeatureAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, BiosampleToDiseaseOrPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, BiosampleToDiseaseOrPhenotypicFeatureAssociationId): self.id = BiosampleToDiseaseOrPhenotypicFeatureAssociationId(self.id) super().__post_init__() @@ -2642,14 +2972,16 @@ class EntityToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "entity to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.EntityToPhenotypicFeatureAssociation - id: Union[str, EntityToPhenotypicFeatureAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, PhenotypicFeatureId] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, PhenotypicFeatureId] = None edge_label: Union[str, LabelType] = None - sex_qualifier: Optional[Union[str, BiologicalSexId]] = None + id: Union[ElementIdentifier, EntityToPhenotypicFeatureAssociationId] = bnode() + sex_qualifier: Optional[Union[ElementIdentifier, BiologicalSexId]] = None def __post_init__(self): + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, PhenotypicFeatureId): self.object = PhenotypicFeatureId(self.object) if self.sex_qualifier is not None and not isinstance(self.sex_qualifier, BiologicalSexId): @@ -2666,13 +2998,15 @@ class DiseaseOrPhenotypicFeatureAssociationToThingAssociation(Association): class_name: ClassVar[str] = "disease or phenotypic feature association to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.DiseaseOrPhenotypicFeatureAssociationToThingAssociation - id: Union[str, DiseaseOrPhenotypicFeatureAssociationToThingAssociationId] = None - subject: Union[str, DiseaseOrPhenotypicFeatureId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureAssociationToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, DiseaseOrPhenotypicFeatureId): self.subject = DiseaseOrPhenotypicFeatureId(self.subject) super().__post_init__() @@ -2691,15 +3025,19 @@ class DiseaseOrPhenotypicFeatureAssociationToLocationAssociation(DiseaseOrPhenot class_name: ClassVar[str] = "disease or phenotypic feature association to location association" class_model_uri: ClassVar[URIRef] = BIOLINK.DiseaseOrPhenotypicFeatureAssociationToLocationAssociation - id: Union[str, DiseaseOrPhenotypicFeatureAssociationToLocationAssociationId] = None - subject: Union[str, DiseaseOrPhenotypicFeatureId] = None - relation: Union[str, IriType] = None - object: Union[str, AnatomicalEntityId] = None + subject: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, AnatomicalEntityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureAssociationToLocationAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DiseaseOrPhenotypicFeatureAssociationToLocationAssociationId): self.id = DiseaseOrPhenotypicFeatureAssociationToLocationAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, AnatomicalEntityId): self.object = AnatomicalEntityId(self.object) super().__post_init__() @@ -2714,13 +3052,15 @@ class ThingToDiseaseOrPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "thing to disease or phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.ThingToDiseaseOrPhenotypicFeatureAssociation - id: Union[str, ThingToDiseaseOrPhenotypicFeatureAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, DiseaseOrPhenotypicFeatureId] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, DiseaseOrPhenotypicFeatureId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, ThingToDiseaseOrPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, DiseaseOrPhenotypicFeatureId): self.object = DiseaseOrPhenotypicFeatureId(self.object) super().__post_init__() @@ -2735,13 +3075,15 @@ class DiseaseToThingAssociation(Association): class_name: ClassVar[str] = "disease to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.DiseaseToThingAssociation - id: Union[str, DiseaseToThingAssociationId] = None - subject: Union[str, DiseaseId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, DiseaseId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, DiseaseToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, DiseaseId): self.subject = DiseaseId(self.subject) super().__post_init__() @@ -2760,19 +3102,25 @@ class GenotypeToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "genotype to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.GenotypeToPhenotypicFeatureAssociation - id: Union[str, GenotypeToPhenotypicFeatureAssociationId] = None - subject: Union[str, GenotypeId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GenotypeId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GenotypeToPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenotypeToPhenotypicFeatureAssociationId): self.id = GenotypeToPhenotypicFeatureAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenotypeId): self.subject = GenotypeId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) super().__post_init__() @@ -2789,15 +3137,19 @@ class EnvironmentToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "environment to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.EnvironmentToPhenotypicFeatureAssociation - id: Union[str, EnvironmentToPhenotypicFeatureAssociationId] = None - subject: Union[str, EnvironmentId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, EnvironmentId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, EnvironmentToPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, EnvironmentToPhenotypicFeatureAssociationId): self.id = EnvironmentToPhenotypicFeatureAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, EnvironmentId): self.subject = EnvironmentId(self.subject) super().__post_init__() @@ -2816,13 +3168,15 @@ class DiseaseToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "disease to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.DiseaseToPhenotypicFeatureAssociation - id: Union[str, DiseaseToPhenotypicFeatureAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, DiseaseToPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, DiseaseToPhenotypicFeatureAssociationId): self.id = DiseaseToPhenotypicFeatureAssociationId(self.id) super().__post_init__() @@ -2841,13 +3195,15 @@ class CaseToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "case to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.CaseToPhenotypicFeatureAssociation - id: Union[str, CaseToPhenotypicFeatureAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, CaseToPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CaseToPhenotypicFeatureAssociationId): self.id = CaseToPhenotypicFeatureAssociationId(self.id) super().__post_init__() @@ -2862,13 +3218,15 @@ class GeneToThingAssociation(Association): class_name: ClassVar[str] = "gene to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToThingAssociation - id: Union[str, GeneToThingAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) super().__post_init__() @@ -2883,15 +3241,19 @@ class GeneToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "gene to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToPhenotypicFeatureAssociation - id: Union[str, GeneToPhenotypicFeatureAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneToPhenotypicFeatureAssociationId): self.id = GeneToPhenotypicFeatureAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) super().__post_init__() @@ -2906,15 +3268,19 @@ class GeneToDiseaseAssociation(Association): class_name: ClassVar[str] = "gene to disease association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToDiseaseAssociation - id: Union[str, GeneToDiseaseAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToDiseaseAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneToDiseaseAssociationId): self.id = GeneToDiseaseAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) super().__post_init__() @@ -2932,20 +3298,26 @@ class VariantToPopulationAssociation(Association): class_name: ClassVar[str] = "variant to population association" class_model_uri: ClassVar[URIRef] = BIOLINK.VariantToPopulationAssociation - id: Union[str, VariantToPopulationAssociationId] = None - subject: Union[str, SequenceVariantId] = None - relation: Union[str, IriType] = None - object: Union[str, PopulationOfIndividualOrganismsId] = None + subject: Union[ElementIdentifier, SequenceVariantId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, PopulationOfIndividualOrganismsId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, VariantToPopulationAssociationId] = bnode() has_count: Optional[int] = None has_total: Optional[int] = None has_quotient: Optional[float] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, VariantToPopulationAssociationId): self.id = VariantToPopulationAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, SequenceVariantId): self.subject = SequenceVariantId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, PopulationOfIndividualOrganismsId): self.object = PopulationOfIndividualOrganismsId(self.object) super().__post_init__() @@ -2963,19 +3335,27 @@ class PopulationToPopulationAssociation(Association): class_name: ClassVar[str] = "population to population association" class_model_uri: ClassVar[URIRef] = BIOLINK.PopulationToPopulationAssociation - id: Union[str, PopulationToPopulationAssociationId] = None - subject: Union[str, PopulationOfIndividualOrganismsId] = None - relation: Union[str, IriType] = None - object: Union[str, PopulationOfIndividualOrganismsId] = None + subject: Union[ElementIdentifier, PopulationOfIndividualOrganismsId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, PopulationOfIndividualOrganismsId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, PopulationToPopulationAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PopulationToPopulationAssociationId): self.id = PopulationToPopulationAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, PopulationOfIndividualOrganismsId): self.subject = PopulationOfIndividualOrganismsId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, PopulationOfIndividualOrganismsId): self.object = PopulationOfIndividualOrganismsId(self.object) super().__post_init__() @@ -2990,15 +3370,19 @@ class VariantToPhenotypicFeatureAssociation(Association): class_name: ClassVar[str] = "variant to phenotypic feature association" class_model_uri: ClassVar[URIRef] = BIOLINK.VariantToPhenotypicFeatureAssociation - id: Union[str, VariantToPhenotypicFeatureAssociationId] = None - subject: Union[str, SequenceVariantId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, SequenceVariantId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, VariantToPhenotypicFeatureAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, VariantToPhenotypicFeatureAssociationId): self.id = VariantToPhenotypicFeatureAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, SequenceVariantId): self.subject = SequenceVariantId(self.subject) super().__post_init__() @@ -3013,21 +3397,29 @@ class VariantToDiseaseAssociation(Association): class_name: ClassVar[str] = "variant to disease association" class_model_uri: ClassVar[URIRef] = BIOLINK.VariantToDiseaseAssociation - id: Union[str, VariantToDiseaseAssociationId] = None - subject: Union[str, IriType] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, NamedThingId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, VariantToDiseaseAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, VariantToDiseaseAssociationId): self.id = VariantToDiseaseAssociationId(self.id) - if self.subject is not None and not isinstance(self.subject, IriType): - self.subject = IriType(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) - if self.object is not None and not isinstance(self.object, IriType): - self.object = IriType(self.object) + if self.subject is None: + raise ValueError(f"subject must be supplied") + if self.subject is not None and not isinstance(self.subject, NamedThingId): + self.subject = NamedThingId(self.subject) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") + if self.object is not None and not isinstance(self.object, NamedThingId): + self.object = NamedThingId(self.object) super().__post_init__() @@ -3040,15 +3432,19 @@ class GeneAsAModelOfDiseaseAssociation(GeneToDiseaseAssociation): class_name: ClassVar[str] = "gene as a model of disease association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneAsAModelOfDiseaseAssociation - id: Union[str, GeneAsAModelOfDiseaseAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneAsAModelOfDiseaseAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneAsAModelOfDiseaseAssociationId): self.id = GeneAsAModelOfDiseaseAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) super().__post_init__() @@ -3063,16 +3459,20 @@ class GeneHasVariantThatContributesToDiseaseAssociation(GeneToDiseaseAssociation class_name: ClassVar[str] = "gene has variant that contributes to disease association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneHasVariantThatContributesToDiseaseAssociation - id: Union[str, GeneHasVariantThatContributesToDiseaseAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None - sequence_variant_qualifier: Optional[Union[str, SequenceVariantId]] = None + id: Union[ElementIdentifier, GeneHasVariantThatContributesToDiseaseAssociationId] = bnode() + sequence_variant_qualifier: Optional[Union[ElementIdentifier, SequenceVariantId]] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneHasVariantThatContributesToDiseaseAssociationId): self.id = GeneHasVariantThatContributesToDiseaseAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) if self.sequence_variant_qualifier is not None and not isinstance(self.sequence_variant_qualifier, SequenceVariantId): @@ -3089,13 +3489,15 @@ class GenotypeToThingAssociation(Association): class_name: ClassVar[str] = "genotype to thing association" class_model_uri: ClassVar[URIRef] = BIOLINK.GenotypeToThingAssociation - id: Union[str, GenotypeToThingAssociationId] = None - subject: Union[str, GenotypeId] = None - relation: Union[str, IriType] = None - object: Union[str, IriType] = None + subject: Union[ElementIdentifier, GenotypeId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, NamedThingId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GenotypeToThingAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenotypeId): self.subject = GenotypeId(self.subject) super().__post_init__() @@ -3113,21 +3515,29 @@ class GeneToExpressionSiteAssociation(Association): class_name: ClassVar[str] = "gene to expression site association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToExpressionSiteAssociation - id: Union[str, GeneToExpressionSiteAssociationId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, AnatomicalEntityId] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, AnatomicalEntityId] = None edge_label: Union[str, LabelType] = None - stage_qualifier: Optional[Union[str, LifeStageId]] = None - quantifier_qualifier: Optional[Union[str, OntologyClassId]] = None + id: Union[ElementIdentifier, GeneToExpressionSiteAssociationId] = bnode() + stage_qualifier: Optional[Union[ElementIdentifier, LifeStageId]] = None + quantifier_qualifier: Optional[Union[ElementIdentifier, OntologyClassId]] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneToExpressionSiteAssociationId): self.id = GeneToExpressionSiteAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, AnatomicalEntityId): self.object = AnatomicalEntityId(self.object) if self.stage_qualifier is not None and not isinstance(self.stage_qualifier, LifeStageId): @@ -3150,15 +3560,19 @@ class SequenceVariantModulatesTreatmentAssociation(Association): class_name: ClassVar[str] = "sequence variant modulates treatment association" class_model_uri: ClassVar[URIRef] = BIOLINK.SequenceVariantModulatesTreatmentAssociation - id: Union[str, SequenceVariantModulatesTreatmentAssociationId] = None - subject: Union[str, SequenceVariantId] = None - relation: Union[str, IriType] = None - object: Union[str, TreatmentId] = None + subject: Union[ElementIdentifier, SequenceVariantId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, TreatmentId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, SequenceVariantModulatesTreatmentAssociationId] = bnode() def __post_init__(self): + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, SequenceVariantId): self.subject = SequenceVariantId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, TreatmentId): self.object = TreatmentId(self.object) super().__post_init__() @@ -3177,17 +3591,23 @@ class FunctionalAssociation(Association): class_name: ClassVar[str] = "functional association" class_model_uri: ClassVar[URIRef] = BIOLINK.FunctionalAssociation - id: Union[str, FunctionalAssociationId] = None - subject: Union[str, MacromolecularMachineId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOntologyClassId] = None + subject: Union[ElementIdentifier, MacromolecularMachineId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOntologyClassId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, FunctionalAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, FunctionalAssociationId): self.id = FunctionalAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, MacromolecularMachineId): self.subject = MacromolecularMachineId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneOntologyClassId): self.object = GeneOntologyClassId(self.object) super().__post_init__() @@ -3207,15 +3627,19 @@ class MacromolecularMachineToMolecularActivityAssociation(FunctionalAssociation) class_name: ClassVar[str] = "macromolecular machine to molecular activity association" class_model_uri: ClassVar[URIRef] = BIOLINK.MacromolecularMachineToMolecularActivityAssociation - id: Union[str, MacromolecularMachineToMolecularActivityAssociationId] = None - subject: Union[str, MacromolecularMachineId] = None - relation: Union[str, IriType] = None - object: Union[str, MolecularActivityId] = None + subject: Union[ElementIdentifier, MacromolecularMachineId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, MolecularActivityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, MacromolecularMachineToMolecularActivityAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MacromolecularMachineToMolecularActivityAssociationId): self.id = MacromolecularMachineToMolecularActivityAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, MolecularActivityId): self.object = MolecularActivityId(self.object) super().__post_init__() @@ -3235,15 +3659,19 @@ class MacromolecularMachineToBiologicalProcessAssociation(FunctionalAssociation) class_name: ClassVar[str] = "macromolecular machine to biological process association" class_model_uri: ClassVar[URIRef] = BIOLINK.MacromolecularMachineToBiologicalProcessAssociation - id: Union[str, MacromolecularMachineToBiologicalProcessAssociationId] = None - subject: Union[str, MacromolecularMachineId] = None - relation: Union[str, IriType] = None - object: Union[str, BiologicalProcessId] = None + subject: Union[ElementIdentifier, MacromolecularMachineId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, BiologicalProcessId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, MacromolecularMachineToBiologicalProcessAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MacromolecularMachineToBiologicalProcessAssociationId): self.id = MacromolecularMachineToBiologicalProcessAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, BiologicalProcessId): self.object = BiologicalProcessId(self.object) super().__post_init__() @@ -3263,15 +3691,19 @@ class MacromolecularMachineToCellularComponentAssociation(FunctionalAssociation) class_name: ClassVar[str] = "macromolecular machine to cellular component association" class_model_uri: ClassVar[URIRef] = BIOLINK.MacromolecularMachineToCellularComponentAssociation - id: Union[str, MacromolecularMachineToCellularComponentAssociationId] = None - subject: Union[str, MacromolecularMachineId] = None - relation: Union[str, IriType] = None - object: Union[str, CellularComponentId] = None + subject: Union[ElementIdentifier, MacromolecularMachineId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, CellularComponentId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, MacromolecularMachineToCellularComponentAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MacromolecularMachineToCellularComponentAssociationId): self.id = MacromolecularMachineToCellularComponentAssociationId(self.id) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, CellularComponentId): self.object = CellularComponentId(self.object) super().__post_init__() @@ -3286,17 +3718,23 @@ class GeneToGoTermAssociation(FunctionalAssociation): class_name: ClassVar[str] = "gene to go term association" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToGoTermAssociation - id: Union[str, GeneToGoTermAssociationId] = None - subject: Union[str, MolecularEntityId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOntologyClassId] = None + subject: Union[ElementIdentifier, MolecularEntityId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOntologyClassId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToGoTermAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneToGoTermAssociationId): self.id = GeneToGoTermAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, MolecularEntityId): self.subject = MolecularEntityId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneOntologyClassId): self.object = GeneOntologyClassId(self.object) super().__post_init__() @@ -3315,21 +3753,27 @@ class GenomicSequenceLocalization(Association): class_name: ClassVar[str] = "genomic sequence localization" class_model_uri: ClassVar[URIRef] = BIOLINK.GenomicSequenceLocalization - id: Union[str, GenomicSequenceLocalizationId] = None - subject: Union[str, GenomicEntityId] = None - relation: Union[str, IriType] = None - object: Union[str, GenomicEntityId] = None + subject: Union[ElementIdentifier, GenomicEntityId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GenomicEntityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GenomicSequenceLocalizationId] = bnode() start_interbase_coordinate: Optional[str] = None end_interbase_coordinate: Optional[str] = None genome_build: Optional[str] = None phase: Optional[str] = None def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GenomicSequenceLocalizationId): self.id = GenomicSequenceLocalizationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenomicEntityId): self.subject = GenomicEntityId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GenomicEntityId): self.object = GenomicEntityId(self.object) super().__post_init__() @@ -3347,17 +3791,23 @@ class SequenceFeatureRelationship(Association): class_name: ClassVar[str] = "sequence feature relationship" class_model_uri: ClassVar[URIRef] = BIOLINK.SequenceFeatureRelationship - id: Union[str, SequenceFeatureRelationshipId] = None - subject: Union[str, GenomicEntityId] = None - relation: Union[str, IriType] = None - object: Union[str, GenomicEntityId] = None + subject: Union[ElementIdentifier, GenomicEntityId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GenomicEntityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, SequenceFeatureRelationshipId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, SequenceFeatureRelationshipId): self.id = SequenceFeatureRelationshipId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GenomicEntityId): self.subject = GenomicEntityId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GenomicEntityId): self.object = GenomicEntityId(self.object) super().__post_init__() @@ -3375,17 +3825,23 @@ class TranscriptToGeneRelationship(SequenceFeatureRelationship): class_name: ClassVar[str] = "transcript to gene relationship" class_model_uri: ClassVar[URIRef] = BIOLINK.TranscriptToGeneRelationship - id: Union[str, TranscriptToGeneRelationshipId] = None - subject: Union[str, TranscriptId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneId] = None + subject: Union[ElementIdentifier, TranscriptId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, TranscriptToGeneRelationshipId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, TranscriptToGeneRelationshipId): self.id = TranscriptToGeneRelationshipId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, TranscriptId): self.subject = TranscriptId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneId): self.object = GeneId(self.object) super().__post_init__() @@ -3403,19 +3859,27 @@ class GeneToGeneProductRelationship(SequenceFeatureRelationship): class_name: ClassVar[str] = "gene to gene product relationship" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneToGeneProductRelationship - id: Union[str, GeneToGeneProductRelationshipId] = None - subject: Union[str, GeneId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneProductId] = None + subject: Union[ElementIdentifier, GeneId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneProductId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneToGeneProductRelationshipId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneToGeneProductRelationshipId): self.id = GeneToGeneProductRelationshipId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneId): self.subject = GeneId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneProductId): self.object = GeneProductId(self.object) super().__post_init__() @@ -3433,17 +3897,23 @@ class ExonToTranscriptRelationship(SequenceFeatureRelationship): class_name: ClassVar[str] = "exon to transcript relationship" class_model_uri: ClassVar[URIRef] = BIOLINK.ExonToTranscriptRelationship - id: Union[str, ExonToTranscriptRelationshipId] = None - subject: Union[str, ExonId] = None - relation: Union[str, IriType] = None - object: Union[str, TranscriptId] = None + subject: Union[ElementIdentifier, ExonId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, TranscriptId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, ExonToTranscriptRelationshipId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ExonToTranscriptRelationshipId): self.id = ExonToTranscriptRelationshipId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, ExonId): self.subject = ExonId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, TranscriptId): self.object = TranscriptId(self.object) super().__post_init__() @@ -3461,19 +3931,27 @@ class GeneRegulatoryRelationship(Association): class_name: ClassVar[str] = "gene regulatory relationship" class_model_uri: ClassVar[URIRef] = BIOLINK.GeneRegulatoryRelationship - id: Union[str, GeneRegulatoryRelationshipId] = None - subject: Union[str, GeneOrGeneProductId] = None - relation: Union[str, IriType] = None - object: Union[str, GeneOrGeneProductId] = None + subject: Union[ElementIdentifier, GeneOrGeneProductId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, GeneOrGeneProductId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, GeneRegulatoryRelationshipId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GeneRegulatoryRelationshipId): self.id = GeneRegulatoryRelationshipId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, GeneOrGeneProductId): self.subject = GeneOrGeneProductId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, GeneOrGeneProductId): self.object = GeneOrGeneProductId(self.object) super().__post_init__() @@ -3488,17 +3966,23 @@ class AnatomicalEntityToAnatomicalEntityAssociation(Association): class_name: ClassVar[str] = "anatomical entity to anatomical entity association" class_model_uri: ClassVar[URIRef] = BIOLINK.AnatomicalEntityToAnatomicalEntityAssociation - id: Union[str, AnatomicalEntityToAnatomicalEntityAssociationId] = None - subject: Union[str, AnatomicalEntityId] = None - relation: Union[str, IriType] = None - object: Union[str, AnatomicalEntityId] = None + subject: Union[ElementIdentifier, AnatomicalEntityId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, AnatomicalEntityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, AnatomicalEntityToAnatomicalEntityAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, AnatomicalEntityToAnatomicalEntityAssociationId): self.id = AnatomicalEntityToAnatomicalEntityAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, AnatomicalEntityId): self.subject = AnatomicalEntityId(self.subject) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, AnatomicalEntityId): self.object = AnatomicalEntityId(self.object) super().__post_init__() @@ -3518,19 +4002,27 @@ class AnatomicalEntityToAnatomicalEntityPartOfAssociation(AnatomicalEntityToAnat class_name: ClassVar[str] = "anatomical entity to anatomical entity part of association" class_model_uri: ClassVar[URIRef] = BIOLINK.AnatomicalEntityToAnatomicalEntityPartOfAssociation - id: Union[str, AnatomicalEntityToAnatomicalEntityPartOfAssociationId] = None - subject: Union[str, AnatomicalEntityId] = None - relation: Union[str, IriType] = None - object: Union[str, AnatomicalEntityId] = None + subject: Union[ElementIdentifier, AnatomicalEntityId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, AnatomicalEntityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, AnatomicalEntityToAnatomicalEntityPartOfAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, AnatomicalEntityToAnatomicalEntityPartOfAssociationId): self.id = AnatomicalEntityToAnatomicalEntityPartOfAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, AnatomicalEntityId): self.subject = AnatomicalEntityId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, AnatomicalEntityId): self.object = AnatomicalEntityId(self.object) super().__post_init__() @@ -3550,19 +4042,27 @@ class AnatomicalEntityToAnatomicalEntityOntogenicAssociation(AnatomicalEntityToA class_name: ClassVar[str] = "anatomical entity to anatomical entity ontogenic association" class_model_uri: ClassVar[URIRef] = BIOLINK.AnatomicalEntityToAnatomicalEntityOntogenicAssociation - id: Union[str, AnatomicalEntityToAnatomicalEntityOntogenicAssociationId] = None - subject: Union[str, AnatomicalEntityId] = None - relation: Union[str, IriType] = None - object: Union[str, AnatomicalEntityId] = None + subject: Union[ElementIdentifier, AnatomicalEntityId] = None + relation: Union[str, URIorCURIE] = None + object: Union[ElementIdentifier, AnatomicalEntityId] = None edge_label: Union[str, LabelType] = None + id: Union[ElementIdentifier, AnatomicalEntityToAnatomicalEntityOntogenicAssociationId] = bnode() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, AnatomicalEntityToAnatomicalEntityOntogenicAssociationId): self.id = AnatomicalEntityToAnatomicalEntityOntogenicAssociationId(self.id) + if self.subject is None: + raise ValueError(f"subject must be supplied") if self.subject is not None and not isinstance(self.subject, AnatomicalEntityId): self.subject = AnatomicalEntityId(self.subject) - if self.relation is not None and not isinstance(self.relation, IriType): - self.relation = IriType(self.relation) + if self.relation is None: + raise ValueError(f"relation must be supplied") + if self.relation is not None and not isinstance(self.relation, URIorCURIE): + self.relation = URIorCURIE(self.relation) + if self.object is None: + raise ValueError(f"object must be supplied") if self.object is not None and not isinstance(self.object, AnatomicalEntityId): self.object = AnatomicalEntityId(self.object) super().__post_init__() @@ -3580,11 +4080,13 @@ class Occurrent(NamedThing): class_name: ClassVar[str] = "occurrent" class_model_uri: ClassVar[URIRef] = BIOLINK.Occurrent - id: Union[str, OccurrentId] = None + id: Union[ElementIdentifier, OccurrentId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, OccurrentId): self.id = OccurrentId(self.id) super().__post_init__() @@ -3602,11 +4104,13 @@ class BiologicalProcessOrActivity(BiologicalEntity): class_name: ClassVar[str] = "biological process or activity" class_model_uri: ClassVar[URIRef] = BIOLINK.BiologicalProcessOrActivity - id: Union[str, BiologicalProcessOrActivityId] = None + id: Union[ElementIdentifier, BiologicalProcessOrActivityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, BiologicalProcessOrActivityId): self.id = BiologicalProcessOrActivityId(self.id) super().__post_init__() @@ -3624,11 +4128,13 @@ class MolecularActivity(BiologicalProcessOrActivity): class_name: ClassVar[str] = "molecular activity" class_model_uri: ClassVar[URIRef] = BIOLINK.MolecularActivity - id: Union[str, MolecularActivityId] = None + id: Union[ElementIdentifier, MolecularActivityId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, MolecularActivityId): self.id = MolecularActivityId(self.id) super().__post_init__() @@ -3646,11 +4152,13 @@ class ActivityAndBehavior(Occurrent): class_name: ClassVar[str] = "activity and behavior" class_model_uri: ClassVar[URIRef] = BIOLINK.ActivityAndBehavior - id: Union[str, ActivityAndBehaviorId] = None + id: Union[ElementIdentifier, ActivityAndBehaviorId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ActivityAndBehaviorId): self.id = ActivityAndBehaviorId(self.id) super().__post_init__() @@ -3668,11 +4176,13 @@ class Procedure(Occurrent): class_name: ClassVar[str] = "procedure" class_model_uri: ClassVar[URIRef] = BIOLINK.Procedure - id: Union[str, ProcedureId] = None + id: Union[ElementIdentifier, ProcedureId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, ProcedureId): self.id = ProcedureId(self.id) super().__post_init__() @@ -3690,11 +4200,13 @@ class Phenomenon(Occurrent): class_name: ClassVar[str] = "phenomenon" class_model_uri: ClassVar[URIRef] = BIOLINK.Phenomenon - id: Union[str, PhenomenonId] = None + id: Union[ElementIdentifier, PhenomenonId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PhenomenonId): self.id = PhenomenonId(self.id) super().__post_init__() @@ -3712,11 +4224,13 @@ class BiologicalProcess(BiologicalProcessOrActivity): class_name: ClassVar[str] = "biological process" class_model_uri: ClassVar[URIRef] = BIOLINK.BiologicalProcess - id: Union[str, BiologicalProcessId] = None + id: Union[ElementIdentifier, BiologicalProcessId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, BiologicalProcessId): self.id = BiologicalProcessId(self.id) super().__post_init__() @@ -3731,11 +4245,13 @@ class Pathway(BiologicalProcess): class_name: ClassVar[str] = "pathway" class_model_uri: ClassVar[URIRef] = BIOLINK.Pathway - id: Union[str, PathwayId] = None + id: Union[ElementIdentifier, PathwayId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PathwayId): self.id = PathwayId(self.id) super().__post_init__() @@ -3750,11 +4266,13 @@ class PhysiologicalProcess(BiologicalProcess): class_name: ClassVar[str] = "physiological process" class_model_uri: ClassVar[URIRef] = BIOLINK.PhysiologicalProcess - id: Union[str, PhysiologicalProcessId] = None + id: Union[ElementIdentifier, PhysiologicalProcessId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, PhysiologicalProcessId): self.id = PhysiologicalProcessId(self.id) super().__post_init__() @@ -3772,11 +4290,13 @@ class CellularComponent(AnatomicalEntity): class_name: ClassVar[str] = "cellular component" class_model_uri: ClassVar[URIRef] = BIOLINK.CellularComponent - id: Union[str, CellularComponentId] = None + id: Union[ElementIdentifier, CellularComponentId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CellularComponentId): self.id = CellularComponentId(self.id) super().__post_init__() @@ -3791,11 +4311,13 @@ class Cell(AnatomicalEntity): class_name: ClassVar[str] = "cell" class_model_uri: ClassVar[URIRef] = BIOLINK.Cell - id: Union[str, CellId] = None + id: Union[ElementIdentifier, CellId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CellId): self.id = CellId(self.id) super().__post_init__() @@ -3810,11 +4332,13 @@ class CellLine(Biosample): class_name: ClassVar[str] = "cell line" class_model_uri: ClassVar[URIRef] = BIOLINK.CellLine - id: Union[str, CellLineId] = None + id: Union[ElementIdentifier, CellLineId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, CellLineId): self.id = CellLineId(self.id) super().__post_init__() @@ -3829,11 +4353,13 @@ class GrossAnatomicalStructure(AnatomicalEntity): class_name: ClassVar[str] = "gross anatomical structure" class_model_uri: ClassVar[URIRef] = BIOLINK.GrossAnatomicalStructure - id: Union[str, GrossAnatomicalStructureId] = None + id: Union[ElementIdentifier, GrossAnatomicalStructureId] = None name: Union[str, LabelType] = None category: List[Union[str, IriType]] = empty_list() def __post_init__(self): + if self.id is None: + raise ValueError(f"id must be supplied") if self.id is not None and not isinstance(self.id, GrossAnatomicalStructureId): self.id = GrossAnatomicalStructureId(self.id) super().__post_init__() diff --git a/context.jsonld b/context.jsonld index f0f071f0e6..7a1325a4c0 100644 --- a/context.jsonld +++ b/context.jsonld @@ -1,8 +1,10 @@ { - "_comments": "Auto generated from biolink-model.yaml by jsonldcontextgen.py version: 0.1.1\nGeneration date: 2019-07-22 10:56\nSchema: biolink_model\n\nid: https://w3id.org/biolink/biolink-model\ndescription: Entity and association taxonomy and datamodel for life-sciences data\nlicense: https://creativecommons.org/publicdomain/zero/1.0/\n", + "_comments": "Auto generated from biolink-model.yaml by jsonldcontextgen.py version: 0.1.1\nGeneration date: 2019-08-20 14:05\nSchema: biolink_model\n\nid: https://w3id.org/biolink/biolink-model\ndescription: Entity and association taxonomy and datamodel for life-sciences data\nlicense: https://creativecommons.org/publicdomain/zero/1.0/\n", "@context": { "_comments": null, - "type": "@type", + "type": { + "@id": "rdf:type" + }, "BFO": "http://purl.obolibrary.org/obo/BFO_", "BIOGRID": "http://thebiogrid.org/", "CHEBI": "http://purl.obolibrary.org/obo/CHEBI_", @@ -15,6 +17,7 @@ "ClinVar": "http://www.ncbi.nlm.nih.gov/clinvar/", "ECO": "http://purl.obolibrary.org/obo/ECO_", "ECTO": "http://example.org/UNKNOWN/ECTO/", + "EFO": "http://purl.obolibrary.org/obo/EFO_", "ENSEMBL": "http://ensembl.org/id/", "FAO": "http://purl.obolibrary.org/obo/FAO_", "GENO": "http://purl.obolibrary.org/obo/GENO_", @@ -50,12 +53,13 @@ "UMLSSG": "https://uts-ws.nlm.nih.gov/rest/semantic-network/semantic-network/current/GROUP/", "UMLSST": "https://uts-ws.nlm.nih.gov/rest/semantic-network/semantic-network/current/STY/", "UPHENO": "http://purl.obolibrary.org/obo/UPHENO_", - "UniProtKB": "http://purl.uniprot.org/uniprot/", + "UniProtKB": "http://identifiers.org/uniprot/", "VMC": "http://example.org/UNKNOWN/VMC/", "WB": "http://identifiers.org/wb/", "WD": "http://example.org/UNKNOWN/WD/", "ZFIN": "http://zfin.org/", "biolinkml": "https://w3id.org/biolink/biolinkml/", + "dct": "http://example.org/UNKNOWN/dct/", "dcterms": "http://purl.org/dc/terms/", "dictyBase": "http://dictybase.org/gene/", "faldo": "http://biohackathon.org/resource/faldo#", @@ -67,6 +71,7 @@ "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "shex": "http://www.w3.org/ns/shex#", "skos": "https://www.w3.org/TR/skos-reference/#", + "void": "http://rdfs.org/ns/void#", "wgs": "http://www.w3.org/2003/01/geo/wgs84_pos", "xsd": "http://www.w3.org/2001/XMLSchema#", "@vocab": "https://w3id.org/biolink/vocab/", @@ -236,6 +241,13 @@ "@type": "@id", "@id": "SEMMEDDB:DISRUPTS" }, + "distribution": { + "@type": "@id", + "@id": "void:Dataset" + }, + "downloadURL": { + "@id": "dct:downloadURL" + }, "expressed_in": { "@type": "@id", "@id": "RO:0002206" @@ -524,6 +536,10 @@ "@type": "@id", "@id": "rdf:predicate" }, + "retrievedOn": { + "@type": "xsd:date", + "@id": "pav:retrievedOn" + }, "same_as": { "@type": "@id", "@id": "owl:equivalentClass" @@ -537,6 +553,16 @@ "sex_qualifier": { "@type": "@id" }, + "source_data_file": { + "@type": "@id", + "@id": "dcterms:source" + }, + "source_version": { + "@id": "pav:version" + }, + "source_web_page": { + "@id": "dcterms:source" + }, "stage_qualifier": { "@type": "@id" }, @@ -551,6 +577,9 @@ "timepoint": { "@type": "xsd:dateTime" }, + "title": { + "@id": "dct:title" + }, "treated_by": { "@type": "@id", "@id": "RO:0002302" @@ -562,6 +591,10 @@ "update_date": { "@type": "xsd:date" }, + "versionOf": { + "@type": "@id", + "@id": "dct:isVersionOf" + }, "xenologous_to": { "@type": "@id", "@id": "RO:HOM0000018" @@ -608,6 +641,12 @@ "ConfidenceLevel": { "@id": "CIO:0000028" }, + "DataFile": { + "@id": "EFO:0004095" + }, + "DataSet": { + "@id": "IAO:0000100" + }, "Disease": { "@id": "MONDO:0000001" }, diff --git a/contextn.jsonld b/contextn.jsonld index 01da84c1fb..b90ec57e0c 100644 --- a/contextn.jsonld +++ b/contextn.jsonld @@ -1,5 +1,5 @@ { - "_comments": "Auto generated from biolink-model.yaml by jsonldcontextgen.py version: 0.1.1\nGeneration date: 2019-07-22 10:56\nSchema: biolink_model\n\nid: https://w3id.org/biolink/biolink-model\ndescription: Entity and association taxonomy and datamodel for life-sciences data\nlicense: https://creativecommons.org/publicdomain/zero/1.0/\n", + "_comments": "Auto generated from biolink-model.yaml by jsonldcontextgen.py version: 0.1.1\nGeneration date: 2019-08-20 14:05\nSchema: biolink_model\n\nid: https://w3id.org/biolink/biolink-model\ndescription: Entity and association taxonomy and datamodel for life-sciences data\nlicense: https://creativecommons.org/publicdomain/zero/1.0/\n", "@context": { "_comments": null, "type": "@type", @@ -15,6 +15,7 @@ "ClinVar": "http://www.ncbi.nlm.nih.gov/clinvar/", "ECO": "http://purl.obolibrary.org/obo/ECO_", "ECTO": "http://example.org/UNKNOWN/ECTO/", + "EFO": "http://purl.obolibrary.org/obo/EFO_", "ENSEMBL": "http://ensembl.org/id/", "FAO": "http://purl.obolibrary.org/obo/FAO_", "GENO": "http://purl.obolibrary.org/obo/GENO_", @@ -56,6 +57,7 @@ "WD": "http://example.org/UNKNOWN/WD/", "ZFIN": "http://zfin.org/", "biolinkml": "https://w3id.org/biolink/biolinkml/", + "dct": "http://example.org/UNKNOWN/dct/", "dcterms": "http://purl.org/dc/terms/", "dictyBase": "http://dictybase.org/gene/", "faldo": "http://biohackathon.org/resource/faldo#", @@ -67,6 +69,7 @@ "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "shex": "http://www.w3.org/ns/shex#", "skos": "https://www.w3.org/TR/skos-reference/#", + "void": "http://rdfs.org/ns/void#", "wgs": "http://www.w3.org/2003/01/geo/wgs84_pos", "xsd": "http://www.w3.org/2001/XMLSchema#", "@vocab": "https://w3id.org/biolink/vocab/", @@ -218,6 +221,9 @@ "disrupts": { "@type": "@id" }, + "distribution": { + "@type": "@id" + }, "expressed_in": { "@type": "@id" }, @@ -458,6 +464,9 @@ "relation": { "@type": "@id" }, + "retrievedOn": { + "@type": "xsd:date" + }, "same_as": { "@type": "@id" }, @@ -470,6 +479,9 @@ "sex_qualifier": { "@type": "@id" }, + "source_data_file": { + "@type": "@id" + }, "stage_qualifier": { "@type": "@id" }, @@ -491,6 +503,9 @@ "update_date": { "@type": "xsd:date" }, + "versionOf": { + "@type": "@id" + }, "xenologous_to": { "@type": "@id" } diff --git a/docs/DataFile.md b/docs/DataFile.md new file mode 100644 index 0000000000..e665a91e5d --- /dev/null +++ b/docs/DataFile.md @@ -0,0 +1,42 @@ + +# Class: data file + + + + +URI: [biolink:DataFile](https://w3id.org/biolink/vocab/DataFile) + +![img](images/DataFile.png) + +## Parents + + * is_a: [NamedThing](NamedThing.md) - a databased entity or concept/class + +## Children + + * [SourceFile](SourceFile.md) + +## Referenced by class + + * **[DataSetVersion](DataSetVersion.md)** *[source data file](source_data_file.md)* OPT **[DataFile](DataFile.md)** + +## Attributes + + +### Inherited from named thing: + + * [id](id.md) REQ + * Description: A unique identifier for a thing. Must be either a CURIE shorthand for a URI or a complete URI + * range: [IdentifierType](IdentifierType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [name](name.md) REQ + * Description: A human-readable name for a thing + * range: [LabelType](LabelType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [category](category.md) 1..* + * Description: Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag + * range: [IriType](IriType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) diff --git a/docs/DataSet.md b/docs/DataSet.md new file mode 100644 index 0000000000..5624cb2cdc --- /dev/null +++ b/docs/DataSet.md @@ -0,0 +1,42 @@ + +# Class: data set + + + + +URI: [biolink:DataSet](https://w3id.org/biolink/vocab/DataSet) + +![img](images/DataSet.png) + +## Parents + + * is_a: [NamedThing](NamedThing.md) - a databased entity or concept/class + +## Children + + * [DataSetVersion](DataSetVersion.md) + +## Referenced by class + + * **[DataSetVersion](DataSetVersion.md)** *[versionOf](versionOf.md)* OPT **[DataSet](DataSet.md)** + +## Attributes + + +### Inherited from named thing: + + * [id](id.md) REQ + * Description: A unique identifier for a thing. Must be either a CURIE shorthand for a URI or a complete URI + * range: [IdentifierType](IdentifierType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [name](name.md) REQ + * Description: A human-readable name for a thing + * range: [LabelType](LabelType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [category](category.md) 1..* + * Description: Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag + * range: [IriType](IriType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) diff --git a/docs/DataSetSummary.md b/docs/DataSetSummary.md new file mode 100644 index 0000000000..115d62449e --- /dev/null +++ b/docs/DataSetSummary.md @@ -0,0 +1,65 @@ + +# Class: data set summary + + + + +URI: [biolink:DataSetSummary](https://w3id.org/biolink/vocab/DataSetSummary) + +![img](images/DataSetSummary.png) + +## Parents + + * is_a: [DataSetVersion](DataSetVersion.md) + +## Referenced by class + + +## Attributes + + +### Own + + * [source web page](source_web_page.md) OPT + * range: [String](String.md) + +### Inherited from data set version: + + * [title](title.md) OPT + * range: [String](String.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [source data file](source_data_file.md) OPT + * range: [DataFile](DataFile.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [versionOf](versionOf.md) OPT + * range: [DataSet](DataSet.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [type](type.md) OPT + * range: [String](String.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [distribution](distribution.md) OPT + * range: [DistributionLevel](DistributionLevel.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + +### Inherited from named thing: + + * [id](id.md) REQ + * Description: A unique identifier for a thing. Must be either a CURIE shorthand for a URI or a complete URI + * range: [IdentifierType](IdentifierType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [name](name.md) REQ + * Description: A human-readable name for a thing + * range: [LabelType](LabelType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [category](category.md) 1..* + * Description: Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag + * range: [IriType](IriType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + +### Domain for slot: + + * [source web page](source_web_page.md) OPT + * range: [String](String.md) diff --git a/docs/DataSetVersion.md b/docs/DataSetVersion.md new file mode 100644 index 0000000000..2fbe002c8f --- /dev/null +++ b/docs/DataSetVersion.md @@ -0,0 +1,68 @@ + +# Class: data set version + + + + +URI: [biolink:DataSetVersion](https://w3id.org/biolink/vocab/DataSetVersion) + +![img](images/DataSetVersion.png) + +## Parents + + * is_a: [DataSet](DataSet.md) + +## Children + + * [DataSetSummary](DataSetSummary.md) + * [DistributionLevel](DistributionLevel.md) + +## Referenced by class + + +## Attributes + + +### Own + + * [distribution](distribution.md) OPT + * range: [DistributionLevel](DistributionLevel.md) + * [source data file](source_data_file.md) OPT + * range: [DataFile](DataFile.md) + * [title](title.md) OPT + * range: [String](String.md) + * [type](type.md) OPT + * range: [String](String.md) + * [versionOf](versionOf.md) OPT + * range: [DataSet](DataSet.md) + +### Inherited from named thing: + + * [id](id.md) REQ + * Description: A unique identifier for a thing. Must be either a CURIE shorthand for a URI or a complete URI + * range: [IdentifierType](IdentifierType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [name](name.md) REQ + * Description: A human-readable name for a thing + * range: [LabelType](LabelType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [category](category.md) 1..* + * Description: Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag + * range: [IriType](IriType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + +### Domain for slot: + + * [distribution](distribution.md) OPT + * range: [DistributionLevel](DistributionLevel.md) + * [source data file](source_data_file.md) OPT + * range: [DataFile](DataFile.md) + * [title](title.md) OPT + * range: [String](String.md) + * [type](type.md) OPT + * range: [String](String.md) + * [versionOf](versionOf.md) OPT + * range: [DataSet](DataSet.md) diff --git a/docs/DistributionLevel.md b/docs/DistributionLevel.md new file mode 100644 index 0000000000..a651477068 --- /dev/null +++ b/docs/DistributionLevel.md @@ -0,0 +1,66 @@ + +# Class: distribution level + + + + +URI: [biolink:DistributionLevel](https://w3id.org/biolink/vocab/DistributionLevel) + +![img](images/DistributionLevel.png) + +## Parents + + * is_a: [DataSetVersion](DataSetVersion.md) + +## Referenced by class + + * **[DataSetVersion](DataSetVersion.md)** *[distribution](distribution.md)* OPT **[DistributionLevel](DistributionLevel.md)** + +## Attributes + + +### Own + + * [downloadURL](downloadURL.md) OPT + * range: [String](String.md) + +### Inherited from data set version: + + * [title](title.md) OPT + * range: [String](String.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [source data file](source_data_file.md) OPT + * range: [DataFile](DataFile.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [versionOf](versionOf.md) OPT + * range: [DataSet](DataSet.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [type](type.md) OPT + * range: [String](String.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + * [distribution](distribution.md) OPT + * range: [DistributionLevel](DistributionLevel.md) + * inherited from: [DataSetVersion](DataSetVersion.md) + +### Inherited from named thing: + + * [id](id.md) REQ + * Description: A unique identifier for a thing. Must be either a CURIE shorthand for a URI or a complete URI + * range: [IdentifierType](IdentifierType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [name](name.md) REQ + * Description: A human-readable name for a thing + * range: [LabelType](LabelType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [category](category.md) 1..* + * Description: Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag + * range: [IriType](IriType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + +### Domain for slot: + + * [downloadURL](downloadURL.md) OPT + * range: [String](String.md) diff --git a/docs/NamedThing.md b/docs/NamedThing.md index f5025426da..f6c8a71dfa 100644 --- a/docs/NamedThing.md +++ b/docs/NamedThing.md @@ -13,6 +13,8 @@ URI: [biolink:NamedThing](https://w3id.org/biolink/vocab/NamedThing) * [AdministrativeEntity](AdministrativeEntity.md) * [BiologicalEntity](BiologicalEntity.md) * [ClinicalEntity](ClinicalEntity.md) - Any entity or process that exists in the clinical domain and outside the biological realm. Diseases are placed under biological entities + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) * [Device](Device.md) - A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment * [InformationContentEntity](InformationContentEntity.md) - a piece of information that typically describes some piece of biology or is used as support. * [Occurrent](Occurrent.md) - A processual entity diff --git a/docs/SourceFile.md b/docs/SourceFile.md new file mode 100644 index 0000000000..0cb97377dc --- /dev/null +++ b/docs/SourceFile.md @@ -0,0 +1,51 @@ + +# Class: source file + + + + +URI: [biolink:SourceFile](https://w3id.org/biolink/vocab/SourceFile) + +![img](images/SourceFile.png) + +## Parents + + * is_a: [DataFile](DataFile.md) + +## Referenced by class + + +## Attributes + + +### Own + + * [retrievedOn](retrievedOn.md) OPT + * range: [Date](Date.md) + * [source version](source_version.md) OPT + * range: [String](String.md) + +### Inherited from named thing: + + * [id](id.md) REQ + * Description: A unique identifier for a thing. Must be either a CURIE shorthand for a URI or a complete URI + * range: [IdentifierType](IdentifierType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [name](name.md) REQ + * Description: A human-readable name for a thing + * range: [LabelType](LabelType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + * [category](category.md) 1..* + * Description: Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag + * range: [IriType](IriType.md) + * inherited from: [NamedThing](NamedThing.md) + * in subsets: (translator_minimal) + +### Domain for slot: + + * [retrievedOn](retrievedOn.md) OPT + * range: [Date](Date.md) + * [source version](source_version.md) OPT + * range: [String](String.md) diff --git a/docs/category.md b/docs/category.md index 4b1a2c5b9d..083064e192 100644 --- a/docs/category.md +++ b/docs/category.md @@ -42,9 +42,14 @@ URI: [biolink:category](https://w3id.org/biolink/vocab/category) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -98,6 +103,7 @@ URI: [biolink:category](https://w3id.org/biolink/vocab/category) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/description.md b/docs/description.md index 0e44a1d708..d0ca05c098 100644 --- a/docs/description.md +++ b/docs/description.md @@ -43,9 +43,14 @@ URI: [biolink:description](https://w3id.org/biolink/vocab/description) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [EntityToPhenotypicFeatureAssociation](EntityToPhenotypicFeatureAssociation.md) @@ -100,6 +105,7 @@ URI: [biolink:description](https://w3id.org/biolink/vocab/description) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/distribution.md b/docs/distribution.md new file mode 100644 index 0000000000..e248b71948 --- /dev/null +++ b/docs/distribution.md @@ -0,0 +1,24 @@ + +# Slot: distribution + + + + +URI: [biolink:distribution](https://w3id.org/biolink/vocab/distribution) + +## Domain and Range + +[DataSetVersion](DataSetVersion.md) -> OPT [DistributionLevel](DistributionLevel.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) + * [DistributionLevel](DistributionLevel.md) diff --git a/docs/downloadURL.md b/docs/downloadURL.md new file mode 100644 index 0000000000..11ba46298b --- /dev/null +++ b/docs/downloadURL.md @@ -0,0 +1,22 @@ + +# Slot: downloadURL + + + + +URI: [biolink:downloadURL](https://w3id.org/biolink/vocab/downloadURL) + +## Domain and Range + +[DistributionLevel](DistributionLevel.md) -> OPT [String](String.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DistributionLevel](DistributionLevel.md) diff --git a/docs/full_name.md b/docs/full_name.md index 6cab699358..40987a8e3a 100644 --- a/docs/full_name.md +++ b/docs/full_name.md @@ -42,9 +42,14 @@ URI: [biolink:full_name](https://w3id.org/biolink/vocab/full_name) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -98,6 +103,7 @@ URI: [biolink:full_name](https://w3id.org/biolink/vocab/full_name) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/id.md b/docs/id.md index dadec09ffa..4e7b79016c 100644 --- a/docs/id.md +++ b/docs/id.md @@ -43,9 +43,14 @@ URI: [biolink:id](https://w3id.org/biolink/vocab/id) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -100,6 +105,7 @@ URI: [biolink:id](https://w3id.org/biolink/vocab/id) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/images/DataFile.png b/docs/images/DataFile.png new file mode 100644 index 0000000000000000000000000000000000000000..edfe9b2eb41c3f8287a525caa283fceb43f82388 GIT binary patch literal 12660 zcmeHuWmwd4+U^hnN~1`FfS>}>C848_S!vr_S)U|J@0-vpU!xp*9`yp#naDyKfb!JrbK#<{u}~ADV85noW@OXu&3 zL_rn$m+n*WXybEVx_ImUV4(Gx^al1apRe{#f+D^3?AFxUm6bHZE9=V z+tNCkniuR91WcF=4aYYX6ci}8zu3#l*5!Wt_6>FLsN6#g-mnJ-27b{|x6$}|*H_5A zW1>a&Au6Ve!T&jL2oKec7@Y{SXsa{aX_tFQJuR`*! zmdH11U(jVU;XZer@(XofY{Gv9MRe8S^n-=QFNQZQEG#yE-X{O;B5{_Cj8i}$`f#-_ z$?s${sdQ`xk6fxAC1Be2BkscoRYymDIyyT0f?)%3ypy5r;7;Cuir@j*h2o@2=%O`tp3N z#tXAp+gD&HyRoscw>K4e!*lDZL*22c-Ef)NY-d90li9iMl*i@vOlB-IYb#Z&Z%`;@ zxI=#FlG9R|pDw*FyJFZS9-c6T(2H7oCoj*Q4~dB2i$W_~lD{&bz3a zyDOtsgGC$$Rc>a-2iqi!;!%J8Je{1H+MjqquD{75=@v%Gt~lW$@k}D&Zh}NidmLZY zSXXD~%$V0I2OHb-iVE@md;{W}n=?NQWKT{`UcP);@kB{pAGx5ds7N5~wR2fq9JMl9 zRqS`_iwGj2n;eQhPetXi^rfX@yI&6$O`B&cK;VhbwiZT8Ygv7&CDLNN)`x^i;$2}OzhXGO*0f-TTEb*I zU)`TUizJR4H{NGvUPZgifBSgDnO4@f+NMTp*_qmIGrwwu?egW9yJKDjy|a3y)-gHh z3p-OFiP|3BoocAW*TO=B}yo~_~^7|ZYotu^P z+TmHPJCzw69E3|$%`ix~TxDft_1^p;=DpE+e$G-!zcQe3F zp1~TMosz4LzrUT)&ewlDE%+l|gq?#UFeB0P^}P?G&lY;KoJ2IsyR=GvaNdjOw;d?d z$gp|*__6J9S$H(N61tQHkH-N0?$!%}FUAc7CMG5*DWsr7&Gto$&X2$I%E#EQUd`06 zfuJ+u+$Eiwni>@o)6^W!@VLyDuAuG&ZIjrxGaB@C|K`!C`}jQ-m2-S`M^2Ty@xoT$ zavvAZ{YoP)ANQ3U_dAs~^gDLVLW0^AAj;L&)^5#pzpx)gcc&dk4GoxrN%v=k68q73uzP#-d^)|Ip^D8YTI9x! z8~K=(C3Q2c(hkGZ105|dyR0Fx}pI28B5t(jDId@wknC{%UV+>~HkF*wtc&J+-Bq9hA9Dy~D$*^roh!=$II--=3;)L+#%Ux(vDyv*tlrpjD@PhfBp> zjuHtSA8!<^l~FPR^F`uh5k z*7`U&&;Q~8J8y;Hh}hk^0tr#WZ!24ulaG(w&(9CzmlF~~1g_Pv_PgP6ov-x$V;P-p zQPnVJ>3FRi?e!^^Qxqsez+=s*9P>E3_3afQfvIMr+4h8D ze}EqjR3n|U)@ieJZ{5OylrRa2B3G|GV%WYaTsu!!;Mt^nea-PTUfzhUEf?Rt--JcQ z#X0(%;4S$ERYgwIDr77&9dMofxs*tcsc$=ldB(JW2}(+0S;Q2~LY3jN*dGqsYmQ`zG^X`O za#gx5>-z3ijl)(yDxOV&x8%OC%|bt^wpDRSgX)C}=L-xG}g*qn<5l)^-7o zqO7K7-kAE=vQ^>GwVq*^f$$ zc`oKTZN}t!L0E5WZ2Sp%yg7oYojp=YBlMJw^!xbu=_J~9k>tzRpVqhG5HT>@wF!{x z=pcpCEZQWUBO~jCu=u#fk8B<5MncbDyl`$?QD+uN=SYXc$BWn~nwYQ|das|!(JA1( ze*MQnk-XGvx%L-JL#3fQPmqCNFW9>r?QbqlpR=Ttd}xV`vPklYg`fTfL3ye87Lvx$ zkc!*?^Rnx|FXFP(AnE0(Qdqs?TB1A!(-4^xI$fIEpG~qDsdy&NNS32oX>JI)yvBhY z%cbs)w|Ve)}DyrH3{R_JX(A0HhRog*eTT`(P; z96dTZinws`VzaJ6aQPmd5yC6LGSr5$YhARkdx1@!OOR>r+#bOmA%(TwjY%A;0NhWJ zeSscAq>Y%dXC33?>i$+Sx*^hY5 zj|@VT&Ft~cRc?^lQbmy-v3NSUn{IJ;oSxul)39m0zt9n|mqYm5;hWTfuG*RLj@OtC z!Xkf*JYM-!t{?oj7t;lMs!S3&c`VmnH*%5V((t#4DoDlhInq_6Jm2*+T50TIC}I1e zLQwb<&OGvrq@wQ4t|G2N{mUS3C7z$>oo$N~`T~V7((~7fwgkkQrI!+L;?*J45ZC!5 z+g{U`30qxK$6XBY(=!MOkvuuq!E>_9jFNO3R{Dh$U>w;XWnjK>7 z3z{hU;0+m1F`6h#NX+Pjb-~`1m2EqXZ;hq?Byx$;zX?S{5$aKT8oY1!c|cEiCb01~ z_L#NDjN*X@EyJVE_2vFaeSsmpIahoeazF2pl1fKh4p2oM|Q51 zY})(8g>4ILjdo1@e4NX+@Ez^>aAY>6g)8f1Y+C(z9DPiBedQ@m zts>3a*P1zJ9f_n(MpcYa_fD9v8owlr67TuG1&W6xqrAe4XcU!a6lk-mCGh$;XhkIX-oD*j+B<5qbK$<=8HCzm5RRg z<@E)5yp5p-!AP2Kw=ZH?Cq%z4tHZ3moXUdWohu ztu#dV65$%lmVRyg8cr?#6Hq~Pv-J&6T&H^@0fR!^UneEx>GM7a@QE&i$%=l#@xZ_Z z=&K_AskLd0@vfn8#v8EqUge7t(`bSC6|5IFh}M%YpcrxO}NNQ7TY$f;`(LU;~00!JOb9`bHS&xi#*P?DQuT9!=)rb~G( z@5~yWBOKX-f@Okxf&-=AK4*Fs?D~xm>&yrQjMHOrF{w^%6+1^ zer0GP@}D@HCciqdn`pybP(Bb*A5)D8}0~(eSy(YI2_3cqa_q zIVq7VNNjMzYQl|kQt zq~B=LuL!4#7-F;g|zPj0>K1ZA8L8OU*Lsb`$!PL7Z?2_YFTD%O`4cvEKMOt?CZ<`qTTxJp&B>e*KPKY)_`BjmrBJ zdXw*=Xx^6Pnk3HLG$+L@1|wI^HwAk>%_LL%(|KTM3Z@+D)kpQ+=+~~VDUg<3nbe}< z=ku!={jvW-pkRF{6!~s#b8`N?zXN}Rk@b4X<%yo0*yHOnlxjJXX5;lzPIUgrl3nUT z7LO{A6GHyF=_9{-HZECuI?|^&rv$vlPi7{Fk8(UD$8psSL{3=*hI_qnsZK;zxO`VF>Xn*gAE4A@@&&LOtPB$n^OgbB9JOV zbeqBjTuC_6{hNrQlSC>`++7@&i|T%e&60H)FrspU zQl_cw>74k2^pU(9gq!R39J)q9`Ms1(Rw87Z0_w-{Izoo-9VuC|xOHC{?~c7jZfQAr zieK1No)R~AKjYUS>no;N)Mld#xbVLpBRqAcdHm#O6F@~@_N4_I8_fLN!;xLF|)94^~=06bY z>%h=BPaGJclq?foXQ(%VC{nkgo1IY^QGN|aN$96{bC$~OrUVFgPf4q_r0gE8d!IIw zWbnrHZh3WdQXA5AiQ#VwJJ_sud3NBOq~^r#vvl-)-_3bn@KVxLS0t;_{aMX84xiKX zoIS(L>T{JRUHG+)-b4-rGg+m|DI#Y!=`${Y7ba(+;@BtGXF67x;DSOZ5x$r z=9uXklf?!%fwffgwq}T!HgVgRynoYJ}+S)W4 zxtB{wI@~0P`G<@55bh>V@U%Bh+C9c-&a!EAc??`ySqai)hS z<;-y~+b`vN_-Z&1n4crtRqt3HXY3`#RZ?lk39PbTh*spmFD7nC(Wa4`|A{`h!m=rm zw}4g&QD$GqoskaE9v4qi-mhitBvLi z+vF{6BR8u;4P5xJKy$=cQ~u=#0m3RtEiqGRm5DZ2-BshAY?`bnF~ijjCr8IZF=?5c zu|Ko3N_+eJ(|~18>wWQQ;6DOPGX8LX|CoY;!g1_1{Sp?eI0LV8$7unJ@YiDHdiII& z@$|=Q4di+T!3K}qTmTuP6BHDz0DS2-e_h`@m5)-$H-Iaht3Es(CI>SY zp-G}8oBfp?pcb)s3B<{c)+aR=9Ok^S$K0kd6;xkf%E-8&qqbiM&iaaPi&OU1<-&|%Mw*ZGOqP*lpn_we!YDF7Z`?9ZbUFu|8}Tbda7 zVp@H$kdu$Z!ly1S!T|vRjV&#Jmos9#{u!5C7DOZ`Cks1_RrjjDV!a(y=ser0@h@>z zOiO{htukyG7!)LE-a!j}>|(qqfCwPB?>~N+0hYw`q#Bi{SB{ItSn}&mJjal;OuYIP z^=&cSIR*q1^BGB;f`Y%ci#@j&RBQxEUU;q6!~qVvvpU{|1r2L`B#CKwb2G-D4}|OZ zd0p-M-_X^)cwu8`jcvzk6W}6_8-MQ9o*dYC?kqi?m&n$esXINaqm%Y50T48@r0w8n zvkRc=KX27#zK)M4LE8;zU}KS4yT{~N*L2E2?UcBLgz%nu{E6?;>|0BNZ?hg|yorrf z1R2f)EDm-O!@Jrk_~5~V%a<=#Xmx#kL0IXr&bB;M>U@v;>eWk}oat^X_p2l1aww}@ z=Bc=K@}GWtc^2WlGiV{6pl05gTP^kpzyTmN0CVGcc>c?mF93ZyPSoRgdspuVk!D>F zw-RB4ZS>JDuTqpEu?@L>)v_qSU`>s$&f{$AW&t)Eosd9U5AFK*@87SMMgX1%u+#qU zU>1O2+-%;*E8n}92AJpFkK)m=gwx3p(rszrD_qjLMs1z>f^@_Kqs*v z$^860AXa!klW!Bkx{83`w6?Zl;T_k7MdBkV3j*?|r8nXq1Eq$(d8(JVra0BrWYk`hQ0M zGjX!Muvmh%29ReS@9or1#v8w`eu#;k>>FpsHO01iiNZq; z=rpWpI@6a-eevSVjcu;^5zfi zW6>ypJN9NiIB@C9aB;n!P4tR*Tx{N5?l3Mf>Sn+_xB~FfeqVvF0)SmSc}k6Bv5|B_ z&1?8Tm59KWVW2;HJVG+zZw(FM0|SpzK>5u;-b}==f(%3tc9!+#H-e05Gt`qrkB*PS z0Sk@&Pyk>|GZ>3a>GH>qjHY{Qzk?cn^D~kKuY=jsLnMSRD1x~O7=Ocu^_j81#fGM- zs?}N{k_LWepRETCEiElX=gtYr-M;-7c)ZN3fmDnZ;A%x9qfeCd^wzn$rP;j}S@s_w zItqC1uGoP+(L!j-+;G=_z*JCsklhWCzs6?Xqc7ho)|(j&hG`|;a=X8nDy0AdsR%%E zSVJ&*)wbl9wg5arl8%gLR~{Xm#+kWz4)_O=F{yxFu>1k|9f0lcJWp5sP9^aONHU$6 zz>=o>^&F-h{0{Xhcfrr^0LfreZPyTfvBjb*ar$_7{EDRH2cUw|)sx6H$DY%55L%4@ zfxu%}`w?OYze!^Vy&V9kX(aT*A*2kVj2H59hr#V;~~+ zmeEw_&ja4fC3f89cjBB^wyYL91xSC@(B*Mgj6wC*FIADft?A0*A7_X!R`}5CM?=H| zbh6_Ohw9u&r4U>UQo)Pealdhqt|->qSkeW7WnI!g*iS;<0!vr2OOk#kmlN>R%nX=5 zgX9O%kSTNlep^Pv->rki7K^sSB6iOh85zBQL^9cAmbH<~9`S>rn2%K>!NXr3u2gkV zYnVYudZ4M<_+H4OcW3a$wG#S}hTjvg0d3F&D~8{|Bt*QuqOM()4`~8p$zO%GGqeev zD!PsueZXQD!=0T1#2{pfk0LhxYhdmhJHrk-=p&ytd+0YPJZxb#&xz3(Ov0`Q4h z(`#yk_u+Cm#Fe=CE25&YVC0%r`NxO5I<&eCL8MdUetWmW%YE{$N3@q2xheUSXys>; zv9PcJ2;0(|_0Vdl#Huog#Vp9%^6p z-Ie^Dl0qkD&lnvYoiyfcht2($IO;Iex_9DikUA9=7+1EB)6|9I*jZW83C)4f|FBJ z=XZKIt_Z~lmVeUdnVOn1h%+1rAr!AHUz<0HnZVM) zAYn4dG3iB}nK{~d-@3XAv_~IE2TH_=lA-@3Q)cB0aox{Z$z&tFqoljd!^#@a!t52M z=TJkP(Q^mbkwIV%5$8GYUXqZA2Mq$%1zJ+8G`sR&5WcFTIUYc~WK3KlhIj9hfJ0?(6>IMz%j`#0 zAPy6qJ^MRCa^-5@`CRl+j*#z>2UKS*kQ&bde%qV*00s#BA$`QguL9fp2VBvqMon4S z2;gCth2FEl4G*&OZSw9c1k2^%X!dVAgZTh$7xm#o`^=9IkE=Zd^vdn8mo8O0&+fGw zp2(@GkwHW=`;~eJ%UdmtR>jd6dUw0VTU2yg^(1s=-bcFkW=o`?H<4~DBdvgm?{Bp8 zy$T7*e6ZY?WjCvlS>a`6(0f_qA@j2am%$HC;D>f_j#hq>hJhNd^7ZfRk+foC9w`tV z!hyz_@;lx2<2KkSuRG2YaGAT0S%e&c#}5pCIItrOSP$_;73h|>&5c%-FS=rdRDEl2 zp>~-AjL@P3C6F@I<-T2{<&#*HG!0Cp7+~DtfM;9V6lB)E2FjKJs0BU|yMaREW+0~^ zorFPtrT_Z%Ycud(2CH#-i$EE~{a#$O@jjT(=sS_g`^1nglHNC=g7%G-y5<3nlA4y* z4Se&#?yCB&Tes5M2?z*ct(|CSX^C$7`qt_th>k9YofBD&(Cz7(aumPH#We{`#P$$J z31@=pZ9gW83f4U_ zHal43B?h_I9Qgcv-eepc9M^u1643`!FkUM@=mqa`F+z@0f>v4ZkFWw z@J2N@Z~2g8X|3w*LGofrs>XJA;{Jk}&1P-JKGYTieJZt9kC(QhS_P>r{QGxhc2?G}C?Si82ag_E(gq%uuy9+r5+WSa|OyNL#(!+d*FqG$Jz)!b}d+!z6jAi?- zY9V1DAv~zMMQfLNVQVe^0yVXOc}$=Yz^78KMA|SIE;A@A{W*{7Yn7;ftv64#!U$Em!%htV+85(F8_1R9I1Z@W1*8Tw_?j#_rX z?kgi!_yh#>vt3E;B z@idQ*kBeM~+PL?;LtAz}9J$OQpIpQ$Pyd(pe#d(u5&PYv;-q6N$5}7+?K&5i3GnR* zSfO&1N!wZ}*_G79)O7#kaJ99)ots8~rG$ldn7Jamtl<>$xVY=W1xSI=?#JlqKwO8x z25A4!Q&1pK$@B~idhwQm_UkPyvk+exWqm)waKa|ccU1QIR@iz?WDk*n@cxm!7P7(QyXNJn z#_>Xb$Zt0!3{A~Vb8}8;fK4Gm#Pk~)a8DlCc6sMn_vluBE^CvKk#X%`c}yQ9w@5E+ z_3I_M%%1+UdY#i~iLXFe{J$=pucprhy`7s5{v%D6nFJhssR7 zX4+&TM~Ap{6!F&Sdx~QIiKeZcN%z4%`B{3iv_y-bRQsaWCYn7D%1eeHAH>9P@$kZ- zHlBinSe?FYQ0>tT#I|sm?V!fI6o^p};$4=ih{}Zv7ifJBcU%oKF&t>tp$ag+FJZ`3Vr7?78hgmdAp32Y4CfFalrPyJvE1;xg7fXex|= z6mk1Q{t@xozvX(qf_$njo5gXC#cC$hy>&PKShO@{&{#kzDhw zA@t}(JITvu?_8Rx_qt=4Xc6GRm1H2_sJn{SUf`J!a^uo?>lg zpdQ&YN`nI!KiM+$wbmQElmmr>s>3DbLXA;XkZk2nNK;a(mJpl^Sc$2wJG*Dv5W^n+ zDjuO?M?#>6+af?X-abTd7vJ|4ojn^{EP%DFR<5$LrP(*vpNx4ol=LQvz8iC2X#h_1 z&ij3}6o$;Si21Gi)+tNQO=^fU^}fW`(Ta+Os{b~`|3|}%|2>QTKN*Gm|Ev9HBcy+m zTl^z~o9xcSKY>eIxTSQ7YA>(JwKrJGD8EnPJGG29&Cl;rlou{+Ie{PY>KP~-0Jiq| zGaHm_xx8s=2{JxItI+qi^Ig44RE)k@DW{}M$^${k4|>n9+8EY8z~Oc)PEQVN7RbZI zpl$ijXI}qy;D0?q%ghJy4628p3xbWeua;CRySa&yOK(v?^#*fWkPIu~5c{*Tr&g|3 z)adD0y|wlAYrAjb;s|d(eR>%>jiL&bb>VZ@`F{P|!Bg!x?JOv}onS0ULl!DagzaEa z;K}i!o_@0O)Q-H9(+0Vsv^a7j6^GW)ci${#lS$mMzT%&YiaF0Z0CAf8^Yjb~bn^AB zV8-VMl-nVZkzz2PYPz*DIt)F8fOhU9<3E4?&;rgOrdwiZENs)?K`ZX~>DgrCS!*54gb(#It=%geE+8|@>LVL%neuh?ge+7W_Pjl^kT_1?^rHM?V~FqU|@y9!8(G!{|~B&I?4?{4*|pQodn zKX_c@>6$j|X5qu8QNFOO+|Ew|sK~I#R<}|(ppba{FfkT(CDG#>V7?+y`pX<|J!F@X zs_u<$wJE4EcUd0l+eSm$c*720VHhAM?3XV$R=CV-1a2>l)eJ+<;3=&Ec!&;K22qj* zsbBE|ra{jD9L01&>NVJmmHw3t;s6OG-XXWyW`lYIpamR9I6byG;`7^Ag+}Hv+U1&3 z1S6}21U+^ZPVm{YXMm3MS$jbl4wHWs&7ayNJk~Bj)<}iX;e0DVTVc)#Mt>C)qNAcF z`gcYiCwa&Q#>RbbZ*PEtW!v)LAE)UM0s;b{*r=o=^_w>lMg;1%wz)RaQ2j%>QC0c_ zaJt&l6E6Vvxk&Qi4NSO;J5C_LsW1nWi{3sa>hwJuRDfB4JYr(Fb({b#QcIL-RbugJ z#MU8&#tjJU#3+n1-u)mN4vpUU_$$y0#WReTCIcW5292*0GqSNX z5xF@N4ahin9xbp7WWg!F>_q=v0b`K0Yyf~ZSQ>WjZEt-_fFwmb=}SK53R_aFQ}p6z2Y2aw3( zq5o9m%J}`oc;-`AS2vwW|GR$}tE9cHE!A?Q$Xepc9NVpiLl%Q78&qCFfz?`CMGDEJ zT{9szE^ZZyFCd}rY=6R90$Z%NlEII}T1}Rzf}NRUJc0yoLm4k%pA}oylMFLW0^k2< za)7kC`hR!%XE={>L!xp7Tg{-LsA#fi-bAF>xG5q;^N{;>gvU)x|9^gv9U4h zyIigCuf+37`&Rm}ePSY_q65)D(~Yc_(I+iow5`8>ystT!_T1jyezi6yjGF%-HGbiH zdbk}*bLXx5?h?lA{CqQV#Aw3gLS5=CvaL-?vvpL@9LbJ|y=`{+Nv(_7#yFBFCOad8 zgp%@Yaq+E3j~*2m*7P^TAprN4&Wt2*;t``3M`Lo->)c6dG z!|EVsmTKJVA&Vat$TGV*S>7jKu%%^WFkGkI*=1y881q1}x z?frg4#30@#b-qnJT%d>5^gWoo^f3>exZ6iC6)7X*OvcF0`N>xK^LDa^qb1tcuU|hd zdmh~E^0GI1G0Am0Ej87zy1H6_gY7}$yT(ST8SevnG1pC2HnuEf)8AJr2r!y9s%9Q| zd5QN*U3k@-J^AAFbgaw_uHSZ8PG}o?Yi;m8d0gvqv)%*6a{KmQ z{#dwzudXEdyEtMd%v^w5Jk|=kQlw_i4ULQ#t}BF^%zX=d{^CV{zV0muKt*}^z-H&e z<6{kNZS6IFX?J%KL`_YNVYQvV&)M+ZCUHV1939KubsG*W%(3o2fZ*g*aWAUg@(-uU@^{54Mk$;&+#U0ADOXnaLT-n9CmhgMoUc<3)^dWD~M#kj}h$Zm5lv{u2arD`W5d20(w?AvGX_|1%3h)|DjNSZla66zQk zIjFDn+4XO6#C$s1;4LQMvB$*5_O`g;I7BT$@Kape*l@E0H@^Q8+Q*FNe{g$Jq|{Ya zujK0#vheel76vWqkYRR9pawO?;n!LsR4^0u{W0E05BL%yj(Kv6xM{{xyn&_~d(SEX{e7b*WfPmQWpRIT6QhJsB|M?pONTUg zxx1$pCc0-!vQCn|7<5yK&o~}llB;#TD_b3Ri32A~RL_Un?VEQq>9;dB#0_b`h{aAm zNqI_}K^xxGf$#OyDWs!4SKPHPMs1|&u6)PD^0TV?@IaFc^Wd0H_~HCEiOJnRGtT3B zlY%VFi#G5oU*e1+Pu7u zk%@`gjKbE>Z|=wNYD2nW#c~%&+4_}gZ4Nnj6pL7VHu)32pI;?|^h;eWt?y7_iHN3m z!)2u*x5SA!X0wXu4%a>zC9NBd8Dc=8(g-r=H{FbrLQRb_O!Ki?yOS!qZSE;BXl9IZwe-Qr$ zRhU}9;_Bk!VwUx8<%CUoK|!dx4idJ?4+iX)jiX@~Hv?1NU41j}>&j!q;>|>iGBd&*|w$sA69=b8`+TBH}x3*AvBD z!?AFQK7wKMwDbS$?xrh#VBmRNBE5v@Uifo0*W3`$3pmBEu1;Jbl=|zpK!WzJt_@bWH&i*3%rfW5Vm-sy(VpI=Yc zdnO!)h~2`Mxf2;3U1mS8prN6G7%hKEtdk#=c|S(fYHM*(URyir%-(dPv!mnB{(ehm zCxKsTDwDzohVHY28Fd8(98OM706(81BHjcAr4yg6*=h>22i@b%$;nBrsE9;|fXCWR zo4Rd$`iKzlfQWvt2Mv0|NuY;?L|?E&&1U zsHmtRi>hZoE<>bb9Up8J0|3e?s#&^r65w&LIhAMJ=+n{Ks@R<%RNS}!=$hZ(-@o2TZ>{-~P%V^x z-?VX*D zU%KYTm`&d5y&?S^HY6stV5e?(Fy*>?y4zc8DlJIzNcR>^3gi?O6GYgU$HRz3 z_>CI8L?YPK@=%j;cV7M;%8xnwd?%r!L&c^ZrIV$W@M65O+YYd>P0b=DK-zSLu-o3A zqLw4fctk{O5)xCHl^>+eg@vZwt^IM{5W<4ROSvh4GuEJzJ0m00P z4rsuwb*DR>S>cKY8eJ~l6f4;&J}Q7D(l^2xrFxdS6OJ}(x9IkX@$sL69RVJ$o>& z5>(8SAZ*V<`9AOsE^(RV2=A}?dCQv@Co>m4^sbYAv!Y*Iw|c;$y{(MChPGqxNUuYd zm5!(?jQrIjw#CZI8UTCT;m@qh`Su6jk{8|AJQK=a_U^#7hYuf08yeExkLJNJ0UETo zHIveKwqY9?8Ce2*)iY&qPzxQy!^Otx5Jj3#ykOmMPa6Yu|wp3NkWTZEXsv zv%QFkmXUb4>$m1+5zl=d70&F;fT=Ie>5#+voY7cOE#6SDa^u~*cM6?!wEc->ZP7LZ zL-vyp1_5v1mbve~F!J0GK$p7gGh%vCIcaHxuAzM(=lmUm+7xndF$oDt6BJ3rA&@i3 zbDo8Qkna~37Vds20_Tff`MS^^;lBNYDxuC=x8r|%0uTy5&wVROUPC2FQ)}Mi@ljDf zV2ii)^ek<+GQNcE0AGo{Em@8{Apw$uX0tlQMrw~AQ$q}~2@6;2Bz(HAxC8r9usS)# z=QtRMU1EZ5L(Oy3SK7EpT^@b~Q3;A`}*w4u{(J=pTSFwo=m=8WST z$xQ#EBhUz1QA4G_#B}3EU`Yv|m$!FtNXWCrjwsY|Rz?P&)hHj}qIOUhKoK&5EcyM% z4^j#W?KS;$&FlyKW*t`xbhx2t2NF;@tn}YF*+J)tNw@hh6mLWAa23Vp4~$V?t8dwjLScJ#scn|^xEx4TCiNB^)v-2);ZT46bG3Nt-`=y zv>&fryPKm^J7VM+1}uD>QBhIx4umHTF@q|EVWBQW`o(2XJKLDXav}NZBh0{BzKhMY@J78 zT8DtHQ7?cLw3q-uPXL4&wQHWH@dkQ0;rX5Vrm7ni1xi*{ zRxAc{9__b6>P%`TXt5YR8}CY%Fp${ox)avW5bsUvA>nM?39F9G&d%n#b<5UiJ-lW4 zUAov4kVW(|Gcq_bBSoEle=K{LmTs{C3I#dDr1UZ9Q;PZ8_Q;B|E4;cfH&|Jf%;Ltb)vi3z ztkJ+58;uYcy(bdh$mSwTo(wJtU77$U#e>mh=*aaJb2>Q())5 zUS$5jj7GSKH=?8LK}S@FK&GfMD!#nqcBZJ2vtD*Abya2yY?w2hVr0e_Rjy9Co9O-H z4GXFI`=bQm>!YQ6j$j+-^77buaXrgfTi>fil zdAA<8h4aZq6@-up1wDPCPLW|Q7dLm52Ff--=y}^m99xU*NJ}9yt&XE^Y}zlMQq%dZ zM@znDV#e<~MKtIdxy#q=UPHRL&Nt-cakYG4R0muo;`EyYmzaT-lQS5trV+-_igMv< zg+=bEB?^=J`uaAUY>K&TPAaRahI;b=sy&5r&nhXIOwRt`4_f$xvTNkNNa2|fFZ6Aq zTWVeJJPDlg3i7nhCI5?fH{KxcCE^qfd}9~$c9 z7IQzLMTNMVr}gfeTATiZeB-kYpW1u?u6cQRqjm0g5Rf#SYdngPNM$@078YUm9ab|l zGt}!@m71qh4oz=6u1H;+IzC8|RD(xGYLSi46w#0M&a1jUu&y-%|?Qf#|#`Rbt9ebJ5S7;y<(?PfvjU}knzr4KM z3gx*y`li9}iK<(@;=5O16Ye)2S2hF@(SLT`nx1r-uXwR?T(yuGZ1({TVAo4knFM%-G zVSyYLMOtb;dX&}@PH%aUT3jfw=ixL;E*#%q4E(+&bf3?X>N9d-X{kS3ozYKH+NRr# zeg{*OSwAA6i7?)CJ{(#cIt;;f-{7m`^ zTXFs~fG>sJ4%_W=EKVZMs`1z5(GhBlhfOzT3GU!<1dO$qoC-9O;a%e5TfzyWXb^wrjm-#cR){FzUmo93K8;$1=D=JAgLWJzd z<{kax#r?cOcQ1OpLbh9OVI^brV7~Wb3ANM0aIM_53pDpWF!7=u=>A%E*W~@1<*&j4 zd3on!{`PDu!Yy%`ZlO#Zvm_2R@6DGbF^!zd)@^3#X6H@DZifmTJq;!9Y!c3hH$J=Q zla_I&JvvwDvqAkhynpV?&-UY}OyjwM)V_uHb9{?t_P^@h_+ypiQ%c=>F~25$;hAdFw}mi~%@5aibjbQDZX}J} zVn!a}C(D#`oK2l`QdmtHx)x~RfjeJ(o}Lx1<)}YMT}3*PtL9hC$5ug@ON*Frj2@8B@B?_}!;O^Mns~x0?kRW^mUr&V#oV_L{0O_wZWWFC3fXLOU|< z4fS5Ubf%rSLB`qSDlOO&_nDSY_M`FCmSd=prL^;jv6gKyn-mzzn16|4nQxU~_4v{s zy|7kCe%=O0`MYG8Vo6KbwEpez04%G#^9!G*D<;@>^evghRl2v<{I^GhappB=Q~ZQO z?l#D={U`O`pB4#f`sCH}2vbmR0*hXFLRBTYZASzAgP=}%?*q8{6tKlhTYXiIN8 zS1=H9Wp9x)j8&?V@UK1UJ4{YxmYVlcXVMQ2Xfm9p&Q?mur)v!|`%IyX*EQ5nV)!j~ zucI*{cp=8JXc!OUw=35~AuINhMIlKW^QT~V_ZNv1f(+A98BY{}?_a};P45TyA$v_E zEo;JyFN4d(%oh`oiuI8s_P*>-3?;m-8_d5E|7)20v#Xs#y4on;C-oz7<~VQ%asJDu z@tu^IM_*LQVG4^fow6ot+!qhn{xUAA5wAHNsS|mwK8pj7MBc>~B*R31X{f)MnNODW zpI_29RZsmW;h&41W*A9Za?|sjP61s@I-+)X3**|8VLouP=j#8MkS9#mr)KG|@_R7% z)UybZSXEh*qG934SB2_Hf#m;TafPI>hlRVjuA!HUxkVi@kg7-VkNn0 zSa%QjHk*9?=9(x+7p}P;6d7bWwsw8nwf>bUiq)1 zr`-F8t8UD^fXRTdbOD0~!*K;UPg&jQ@vQnFn$n7(XE`T#8K z9Ng*KozP5)IYu6<1YQuKTm9SO&1ru-0EnnCktaCoe>QiC19idnBnpUy_f`KG$=>4N zF{lRPxN*J+q^ATlq2G%U?wKnz{#x6P?f`BEjX34uC8)T#__n+Gh7L4cT7gq~ z`AbR{#Z5T0Ci_j;HcnZBG*MKK6@Y-Q4K%|)7*yVH{C_yT@n5#miZuh6L_}zypCT?H zfq&%+D?k4y&=EU2It-0k{V=dbzc^b)R2n>d*aR%LRKM^s59PCG&#IyQbF|ZWD*@RJ zn(POfJ1+(;bqx(ee>`L6=FV51cht7C;{y(zRZx5V_f=+ulA2m(b#?6ex)p=_0x1Zq zO*xO!f$0iaCsa+j&;o|{+G%HBSYF<3p|vHUrR_wwB9INR*xg|R+eiBP`fEpU)F1-T zDj7Msf$1p9>v$y_S{yx*&IHZJ@O+Lt0Jd|b&Q{cs$=sZrk4j5RR{=~TrG!A58Y+LO zjwb#r*RKzSP;f_TsC38OQFM26+$1QkU%sGQK57q8ijBGB@?9}FP|I5t(*5KU4avr z8S-f}PE>UC-`xcejRz-_#dv?d^}Kg?K}4CaP@L%p*uRG6(xJ?`vyl z{B^bsRCREBzE%6xt6Wj9!xHF_XuwGhE$CQLQDxu0ecJ+Mn^Ui$@}spi9}syC9O21@ zV=?;P`FVL-4i07dB_{q{H*abK)j>b8(5QZVx}{H$5hPmyn@Qo5d0@u*Ai3oLv8=9` z&dK2zDmIov{d#{Z4_XC}z4!VQxtN%w>4oj2&!9J9adCcT(H$>zy5k_dtcoAClhoO z#?WjSc9?348bDlVYq?;&g|83>* zP0IJVj=Zk+okBm6f&Kj&f;N*%Dk_%|&;k7lr=pxzG=etj>*{jyzIb)cwv5L_Ma^w& zgl*(gym|eaTEgQloHUVwvsD>z1ncTmxd#u37#PAEH_A2zt;UyfSxG5XJw+0Z38g?o63&_QLTf>< z$|h;RdR#T`b|9!?=rdDns}8}S?IT~BJZoJ zvVwo)-%~!)(2#X;5rkGaD225m7j&PAs=Dy`!Wp&U9@oU(N>tR;V2hg}#|s~q%0fFh z7rh5Sfy}cks%epo8LjuMS{*4)0Tu2MblWT|ydiw`>)c9Jl$0JaGc$KgOc)TtS&e!y z!v02*xVuJoqKGDHb?81?LEk`*Km+>jiG$)q1&x?X0p=hWbG3f@?XbZ?^;zv!gC-F1 zM`>wkd7y<`EVO-EO}RLIS%?~v5E}%=A^T;JMbSxN)wG7Lu{V<7LRM|LN5tQtA<6^V z-FKj+wDndkxaV^V)lU3*;b78|ozgo1rvJ0!g#UR#GHCGMgu`$7AkiJ(aJ9PcLk literal 0 HcmV?d00001 diff --git a/docs/images/DataSetSummary.png b/docs/images/DataSetSummary.png new file mode 100644 index 0000000000000000000000000000000000000000..67b31429d6d7624623d914cc7106d1dd86116df7 GIT binary patch literal 22017 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 literal 0 HcmV?d00001 diff --git a/docs/images/DistributionLevel.png b/docs/images/DistributionLevel.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae87e0d529a3a25edd84e5384e680747975db47 GIT binary patch literal 18481 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 diff --git a/docs/images/SourceFile.png b/docs/images/SourceFile.png new file mode 100644 index 0000000000000000000000000000000000000000..347a927683ded18ab9b9e08f53219ad840c24905 GIT binary patch literal 8213 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 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 662a2d27bd..d57febd4fc 100644 --- a/docs/index.md +++ b/docs/index.md @@ -124,6 +124,12 @@ Entity and association taxonomy and datamodel for life-sciences data * [ClinicalEntity](ClinicalEntity.md) - Any entity or process that exists in the clinical domain and outside the biological realm. Diseases are placed under biological entities * [ClinicalIntervention](ClinicalIntervention.md) * [ClinicalTrial](ClinicalTrial.md) + * [DataFile](DataFile.md) + * [SourceFile](SourceFile.md) + * [DataSet](DataSet.md) + * [DataSetVersion](DataSetVersion.md) + * [DataSetSummary](DataSetSummary.md) + * [DistributionLevel](DistributionLevel.md) * [Device](Device.md) - A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment * [InformationContentEntity](InformationContentEntity.md) - a piece of information that typically describes some piece of biology or is used as support. * [ConfidenceLevel](ConfidenceLevel.md) - Level of confidence in a statement @@ -145,6 +151,8 @@ Entity and association taxonomy and datamodel for life-sciences data ### Mixins + * [DataSetSummary](DataSetSummary.md) + * [DistributionLevel](DistributionLevel.md) * [EntityToDiseaseAssociation](EntityToDiseaseAssociation.md) - mixin class for any association whose object (target node) is a disease * [EntityToFeatureOrDiseaseQualifiers](EntityToFeatureOrDiseaseQualifiers.md) - Qualifiers for entity to disease or phenotype associations * [EntityToDiseaseAssociation](EntityToDiseaseAssociation.md) - mixin class for any association whose object (target node) is a disease @@ -294,6 +302,8 @@ Entity and association taxonomy and datamodel for life-sciences data * [creation date](creation_date.md) - date on which thing was created. This can be applied to nodes or edges * [description](description.md) - a human-readable description of a thing * [description](entity_to_phenotypic_feature_association_description.md) + * [distribution](distribution.md) + * [downloadURL](downloadURL.md) * [filler](filler.md) - The value in a property-value tuple * [full name](full_name.md) - a long-form human readable name for a thing * [genome build](genome_build.md) - TODO @@ -314,10 +324,17 @@ Entity and association taxonomy and datamodel for life-sciences data * [name](name.md) - A human-readable name for a thing * [name](macromolecular_machine_name.md) * [phase](phase.md) - TODO + * [retrievedOn](retrievedOn.md) + * [source data file](source_data_file.md) + * [source version](source_version.md) + * [source web page](source_web_page.md) * [synonym](synonym.md) - Alternate human-readable names for a thing * [systematic synonym](systematic_synonym.md) - more commonly used for gene symbols in yeast * [timepoint](timepoint.md) - a point in time + * [title](title.md) + * [type](type.md) * [update date](update_date.md) - date on which thing was updated. This can be applied to nodes or edges + * [versionOf](versionOf.md) * [related to](related_to.md) - A relationship that is asserted between two named things * [affects](affects.md) - describes an entity that has a direct affect on the state or quality of another existing entity. Use of the 'affects' predicate implies that the affected entity already exists, unlike predicates such as 'affects risk for' and 'prevents, where the outcome is something that may or may not come to be. * [affects abundance of](affects_abundance_of.md) - holds between two molecular entities where the action or effect of one changes the amount of the other within a system of interest diff --git a/docs/interacts_with.md b/docs/interacts_with.md index bfbe500286..e6e9711897 100644 --- a/docs/interacts_with.md +++ b/docs/interacts_with.md @@ -44,9 +44,14 @@ URI: [biolink:interacts_with](https://w3id.org/biolink/vocab/interacts_with) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -100,6 +105,7 @@ URI: [biolink:interacts_with](https://w3id.org/biolink/vocab/interacts_with) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/iri.md b/docs/iri.md index 4084d08000..25e35da087 100644 --- a/docs/iri.md +++ b/docs/iri.md @@ -42,9 +42,14 @@ URI: [biolink:iri](https://w3id.org/biolink/vocab/iri) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -98,6 +103,7 @@ URI: [biolink:iri](https://w3id.org/biolink/vocab/iri) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/name.md b/docs/name.md index 0fc32199f6..fca922e1ea 100644 --- a/docs/name.md +++ b/docs/name.md @@ -41,9 +41,14 @@ URI: [biolink:name](https://w3id.org/biolink/vocab/name) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -88,6 +93,7 @@ URI: [biolink:name](https://w3id.org/biolink/vocab/name) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/node_property.md b/docs/node_property.md index a95d6d4c2a..afb6c0a9eb 100644 --- a/docs/node_property.md +++ b/docs/node_property.md @@ -20,6 +20,8 @@ URI: [biolink:node_property](https://w3id.org/biolink/vocab/node_property) * [category](category.md) * [creation date](creation_date.md) * [description](description.md) + * [distribution](distribution.md) + * [downloadURL](downloadURL.md) * [filler](filler.md) * [full name](full_name.md) * [genome build](genome_build.md) @@ -34,10 +36,17 @@ URI: [biolink:node_property](https://w3id.org/biolink/vocab/node_property) * [longitude](longitude.md) * [name](name.md) * [phase](phase.md) + * [retrievedOn](retrievedOn.md) + * [source data file](source_data_file.md) + * [source version](source_version.md) + * [source web page](source_web_page.md) * [synonym](synonym.md) * [systematic synonym](systematic_synonym.md) * [timepoint](timepoint.md) + * [title](title.md) + * [type](type.md) * [update date](update_date.md) + * [versionOf](versionOf.md) ## Used by @@ -64,9 +73,14 @@ URI: [biolink:node_property](https://w3id.org/biolink/vocab/node_property) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -120,6 +134,7 @@ URI: [biolink:node_property](https://w3id.org/biolink/vocab/node_property) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/related_to.md b/docs/related_to.md index 1a96582c23..5b1e2e38fa 100644 --- a/docs/related_to.md +++ b/docs/related_to.md @@ -70,9 +70,14 @@ URI: [biolink:related_to](https://w3id.org/biolink/vocab/related_to) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -126,6 +131,7 @@ URI: [biolink:related_to](https://w3id.org/biolink/vocab/related_to) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/retrievedOn.md b/docs/retrievedOn.md new file mode 100644 index 0000000000..2e1265374f --- /dev/null +++ b/docs/retrievedOn.md @@ -0,0 +1,22 @@ + +# Slot: retrievedOn + + + + +URI: [biolink:retrievedOn](https://w3id.org/biolink/vocab/retrievedOn) + +## Domain and Range + +[SourceFile](SourceFile.md) -> OPT [Date](Date.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [SourceFile](SourceFile.md) diff --git a/docs/source_data_file.md b/docs/source_data_file.md new file mode 100644 index 0000000000..b47efbe812 --- /dev/null +++ b/docs/source_data_file.md @@ -0,0 +1,24 @@ + +# Slot: source data file + + + + +URI: [biolink:source_data_file](https://w3id.org/biolink/vocab/source_data_file) + +## Domain and Range + +[DataSetVersion](DataSetVersion.md) -> OPT [DataFile](DataFile.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) + * [DistributionLevel](DistributionLevel.md) diff --git a/docs/source_version.md b/docs/source_version.md new file mode 100644 index 0000000000..c4e527ebf5 --- /dev/null +++ b/docs/source_version.md @@ -0,0 +1,22 @@ + +# Slot: source version + + + + +URI: [biolink:source_version](https://w3id.org/biolink/vocab/source_version) + +## Domain and Range + +[SourceFile](SourceFile.md) -> OPT [String](String.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [SourceFile](SourceFile.md) diff --git a/docs/source_web_page.md b/docs/source_web_page.md new file mode 100644 index 0000000000..cd34713005 --- /dev/null +++ b/docs/source_web_page.md @@ -0,0 +1,22 @@ + +# Slot: source web page + + + + +URI: [biolink:source_web_page](https://w3id.org/biolink/vocab/source_web_page) + +## Domain and Range + +[DataSetSummary](DataSetSummary.md) -> OPT [String](String.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DataSetSummary](DataSetSummary.md) diff --git a/docs/synonym.md b/docs/synonym.md index cec3bc48be..60af28b02b 100644 --- a/docs/synonym.md +++ b/docs/synonym.md @@ -42,9 +42,14 @@ URI: [biolink:synonym](https://w3id.org/biolink/vocab/synonym) * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -98,6 +103,7 @@ URI: [biolink:synonym](https://w3id.org/biolink/vocab/synonym) * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/systematic_synonym.md b/docs/systematic_synonym.md index d1359617e5..cc78dc23ed 100644 --- a/docs/systematic_synonym.md +++ b/docs/systematic_synonym.md @@ -42,9 +42,14 @@ URI: [biolink:systematic_synonym](https://w3id.org/biolink/vocab/systematic_syno * [ClinicalTrial](ClinicalTrial.md) * [CodingSequence](CodingSequence.md) * [ConfidenceLevel](ConfidenceLevel.md) + * [DataFile](DataFile.md) + * [DataSet](DataSet.md) + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) * [Device](Device.md) * [Disease](Disease.md) * [DiseaseOrPhenotypicFeature](DiseaseOrPhenotypicFeature.md) + * [DistributionLevel](DistributionLevel.md) * [Drug](Drug.md) * [DrugExposure](DrugExposure.md) * [Environment](Environment.md) @@ -98,6 +103,7 @@ URI: [biolink:systematic_synonym](https://w3id.org/biolink/vocab/systematic_syno * [RelationshipType](RelationshipType.md) * [SequenceVariant](SequenceVariant.md) * [SeverityValue](SeverityValue.md) + * [SourceFile](SourceFile.md) * [Transcript](Transcript.md) * [Treatment](Treatment.md) * [Zygosity](Zygosity.md) diff --git a/docs/title.md b/docs/title.md new file mode 100644 index 0000000000..353bbdde95 --- /dev/null +++ b/docs/title.md @@ -0,0 +1,24 @@ + +# Slot: title + + + + +URI: [biolink:title](https://w3id.org/biolink/vocab/title) + +## Domain and Range + +[DataSetVersion](DataSetVersion.md) -> OPT [String](String.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) + * [DistributionLevel](DistributionLevel.md) diff --git a/docs/type.md b/docs/type.md new file mode 100644 index 0000000000..f3af43c1ed --- /dev/null +++ b/docs/type.md @@ -0,0 +1,24 @@ + +# Slot: type + + + + +URI: [biolink:type](https://w3id.org/biolink/vocab/type) + +## Domain and Range + +[DataSetVersion](DataSetVersion.md) -> OPT [String](String.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) + * [DistributionLevel](DistributionLevel.md) diff --git a/docs/versionOf.md b/docs/versionOf.md new file mode 100644 index 0000000000..56115e0f85 --- /dev/null +++ b/docs/versionOf.md @@ -0,0 +1,24 @@ + +# Slot: versionOf + + + + +URI: [biolink:versionOf](https://w3id.org/biolink/vocab/versionOf) + +## Domain and Range + +[DataSetVersion](DataSetVersion.md) -> OPT [DataSet](DataSet.md) + +## Parents + + * is_a: [node property](node_property.md) + +## Children + + +## Used by + + * [DataSetSummary](DataSetSummary.md) + * [DataSetVersion](DataSetVersion.md) + * [DistributionLevel](DistributionLevel.md) diff --git a/golr-views/data_file-config.yaml b/golr-views/data_file-config.yaml new file mode 100644 index 0000000000..63315deafa --- /dev/null +++ b/golr-views/data_file-config.yaml @@ -0,0 +1,61 @@ +display_name: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data file +document_category: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data file +fields: +- description: A unique identifier for a thing. Must be either a CURIE shorthand for + a URI or a complete URI + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - id + id: id +- description: A human-readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - name + id: name +- cardinality: multi + description: Name of the high level ontology class in which this entity is categorized. + Corresponds to the label for the biolink entity type class. In a neo4j database + this MAY correspond to the neo4j label tag + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - category + id: category +- cardinality: multi + description: A relationship that is asserted between two named things + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - related to + id: related_to +- cardinality: multi + description: holds between any two entities that directly or indirectly interact + with each other + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - interacts with + id: interacts_with +- description: A grouping for any property that holds between a node and a value + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - node property + id: node_property +- description: An IRI for the node. This is determined by the id using expansion rules. + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - iri + id: iri +- cardinality: multi + description: Alternate human-readable names for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - synonym + id: synonym +- description: a long-form human readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - full name + id: full_name +- description: a human-readable description of a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - description + id: description +- cardinality: multi + description: more commonly used for gene symbols in yeast + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - systematic synonym + id: systematic_synonym +id: data_file +schema_generating: true +weight: 20 diff --git a/golr-views/data_set-config.yaml b/golr-views/data_set-config.yaml new file mode 100644 index 0000000000..bc274bc94b --- /dev/null +++ b/golr-views/data_set-config.yaml @@ -0,0 +1,61 @@ +display_name: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data set +document_category: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data set +fields: +- description: A unique identifier for a thing. Must be either a CURIE shorthand for + a URI or a complete URI + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - id + id: id +- description: A human-readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - name + id: name +- cardinality: multi + description: Name of the high level ontology class in which this entity is categorized. + Corresponds to the label for the biolink entity type class. In a neo4j database + this MAY correspond to the neo4j label tag + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - category + id: category +- cardinality: multi + description: A relationship that is asserted between two named things + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - related to + id: related_to +- cardinality: multi + description: holds between any two entities that directly or indirectly interact + with each other + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - interacts with + id: interacts_with +- description: A grouping for any property that holds between a node and a value + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - node property + id: node_property +- description: An IRI for the node. This is determined by the id using expansion rules. + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - iri + id: iri +- cardinality: multi + description: Alternate human-readable names for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - synonym + id: synonym +- description: a long-form human readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - full name + id: full_name +- description: a human-readable description of a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - description + id: description +- cardinality: multi + description: more commonly used for gene symbols in yeast + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - systematic synonym + id: systematic_synonym +id: data_set +schema_generating: true +weight: 20 diff --git a/golr-views/data_set_summary-config.yaml b/golr-views/data_set_summary-config.yaml new file mode 100644 index 0000000000..afc56de17c --- /dev/null +++ b/golr-views/data_set_summary-config.yaml @@ -0,0 +1,79 @@ +display_name: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data set summary +document_category: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data set summary +fields: +- description: A unique identifier for a thing. Must be either a CURIE shorthand for + a URI or a complete URI + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - id + id: id +- description: A human-readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - name + id: name +- cardinality: multi + description: Name of the high level ontology class in which this entity is categorized. + Corresponds to the label for the biolink entity type class. In a neo4j database + this MAY correspond to the neo4j label tag + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - category + id: category +- cardinality: multi + description: A relationship that is asserted between two named things + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - related to + id: related_to +- cardinality: multi + description: holds between any two entities that directly or indirectly interact + with each other + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - interacts with + id: interacts_with +- description: A grouping for any property that holds between a node and a value + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - node property + id: node_property +- description: An IRI for the node. This is determined by the id using expansion rules. + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - iri + id: iri +- cardinality: multi + description: Alternate human-readable names for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - synonym + id: synonym +- description: a long-form human readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - full name + id: full_name +- description: a human-readable description of a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - description + id: description +- cardinality: multi + description: more commonly used for gene symbols in yeast + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - systematic synonym + id: systematic_synonym +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - title + id: title +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - source data file + id: source_data_file +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - versionOf + id: versionOf +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - type + id: type +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - distribution + id: distribution +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - source web page + id: source_web_page +id: data_set_summary +schema_generating: true +weight: 20 diff --git a/golr-views/data_set_version-config.yaml b/golr-views/data_set_version-config.yaml new file mode 100644 index 0000000000..6485773ec9 --- /dev/null +++ b/golr-views/data_set_version-config.yaml @@ -0,0 +1,76 @@ +display_name: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data set version +document_category: !!python/object/new:biolinkml.meta.ClassDefinitionName +- data set version +fields: +- description: A unique identifier for a thing. Must be either a CURIE shorthand for + a URI or a complete URI + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - id + id: id +- description: A human-readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - name + id: name +- cardinality: multi + description: Name of the high level ontology class in which this entity is categorized. + Corresponds to the label for the biolink entity type class. In a neo4j database + this MAY correspond to the neo4j label tag + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - category + id: category +- cardinality: multi + description: A relationship that is asserted between two named things + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - related to + id: related_to +- cardinality: multi + description: holds between any two entities that directly or indirectly interact + with each other + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - interacts with + id: interacts_with +- description: A grouping for any property that holds between a node and a value + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - node property + id: node_property +- description: An IRI for the node. This is determined by the id using expansion rules. + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - iri + id: iri +- cardinality: multi + description: Alternate human-readable names for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - synonym + id: synonym +- description: a long-form human readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - full name + id: full_name +- description: a human-readable description of a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - description + id: description +- cardinality: multi + description: more commonly used for gene symbols in yeast + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - systematic synonym + id: systematic_synonym +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - title + id: title +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - source data file + id: source_data_file +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - versionOf + id: versionOf +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - type + id: type +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - distribution + id: distribution +id: data_set_version +schema_generating: true +weight: 20 diff --git a/golr-views/distribution_level-config.yaml b/golr-views/distribution_level-config.yaml new file mode 100644 index 0000000000..307ddc7645 --- /dev/null +++ b/golr-views/distribution_level-config.yaml @@ -0,0 +1,79 @@ +display_name: !!python/object/new:biolinkml.meta.ClassDefinitionName +- distribution level +document_category: !!python/object/new:biolinkml.meta.ClassDefinitionName +- distribution level +fields: +- description: A unique identifier for a thing. Must be either a CURIE shorthand for + a URI or a complete URI + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - id + id: id +- description: A human-readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - name + id: name +- cardinality: multi + description: Name of the high level ontology class in which this entity is categorized. + Corresponds to the label for the biolink entity type class. In a neo4j database + this MAY correspond to the neo4j label tag + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - category + id: category +- cardinality: multi + description: A relationship that is asserted between two named things + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - related to + id: related_to +- cardinality: multi + description: holds between any two entities that directly or indirectly interact + with each other + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - interacts with + id: interacts_with +- description: A grouping for any property that holds between a node and a value + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - node property + id: node_property +- description: An IRI for the node. This is determined by the id using expansion rules. + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - iri + id: iri +- cardinality: multi + description: Alternate human-readable names for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - synonym + id: synonym +- description: a long-form human readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - full name + id: full_name +- description: a human-readable description of a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - description + id: description +- cardinality: multi + description: more commonly used for gene symbols in yeast + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - systematic synonym + id: systematic_synonym +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - title + id: title +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - source data file + id: source_data_file +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - versionOf + id: versionOf +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - type + id: type +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - distribution + id: distribution +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - downloadURL + id: downloadURL +id: distribution_level +schema_generating: true +weight: 20 diff --git a/golr-views/source_file-config.yaml b/golr-views/source_file-config.yaml new file mode 100644 index 0000000000..538bf64180 --- /dev/null +++ b/golr-views/source_file-config.yaml @@ -0,0 +1,67 @@ +display_name: !!python/object/new:biolinkml.meta.ClassDefinitionName +- source file +document_category: !!python/object/new:biolinkml.meta.ClassDefinitionName +- source file +fields: +- description: A unique identifier for a thing. Must be either a CURIE shorthand for + a URI or a complete URI + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - id + id: id +- description: A human-readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - name + id: name +- cardinality: multi + description: Name of the high level ontology class in which this entity is categorized. + Corresponds to the label for the biolink entity type class. In a neo4j database + this MAY correspond to the neo4j label tag + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - category + id: category +- cardinality: multi + description: A relationship that is asserted between two named things + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - related to + id: related_to +- cardinality: multi + description: holds between any two entities that directly or indirectly interact + with each other + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - interacts with + id: interacts_with +- description: A grouping for any property that holds between a node and a value + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - node property + id: node_property +- description: An IRI for the node. This is determined by the id using expansion rules. + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - iri + id: iri +- cardinality: multi + description: Alternate human-readable names for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - synonym + id: synonym +- description: a long-form human readable name for a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - full name + id: full_name +- description: a human-readable description of a thing + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - description + id: description +- cardinality: multi + description: more commonly used for gene symbols in yeast + display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - systematic synonym + id: systematic_synonym +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - source version + id: source_version +- display_name: !!python/object/new:biolinkml.meta.SlotDefinitionName + - retrievedOn + id: retrievedOn +id: source_file +schema_generating: true +weight: 20 diff --git a/graphviz/data_file.gv b/graphviz/data_file.gv new file mode 100644 index 0000000000..5b0e431550 --- /dev/null +++ b/graphviz/data_file.gv @@ -0,0 +1,125 @@ +digraph { + graph [bb="0,0,1314.8,122"]; + node [label="\N"]; + "data file" [height=0.5, + label="data file", + pos="688.07,104", + width=1.0652]; + "named thing" [height=0.5, + pos="54.069,18", + width=1.5019]; + "data file" -> "named thing" [label=is_a, + lp="300.35,61", + pos="e,94.551,29.997 649.55,102.3 556.89,97.597 314.67,81.575 118.07,36 113.65,34.975 109.08,33.841 104.5,32.654"]; + id [color=blue, + height=0.5, + label="identifier type", + pos="186.07,18", + width=1.652]; + "data file" -> id [color=blue, + label=id, + lp="386.51,61", + pos="e,231.04,29.974 649.91,101.17 591.48,96.47 476.5,85.771 380.18,68 323.31,57.508 310.04,50.51 254.07,36 249.76,34.884 245.31,33.721 \ +240.83,32.547", + style=solid]; + name [color=blue, + height=0.5, + label="label type", + pos="308.07,18", + width=1.2425]; + "data file" -> name [color=blue, + label=name, + lp="454.23,61", + pos="e,337.81,31.562 649.96,101.14 600.6,96.844 512.19,87.097 438.75,68 407.17,59.787 372.75,46.425 347.16,35.58", + style=solid]; + category [color=blue, + height=0.5, + label="iri type", + pos="406.07,18", + width=0.9834]; + "data file" -> category [color=blue, + label=category, + lp="531.17,61", + pos="e,429.34,31.759 650.88,99.541 613.72,94.409 555.3,84.493 506.88,68 483.04,59.881 457.65,47.26 438.31,36.731", + style=solid]; + "related to" [color=blue, + height=0.5, + label="named thing", + pos="513.07,18", + width=1.5019]; + "data file" -> "related to" [color=blue, + label="related to", + lp="607.31,61", + pos="e,532.36,34.853 654.04,95.565 632.33,89.475 603.98,80.183 580.6,68 566.54,60.678 552.26,50.567 540.47,41.352", + style=solid]; + "interacts with" [color=blue, + height=0.5, + label="named thing", + pos="639.07,18", + width=1.5019]; + "data file" -> "interacts with" [color=blue, + label="interacts with", + lp="678.97,61", + pos="e,635.81,36.057 661.99,90.655 653.51,84.907 645.05,77.334 640.26,68 636.86,61.386 635.6,53.601 635.43,46.17", + style=solid]; + "node property" [color=blue, + height=0.5, + label=string, + pos="741.07,18", + width=0.8403]; + "data file" -> "node property" [color=blue, + label="node property", + lp="763.14,61", + pos="e,733.32,35.582 702.46,86.927 707.07,81.101 712.02,74.431 716.07,68 720.65,60.726 725.06,52.498 728.86,44.848", + style=solid]; + iri [color=blue, + height=0.5, + label="iri type", + pos="825.07,18", + width=0.9834]; + "data file" -> iri [color=blue, + label=iri, + lp="822.29,61", + pos="e,822.2,36.422 723.31,96.839 753.51,90.074 793.98,79.301 806.07,68 812.27,62.202 816.46,54.171 819.29,46.239", + style=solid]; + synonym [color=blue, + height=0.5, + label="label type", + pos="923.07,18", + width=1.2425]; + "data file" -> synonym [color=blue, + label=synonym, + lp="886.74,61", + pos="e,899.18,33.356 724.07,97.677 753.69,91.846 796.44,81.97 832.07,68 852.18,60.115 873.4,48.659 890.28,38.701", + style=solid]; + "full name" [color=blue, + height=0.5, + label="label type", + pos="1030.1,18", + width=1.2425]; + "data file" -> "full name" [color=blue, + label="full name", + lp="981.7,61", + pos="e,1002.7,32.387 726.24,100.99 772.07,96.686 850.88,87.095 916.07,68 942.81,60.167 971.53,47.543 993.45,36.94", + style=solid]; + description [color=blue, + height=0.5, + label="narrative text", + pos="1150.1,18", + width=1.5834]; + "data file" -> description [color=blue, + label=description, + lp="1090.2,61", + pos="e,1116.7,32.615 726.47,102.67 787.64,99.902 910.65,91.653 1012.1,68 1044.8,60.371 1080.4,47.342 1107.2,36.497", + style=solid]; + "systematic synonym" [color=blue, + height=0.5, + label="label type", + pos="1270.1,18", + width=1.2425]; + "data file" -> "systematic synonym" [color=blue, + label="systematic synonym", + lp="1231,61", + pos="e,1239.3,31.13 726.44,102.07 818.41,97.249 1049.4,83.909 1125.1,68 1161.3,60.383 1201,46.281 1229.7,34.991", + style=solid]; +} diff --git a/graphviz/data_file.svg b/graphviz/data_file.svg new file mode 100644 index 0000000000..bdbfde912c --- /dev/null +++ b/graphviz/data_file.svg @@ -0,0 +1,175 @@ + + + + + + +%3 + + + +data file + +data file + + + +named thing + +named thing + + + +data file->named thing + + +is_a + + + +id + +identifier type + + + +data file->id + + +id + + + +name + +label type + + + +data file->name + + +name + + + +category + +iri type + + + +data file->category + + +category + + + +related to + +named thing + + + +data file->related to + + +related to + + + +interacts with + +named thing + + + +data file->interacts with + + +interacts with + + + +node property + +string + + + +data file->node property + + +node property + + + +iri + +iri type + + + +data file->iri + + +iri + + + +synonym + +label type + + + +data file->synonym + + +synonym + + + +full name + +label type + + + +data file->full name + + +full name + + + +description + +narrative text + + + +data file->description + + +description + + + +systematic synonym + +label type + + + +data file->systematic synonym + + +systematic synonym + + + diff --git a/graphviz/data_set.gv b/graphviz/data_set.gv new file mode 100644 index 0000000000..ca08ba9023 --- /dev/null +++ b/graphviz/data_set.gv @@ -0,0 +1,125 @@ +digraph { + graph [bb="0,0,1314.8,122"]; + node [label="\N"]; + "data set" [height=0.5, + label="data set", + pos="688.07,104", + width=1.0242]; + "named thing" [height=0.5, + pos="54.069,18", + width=1.5019]; + "data set" -> "named thing" [label=is_a, + lp="300.35,61", + pos="e,94.551,29.997 651.25,102.39 559.89,97.793 315.88,81.856 118.07,36 113.65,34.975 109.08,33.841 104.5,32.654"]; + id [color=blue, + height=0.5, + label="identifier type", + pos="186.07,18", + width=1.652]; + "data set" -> id [color=blue, + label=id, + lp="386.51,61", + pos="e,231.04,29.974 651.34,101.28 593.38,96.646 477.3,85.918 380.18,68 323.31,57.508 310.04,50.51 254.07,36 249.76,34.884 245.31,33.721 \ +240.83,32.547", + style=solid]; + name [color=blue, + height=0.5, + label="label type", + pos="308.07,18", + width=1.2425]; + "data set" -> name [color=blue, + label=name, + lp="454.23,61", + pos="e,337.81,31.562 651.23,101.25 602.13,97.012 512.82,87.262 438.75,68 407.17,59.787 372.75,46.425 347.16,35.58", + style=solid]; + category [color=blue, + height=0.5, + label="iri type", + pos="406.07,18", + width=0.9834]; + "data set" -> category [color=blue, + label=category, + lp="531.17,61", + pos="e,429.34,31.759 651.93,99.685 614.82,94.595 555.75,84.648 506.88,68 483.04,59.881 457.65,47.26 438.31,36.731", + style=solid]; + "related to" [color=blue, + height=0.5, + label="named thing", + pos="513.07,18", + width=1.5019]; + "data set" -> "related to" [color=blue, + label="related to", + lp="607.31,61", + pos="e,532.36,34.853 655.01,95.836 633.18,89.752 604.33,80.365 580.6,68 566.54,60.678 552.26,50.567 540.47,41.352", + style=solid]; + "interacts with" [color=blue, + height=0.5, + label="named thing", + pos="639.07,18", + width=1.5019]; + "data set" -> "interacts with" [color=blue, + label="interacts with", + lp="678.97,61", + pos="e,635.81,36.057 662.49,90.994 653.84,85.206 645.15,77.519 640.26,68 636.86,61.386 635.6,53.601 635.43,46.17", + style=solid]; + "node property" [color=blue, + height=0.5, + label=string, + pos="741.07,18", + width=0.8403]; + "data set" -> "node property" [color=blue, + label="node property", + lp="763.14,61", + pos="e,733.32,35.582 702.17,87.29 706.86,81.379 711.93,74.565 716.07,68 720.65,60.726 725.06,52.498 728.86,44.848", + style=solid]; + iri [color=blue, + height=0.5, + label="iri type", + pos="825.07,18", + width=0.9834]; + "data set" -> iri [color=blue, + label=iri, + lp="822.29,61", + pos="e,822.2,36.422 722.14,97.1 752.45,90.352 793.83,79.447 806.07,68 812.27,62.202 816.46,54.171 819.29,46.239", + style=solid]; + synonym [color=blue, + height=0.5, + label="label type", + pos="923.07,18", + width=1.2425]; + "data set" -> synonym [color=blue, + label=synonym, + lp="886.74,61", + pos="e,899.18,33.356 722.88,97.911 752.54,92.112 795.96,82.158 832.07,68 852.18,60.115 873.4,48.659 890.28,38.701", + style=solid]; + "full name" [color=blue, + height=0.5, + label="label type", + pos="1030.1,18", + width=1.2425]; + "data set" -> "full name" [color=blue, + label="full name", + lp="981.7,61", + pos="e,1002.7,32.387 724.64,101.14 770.2,96.911 850.11,87.321 916.07,68 942.81,60.167 971.53,47.543 993.45,36.94", + style=solid]; + description [color=blue, + height=0.5, + label="narrative text", + pos="1150.1,18", + width=1.5834]; + "data set" -> description [color=blue, + label=description, + lp="1090.2,61", + pos="e,1116.7,32.615 724.99,102.74 785.64,100.04 909.83,91.846 1012.1,68 1044.8,60.371 1080.4,47.342 1107.2,36.497", + style=solid]; + "systematic synonym" [color=blue, + height=0.5, + label="label type", + pos="1270.1,18", + width=1.2425]; + "data set" -> "systematic synonym" [color=blue, + label="systematic synonym", + lp="1231,61", + pos="e,1239.3,31.13 724.76,102.16 815.56,97.413 1048.9,84.007 1125.1,68 1161.3,60.383 1201,46.281 1229.7,34.991", + style=solid]; +} diff --git a/graphviz/data_set.svg b/graphviz/data_set.svg new file mode 100644 index 0000000000..922f99a5cc --- /dev/null +++ b/graphviz/data_set.svg @@ -0,0 +1,175 @@ + + + + + + +%3 + + + +data set + +data set + + + +named thing + +named thing + + + +data set->named thing + + +is_a + + + +id + +identifier type + + + +data set->id + + +id + + + +name + +label type + + + +data set->name + + +name + + + +category + +iri type + + + +data set->category + + +category + + + +related to + +named thing + + + +data set->related to + + +related to + + + +interacts with + +named thing + + + +data set->interacts with + + +interacts with + + + +node property + +string + + + +data set->node property + + +node property + + + +iri + +iri type + + + +data set->iri + + +iri + + + +synonym + +label type + + + +data set->synonym + + +synonym + + + +full name + +label type + + + +data set->full name + + +full name + + + +description + +narrative text + + + +data set->description + + +description + + + +systematic synonym + +label type + + + +data set->systematic synonym + + +systematic synonym + + + diff --git a/graphviz/data_set_summary.gv b/graphviz/data_set_summary.gv new file mode 100644 index 0000000000..fce404ba90 --- /dev/null +++ b/graphviz/data_set_summary.gv @@ -0,0 +1,185 @@ +digraph { + graph [bb="0,0,1918.4,122"]; + node [label="\N"]; + "data set summary" [height=0.5, + label="data set summary", + pos="998.12,104", + width=1.9998]; + "data set version" [height=0.5, + pos="65.115,18", + width=1.8088]; + "data set summary" -> "data set version" [label=is_a, + lp="332.39,61", + pos="e,113.84,30.142 926.17,103.07 802.16,100.81 540.28,93.223 320.56,68 239.64,58.711 219.85,52.623 140.12,36 134.79,34.89 129.27,33.679 \ +123.74,32.427"]; + id [color=blue, + height=0.5, + label="identifier type", + pos="208.12,18", + width=1.652]; + "data set summary" -> id [color=blue, + label=id, + lp="421.56,61", + pos="e,250.5,30.687 926.92,101.07 793.82,95.35 511.99,82.021 415.23,68 361.68,60.241 301.71,45.025 260.13,33.407", + style=solid]; + name [color=blue, + height=0.5, + label="label type", + pos="330.12,18", + width=1.2425]; + "data set summary" -> name [color=blue, + label=name, + lp="495.27,61", + pos="e,361.31,31.007 926.89,101.28 805.44,96.275 563.3,84.567 479.8,68 442.01,60.503 400.58,46.158 370.9,34.749", + style=solid]; + category [color=blue, + height=0.5, + label="iri type", + pos="428.12,18", + width=0.9834]; + "data set summary" -> category [color=blue, + label=category, + lp="582.21,61", + pos="e,453.76,30.498 927.42,100.59 821.38,95.068 626.31,83.241 557.92,68 524.69,60.594 488.69,46.18 463.05,34.723", + style=solid]; + "related to" [color=blue, + height=0.5, + label="named thing", + pos="535.12,18", + width=1.5019]; + "data set summary" -> "related to" [color=blue, + label="related to", + lp="675.35,61", + pos="e,563.61,33.542 928.19,99.385 841.72,93.228 699.72,81.519 648.64,68 622.35,61.039 594.36,48.776 572.76,38.136", + style=solid]; + "interacts with" [color=blue, + height=0.5, + label="named thing", + pos="661.12,18", + width=1.5019]; + "data set summary" -> "interacts with" [color=blue, + label="interacts with", + lp="767.02,61", + pos="e,678.93,35.259 929.1,98.754 861.48,92.907 763.6,82.352 728.3,68 713.2,61.859 698.44,51.506 686.62,41.808", + style=solid]; + "node property" [color=blue, + height=0.5, + label=string, + pos="763.12,18", + width=0.8403]; + "data set summary" -> "node property" [color=blue, + label="node property", + lp="871.19,61", + pos="e,779.7,33.114 933.04,96.294 901.54,90.983 863.76,82.223 831.97,68 816.09,60.891 800.24,49.736 787.76,39.764", + style=solid]; + iri [color=blue, + height=0.5, + label="iri type", + pos="847.12,18", + width=0.9834]; + "data set summary" -> iri [color=blue, + label=iri, + lp="938.34,61", + pos="e,871.17,31.698 969,87.418 943.55,72.923 906.61,51.887 880.08,36.776", + style=solid]; + synonym [color=blue, + height=0.5, + label="label type", + pos="945.12,18", + width=1.2425]; + "data set summary" -> synonym [color=blue, + label=synonym, + lp="1000.8,61", + pos="e,955.9,35.502 987.13,86.181 979.69,74.109 969.73,57.948 961.38,44.39", + style=solid]; + "full name" [color=blue, + height=0.5, + label="label type", + pos="1052.1,18", + width=1.2425]; + "data set summary" -> "full name" [color=blue, + label="full name", + lp="1064.7,61", + pos="e,1045.7,36.278 1015.9,86.209 1020.9,80.664 1026.1,74.334 1030.1,68 1034.5,61.119 1038.5,53.201 1041.7,45.726", + style=solid]; + description [color=blue, + height=0.5, + label="narrative text", + pos="1172.1,18", + width=1.5834]; + "data set summary" -> description [color=blue, + label=description, + lp="1151.2,61", + pos="e,1149.3,34.709 1042.9,89.695 1059.7,83.757 1078.6,76.307 1095.1,68 1110.8,60.133 1127.2,49.804 1140.8,40.577", + style=solid]; + "systematic synonym" [color=blue, + height=0.5, + label="label type", + pos="1292.1,18", + width=1.2425]; + "data set summary" -> "systematic synonym" [color=blue, + label="systematic synonym", + lp="1279.1,61", + pos="e,1265.9,32.664 1062.6,95.749 1099.4,90.037 1146,81.075 1186.1,68 1210.5,60.055 1236.6,47.814 1256.7,37.432", + style=solid]; + title [color=blue, + height=0.5, + label=string, + pos="1385.1,18", + width=0.8403]; + "data set summary" -> title [color=blue, + label=title, + lp="1369,61", + pos="e,1374.7,34.921 1070,102.43 1156.1,99.53 1294.4,91.285 1340.1,68 1351.4,62.257 1361.2,52.427 1368.7,42.995", + style=solid]; + "source data file" [color=blue, + height=0.5, + label="data file", + pos="1472.1,18", + width=1.0652]; + "data set summary" -> "source data file" [color=blue, + label="source data file", + lp="1457.5,61", + pos="e,1451.2,33.258 1069.5,100.94 1164.5,96.244 1327.3,85.878 1384.1,68 1404.9,61.459 1426.2,49.519 1442.6,38.947", + style=solid]; + versionOf [color=blue, + height=0.5, + label="data set", + pos="1565.1,18", + width=1.0242]; + "data set summary" -> versionOf [color=blue, + label=versionOf, + lp="1557.1,61", + pos="e,1550.3,34.637 1069.6,101.32 1199.5,96.083 1464.8,83.644 1504.1,68 1518.7,62.213 1532.4,51.631 1543.1,41.687", + style=solid]; + type [color=blue, + height=0.5, + label=string, + pos="1650.1,18", + width=0.8403]; + "data set summary" -> type [color=blue, + label=type, + lp="1626.2,61", + pos="e,1635.8,34.203 1069.8,102.11 1216.6,97.867 1541.9,86.507 1589.1,68 1603.9,62.207 1617.8,51.414 1628.6,41.335", + style=solid]; + distribution [color=blue, + height=0.5, + label="distribution level", + pos="1769.1,18", + width=1.9523]; + "data set summary" -> distribution [color=blue, + label=distribution, + lp="1721.4,61", + pos="e,1736.9,34.027 1070,102.86 1214.4,100.1 1534.9,91.461 1642.1,68 1671.6,61.538 1703.3,49.1 1727.6,38.247", + style=solid]; + "source web page" [color=blue, + height=0.5, + label=string, + pos="1888.1,18", + width=0.8403]; + "data set summary" -> "source web page" [color=blue, + label="source web page", + lp="1851.8,61", + pos="e,1864.9,29.762 1070.2,103.28 1233.6,101.22 1627.9,93.655 1758.1,68 1792.6,61.204 1829.9,45.995 1855.6,34.124", + style=solid]; +} diff --git a/graphviz/data_set_summary.svg b/graphviz/data_set_summary.svg new file mode 100644 index 0000000000..f1ff95a18b --- /dev/null +++ b/graphviz/data_set_summary.svg @@ -0,0 +1,253 @@ + + + + + + +%3 + + + +data set summary + +data set summary + + + +data set version + +data set version + + + +data set summary->data set version + + +is_a + + + +id + +identifier type + + + +data set summary->id + + +id + + + +name + +label type + + + +data set summary->name + + +name + + + +category + +iri type + + + +data set summary->category + + +category + + + +related to + +named thing + + + +data set summary->related to + + +related to + + + +interacts with + +named thing + + + +data set summary->interacts with + + +interacts with + + + +node property + +string + + + +data set summary->node property + + +node property + + + +iri + +iri type + + + +data set summary->iri + + +iri + + + +synonym + +label type + + + +data set summary->synonym + + +synonym + + + +full name + +label type + + + +data set summary->full name + + +full name + + + +description + +narrative text + + + +data set summary->description + + +description + + + +systematic synonym + +label type + + + +data set summary->systematic synonym + + +systematic synonym + + + +title + +string + + + +data set summary->title + + +title + + + +source data file + +data file + + + +data set summary->source data file + + +source data file + + + +versionOf + +data set + + + +data set summary->versionOf + + +versionOf + + + +type + +string + + + +data set summary->type + + +type + + + +distribution + +distribution level + + + +data set summary->distribution + + +distribution + + + +source web page + +string + + + +data set summary->source web page + + +source web page + + + diff --git a/graphviz/data_set_version.gv b/graphviz/data_set_version.gv new file mode 100644 index 0000000000..f7f7e9902f --- /dev/null +++ b/graphviz/data_set_version.gv @@ -0,0 +1,175 @@ +digraph { + graph [bb="0,0,1782.2,122"]; + node [label="\N"]; + "data set version" [height=0.5, + label="data set version", + pos="887.87,104", + width=1.8088]; + "data set" [height=0.5, + pos="36.87,18", + width=1.0242]; + "data set version" -> "data set" [label=is_a, + lp="272.15,61", + pos="e,64.793,29.924 822.6,102.86 708.29,100.27 464.6,92.189 260.32,68 180.74,58.577 159.98,57.815 82.87,36 80.085,35.212 77.235,34.319 \ +74.385,33.362"]; + id [color=blue, + height=0.5, + label="identifier type", + pos="150.87,18", + width=1.652]; + "data set version" -> id [color=blue, + label=id, + lp="360.32,61", + pos="e,193.21,30.828 822.57,103.06 721.57,100.84 521.62,93.326 353.98,68 301.9,60.132 243.64,45.129 202.91,33.603", + style=solid]; + name [color=blue, + height=0.5, + label="label type", + pos="272.87,18", + width=1.2425]; + "data set version" -> name [color=blue, + label=name, + lp="433.03,61", + pos="e,303.55,31.186 823.22,101.1 712.98,95.819 493.23,83.7 417.55,68 381.36,60.49 341.78,46.38 313.18,35.059", + style=solid]; + category [color=blue, + height=0.5, + label="iri type", + pos="370.87,18", + width=0.9834]; + "data set version" -> category [color=blue, + label=category, + lp="516.97,61", + pos="e,395.79,30.819 823.95,100.5 728.58,94.883 553.74,82.954 492.68,68 461.9,60.463 428.75,46.431 404.81,35.146", + style=solid]; + "related to" [color=blue, + height=0.5, + label="named thing", + pos="477.87,18", + width=1.5019]; + "data set version" -> "related to" [color=blue, + label="related to", + lp="606.11,61", + pos="e,504,33.978 825.06,99.209 748.55,92.93 624,81.16 579.4,68 556.24,61.167 531.92,49.373 512.89,38.954", + style=solid]; + "interacts with" [color=blue, + height=0.5, + label="named thing", + pos="603.87,18", + width=1.5019]; + "data set version" -> "interacts with" [color=blue, + label="interacts with", + lp="693.78,61", + pos="e,617.11,35.68 825.45,98.673 766.91,92.904 684.14,82.538 655.06,68 643.25,62.098 632.43,52.483 623.81,43.253", + style=solid]; + "node property" [color=blue, + height=0.5, + label=string, + pos="705.87,18", + width=0.8403]; + "data set version" -> "node property" [color=blue, + label="node property", + lp="790.94,61", + pos="e,717.25,34.718 829.35,96.085 804.15,90.822 775.16,82.161 751.73,68 740.97,61.498 731.21,51.726 723.49,42.542", + style=solid]; + iri [color=blue, + height=0.5, + label="iri type", + pos="789.87,18", + width=0.9834]; + "data set version" -> iri [color=blue, + label=iri, + lp="851.09,61", + pos="e,807.7,33.643 868.04,86.597 852.85,73.268 831.78,54.781 815.35,40.357", + style=solid]; + synonym [color=blue, + height=0.5, + label="label type", + pos="887.87,18", + width=1.2425]; + "data set version" -> synonym [color=blue, + label=synonym, + lp="913.54,61", + pos="e,887.87,36.212 887.87,85.762 887.87,74.36 887.87,59.434 887.87,46.494", + style=solid]; + "full name" [color=blue, + height=0.5, + label="label type", + pos="994.87,18", + width=1.2425]; + "data set version" -> "full name" [color=blue, + label="full name", + lp="985.5,61", + pos="e,978.73,35.042 915.15,87.571 924.22,81.736 934.21,74.897 942.87,68 952.72,60.154 962.85,50.758 971.53,42.24", + style=solid]; + description [color=blue, + height=0.5, + label="narrative text", + pos="1114.9,18", + width=1.5834]; + "data set version" -> description [color=blue, + label=description, + lp="1078,61", + pos="e,1086.9,33.937 937.84,92.344 961.8,86.151 990.7,77.79 1015.9,68 1037.1,59.76 1059.8,48.487 1078.1,38.73", + style=solid]; + "systematic synonym" [color=blue, + height=0.5, + label="label type", + pos="1234.9,18", + width=1.2425]; + "data set version" -> "systematic synonym" [color=blue, + label="systematic synonym", + lp="1211.8,61", + pos="e,1206,32.069 949.33,98.034 995.03,92.671 1058.6,83.243 1112.9,68 1141.7,59.894 1173,46.997 1196.6,36.332", + style=solid]; + title [color=blue, + height=0.5, + label=string, + pos="1327.9,18", + width=0.8403]; + "data set version" -> title [color=blue, + label=title, + lp="1304.8,61", + pos="e,1314.8,34.514 952.94,102.87 1047.4,100.39 1217.2,92.559 1272.9,68 1286.1,62.163 1298.3,51.857 1307.8,42.113", + style=solid]; + "source data file" [color=blue, + height=0.5, + label="data file", + pos="1414.9,18", + width=1.0652]; + "data set version" -> "source data file" [color=blue, + label="source data file", + lp="1395.2,61", + pos="e,1392.9,32.827 952.87,101.76 1056.1,97.668 1252.9,87.546 1319.9,68 1342.6,61.378 1366.1,49.038 1384.1,38.274", + style=solid]; + versionOf [color=blue, + height=0.5, + label="data set", + pos="1507.9,18", + width=1.0242]; + "data set version" -> versionOf [color=blue, + label=versionOf, + lp="1495.9,61", + pos="e,1491.9,34.431 952.64,101.89 1089,97.129 1397.1,84.687 1441.9,68 1457.5,62.169 1472.6,51.332 1484.3,41.233", + style=solid]; + type [color=blue, + height=0.5, + label=string, + pos="1592.9,18", + width=0.8403]; + "data set version" -> type [color=blue, + label=type, + lp="1565.9,61", + pos="e,1578,33.749 952.84,102.52 1104.9,98.745 1475,87.645 1527.9,68 1543.7,62.115 1558.8,50.948 1570.5,40.657", + style=solid]; + distribution [color=blue, + height=0.5, + label="distribution level", + pos="1711.9,18", + width=1.9523]; + "data set version" -> distribution [color=blue, + label=distribution, + lp="1662.1,61", + pos="e,1679.1,33.936 952.95,103.23 1101.7,101.06 1463,93.264 1581.9,68 1612.3,61.534 1644.9,48.951 1669.9,38.026", + style=solid]; +} diff --git a/graphviz/data_set_version.svg b/graphviz/data_set_version.svg new file mode 100644 index 0000000000..0477b55133 --- /dev/null +++ b/graphviz/data_set_version.svg @@ -0,0 +1,240 @@ + + + + + + +%3 + + + +data set version + +data set version + + + +data set + +data set + + + +data set version->data set + + +is_a + + + +id + +identifier type + + + +data set version->id + + +id + + + +name + +label type + + + +data set version->name + + +name + + + +category + +iri type + + + +data set version->category + + +category + + + +related to + +named thing + + + +data set version->related to + + +related to + + + +interacts with + +named thing + + + +data set version->interacts with + + +interacts with + + + +node property + +string + + + +data set version->node property + + +node property + + + +iri + +iri type + + + +data set version->iri + + +iri + + + +synonym + +label type + + + +data set version->synonym + + +synonym + + + +full name + +label type + + + +data set version->full name + + +full name + + + +description + +narrative text + + + +data set version->description + + +description + + + +systematic synonym + +label type + + + +data set version->systematic synonym + + +systematic synonym + + + +title + +string + + + +data set version->title + + +title + + + +source data file + +data file + + + +data set version->source data file + + +source data file + + + +versionOf + +data set + + + +data set version->versionOf + + +versionOf + + + +type + +string + + + +data set version->type + + +type + + + +distribution + +distribution level + + + +data set version->distribution + + +distribution + + + diff --git a/graphviz/distribution_level.gv b/graphviz/distribution_level.gv new file mode 100644 index 0000000000..ec3f3ca2ee --- /dev/null +++ b/graphviz/distribution_level.gv @@ -0,0 +1,185 @@ +digraph { + graph [bb="0,0,1918.4,122"]; + node [label="\N"]; + "distribution level" [height=0.5, + label="distribution level", + pos="998.12,104", + width=1.9523]; + "data set version" [height=0.5, + pos="65.115,18", + width=1.8088]; + "distribution level" -> "data set version" [label=is_a, + lp="332.39,61", + pos="e,113.84,30.142 927.65,103.09 804.25,100.87 541.16,93.324 320.56,68 239.64,58.711 219.85,52.623 140.12,36 134.79,34.89 129.27,33.679 \ +123.74,32.427"]; + id [color=blue, + height=0.5, + label="identifier type", + pos="208.12,18", + width=1.652]; + "distribution level" -> id [color=blue, + label=id, + lp="421.56,61", + pos="e,250.5,30.687 928.47,101.14 796.01,95.453 512.37,82.075 415.23,68 361.68,60.241 301.71,45.025 260.13,33.407", + style=solid]; + name [color=blue, + height=0.5, + label="label type", + pos="330.12,18", + width=1.2425]; + "distribution level" -> name [color=blue, + label=name, + lp="495.27,61", + pos="e,361.31,31.007 928.33,101.34 807.36,96.368 563.63,84.633 479.8,68 442.01,60.503 400.58,46.158 370.9,34.749", + style=solid]; + category [color=blue, + height=0.5, + label="iri type", + pos="428.12,18", + width=0.9834]; + "distribution level" -> category [color=blue, + label=category, + lp="582.21,61", + pos="e,453.76,30.498 928.72,100.66 822.99,95.165 626.59,83.303 557.92,68 524.69,60.594 488.69,46.18 463.05,34.723", + style=solid]; + "related to" [color=blue, + height=0.5, + label="named thing", + pos="535.12,18", + width=1.5019]; + "distribution level" -> "related to" [color=blue, + label="related to", + lp="675.35,61", + pos="e,563.61,33.542 929.68,99.491 843.36,93.363 700.01,81.597 648.64,68 622.35,61.039 594.36,48.776 572.76,38.136", + style=solid]; + "interacts with" [color=blue, + height=0.5, + label="named thing", + pos="661.12,18", + width=1.5019]; + "distribution level" -> "interacts with" [color=blue, + label="interacts with", + lp="767.02,61", + pos="e,678.93,35.259 930.66,98.889 863,93.07 763.87,82.463 728.3,68 713.2,61.859 698.44,51.506 686.62,41.808", + style=solid]; + "node property" [color=blue, + height=0.5, + label=string, + pos="763.12,18", + width=0.8403]; + "distribution level" -> "node property" [color=blue, + label="node property", + lp="871.19,61", + pos="e,779.7,33.114 933.84,96.429 902.19,91.131 864.03,82.344 831.97,68 816.09,60.891 800.24,49.736 787.76,39.764", + style=solid]; + iri [color=blue, + height=0.5, + label="iri type", + pos="847.12,18", + width=0.9834]; + "distribution level" -> iri [color=blue, + label=iri, + lp="938.34,61", + pos="e,871.17,31.698 969,87.418 943.55,72.923 906.61,51.887 880.08,36.776", + style=solid]; + synonym [color=blue, + height=0.5, + label="label type", + pos="945.12,18", + width=1.2425]; + "distribution level" -> synonym [color=blue, + label=synonym, + lp="1000.8,61", + pos="e,955.9,35.502 987.13,86.181 979.69,74.109 969.73,57.948 961.38,44.39", + style=solid]; + "full name" [color=blue, + height=0.5, + label="label type", + pos="1052.1,18", + width=1.2425]; + "distribution level" -> "full name" [color=blue, + label="full name", + lp="1064.7,61", + pos="e,1045.7,36.278 1015.9,86.209 1020.9,80.664 1026.1,74.334 1030.1,68 1034.5,61.119 1038.5,53.201 1041.7,45.726", + style=solid]; + description [color=blue, + height=0.5, + label="narrative text", + pos="1172.1,18", + width=1.5834]; + "distribution level" -> description [color=blue, + label=description, + lp="1151.2,61", + pos="e,1149.3,34.709 1042.4,89.868 1059.3,83.902 1078.4,76.388 1095.1,68 1110.8,60.133 1127.2,49.804 1140.8,40.577", + style=solid]; + "systematic synonym" [color=blue, + height=0.5, + label="label type", + pos="1292.1,18", + width=1.2425]; + "distribution level" -> "systematic synonym" [color=blue, + label="systematic synonym", + lp="1279.1,61", + pos="e,1265.9,32.664 1061.4,95.95 1098.3,90.248 1145.5,81.229 1186.1,68 1210.5,60.055 1236.6,47.814 1256.7,37.432", + style=solid]; + title [color=blue, + height=0.5, + label=string, + pos="1385.1,18", + width=0.8403]; + "distribution level" -> title [color=blue, + label=title, + lp="1369,61", + pos="e,1374.7,34.921 1068.5,102.49 1154.5,99.625 1294.2,91.42 1340.1,68 1351.4,62.257 1361.2,52.427 1368.7,42.995", + style=solid]; + "source data file" [color=blue, + height=0.5, + label="data file", + pos="1472.1,18", + width=1.0652]; + "distribution level" -> "source data file" [color=blue, + label="source data file", + lp="1457.5,61", + pos="e,1451.2,33.258 1067.5,101.04 1162.2,96.39 1326.9,86.004 1384.1,68 1404.9,61.459 1426.2,49.519 1442.6,38.947", + style=solid]; + versionOf [color=blue, + height=0.5, + label="data set", + pos="1565.1,18", + width=1.0242]; + "distribution level" -> versionOf [color=blue, + label=versionOf, + lp="1557.1,61", + pos="e,1550.3,34.637 1067.8,101.39 1197.1,96.196 1464.6,83.715 1504.1,68 1518.7,62.213 1532.4,51.631 1543.1,41.687", + style=solid]; + type [color=blue, + height=0.5, + label=string, + pos="1650.1,18", + width=0.8403]; + "distribution level" -> type [color=blue, + label=type, + lp="1626.2,61", + pos="e,1635.8,34.203 1068.1,102.15 1214.1,97.953 1541.7,86.577 1589.1,68 1603.9,62.207 1617.8,51.414 1628.6,41.335", + style=solid]; + distribution [color=blue, + height=0.5, + label="distribution level", + pos="1769.1,18", + width=1.9523]; + "distribution level" -> distribution [color=blue, + label=distribution, + lp="1721.4,61", + pos="e,1736.9,34.027 1068.3,102.89 1211.9,100.17 1534.5,91.551 1642.1,68 1671.6,61.538 1703.3,49.1 1727.6,38.247", + style=solid]; + downloadURL [color=blue, + height=0.5, + label=string, + pos="1888.1,18", + width=0.8403]; + "distribution level" -> downloadURL [color=blue, + label=downloadURL, + lp="1846.7,61", + pos="e,1864.9,29.762 1068.4,103.3 1230.7,101.27 1627.4,93.75 1758.1,68 1792.6,61.204 1829.9,45.995 1855.6,34.124", + style=solid]; +} diff --git a/graphviz/distribution_level.svg b/graphviz/distribution_level.svg new file mode 100644 index 0000000000..7dc81c5067 --- /dev/null +++ b/graphviz/distribution_level.svg @@ -0,0 +1,253 @@ + + + + + + +%3 + + + +distribution level + +distribution level + + + +data set version + +data set version + + + +distribution level->data set version + + +is_a + + + +id + +identifier type + + + +distribution level->id + + +id + + + +name + +label type + + + +distribution level->name + + +name + + + +category + +iri type + + + +distribution level->category + + +category + + + +related to + +named thing + + + +distribution level->related to + + +related to + + + +interacts with + +named thing + + + +distribution level->interacts with + + +interacts with + + + +node property + +string + + + +distribution level->node property + + +node property + + + +iri + +iri type + + + +distribution level->iri + + +iri + + + +synonym + +label type + + + +distribution level->synonym + + +synonym + + + +full name + +label type + + + +distribution level->full name + + +full name + + + +description + +narrative text + + + +distribution level->description + + +description + + + +systematic synonym + +label type + + + +distribution level->systematic synonym + + +systematic synonym + + + +title + +string + + + +distribution level->title + + +title + + + +source data file + +data file + + + +distribution level->source data file + + +source data file + + + +versionOf + +data set + + + +distribution level->versionOf + + +versionOf + + + +type + +string + + + +distribution level->type + + +type + + + +distribution + +distribution level + + + +distribution level->distribution + + +distribution + + + +downloadURL + +string + + + +distribution level->downloadURL + + +downloadURL + + + diff --git a/graphviz/source_file.gv b/graphviz/source_file.gv new file mode 100644 index 0000000000..8021487556 --- /dev/null +++ b/graphviz/source_file.gv @@ -0,0 +1,145 @@ +digraph { + graph [bb="0,0,1466.3,122"]; + node [label="\N"]; + "source file" [height=0.5, + label="source file", + pos="757.35,104", + width=1.2972]; + "data file" [height=0.5, + pos="38.347,18", + width=1.0652]; + "source file" -> "data file" [label=is_a, + lp="270.62,61", + pos="e,67.524,29.87 710.78,102.37 622.38,98.891 424.27,89.26 258.8,68 181.48,58.066 161.45,56.877 86.347,36 83.357,35.169 80.29,34.23 \ +77.224,33.228"]; + id [color=blue, + height=0.5, + label="identifier type", + pos="154.35,18", + width=1.652]; + "source file" -> id [color=blue, + label=id, + lp="356.79,61", + pos="e,196.38,30.88 710.67,102.25 634.71,98.862 479.84,89.745 350.46,68 300.79,59.652 245.25,44.975 205.99,33.675", + style=solid]; + name [color=blue, + height=0.5, + label="label type", + pos="276.35,18", + width=1.2425]; + "source file" -> name [color=blue, + label=name, + lp="425.51,61", + pos="e,305.93,31.561 710.66,102.92 643.38,100.52 515.67,92.801 410.03,68 377.16,60.283 341.4,46.614 315.15,35.517", + style=solid]; + category [color=blue, + height=0.5, + label="iri type", + pos="374.35,18", + width=0.9834]; + "source file" -> category [color=blue, + label=category, + lp="503.44,61", + pos="e,397.63,31.758 710.64,102.45 654.61,99.568 558.33,91.36 479.15,68 453.67,60.48 426.64,47.448 406.42,36.574", + style=solid]; + "related to" [color=blue, + height=0.5, + label="named thing", + pos="481.35,18", + width=1.5019]; + "source file" -> "related to" [color=blue, + label="related to", + lp="583.58,61", + pos="e,501.86,34.93 710.9,101.02 669.3,97.115 607.26,88.195 556.87,68 540.35,61.377 523.67,50.834 510.21,41.133", + style=solid]; + "interacts with" [color=blue, + height=0.5, + label="named thing", + pos="607.35,18", + width=1.5019]; + "source file" -> "interacts with" [color=blue, + label="interacts with", + lp="660.25,61", + pos="e,608.2,36.439 713.83,97.252 679.27,91.046 634.63,80.866 621.54,68 615.65,62.219 612.16,54.192 610.11,46.259", + style=solid]; + "node property" [color=blue, + height=0.5, + label=string, + pos="709.35,18", + width=0.8403]; + "source file" -> "node property" [color=blue, + label="node property", + lp="743.42,61", + pos="e,702.85,35.599 726.61,90.29 717.76,84.721 709.17,77.352 704.21,68 700.61,61.216 700.09,53.188 700.96,45.573", + style=solid]; + iri [color=blue, + height=0.5, + label="iri type", + pos="793.35,18", + width=0.9834]; + "source file" -> iri [color=blue, + label=iri, + lp="797.57,61", + pos="e,793.13,36.216 774.19,86.949 778.84,81.331 783.41,74.776 786.35,68 789.25,61.299 791,53.664 792.05,46.412", + style=solid]; + synonym [color=blue, + height=0.5, + label="label type", + pos="891.35,18", + width=1.2425]; + "source file" -> synonym [color=blue, + label=synonym, + lp="859.02,61", + pos="e,867.26,33.458 781.61,88.426 803.15,74.606 834.79,54.298 858.57,39.036", + style=solid]; + "full name" [color=blue, + height=0.5, + label="label type", + pos="998.35,18", + width=1.2425]; + "source file" -> "full name" [color=blue, + label="full name", + lp="948.98,61", + pos="e,970.37,32.208 797.41,94.741 823.62,88.259 858.41,78.841 888.35,68 913.15,59.019 940.12,46.798 961.16,36.686", + style=solid]; + description [color=blue, + height=0.5, + label="narrative text", + pos="1118.3,18", + width=1.5834]; + "source file" -> description [color=blue, + label=description, + lp="1053.5,61", + pos="e,1083.8,32.455 802.5,99.156 847.71,93.728 919.05,83.59 979.35,68 1011.7,59.623 1047.2,46.797 1074.2,36.233", + style=solid]; + "systematic synonym" [color=blue, + height=0.5, + label="label type", + pos="1238.3,18", + width=1.2425]; + "source file" -> "systematic synonym" [color=blue, + label="systematic synonym", + lp="1196.3,61", + pos="e,1206.7,30.745 803.9,102.07 868.42,98.684 988.39,89.833 1088.3,68 1125.9,59.79 1167.3,45.583 1197.1,34.406", + style=solid]; + "source version" [color=blue, + height=0.5, + label=string, + pos="1335.3,18", + width=0.8403]; + "source file" -> "source version" [color=blue, + label="source version", + lp="1328,61", + pos="e,1317.8,32.94 804.37,103.56 912.15,102.08 1174.1,95.662 1257.3,68 1276.4,61.68 1295.3,49.673 1309.8,39.01", + style=solid]; + retrievedOn [color=blue, + height=0.5, + label=date, + pos="1439.3,18", + width=0.75]; + "source file" -> retrievedOn [color=blue, + label=retrievedOn, + lp="1431.8,61", + pos="e,1424.4,33.258 804.19,102.81 938.64,99.169 1319.5,87.266 1372.3,68 1388.7,62.019 1404.5,50.625 1416.6,40.222", + style=solid]; +} diff --git a/graphviz/source_file.svg b/graphviz/source_file.svg new file mode 100644 index 0000000000..2a4517c922 --- /dev/null +++ b/graphviz/source_file.svg @@ -0,0 +1,201 @@ + + + + + + +%3 + + + +source file + +source file + + + +data file + +data file + + + +source file->data file + + +is_a + + + +id + +identifier type + + + +source file->id + + +id + + + +name + +label type + + + +source file->name + + +name + + + +category + +iri type + + + +source file->category + + +category + + + +related to + +named thing + + + +source file->related to + + +related to + + + +interacts with + +named thing + + + +source file->interacts with + + +interacts with + + + +node property + +string + + + +source file->node property + + +node property + + + +iri + +iri type + + + +source file->iri + + +iri + + + +synonym + +label type + + + +source file->synonym + + +synonym + + + +full name + +label type + + + +source file->full name + + +full name + + + +description + +narrative text + + + +source file->description + + +description + + + +systematic synonym + +label type + + + +source file->systematic synonym + + +systematic synonym + + + +source version + +string + + + +source file->source version + + +source version + + + +retrievedOn + +date + + + +source file->retrievedOn + + +retrievedOn + + + diff --git a/java/BiolinkModel.java b/java/BiolinkModel.java index a1efee4c6d..b97debff29 100644 --- a/java/BiolinkModel.java +++ b/java/BiolinkModel.java @@ -44,11 +44,16 @@ "ClinicalTrial", "CodingSequence", "ConfidenceLevel", + "DataFile", + "DataSet", + "DataSetSummary", + "DataSetVersion", "Device", "Disease", "DiseaseOrPhenotypicFeature", "DiseaseOrPhenotypicFeatureAssociationToLocationAssociation", "DiseaseToPhenotypicFeatureAssociation", + "DistributionLevel", "Drug", "DrugExposure", "Environment", @@ -128,6 +133,7 @@ "SequenceFeatureRelationship", "SequenceVariant", "SeverityValue", + "SourceFile", "SpecificityQuantifier", "Transcript", "TranscriptToGeneRelationship", @@ -400,6 +406,42 @@ public class BiolinkModel { @JsonProperty("ConfidenceLevel") @JsonPropertyDescription("Level of confidence in a statement") private ConfidenceLevel confidenceLevel; + /** + * DataFile + *

+ * + * + */ + @JsonProperty("DataFile") + @JsonPropertyDescription("") + private DataFile dataFile; + /** + * DataSet + *

+ * + * + */ + @JsonProperty("DataSet") + @JsonPropertyDescription("") + private DataSet dataSet; + /** + * DataSetSummary + *

+ * + * + */ + @JsonProperty("DataSetSummary") + @JsonPropertyDescription("") + private DataSetSummary dataSetSummary; + /** + * DataSetVersion + *

+ * + * + */ + @JsonProperty("DataSetVersion") + @JsonPropertyDescription("") + private DataSetVersion dataSetVersion; /** * Device *

@@ -445,6 +487,15 @@ public class BiolinkModel { @JsonProperty("DiseaseToPhenotypicFeatureAssociation") @JsonPropertyDescription("An association between a disease and a phenotypic feature in which the phenotypic feature is associated with the disease in some way") private DiseaseToPhenotypicFeatureAssociation diseaseToPhenotypicFeatureAssociation; + /** + * DistributionLevel + *

+ * + * + */ + @JsonProperty("DistributionLevel") + @JsonPropertyDescription("") + private DistributionLevel distributionLevel; /** * Drug *

@@ -1156,6 +1207,15 @@ public class BiolinkModel { @JsonProperty("SeverityValue") @JsonPropertyDescription("describes the severity of a phenotypic feature or disease") private SeverityValue severityValue; + /** + * SourceFile + *

+ * + * + */ + @JsonProperty("SourceFile") + @JsonPropertyDescription("") + private SourceFile sourceFile; /** * SpecificityQuantifier *

@@ -1867,6 +1927,94 @@ public void setConfidenceLevel(ConfidenceLevel confidenceLevel) { this.confidenceLevel = confidenceLevel; } + /** + * DataFile + *

+ * + * + */ + @JsonProperty("DataFile") + public DataFile getDataFile() { + return dataFile; + } + + /** + * DataFile + *

+ * + * + */ + @JsonProperty("DataFile") + public void setDataFile(DataFile dataFile) { + this.dataFile = dataFile; + } + + /** + * DataSet + *

+ * + * + */ + @JsonProperty("DataSet") + public DataSet getDataSet() { + return dataSet; + } + + /** + * DataSet + *

+ * + * + */ + @JsonProperty("DataSet") + public void setDataSet(DataSet dataSet) { + this.dataSet = dataSet; + } + + /** + * DataSetSummary + *

+ * + * + */ + @JsonProperty("DataSetSummary") + public DataSetSummary getDataSetSummary() { + return dataSetSummary; + } + + /** + * DataSetSummary + *

+ * + * + */ + @JsonProperty("DataSetSummary") + public void setDataSetSummary(DataSetSummary dataSetSummary) { + this.dataSetSummary = dataSetSummary; + } + + /** + * DataSetVersion + *

+ * + * + */ + @JsonProperty("DataSetVersion") + public DataSetVersion getDataSetVersion() { + return dataSetVersion; + } + + /** + * DataSetVersion + *

+ * + * + */ + @JsonProperty("DataSetVersion") + public void setDataSetVersion(DataSetVersion dataSetVersion) { + this.dataSetVersion = dataSetVersion; + } + /** * Device *

@@ -1977,6 +2125,28 @@ public void setDiseaseToPhenotypicFeatureAssociation(DiseaseToPhenotypicFeatureA this.diseaseToPhenotypicFeatureAssociation = diseaseToPhenotypicFeatureAssociation; } + /** + * DistributionLevel + *

+ * + * + */ + @JsonProperty("DistributionLevel") + public DistributionLevel getDistributionLevel() { + return distributionLevel; + } + + /** + * DistributionLevel + *

+ * + * + */ + @JsonProperty("DistributionLevel") + public void setDistributionLevel(DistributionLevel distributionLevel) { + this.distributionLevel = distributionLevel; + } + /** * Drug *

@@ -3715,6 +3885,28 @@ public void setSeverityValue(SeverityValue severityValue) { this.severityValue = severityValue; } + /** + * SourceFile + *

+ * + * + */ + @JsonProperty("SourceFile") + public SourceFile getSourceFile() { + return sourceFile; + } + + /** + * SourceFile + *

+ * + * + */ + @JsonProperty("SourceFile") + public void setSourceFile(SourceFile sourceFile) { + this.sourceFile = sourceFile; + } + /** * SpecificityQuantifier *

@@ -3893,12 +4085,12 @@ public void setZygosity(Zygosity zygosity) { @Override public String toString() { - return new ToStringBuilder(this).append("activityAndBehavior", activityAndBehavior).append("anatomicalEntity", anatomicalEntity).append("anatomicalEntityToAnatomicalEntityAssociation", anatomicalEntityToAnatomicalEntityAssociation).append("anatomicalEntityToAnatomicalEntityOntogenicAssociation", anatomicalEntityToAnatomicalEntityOntogenicAssociation).append("anatomicalEntityToAnatomicalEntityPartOfAssociation", anatomicalEntityToAnatomicalEntityPartOfAssociation).append("association", association).append("attribute", attribute).append("biologicalProcess", biologicalProcess).append("biologicalProcessOrActivity", biologicalProcessOrActivity).append("biologicalSex", biologicalSex).append("biosample", biosample).append("biosampleToDiseaseOrPhenotypicFeatureAssociation", biosampleToDiseaseOrPhenotypicFeatureAssociation).append("carbohydrate", carbohydrate).append("_case", _case).append("caseToPhenotypicFeatureAssociation", caseToPhenotypicFeatureAssociation).append("cell", cell).append("cellLine", cellLine).append("cellLineToDiseaseOrPhenotypicFeatureAssociation", cellLineToDiseaseOrPhenotypicFeatureAssociation).append("cellularComponent", cellularComponent).append("chemicalSubstance", chemicalSubstance).append("chemicalToDiseaseOrPhenotypicFeatureAssociation", chemicalToDiseaseOrPhenotypicFeatureAssociation).append("chemicalToGeneAssociation", chemicalToGeneAssociation).append("chemicalToPathwayAssociation", chemicalToPathwayAssociation).append("clinicalEntity", clinicalEntity).append("clinicalIntervention", clinicalIntervention).append("clinicalModifier", clinicalModifier).append("clinicalTrial", clinicalTrial).append("codingSequence", codingSequence).append("confidenceLevel", confidenceLevel).append("device", device).append("disease", disease).append("diseaseOrPhenotypicFeature", diseaseOrPhenotypicFeature).append("diseaseOrPhenotypicFeatureAssociationToLocationAssociation", diseaseOrPhenotypicFeatureAssociationToLocationAssociation).append("diseaseToPhenotypicFeatureAssociation", diseaseToPhenotypicFeatureAssociation).append("drug", drug).append("drugExposure", drugExposure).append("environment", environment).append("environmentToPhenotypicFeatureAssociation", environmentToPhenotypicFeatureAssociation).append("environmentalFeature", environmentalFeature).append("environmentalProcess", environmentalProcess).append("evidenceType", evidenceType).append("exon", exon).append("exonToTranscriptRelationship", exonToTranscriptRelationship).append("frequencyQualifierMixin", frequencyQualifierMixin).append("frequencyQuantifier", frequencyQuantifier).append("frequencyValue", frequencyValue).append("functionalAssociation", functionalAssociation).append("gene", gene).append("geneAsAModelOfDiseaseAssociation", geneAsAModelOfDiseaseAssociation).append("geneFamily", geneFamily).append("geneHasVariantThatContributesToDiseaseAssociation", geneHasVariantThatContributesToDiseaseAssociation).append("geneOntologyClass", geneOntologyClass).append("geneOrGeneProduct", geneOrGeneProduct).append("geneProduct", geneProduct).append("geneRegulatoryRelationship", geneRegulatoryRelationship).append("geneToDiseaseAssociation", geneToDiseaseAssociation).append("geneToExpressionSiteAssociation", geneToExpressionSiteAssociation).append("geneToGeneHomologyAssociation", geneToGeneHomologyAssociation).append("geneToGeneProductRelationship", geneToGeneProductRelationship).append("geneToGoTermAssociation", geneToGoTermAssociation).append("geneToPhenotypicFeatureAssociation", geneToPhenotypicFeatureAssociation).append("genome", genome).append("genomicEntity", genomicEntity).append("genomicSequenceLocalization", genomicSequenceLocalization).append("genotype", genotype).append("genotypeToGeneAssociation", genotypeToGeneAssociation).append("genotypeToGenotypePartAssociation", genotypeToGenotypePartAssociation).append("genotypeToPhenotypicFeatureAssociation", genotypeToPhenotypicFeatureAssociation).append("genotypeToVariantAssociation", genotypeToVariantAssociation).append("genotypicSex", genotypicSex).append("geographicLocation", geographicLocation).append("geographicLocationAtTime", geographicLocationAtTime).append("grossAnatomicalStructure", grossAnatomicalStructure).append("haplotype", haplotype).append("individualOrganism", individualOrganism).append("lifeStage", lifeStage).append("macromolecularComplex", macromolecularComplex).append("macromolecularMachine", macromolecularMachine).append("macromolecularMachineToBiologicalProcessAssociation", macromolecularMachineToBiologicalProcessAssociation).append("macromolecularMachineToCellularComponentAssociation", macromolecularMachineToCellularComponentAssociation).append("macromolecularMachineToMolecularActivityAssociation", macromolecularMachineToMolecularActivityAssociation).append("metabolite", metabolite).append("microRNA", microRNA).append("molecularActivity", molecularActivity).append("molecularEntity", molecularEntity).append("namedThing", namedThing).append("noncodingRNAProduct", noncodingRNAProduct).append("occurrent", occurrent).append("onset", onset).append("ontologyClass", ontologyClass).append("organismTaxon", organismTaxon).append("pairwiseGeneToGeneInteraction", pairwiseGeneToGeneInteraction).append("pathognomonicityQuantifier", pathognomonicityQuantifier).append("pathway", pathway).append("phenomenon", phenomenon).append("phenotypicFeature", phenotypicFeature).append("phenotypicSex", phenotypicSex).append("physiologicalProcess", physiologicalProcess).append("planetaryEntity", planetaryEntity).append("populationOfIndividualOrganisms", populationOfIndividualOrganisms).append("populationToPopulationAssociation", populationToPopulationAssociation).append("procedure", procedure).append("protein", protein).append("proteinIsoform", proteinIsoform).append("provider", provider).append("publication", publication).append("rNAProduct", rNAProduct).append("rNAProductIsoform", rNAProductIsoform).append("relationshipType", relationshipType).append("sensitivityQuantifier", sensitivityQuantifier).append("sequenceFeatureRelationship", sequenceFeatureRelationship).append("sequenceVariant", sequenceVariant).append("severityValue", severityValue).append("specificityQuantifier", specificityQuantifier).append("transcript", transcript).append("transcriptToGeneRelationship", transcriptToGeneRelationship).append("treatment", treatment).append("variantToDiseaseAssociation", variantToDiseaseAssociation).append("variantToPhenotypicFeatureAssociation", variantToPhenotypicFeatureAssociation).append("variantToPopulationAssociation", variantToPopulationAssociation).append("zygosity", zygosity).toString(); + return new ToStringBuilder(this).append("activityAndBehavior", activityAndBehavior).append("anatomicalEntity", anatomicalEntity).append("anatomicalEntityToAnatomicalEntityAssociation", anatomicalEntityToAnatomicalEntityAssociation).append("anatomicalEntityToAnatomicalEntityOntogenicAssociation", anatomicalEntityToAnatomicalEntityOntogenicAssociation).append("anatomicalEntityToAnatomicalEntityPartOfAssociation", anatomicalEntityToAnatomicalEntityPartOfAssociation).append("association", association).append("attribute", attribute).append("biologicalProcess", biologicalProcess).append("biologicalProcessOrActivity", biologicalProcessOrActivity).append("biologicalSex", biologicalSex).append("biosample", biosample).append("biosampleToDiseaseOrPhenotypicFeatureAssociation", biosampleToDiseaseOrPhenotypicFeatureAssociation).append("carbohydrate", carbohydrate).append("_case", _case).append("caseToPhenotypicFeatureAssociation", caseToPhenotypicFeatureAssociation).append("cell", cell).append("cellLine", cellLine).append("cellLineToDiseaseOrPhenotypicFeatureAssociation", cellLineToDiseaseOrPhenotypicFeatureAssociation).append("cellularComponent", cellularComponent).append("chemicalSubstance", chemicalSubstance).append("chemicalToDiseaseOrPhenotypicFeatureAssociation", chemicalToDiseaseOrPhenotypicFeatureAssociation).append("chemicalToGeneAssociation", chemicalToGeneAssociation).append("chemicalToPathwayAssociation", chemicalToPathwayAssociation).append("clinicalEntity", clinicalEntity).append("clinicalIntervention", clinicalIntervention).append("clinicalModifier", clinicalModifier).append("clinicalTrial", clinicalTrial).append("codingSequence", codingSequence).append("confidenceLevel", confidenceLevel).append("dataFile", dataFile).append("dataSet", dataSet).append("dataSetSummary", dataSetSummary).append("dataSetVersion", dataSetVersion).append("device", device).append("disease", disease).append("diseaseOrPhenotypicFeature", diseaseOrPhenotypicFeature).append("diseaseOrPhenotypicFeatureAssociationToLocationAssociation", diseaseOrPhenotypicFeatureAssociationToLocationAssociation).append("diseaseToPhenotypicFeatureAssociation", diseaseToPhenotypicFeatureAssociation).append("distributionLevel", distributionLevel).append("drug", drug).append("drugExposure", drugExposure).append("environment", environment).append("environmentToPhenotypicFeatureAssociation", environmentToPhenotypicFeatureAssociation).append("environmentalFeature", environmentalFeature).append("environmentalProcess", environmentalProcess).append("evidenceType", evidenceType).append("exon", exon).append("exonToTranscriptRelationship", exonToTranscriptRelationship).append("frequencyQualifierMixin", frequencyQualifierMixin).append("frequencyQuantifier", frequencyQuantifier).append("frequencyValue", frequencyValue).append("functionalAssociation", functionalAssociation).append("gene", gene).append("geneAsAModelOfDiseaseAssociation", geneAsAModelOfDiseaseAssociation).append("geneFamily", geneFamily).append("geneHasVariantThatContributesToDiseaseAssociation", geneHasVariantThatContributesToDiseaseAssociation).append("geneOntologyClass", geneOntologyClass).append("geneOrGeneProduct", geneOrGeneProduct).append("geneProduct", geneProduct).append("geneRegulatoryRelationship", geneRegulatoryRelationship).append("geneToDiseaseAssociation", geneToDiseaseAssociation).append("geneToExpressionSiteAssociation", geneToExpressionSiteAssociation).append("geneToGeneHomologyAssociation", geneToGeneHomologyAssociation).append("geneToGeneProductRelationship", geneToGeneProductRelationship).append("geneToGoTermAssociation", geneToGoTermAssociation).append("geneToPhenotypicFeatureAssociation", geneToPhenotypicFeatureAssociation).append("genome", genome).append("genomicEntity", genomicEntity).append("genomicSequenceLocalization", genomicSequenceLocalization).append("genotype", genotype).append("genotypeToGeneAssociation", genotypeToGeneAssociation).append("genotypeToGenotypePartAssociation", genotypeToGenotypePartAssociation).append("genotypeToPhenotypicFeatureAssociation", genotypeToPhenotypicFeatureAssociation).append("genotypeToVariantAssociation", genotypeToVariantAssociation).append("genotypicSex", genotypicSex).append("geographicLocation", geographicLocation).append("geographicLocationAtTime", geographicLocationAtTime).append("grossAnatomicalStructure", grossAnatomicalStructure).append("haplotype", haplotype).append("individualOrganism", individualOrganism).append("lifeStage", lifeStage).append("macromolecularComplex", macromolecularComplex).append("macromolecularMachine", macromolecularMachine).append("macromolecularMachineToBiologicalProcessAssociation", macromolecularMachineToBiologicalProcessAssociation).append("macromolecularMachineToCellularComponentAssociation", macromolecularMachineToCellularComponentAssociation).append("macromolecularMachineToMolecularActivityAssociation", macromolecularMachineToMolecularActivityAssociation).append("metabolite", metabolite).append("microRNA", microRNA).append("molecularActivity", molecularActivity).append("molecularEntity", molecularEntity).append("namedThing", namedThing).append("noncodingRNAProduct", noncodingRNAProduct).append("occurrent", occurrent).append("onset", onset).append("ontologyClass", ontologyClass).append("organismTaxon", organismTaxon).append("pairwiseGeneToGeneInteraction", pairwiseGeneToGeneInteraction).append("pathognomonicityQuantifier", pathognomonicityQuantifier).append("pathway", pathway).append("phenomenon", phenomenon).append("phenotypicFeature", phenotypicFeature).append("phenotypicSex", phenotypicSex).append("physiologicalProcess", physiologicalProcess).append("planetaryEntity", planetaryEntity).append("populationOfIndividualOrganisms", populationOfIndividualOrganisms).append("populationToPopulationAssociation", populationToPopulationAssociation).append("procedure", procedure).append("protein", protein).append("proteinIsoform", proteinIsoform).append("provider", provider).append("publication", publication).append("rNAProduct", rNAProduct).append("rNAProductIsoform", rNAProductIsoform).append("relationshipType", relationshipType).append("sensitivityQuantifier", sensitivityQuantifier).append("sequenceFeatureRelationship", sequenceFeatureRelationship).append("sequenceVariant", sequenceVariant).append("severityValue", severityValue).append("sourceFile", sourceFile).append("specificityQuantifier", specificityQuantifier).append("transcript", transcript).append("transcriptToGeneRelationship", transcriptToGeneRelationship).append("treatment", treatment).append("variantToDiseaseAssociation", variantToDiseaseAssociation).append("variantToPhenotypicFeatureAssociation", variantToPhenotypicFeatureAssociation).append("variantToPopulationAssociation", variantToPopulationAssociation).append("zygosity", zygosity).toString(); } @Override public int hashCode() { - return new HashCodeBuilder().append(sequenceVariant).append(anatomicalEntityToAnatomicalEntityAssociation).append(confidenceLevel).append(chemicalToDiseaseOrPhenotypicFeatureAssociation).append(environmentalFeature).append(frequencyValue).append(rNAProduct).append(sequenceFeatureRelationship).append(carbohydrate).append(transcriptToGeneRelationship).append(genotypeToPhenotypicFeatureAssociation).append(chemicalToGeneAssociation).append(protein).append(biologicalProcessOrActivity).append(geneProduct).append(macromolecularMachineToCellularComponentAssociation).append(anatomicalEntityToAnatomicalEntityOntogenicAssociation).append(cellularComponent).append(specificityQuantifier).append(gene).append(pairwiseGeneToGeneInteraction).append(genotypeToGenotypePartAssociation).append(geographicLocationAtTime).append(macromolecularMachineToMolecularActivityAssociation).append(molecularActivity).append(grossAnatomicalStructure).append(individualOrganism).append(cellLine).append(device).append(geneOntologyClass).append(treatment).append(geographicLocation).append(association).append(phenomenon).append(cell).append(transcript).append(geneToDiseaseAssociation).append(attribute).append(clinicalModifier).append(codingSequence).append(environmentToPhenotypicFeatureAssociation).append(_case).append(procedure).append(environmentalProcess).append(onset).append(noncodingRNAProduct).append(chemicalSubstance).append(genome).append(genotypeToGeneAssociation).append(zygosity).append(biosampleToDiseaseOrPhenotypicFeatureAssociation).append(frequencyQualifierMixin).append(lifeStage).append(ontologyClass).append(pathway).append(sensitivityQuantifier).append(frequencyQuantifier).append(variantToDiseaseAssociation).append(geneOrGeneProduct).append(anatomicalEntityToAnatomicalEntityPartOfAssociation).append(macromolecularMachine).append(geneRegulatoryRelationship).append(geneAsAModelOfDiseaseAssociation).append(drug).append(biologicalProcess).append(macromolecularComplex).append(namedThing).append(severityValue).append(caseToPhenotypicFeatureAssociation).append(publication).append(geneHasVariantThatContributesToDiseaseAssociation).append(exonToTranscriptRelationship).append(biosample).append(diseaseOrPhenotypicFeatureAssociationToLocationAssociation).append(molecularEntity).append(geneToExpressionSiteAssociation).append(geneToGoTermAssociation).append(populationToPopulationAssociation).append(drugExposure).append(diseaseToPhenotypicFeatureAssociation).append(chemicalToPathwayAssociation).append(genotypeToVariantAssociation).append(genotype).append(genomicSequenceLocalization).append(geneToGeneHomologyAssociation).append(pathognomonicityQuantifier).append(genotypicSex).append(genomicEntity).append(clinicalTrial).append(activityAndBehavior).append(proteinIsoform).append(variantToPhenotypicFeatureAssociation).append(phenotypicFeature).append(cellLineToDiseaseOrPhenotypicFeatureAssociation).append(planetaryEntity).append(occurrent).append(phenotypicSex).append(macromolecularMachineToBiologicalProcessAssociation).append(rNAProductIsoform).append(metabolite).append(provider).append(organismTaxon).append(geneToGeneProductRelationship).append(physiologicalProcess).append(disease).append(haplotype).append(populationOfIndividualOrganisms).append(relationshipType).append(variantToPopulationAssociation).append(anatomicalEntity).append(clinicalEntity).append(functionalAssociation).append(biologicalSex).append(environment).append(clinicalIntervention).append(evidenceType).append(geneFamily).append(microRNA).append(geneToPhenotypicFeatureAssociation).append(diseaseOrPhenotypicFeature).append(exon).toHashCode(); + return new HashCodeBuilder().append(sequenceVariant).append(anatomicalEntityToAnatomicalEntityAssociation).append(confidenceLevel).append(chemicalToDiseaseOrPhenotypicFeatureAssociation).append(environmentalFeature).append(frequencyValue).append(rNAProduct).append(sequenceFeatureRelationship).append(carbohydrate).append(transcriptToGeneRelationship).append(genotypeToPhenotypicFeatureAssociation).append(chemicalToGeneAssociation).append(dataSetVersion).append(protein).append(biologicalProcessOrActivity).append(geneProduct).append(macromolecularMachineToCellularComponentAssociation).append(anatomicalEntityToAnatomicalEntityOntogenicAssociation).append(cellularComponent).append(specificityQuantifier).append(gene).append(pairwiseGeneToGeneInteraction).append(genotypeToGenotypePartAssociation).append(geographicLocationAtTime).append(macromolecularMachineToMolecularActivityAssociation).append(molecularActivity).append(grossAnatomicalStructure).append(individualOrganism).append(cellLine).append(device).append(geneOntologyClass).append(treatment).append(geographicLocation).append(association).append(phenomenon).append(cell).append(transcript).append(geneToDiseaseAssociation).append(attribute).append(dataSet).append(clinicalModifier).append(codingSequence).append(environmentToPhenotypicFeatureAssociation).append(_case).append(procedure).append(environmentalProcess).append(onset).append(noncodingRNAProduct).append(chemicalSubstance).append(genome).append(genotypeToGeneAssociation).append(zygosity).append(biosampleToDiseaseOrPhenotypicFeatureAssociation).append(frequencyQualifierMixin).append(lifeStage).append(ontologyClass).append(pathway).append(sensitivityQuantifier).append(frequencyQuantifier).append(variantToDiseaseAssociation).append(geneOrGeneProduct).append(anatomicalEntityToAnatomicalEntityPartOfAssociation).append(macromolecularMachine).append(geneRegulatoryRelationship).append(geneAsAModelOfDiseaseAssociation).append(sourceFile).append(drug).append(biologicalProcess).append(macromolecularComplex).append(namedThing).append(severityValue).append(caseToPhenotypicFeatureAssociation).append(publication).append(geneHasVariantThatContributesToDiseaseAssociation).append(exonToTranscriptRelationship).append(biosample).append(diseaseOrPhenotypicFeatureAssociationToLocationAssociation).append(molecularEntity).append(geneToExpressionSiteAssociation).append(geneToGoTermAssociation).append(populationToPopulationAssociation).append(drugExposure).append(diseaseToPhenotypicFeatureAssociation).append(chemicalToPathwayAssociation).append(genotypeToVariantAssociation).append(genotype).append(genomicSequenceLocalization).append(distributionLevel).append(geneToGeneHomologyAssociation).append(pathognomonicityQuantifier).append(genotypicSex).append(genomicEntity).append(clinicalTrial).append(activityAndBehavior).append(proteinIsoform).append(variantToPhenotypicFeatureAssociation).append(phenotypicFeature).append(cellLineToDiseaseOrPhenotypicFeatureAssociation).append(planetaryEntity).append(occurrent).append(phenotypicSex).append(macromolecularMachineToBiologicalProcessAssociation).append(rNAProductIsoform).append(metabolite).append(provider).append(organismTaxon).append(dataFile).append(geneToGeneProductRelationship).append(physiologicalProcess).append(disease).append(haplotype).append(populationOfIndividualOrganisms).append(relationshipType).append(variantToPopulationAssociation).append(dataSetSummary).append(anatomicalEntity).append(clinicalEntity).append(functionalAssociation).append(biologicalSex).append(environment).append(clinicalIntervention).append(evidenceType).append(geneFamily).append(microRNA).append(geneToPhenotypicFeatureAssociation).append(diseaseOrPhenotypicFeature).append(exon).toHashCode(); } @Override @@ -3910,7 +4102,7 @@ public boolean equals(Object other) { return false; } BiolinkModel rhs = ((BiolinkModel) other); - return new EqualsBuilder().append(sequenceVariant, rhs.sequenceVariant).append(anatomicalEntityToAnatomicalEntityAssociation, rhs.anatomicalEntityToAnatomicalEntityAssociation).append(confidenceLevel, rhs.confidenceLevel).append(chemicalToDiseaseOrPhenotypicFeatureAssociation, rhs.chemicalToDiseaseOrPhenotypicFeatureAssociation).append(environmentalFeature, rhs.environmentalFeature).append(frequencyValue, rhs.frequencyValue).append(rNAProduct, rhs.rNAProduct).append(sequenceFeatureRelationship, rhs.sequenceFeatureRelationship).append(carbohydrate, rhs.carbohydrate).append(transcriptToGeneRelationship, rhs.transcriptToGeneRelationship).append(genotypeToPhenotypicFeatureAssociation, rhs.genotypeToPhenotypicFeatureAssociation).append(chemicalToGeneAssociation, rhs.chemicalToGeneAssociation).append(protein, rhs.protein).append(biologicalProcessOrActivity, rhs.biologicalProcessOrActivity).append(geneProduct, rhs.geneProduct).append(macromolecularMachineToCellularComponentAssociation, rhs.macromolecularMachineToCellularComponentAssociation).append(anatomicalEntityToAnatomicalEntityOntogenicAssociation, rhs.anatomicalEntityToAnatomicalEntityOntogenicAssociation).append(cellularComponent, rhs.cellularComponent).append(specificityQuantifier, rhs.specificityQuantifier).append(gene, rhs.gene).append(pairwiseGeneToGeneInteraction, rhs.pairwiseGeneToGeneInteraction).append(genotypeToGenotypePartAssociation, rhs.genotypeToGenotypePartAssociation).append(geographicLocationAtTime, rhs.geographicLocationAtTime).append(macromolecularMachineToMolecularActivityAssociation, rhs.macromolecularMachineToMolecularActivityAssociation).append(molecularActivity, rhs.molecularActivity).append(grossAnatomicalStructure, rhs.grossAnatomicalStructure).append(individualOrganism, rhs.individualOrganism).append(cellLine, rhs.cellLine).append(device, rhs.device).append(geneOntologyClass, rhs.geneOntologyClass).append(treatment, rhs.treatment).append(geographicLocation, rhs.geographicLocation).append(association, rhs.association).append(phenomenon, rhs.phenomenon).append(cell, rhs.cell).append(transcript, rhs.transcript).append(geneToDiseaseAssociation, rhs.geneToDiseaseAssociation).append(attribute, rhs.attribute).append(clinicalModifier, rhs.clinicalModifier).append(codingSequence, rhs.codingSequence).append(environmentToPhenotypicFeatureAssociation, rhs.environmentToPhenotypicFeatureAssociation).append(_case, rhs._case).append(procedure, rhs.procedure).append(environmentalProcess, rhs.environmentalProcess).append(onset, rhs.onset).append(noncodingRNAProduct, rhs.noncodingRNAProduct).append(chemicalSubstance, rhs.chemicalSubstance).append(genome, rhs.genome).append(genotypeToGeneAssociation, rhs.genotypeToGeneAssociation).append(zygosity, rhs.zygosity).append(biosampleToDiseaseOrPhenotypicFeatureAssociation, rhs.biosampleToDiseaseOrPhenotypicFeatureAssociation).append(frequencyQualifierMixin, rhs.frequencyQualifierMixin).append(lifeStage, rhs.lifeStage).append(ontologyClass, rhs.ontologyClass).append(pathway, rhs.pathway).append(sensitivityQuantifier, rhs.sensitivityQuantifier).append(frequencyQuantifier, rhs.frequencyQuantifier).append(variantToDiseaseAssociation, rhs.variantToDiseaseAssociation).append(geneOrGeneProduct, rhs.geneOrGeneProduct).append(anatomicalEntityToAnatomicalEntityPartOfAssociation, rhs.anatomicalEntityToAnatomicalEntityPartOfAssociation).append(macromolecularMachine, rhs.macromolecularMachine).append(geneRegulatoryRelationship, rhs.geneRegulatoryRelationship).append(geneAsAModelOfDiseaseAssociation, rhs.geneAsAModelOfDiseaseAssociation).append(drug, rhs.drug).append(biologicalProcess, rhs.biologicalProcess).append(macromolecularComplex, rhs.macromolecularComplex).append(namedThing, rhs.namedThing).append(severityValue, rhs.severityValue).append(caseToPhenotypicFeatureAssociation, rhs.caseToPhenotypicFeatureAssociation).append(publication, rhs.publication).append(geneHasVariantThatContributesToDiseaseAssociation, rhs.geneHasVariantThatContributesToDiseaseAssociation).append(exonToTranscriptRelationship, rhs.exonToTranscriptRelationship).append(biosample, rhs.biosample).append(diseaseOrPhenotypicFeatureAssociationToLocationAssociation, rhs.diseaseOrPhenotypicFeatureAssociationToLocationAssociation).append(molecularEntity, rhs.molecularEntity).append(geneToExpressionSiteAssociation, rhs.geneToExpressionSiteAssociation).append(geneToGoTermAssociation, rhs.geneToGoTermAssociation).append(populationToPopulationAssociation, rhs.populationToPopulationAssociation).append(drugExposure, rhs.drugExposure).append(diseaseToPhenotypicFeatureAssociation, rhs.diseaseToPhenotypicFeatureAssociation).append(chemicalToPathwayAssociation, rhs.chemicalToPathwayAssociation).append(genotypeToVariantAssociation, rhs.genotypeToVariantAssociation).append(genotype, rhs.genotype).append(genomicSequenceLocalization, rhs.genomicSequenceLocalization).append(geneToGeneHomologyAssociation, rhs.geneToGeneHomologyAssociation).append(pathognomonicityQuantifier, rhs.pathognomonicityQuantifier).append(genotypicSex, rhs.genotypicSex).append(genomicEntity, rhs.genomicEntity).append(clinicalTrial, rhs.clinicalTrial).append(activityAndBehavior, rhs.activityAndBehavior).append(proteinIsoform, rhs.proteinIsoform).append(variantToPhenotypicFeatureAssociation, rhs.variantToPhenotypicFeatureAssociation).append(phenotypicFeature, rhs.phenotypicFeature).append(cellLineToDiseaseOrPhenotypicFeatureAssociation, rhs.cellLineToDiseaseOrPhenotypicFeatureAssociation).append(planetaryEntity, rhs.planetaryEntity).append(occurrent, rhs.occurrent).append(phenotypicSex, rhs.phenotypicSex).append(macromolecularMachineToBiologicalProcessAssociation, rhs.macromolecularMachineToBiologicalProcessAssociation).append(rNAProductIsoform, rhs.rNAProductIsoform).append(metabolite, rhs.metabolite).append(provider, rhs.provider).append(organismTaxon, rhs.organismTaxon).append(geneToGeneProductRelationship, rhs.geneToGeneProductRelationship).append(physiologicalProcess, rhs.physiologicalProcess).append(disease, rhs.disease).append(haplotype, rhs.haplotype).append(populationOfIndividualOrganisms, rhs.populationOfIndividualOrganisms).append(relationshipType, rhs.relationshipType).append(variantToPopulationAssociation, rhs.variantToPopulationAssociation).append(anatomicalEntity, rhs.anatomicalEntity).append(clinicalEntity, rhs.clinicalEntity).append(functionalAssociation, rhs.functionalAssociation).append(biologicalSex, rhs.biologicalSex).append(environment, rhs.environment).append(clinicalIntervention, rhs.clinicalIntervention).append(evidenceType, rhs.evidenceType).append(geneFamily, rhs.geneFamily).append(microRNA, rhs.microRNA).append(geneToPhenotypicFeatureAssociation, rhs.geneToPhenotypicFeatureAssociation).append(diseaseOrPhenotypicFeature, rhs.diseaseOrPhenotypicFeature).append(exon, rhs.exon).isEquals(); + return new EqualsBuilder().append(sequenceVariant, rhs.sequenceVariant).append(anatomicalEntityToAnatomicalEntityAssociation, rhs.anatomicalEntityToAnatomicalEntityAssociation).append(confidenceLevel, rhs.confidenceLevel).append(chemicalToDiseaseOrPhenotypicFeatureAssociation, rhs.chemicalToDiseaseOrPhenotypicFeatureAssociation).append(environmentalFeature, rhs.environmentalFeature).append(frequencyValue, rhs.frequencyValue).append(rNAProduct, rhs.rNAProduct).append(sequenceFeatureRelationship, rhs.sequenceFeatureRelationship).append(carbohydrate, rhs.carbohydrate).append(transcriptToGeneRelationship, rhs.transcriptToGeneRelationship).append(genotypeToPhenotypicFeatureAssociation, rhs.genotypeToPhenotypicFeatureAssociation).append(chemicalToGeneAssociation, rhs.chemicalToGeneAssociation).append(dataSetVersion, rhs.dataSetVersion).append(protein, rhs.protein).append(biologicalProcessOrActivity, rhs.biologicalProcessOrActivity).append(geneProduct, rhs.geneProduct).append(macromolecularMachineToCellularComponentAssociation, rhs.macromolecularMachineToCellularComponentAssociation).append(anatomicalEntityToAnatomicalEntityOntogenicAssociation, rhs.anatomicalEntityToAnatomicalEntityOntogenicAssociation).append(cellularComponent, rhs.cellularComponent).append(specificityQuantifier, rhs.specificityQuantifier).append(gene, rhs.gene).append(pairwiseGeneToGeneInteraction, rhs.pairwiseGeneToGeneInteraction).append(genotypeToGenotypePartAssociation, rhs.genotypeToGenotypePartAssociation).append(geographicLocationAtTime, rhs.geographicLocationAtTime).append(macromolecularMachineToMolecularActivityAssociation, rhs.macromolecularMachineToMolecularActivityAssociation).append(molecularActivity, rhs.molecularActivity).append(grossAnatomicalStructure, rhs.grossAnatomicalStructure).append(individualOrganism, rhs.individualOrganism).append(cellLine, rhs.cellLine).append(device, rhs.device).append(geneOntologyClass, rhs.geneOntologyClass).append(treatment, rhs.treatment).append(geographicLocation, rhs.geographicLocation).append(association, rhs.association).append(phenomenon, rhs.phenomenon).append(cell, rhs.cell).append(transcript, rhs.transcript).append(geneToDiseaseAssociation, rhs.geneToDiseaseAssociation).append(attribute, rhs.attribute).append(dataSet, rhs.dataSet).append(clinicalModifier, rhs.clinicalModifier).append(codingSequence, rhs.codingSequence).append(environmentToPhenotypicFeatureAssociation, rhs.environmentToPhenotypicFeatureAssociation).append(_case, rhs._case).append(procedure, rhs.procedure).append(environmentalProcess, rhs.environmentalProcess).append(onset, rhs.onset).append(noncodingRNAProduct, rhs.noncodingRNAProduct).append(chemicalSubstance, rhs.chemicalSubstance).append(genome, rhs.genome).append(genotypeToGeneAssociation, rhs.genotypeToGeneAssociation).append(zygosity, rhs.zygosity).append(biosampleToDiseaseOrPhenotypicFeatureAssociation, rhs.biosampleToDiseaseOrPhenotypicFeatureAssociation).append(frequencyQualifierMixin, rhs.frequencyQualifierMixin).append(lifeStage, rhs.lifeStage).append(ontologyClass, rhs.ontologyClass).append(pathway, rhs.pathway).append(sensitivityQuantifier, rhs.sensitivityQuantifier).append(frequencyQuantifier, rhs.frequencyQuantifier).append(variantToDiseaseAssociation, rhs.variantToDiseaseAssociation).append(geneOrGeneProduct, rhs.geneOrGeneProduct).append(anatomicalEntityToAnatomicalEntityPartOfAssociation, rhs.anatomicalEntityToAnatomicalEntityPartOfAssociation).append(macromolecularMachine, rhs.macromolecularMachine).append(geneRegulatoryRelationship, rhs.geneRegulatoryRelationship).append(geneAsAModelOfDiseaseAssociation, rhs.geneAsAModelOfDiseaseAssociation).append(sourceFile, rhs.sourceFile).append(drug, rhs.drug).append(biologicalProcess, rhs.biologicalProcess).append(macromolecularComplex, rhs.macromolecularComplex).append(namedThing, rhs.namedThing).append(severityValue, rhs.severityValue).append(caseToPhenotypicFeatureAssociation, rhs.caseToPhenotypicFeatureAssociation).append(publication, rhs.publication).append(geneHasVariantThatContributesToDiseaseAssociation, rhs.geneHasVariantThatContributesToDiseaseAssociation).append(exonToTranscriptRelationship, rhs.exonToTranscriptRelationship).append(biosample, rhs.biosample).append(diseaseOrPhenotypicFeatureAssociationToLocationAssociation, rhs.diseaseOrPhenotypicFeatureAssociationToLocationAssociation).append(molecularEntity, rhs.molecularEntity).append(geneToExpressionSiteAssociation, rhs.geneToExpressionSiteAssociation).append(geneToGoTermAssociation, rhs.geneToGoTermAssociation).append(populationToPopulationAssociation, rhs.populationToPopulationAssociation).append(drugExposure, rhs.drugExposure).append(diseaseToPhenotypicFeatureAssociation, rhs.diseaseToPhenotypicFeatureAssociation).append(chemicalToPathwayAssociation, rhs.chemicalToPathwayAssociation).append(genotypeToVariantAssociation, rhs.genotypeToVariantAssociation).append(genotype, rhs.genotype).append(genomicSequenceLocalization, rhs.genomicSequenceLocalization).append(distributionLevel, rhs.distributionLevel).append(geneToGeneHomologyAssociation, rhs.geneToGeneHomologyAssociation).append(pathognomonicityQuantifier, rhs.pathognomonicityQuantifier).append(genotypicSex, rhs.genotypicSex).append(genomicEntity, rhs.genomicEntity).append(clinicalTrial, rhs.clinicalTrial).append(activityAndBehavior, rhs.activityAndBehavior).append(proteinIsoform, rhs.proteinIsoform).append(variantToPhenotypicFeatureAssociation, rhs.variantToPhenotypicFeatureAssociation).append(phenotypicFeature, rhs.phenotypicFeature).append(cellLineToDiseaseOrPhenotypicFeatureAssociation, rhs.cellLineToDiseaseOrPhenotypicFeatureAssociation).append(planetaryEntity, rhs.planetaryEntity).append(occurrent, rhs.occurrent).append(phenotypicSex, rhs.phenotypicSex).append(macromolecularMachineToBiologicalProcessAssociation, rhs.macromolecularMachineToBiologicalProcessAssociation).append(rNAProductIsoform, rhs.rNAProductIsoform).append(metabolite, rhs.metabolite).append(provider, rhs.provider).append(organismTaxon, rhs.organismTaxon).append(dataFile, rhs.dataFile).append(geneToGeneProductRelationship, rhs.geneToGeneProductRelationship).append(physiologicalProcess, rhs.physiologicalProcess).append(disease, rhs.disease).append(haplotype, rhs.haplotype).append(populationOfIndividualOrganisms, rhs.populationOfIndividualOrganisms).append(relationshipType, rhs.relationshipType).append(variantToPopulationAssociation, rhs.variantToPopulationAssociation).append(dataSetSummary, rhs.dataSetSummary).append(anatomicalEntity, rhs.anatomicalEntity).append(clinicalEntity, rhs.clinicalEntity).append(functionalAssociation, rhs.functionalAssociation).append(biologicalSex, rhs.biologicalSex).append(environment, rhs.environment).append(clinicalIntervention, rhs.clinicalIntervention).append(evidenceType, rhs.evidenceType).append(geneFamily, rhs.geneFamily).append(microRNA, rhs.microRNA).append(geneToPhenotypicFeatureAssociation, rhs.geneToPhenotypicFeatureAssociation).append(diseaseOrPhenotypicFeature, rhs.diseaseOrPhenotypicFeature).append(exon, rhs.exon).isEquals(); } } diff --git a/java/DataFile.java b/java/DataFile.java new file mode 100644 index 0000000000..6700dace91 --- /dev/null +++ b/java/DataFile.java @@ -0,0 +1,43 @@ +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * DataFile + *

+ * + * + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + +}) +public class DataFile { + + + @Override + public String toString() { + return new ToStringBuilder(this).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof DataFile) == false) { + return false; + } + DataFile rhs = ((DataFile) other); + return new EqualsBuilder().isEquals(); + } + +} diff --git a/java/DataSet.java b/java/DataSet.java new file mode 100644 index 0000000000..d7b8a4eeee --- /dev/null +++ b/java/DataSet.java @@ -0,0 +1,43 @@ +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * DataSet + *

+ * + * + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + +}) +public class DataSet { + + + @Override + public String toString() { + return new ToStringBuilder(this).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof DataSet) == false) { + return false; + } + DataSet rhs = ((DataSet) other); + return new EqualsBuilder().isEquals(); + } + +} diff --git a/java/DataSetSummary.java b/java/DataSetSummary.java new file mode 100644 index 0000000000..7430c018ca --- /dev/null +++ b/java/DataSetSummary.java @@ -0,0 +1,56 @@ +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * DataSetSummary + *

+ * + * + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "source_web_page" +}) +public class DataSetSummary { + + @JsonProperty("source_web_page") + private String sourceWebPage; + + @JsonProperty("source_web_page") + public String getSourceWebPage() { + return sourceWebPage; + } + + @JsonProperty("source_web_page") + public void setSourceWebPage(String sourceWebPage) { + this.sourceWebPage = sourceWebPage; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("sourceWebPage", sourceWebPage).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(sourceWebPage).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof DataSetSummary) == false) { + return false; + } + DataSetSummary rhs = ((DataSetSummary) other); + return new EqualsBuilder().append(sourceWebPage, rhs.sourceWebPage).isEquals(); + } + +} diff --git a/java/DataSetVersion.java b/java/DataSetVersion.java new file mode 100644 index 0000000000..b7720120c0 --- /dev/null +++ b/java/DataSetVersion.java @@ -0,0 +1,108 @@ +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * DataSetVersion + *

+ * + * + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "distribution", + "source_data_file", + "title", + "type", + "versionOf" +}) +public class DataSetVersion { + + @JsonProperty("distribution") + private String distribution; + @JsonProperty("source_data_file") + private String sourceDataFile; + @JsonProperty("title") + private String title; + @JsonProperty("type") + private String type; + @JsonProperty("versionOf") + private String versionOf; + + @JsonProperty("distribution") + public String getDistribution() { + return distribution; + } + + @JsonProperty("distribution") + public void setDistribution(String distribution) { + this.distribution = distribution; + } + + @JsonProperty("source_data_file") + public String getSourceDataFile() { + return sourceDataFile; + } + + @JsonProperty("source_data_file") + public void setSourceDataFile(String sourceDataFile) { + this.sourceDataFile = sourceDataFile; + } + + @JsonProperty("title") + public String getTitle() { + return title; + } + + @JsonProperty("title") + public void setTitle(String title) { + this.title = title; + } + + @JsonProperty("type") + public String getType() { + return type; + } + + @JsonProperty("type") + public void setType(String type) { + this.type = type; + } + + @JsonProperty("versionOf") + public String getVersionOf() { + return versionOf; + } + + @JsonProperty("versionOf") + public void setVersionOf(String versionOf) { + this.versionOf = versionOf; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("distribution", distribution).append("sourceDataFile", sourceDataFile).append("title", title).append("type", type).append("versionOf", versionOf).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(distribution).append(title).append(type).append(versionOf).append(sourceDataFile).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof DataSetVersion) == false) { + return false; + } + DataSetVersion rhs = ((DataSetVersion) other); + return new EqualsBuilder().append(distribution, rhs.distribution).append(title, rhs.title).append(type, rhs.type).append(versionOf, rhs.versionOf).append(sourceDataFile, rhs.sourceDataFile).isEquals(); + } + +} diff --git a/java/DistributionLevel.java b/java/DistributionLevel.java new file mode 100644 index 0000000000..77cd97ed04 --- /dev/null +++ b/java/DistributionLevel.java @@ -0,0 +1,56 @@ +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * DistributionLevel + *

+ * + * + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "downloadURL" +}) +public class DistributionLevel { + + @JsonProperty("downloadURL") + private String downloadURL; + + @JsonProperty("downloadURL") + public String getDownloadURL() { + return downloadURL; + } + + @JsonProperty("downloadURL") + public void setDownloadURL(String downloadURL) { + this.downloadURL = downloadURL; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("downloadURL", downloadURL).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(downloadURL).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof DistributionLevel) == false) { + return false; + } + DistributionLevel rhs = ((DistributionLevel) other); + return new EqualsBuilder().append(downloadURL, rhs.downloadURL).isEquals(); + } + +} diff --git a/java/SourceFile.java b/java/SourceFile.java new file mode 100644 index 0000000000..cb5c2883d6 --- /dev/null +++ b/java/SourceFile.java @@ -0,0 +1,69 @@ +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + + +/** + * SourceFile + *

+ * + * + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "retrievedOn", + "source_version" +}) +public class SourceFile { + + @JsonProperty("retrievedOn") + private String retrievedOn; + @JsonProperty("source_version") + private String sourceVersion; + + @JsonProperty("retrievedOn") + public String getRetrievedOn() { + return retrievedOn; + } + + @JsonProperty("retrievedOn") + public void setRetrievedOn(String retrievedOn) { + this.retrievedOn = retrievedOn; + } + + @JsonProperty("source_version") + public String getSourceVersion() { + return sourceVersion; + } + + @JsonProperty("source_version") + public void setSourceVersion(String sourceVersion) { + this.sourceVersion = sourceVersion; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("retrievedOn", retrievedOn).append("sourceVersion", sourceVersion).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(retrievedOn).append(sourceVersion).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof SourceFile) == false) { + return false; + } + SourceFile rhs = ((SourceFile) other); + return new EqualsBuilder().append(retrievedOn, rhs.retrievedOn).append(sourceVersion, rhs.sourceVersion).isEquals(); + } + +} diff --git a/json-schema/biolink-model.json b/json-schema/biolink-model.json index cf3ae495ac..4863f2b345 100644 --- a/json-schema/biolink-model.json +++ b/json-schema/biolink-model.json @@ -347,6 +347,12 @@ }, "type": "array" }, + "distribution": { + "type": "string" + }, + "downloadURL": { + "type": "string" + }, "drug": { "items": { "type": "string" @@ -896,6 +902,9 @@ "description": "the relationship type by which a subject is connected to an object in an association", "type": "string" }, + "retrievedOn": { + "type": "string" + }, "same_as": { "description": "holds between two entities that are considered equivalent to each other", "items": { @@ -915,6 +924,15 @@ "description": "a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.", "type": "string" }, + "source_data_file": { + "type": "string" + }, + "source_version": { + "type": "string" + }, + "source_web_page": { + "type": "string" + }, "stage_qualifier": { "description": "stage at which expression takes place", "type": "string" @@ -951,6 +969,9 @@ "description": "a point in time", "type": "string" }, + "title": { + "type": "string" + }, "treated_by": { "description": "holds between a disease or phenotypic feature and a therapeutic process or chemical substance that is used to treat the condition", "items": { @@ -965,10 +986,16 @@ }, "type": "array" }, + "type": { + "type": "string" + }, "update_date": { "description": "date on which thing was updated. This can be applied to nodes or edges", "type": "string" }, + "versionOf": { + "type": "string" + }, "xenologous_to": { "description": "a homology relationship characterized by an interspecies (horizontal) transfer since the common ancestor.", "items": { @@ -1413,6 +1440,50 @@ "title": "ConfidenceLevel", "type": "object" }, + "DataFile": { + "description": "", + "properties": {}, + "title": "DataFile", + "type": "object" + }, + "DataSet": { + "description": "", + "properties": {}, + "title": "DataSet", + "type": "object" + }, + "DataSetSummary": { + "description": "", + "properties": { + "source_web_page": { + "type": "string" + } + }, + "title": "DataSetSummary", + "type": "object" + }, + "DataSetVersion": { + "description": "", + "properties": { + "distribution": { + "type": "string" + }, + "source_data_file": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "versionOf": { + "type": "string" + } + }, + "title": "DataSetVersion", + "type": "object" + }, "Device": { "description": "A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment", "properties": {}, @@ -1494,6 +1565,16 @@ "title": "DiseaseToPhenotypicFeatureAssociation", "type": "object" }, + "DistributionLevel": { + "description": "", + "properties": { + "downloadURL": { + "type": "string" + } + }, + "title": "DistributionLevel", + "type": "object" + }, "Drug": { "description": "A substance intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease", "properties": {}, @@ -3186,6 +3267,19 @@ "title": "SeverityValue", "type": "object" }, + "SourceFile": { + "description": "", + "properties": { + "retrievedOn": { + "type": "string" + }, + "source_version": { + "type": "string" + } + }, + "title": "SourceFile", + "type": "object" + }, "SpecificityQuantifier": { "description": "", "properties": {}, diff --git a/setup.cfg b/setup.cfg index 1889ba2ad6..5d1f63f53d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ [metadata] name = biolink_model description = 'A high level datamodel of biological entities and associations' -version = 1.2.1 +version = 1.2.2 url = https://github.com/biolink/biolink-model author = Harold Solbrig author-email = solbrig@jhu.edu