From f06e27f01868bd13538d6597d70f76fa05d40f51 Mon Sep 17 00:00:00 2001 From: Puja Trivedi Date: Mon, 9 Dec 2024 08:25:30 -0800 Subject: [PATCH 01/26] replaced all occurrences of library_generation with variable input value --- .github/workflows/generate_yaml_model.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate_yaml_model.yaml b/.github/workflows/generate_yaml_model.yaml index 2641bd197..972da38dd 100644 --- a/.github/workflows/generate_yaml_model.yaml +++ b/.github/workflows/generate_yaml_model.yaml @@ -1,7 +1,13 @@ # Generates linkml yaml schema from metadata in googlesheets using schemasheets name: generating yaml file -on: workflow_dispatch +on: + workflow_dispatch: + inputs: + model: + description: 'model name' + required: true + type: string jobs: generate_libgen_yaml: @@ -30,7 +36,7 @@ jobs: - name: Generate yaml model run: | cd linkml-schema - bkbit schema2model -o library_generation.yaml --gsheet --gsheet-download-dir source_library_generation/gsheet_output source_library_generation/gsheet.yaml --no-inlined + bkbit schema2model -o ${{ inputs.model }}.yaml --gsheet --gsheet-download-dir source_${{ inputs.model }}/gsheet_output source_${{ inputs.model }}/gsheet.yaml --no-inlined cd .. # Generate unique branch name From 78d77486f066b96724030e25b715c9975e3d3a47 Mon Sep 17 00:00:00 2001 From: Puja Trivedi Date: Mon, 9 Dec 2024 08:29:42 -0800 Subject: [PATCH 02/26] updated message for autogenerated PR --- .github/workflows/generate_yaml_model.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate_yaml_model.yaml b/.github/workflows/generate_yaml_model.yaml index 972da38dd..b27791f2c 100644 --- a/.github/workflows/generate_yaml_model.yaml +++ b/.github/workflows/generate_yaml_model.yaml @@ -51,8 +51,8 @@ jobs: uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - commit-message: "Generate new version of the linkml model" + commit-message: "Generate new version of the linkml model for ${{ inputs.model }}" branch: ${{ env.BRANCH_NAME }} - title: "Auto PR: yaml generated from google spreadsheets using schemasheets" - body: "This PR adds a autogenerated yaml file." + title: "Auto PR: ${{ inputs.model }}.yaml generated from google spreadsheets using schemasheets" + body: "This PR adds a autogenerated ${{ inputs.model }}.yaml file." base: main \ No newline at end of file From 27ae7aa22510fb9bacf06b0137b6920082309fb4 Mon Sep 17 00:00:00 2001 From: Puja Trivedi Date: Mon, 9 Dec 2024 08:34:57 -0800 Subject: [PATCH 03/26] added checks to see if output-dir and gsheet exist --- .github/workflows/generate_yaml_model.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/generate_yaml_model.yaml b/.github/workflows/generate_yaml_model.yaml index b27791f2c..2e761e643 100644 --- a/.github/workflows/generate_yaml_model.yaml +++ b/.github/workflows/generate_yaml_model.yaml @@ -32,6 +32,22 @@ jobs: sudo apt-get update sudo apt-get install -y build-essential git wget curl + # Check if download-dir exists; if not, create it + - name: Check if download-dir exists + run: | + if [ ! -d "linkml-schema/source_${{ inputs.model }}/gsheet_output" ]; then + echo "Directory does not exist. Making directory" + mkdir -p linkml-schema/source_${{ inputs.model }}/gsheet_output + fi + + # Check if gsheet.yaml exists + - name: Check if gsheet.yaml exists + run: | + if [ ! -f "linkml-schema/source_${{ inputs.model }}/gsheet.yaml" ]; then + echo "gsheet.yaml does not exist. Exiting" + exit 1 + fi + # Generate yaml model - name: Generate yaml model run: | From 36baa8e34845b19d4062441b8df24de9a87a3801 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 9 Dec 2024 12:33:45 -0500 Subject: [PATCH 04/26] new workflows to generate other formats for the models; using reusable workflow --- .../ansr_generate_other_formats.yaml | 17 +++++ .../assertion_generate_other_formats.yaml | 17 +++++ .github/workflows/generate_other_formats.yaml | 74 ------------------- .../genome_generate_other_formats.yaml | 17 +++++ .../library_generate_other_formats.yaml | 17 +++++ .../reusable-generate_other_formats.yaml | 73 ++++++++++++++++++ 6 files changed, 141 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/ansr_generate_other_formats.yaml create mode 100644 .github/workflows/assertion_generate_other_formats.yaml delete mode 100644 .github/workflows/generate_other_formats.yaml create mode 100644 .github/workflows/genome_generate_other_formats.yaml create mode 100644 .github/workflows/library_generate_other_formats.yaml create mode 100644 .github/workflows/reusable-generate_other_formats.yaml diff --git a/.github/workflows/ansr_generate_other_formats.yaml b/.github/workflows/ansr_generate_other_formats.yaml new file mode 100644 index 000000000..b5dde98eb --- /dev/null +++ b/.github/workflows/ansr_generate_other_formats.yaml @@ -0,0 +1,17 @@ +name: generating other formats for anatomical_structure + +on: + pull_request_target: + types: [opened, synchronize] + paths: + - 'linkml-schema/anatomical_structure.yaml' + + +permissions: + contents: write + +jobs: + generate_from_reusable: + uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main + with: + model_name: anatomical_structure \ No newline at end of file diff --git a/.github/workflows/assertion_generate_other_formats.yaml b/.github/workflows/assertion_generate_other_formats.yaml new file mode 100644 index 000000000..cf6b129d1 --- /dev/null +++ b/.github/workflows/assertion_generate_other_formats.yaml @@ -0,0 +1,17 @@ +name: generating other formats for assertion_evidence + +on: + pull_request_target: + types: [opened, synchronize] + paths: + - 'linkml-schema/assertion_evidence.yaml' + + +permissions: + contents: write + +jobs: + generate_from_reusable: + uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main + with: + model_name: assertion_evidence \ No newline at end of file diff --git a/.github/workflows/generate_other_formats.yaml b/.github/workflows/generate_other_formats.yaml deleted file mode 100644 index d66b6952a..000000000 --- a/.github/workflows/generate_other_formats.yaml +++ /dev/null @@ -1,74 +0,0 @@ -name: generating other formats - -on: - push: - branches: - - main - paths: - - 'linkml-schema/**' - workflow_run: - workflows: [ generating yaml file ] - types: - - completed - - -permissions: - contents: write - - -jobs: - generate: - runs-on: ubuntu-latest - steps: - - name: Checkout this repository - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.9 - - - name: Install the required python packages - run: python -m pip install .[test] - - - name: Other installations - run: | - sudo apt-get update - sudo apt-get install -y build-essential git wget curl - - - name: Generate other model representations - run: | - cd linkml-schema - for file in *.yaml; do - if [[ "$file" != *bican* && "$file" != *core* ]]; then - name=`basename ${file} .yaml`; - echo "Processing $name file.."; - gen-json-schema ${file} > ../json-schema-autogen/${name}.json; - # generating jsonld context and removing generation_date field to avoid constant updates - gen-jsonld-context ${file} > ../jsonld-context-autogen/${name}.context.jsonld; - sed -i "/generation_date/d" ../jsonld-context-autogen/${name}.context.jsonld; - gen-pydantic ${file} > ../models_py-autogen/${name}.py; - if [ ${name} = "library_generation" ] || [ ${name} = "genome_annotation" ]; then - echo "Creating and Fixing diagrams for $name"; - python ../utils/fix_and_create_erdiagram.py - else - gen-erdiagram ${file} > ../erdiagram-autogen/${name}.md; - fi - fi - done - cd .. - - - name: Adding other model representations to git - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - if ! git diff --quiet; then - git add json-schema-autogen/*.json - git add jsonld-context-autogen/*.context.jsonld - git add models_py-autogen/*.py - git add erdiagram-autogen/*.md - git commit -m "generate another formats" - git push - else - echo "No changes to commit" - fi \ No newline at end of file diff --git a/.github/workflows/genome_generate_other_formats.yaml b/.github/workflows/genome_generate_other_formats.yaml new file mode 100644 index 000000000..ad122eced --- /dev/null +++ b/.github/workflows/genome_generate_other_formats.yaml @@ -0,0 +1,17 @@ +name: generating other formats for genome_annotation + +on: + pull_request_target: + types: [opened, synchronize] + paths: + - 'linkml-schema/genome_annotation.yaml' + + +permissions: + contents: write + +jobs: + generate_from_reusable: + uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main + with: + model_name: genome_annotation \ No newline at end of file diff --git a/.github/workflows/library_generate_other_formats.yaml b/.github/workflows/library_generate_other_formats.yaml new file mode 100644 index 000000000..4a7daa22f --- /dev/null +++ b/.github/workflows/library_generate_other_formats.yaml @@ -0,0 +1,17 @@ +name: generating other formats for library_generation + +on: + pull_request_target: + types: [opened, synchronize] + paths: + - 'linkml-schema/library_generation.yaml' + + +permissions: + contents: write + +jobs: + generate_from_reusable: + uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main + with: + model_name: library_generation \ No newline at end of file diff --git a/.github/workflows/reusable-generate_other_formats.yaml b/.github/workflows/reusable-generate_other_formats.yaml new file mode 100644 index 000000000..db158a12c --- /dev/null +++ b/.github/workflows/reusable-generate_other_formats.yaml @@ -0,0 +1,73 @@ +name: Reusable workflow for generating other formats + +on: + workflow_call: + inputs: + model_name: + description: 'A name of the model, without the .yaml extension' + required: true + type: string + +permissions: + contents: write + +jobs: + generate: + runs-on: ubuntu-latest + steps: + - name: Checkout this repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install the required python packages + run: python -m pip install .[test] + + - name: Other installations + run: | + sudo apt-get update + sudo apt-get install -y build-essential git wget curl + + - name: Generate other model representations + run: | + cd linkml-schema + name=${{ inputs.model_name }}; + echo "Processing $name model..."; + gen-json-schema ${name}.yaml > ../json-schema-autogen/${name}.json; + # generating jsonld context and removing generation_date field to avoid constant updates + gen-jsonld-context ${name}.yaml > ../jsonld-context-autogen/${name}.context.jsonld; + sed -i "/generation_date/d" ../jsonld-context-autogen/${name}.context.jsonld; + gen-pydantic ${name}.yaml > ../models_py-autogen/${name}.py; + if [ ${name} = "library_generation" ] || [ ${name} = "genome_annotation" ]; then + echo "Fixing erdiagrams for $name"; + python ../utils/fix_and_create_erdiagram.py; + else + gen-erdiagram ${name}.yaml > ../erdiagram-autogen/${name}.md; + fi + cd .. + + - name: Adding other model representations to git + run: | + name=${{ inputs.model_name }}; + git config --global user.name "action@github.com" + git config --global user.email "Github Actions" + git branch + git diff + git add json-schema-autogen/${name}.json + git add jsonld-context-autogen/${name}.context.jsonld + git add models_py-autogen/${name}.py + git add erdiagram-autogen/${name}.md + if ! git diff --quiet HEAD; then + git commit -m "generate another formats for ${name} model" + git pull --rebase # to avoid conflicts with different wf runs + git push + else + echo "No changes to commit" + fi \ No newline at end of file From 157540b57d27f6957c4abd73898a009508c66b68 Mon Sep 17 00:00:00 2001 From: puja-trivedi Date: Fri, 20 Dec 2024 00:04:18 +0000 Subject: [PATCH 05/26] Generate new version of the linkml model for assertion_evidence --- linkml-schema/assertion_evidence.yaml | 307 ++++++++++-------- .../gsheet_output/Classes.tsv | 29 +- .../gsheet_output/Prefixes.tsv | 18 +- .../gsheet_output/Relations.tsv | 20 +- .../gsheet_output/Slots.tsv | 23 +- .../gsheet_output/ValueSets.tsv | 78 +++-- 6 files changed, 254 insertions(+), 221 deletions(-) diff --git a/linkml-schema/assertion_evidence.yaml b/linkml-schema/assertion_evidence.yaml index 07f69b531..f25763fa5 100644 --- a/linkml-schema/assertion_evidence.yaml +++ b/linkml-schema/assertion_evidence.yaml @@ -4,23 +4,26 @@ id: https://identifiers.org/brain-bican/assertion-evidence-schema imports: - linkml:types prefixes: - linkml: https://w3id.org/linkml/ bican: https://identifiers.org/brain-bican/vocab/ - spdx: http://spdx.org/rdf/terms# - schema: http://schema.org/ brainkb: https://brainkb.org/ - prov: http://www.w3.org/ns/prov# + datacite: http://purl.org/spar/datacite/ + dcterms: http://purl.org/dc/terms/ eco: http://purl.obolibrary.org/obo/ECO_ + edam: http://edamontology.org/ + foaf: http://xmlns.com/foaf/0.1/ + iao: http://purl.obolibrary.org/obo/IAO_ + linkml: https://w3id.org/linkml/ + oa: http://www.w3.org/ns/oa# + prov: http://www.w3.org/ns/prov# + ro: http://purl.obolibrary.org/obo/RO_ + schema: http://schema.org/ sepio: http://purl.obolibrary.org/obo/SEPIO_ + sio: http://semanticscience.org/resource/SIO_ + spdx: http://spdx.org/rdf/terms# + braiankb: http://example.org/braiankb/ default_prefix: brainkb default_range: string enums: - AssertionType: - from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - permissible_values: - Positive: {} - Negative: {} - Inconclusive: {} Categories: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema permissible_values: @@ -52,7 +55,7 @@ enums: Translational: {} Therapeutic: {} CognitiveNeuroscience: {} - SignificanceLevel: + EvidenceStrength: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema permissible_values: HighlySignificant: @@ -66,94 +69,41 @@ enums: Unknown: description: Specifies that the significance level is unknown as the information is not present in the study. - Significance: + EvidenceDirection: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema permissible_values: - Clinical: {} - NonClinical: {} + supporting: {} + disputing: {} + inconclusive: {} slots: - uses: - description: The eco:uses property is the inverse of the eco:used_in property - and defines the relationship between eco:Assertion and eco:Evidence, indicating - that an assertion relies on the evidence. + was_associate_with: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - range: Evidence - used_in: - description: The eco:used_in property establishes a relationship between eco:Evidence - and eco:Assertion, indicating that the evidence is utilized to support the corresponding - assertion. + has_identifier: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - range: Assertion - has_assertion_method: - description: The brainkb:hasAssertionMethod property relates an eco:Assertion - to an brainkb:AssertionMethod that differentiates different types of assertions - techniques used while making an assertion. + has_annotation: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - range: AssertionMethod - is_associated_with: + was_generated_by: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - has_data_annotation: + has_evidence_line: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema -classes: - Assertion: - description: A statement made by a particular agent on a particular occasion that - a particular proposition is true, based on the evaluation of one or more lines - of evidence. + reference: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slots: - - has_assertion_method - - is_associated_with - - has_data_annotation - slot_usage: - has_assertion_method: - description: The brainkb:hasAssertionMethod property relates an eco:Assertion - to an brainkb:AssertionMethod that differentiates different types of assertions - techniques used while making an assertion. - is_associated_with: - description: The brainkb:isAssociatedWith property establishes relationships - between different entities:it links sepio:Assertion to brainkb:AssertionSummary, - indicating the association between an assertion and its corresponding summary. - range: AssertionSummary - has_data_annotation: - range: DataAnnotation - - attributes: - has_assertion_category: - description: The brainkb:hasAssertionCategory property relates brainkb:Evidence - and brainkb:Categories, specifying the classification or category that the - assertion belongs to. - from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasAssertionCategory - alias: hasAssertionCategory - range: Categories - has_assertion_text: - description: The brainkb:hasAssertionText property relates an eco:Assertion - to an xsd:string, providing a textual excerpt of the assertion being made. - from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasAssertionText - alias: hasAssertionText - range: string - has_assertion_method: - description: The brainkb:hasAssertionMethod property relates an eco:Assertion - to an eco:assertion method that differentiates different types of assertions - techniques used while making an assertion. - from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasAssertionMethod - alias: hasAssertionMethod - range: AssertionMethod - class_uri: sepio:Assertion - Document: - description: A collection of information content entities intended to be understood - together as a whole + has_evidence_item: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - - class_uri: sepio:Document + member: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema +classes: Activity: description: An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities. from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - + slots: + - was_associate_with + slot_usage: + was_associate_with: + slot_uri: prov:wasAssociatedWith + range: Agent attributes: ended_at_time: description: The prov:endedAtTime establishes the relationship between prov:Activity @@ -174,83 +124,152 @@ classes: activity. from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema slots: - - is_associated_with + - has_identifier slot_usage: - is_associated_with: - description: 'The brainkb:isAssociatedWith property establishes relationships - between different entities: it connects prov:Agent to prov:Activity, reflecting - the involvement or connection between an agent and an activity.' - range: Activity - + has_identifier: + slot_uri: edam:has_identifier + range: Identifier class_uri: prov:Agent - AssertionSummary: - description: A summary is a brief statement or description of the main points, - especially as a conclusion to a work about the assertion. + Annotation: + description: An annotation is a written explanatory or critical description, or + other in-context information (e.g., pattern, motif, link), that has been associated + with data or other types of information. + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + class_uri: oa:Annotation + Assertion: + description: A statement made by a particular agent on a particular occasion that + a particular proposition is true, based on the evaluation of one or more lines + of evidence. from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - + slots: + - has_annotation + - was_generated_by + - has_evidence_line + slot_usage: + has_annotation: + slot_uri: sio:000255 + range: Annotation + was_generated_by: + slot_uri: prov:wasGeneratedBy + range: Activity + has_evidence_line: + description: A relationship between an assertion or proposition and an evidence + line used in evaluating its validity. + slot_uri: sepio:0000006 + range: EvidenceLine attributes: + has_assertion_category: + description: The brainkb:hasAssertionCategory property relates brainkb:Evidence + and brainkb:Categories, specifying the classification or category that the + assertion belongs to. + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + slot_uri: brainkb:has_assertion_category + range: Categories + has_assertion_description: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + slot_uri: brainkb:has_assertion_description + range: string has_assertion_summary: - description: The brainkb:hasAssertionSummary property relates a brainkb:AssertionSummary - to an xsd:string, providing a concise overview that differentiates various - assertions. This summary encapsulates the core content of the assertion, - allowing for easy identification and understanding of its essence. + description: The brainkb:has_assertion_text property relates an eco:Assertion + to an xsd:string, providing a textual excerpt of the assertion being made. from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasAssertionSummary - alias: hasAssertionSummary + slot_uri: brainkb:has_assertion_summary range: string - class_uri: brainkb:AssertionSummary - EvidenceSummary: - description: A summary is a brief statement or description of the main points, - especially as a conclusion to a work about the evidence. + class_uri: sepio:0000001 + CellAnnotation: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - + is_a: Annotation + class_uri: brainkb:CellAnnotation + Document: + description: A collection of information content entities intended to be understood + together as a whole + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: EvidenceItem attributes: - has_evidence_summary: - description: The brainkb:hasEvidenceSummary property relates a brainkb:EvidenceSummary - to an xsd:string, providing a concise overview that differentiates various - evidence. This summary encapsulates the core content of the evidence, allowing - for easy identification and understanding of its essence. + identifier: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasEvidenceSummary - alias: hasEvidenceSummary - range: string - class_uri: brainkb:EvidenceSummary - AssertionMethod: - description: A means by which a statement is made about the entity - from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - - class_uri: eco:0000217 - DataAnnotation: + slot_uri: datacite:identifier + range: uri + class_uri: iao:0000310 + EvidenceItem: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - - class_uri: brainkb:DataAnnotation - Evidence: + slots: + - reference + slot_usage: + reference: + slot_uri: sepio:0000442 + range: Document + class_uri: sepio:0000149 + EvidenceLine: + description: An evidence line represents an independent and meaningful argument + for or against a particular proposition, that is based on the interpretation + of one or more pieces of information as evidence. from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema slots: - - used_in - - is_associated_with + - has_evidence_item + - was_generated_by slot_usage: - used_in: {} - is_associated_with: - description: 'The brainkb:isAssociatedWith property establishes relationships - between different entities: it associates eco:Evidence with brainkb:EvidenceSummary, - signifying the connection between evidence and its summarized representation.' - range: EvidenceSummary - + has_evidence_item: + description: A relation holding between an evidence line and an individual + information entity that contributes to the argument it represents. + slot_uri: sepio:0000084 + range: EvidenceItem + was_generated_by: + slot_uri: prov:wasGeneratedBy + range: Activity attributes: + evidence_direction: + description: A relation indicating whether an evidence line supports or disputes + a target proposition (or represents inconclusive evidence that is not sufficient + for either). + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + slot_uri: sepio:0000183 + range: EvidenceDirection + evidence_line_strength: + description: A relation describing the degree of support provided by an evidence + line for a target assertion or proposition. + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + slot_uri: sepio:0000132 + range: EvidenceStrength has_evidence_category: - description: The brainkb:hasEvidenceCategory property relates brainkb:Evidence - and brainkb:Categories, specifying the classification or category that the - evidence belongs to. from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasEvidenceCategory - alias: hasEvidenceCategory + slot_uri: brainkb:has_evidence_category range: Categories - has_evidence_text: - description: The brainkb:hasEvidenceText property relates an eco:Evidence - to an xsd:string, providing a textual excerpt of the evidence supporting - the assertion. + has_evidenceline_description: from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema - slot_uri: brainkb:hasEvidenceText - alias: hasEvidenceText + slot_uri: braiankb:has_evidenceline_description range: string + class_uri: sepio:0000002 + Group: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: Agent + class_uri: foaf:Group + Identifier: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + class_uri: edam:data_0842 + OrcidIdentifier: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: PersonIdentifier + class_uri: edam:data_4022 + Organization: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: Group + class_uri: prov:Organization + Person: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: Agent + slots: + - member + slot_usage: + member: + slot_uri: foaf:member + range: Organization + class_uri: prov:Person + PersonIdentifier: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: Identifier + class_uri: edam:data_2118 + SoftwareAgent: + from_schema: https://identifiers.org/brain-bican/assertion-evidence-schema + is_a: Agent + class_uri: prov:SoftwareAgent diff --git a/linkml-schema/source_assertion_evidence/gsheet_output/Classes.tsv b/linkml-schema/source_assertion_evidence/gsheet_output/Classes.tsv index 4e2bb737c..9ac066501 100644 --- a/linkml-schema/source_assertion_evidence/gsheet_output/Classes.tsv +++ b/linkml-schema/source_assertion_evidence/gsheet_output/Classes.tsv @@ -1,11 +1,18 @@ -รง Inheritance: is_a Inheritance: mixin Inheritance: slot usage Subsets Definition -> class is_a mixins ignore in_subset description class_uri mixin -> internal_separator: "|" internal_separator: "|" -Assertion A statement made by a particular agent on a particular occasion that a particular proposition is true, based on the evaluation of one or more lines of evidence. sepio:Assertion -Document A collection of information content entities intended to be understood together as a whole sepio:Document -Activity An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities. prov:Activity -Agent An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. prov:Agent -AssertionSummary A summary is a brief statement or description of the main points, especially as a conclusion to a work about the assertion. brainkb:AssertionSummary -EvidenceSummary A summary is a brief statement or description of the main points, especially as a conclusion to a work about the evidence. brainkb:EvidenceSummary -AssertionMethod A means by which a statement is made about the entity eco:0000217 -DataAnnotation brainkb:DataAnnotation \ No newline at end of file +class Inheritance: is_a Inheritance: mixin Subsets Definition +> class is_a mixins in_subset description class_uri mixin +> internal_separator: "|" internal_separator: "|" +Activity An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities. prov:Activity +Agent An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. prov:Agent +Annotation An annotation is a written explanatory or critical description, or other in-context information (e.g., pattern, motif, link), that has been associated with data or other types of information. oa:Annotation +Assertion A statement made by a particular agent on a particular occasion that a particular proposition is true, based on the evaluation of one or more lines of evidence. sepio:0000001 +CellAnnotation Annotation brainkb:CellAnnotation +Document EvidenceItem A collection of information content entities intended to be understood together as a whole iao:0000310 +EvidenceItem sepio:0000149 +EvidenceLine An evidence line represents an independent and meaningful argument for or against a particular proposition, that is based on the interpretation of one or more pieces of information as evidence. sepio:0000002 +Group Agent foaf:Group +Identifier edam:data_0842 +OrcidIdentifier PersonIdentifier edam:data_4022 +Organization Group prov:Organization +Person Agent prov:Person +PersonIdentifier Identifier edam:data_2118 +SoftwareAgent Agent prov:SoftwareAgent \ No newline at end of file diff --git a/linkml-schema/source_assertion_evidence/gsheet_output/Prefixes.tsv b/linkml-schema/source_assertion_evidence/gsheet_output/Prefixes.tsv index db66ef2b6..5483de9d2 100644 --- a/linkml-schema/source_assertion_evidence/gsheet_output/Prefixes.tsv +++ b/linkml-schema/source_assertion_evidence/gsheet_output/Prefixes.tsv @@ -1,11 +1,19 @@ prefix uri default schema imports title description id brainkb assertion-evidence-schema Assertion Evidence Schema https://identifiers.org/brain-bican/assertion-evidence-schema > prefix prefix_reference default_prefix schema imports title description id -linkml https://w3id.org/linkml/ bican https://identifiers.org/brain-bican/vocab/ -spdx http://spdx.org/rdf/terms# -schema http://schema.org/ brainkb https://brainkb.org/ -prov http://www.w3.org/ns/prov# +datacite http://purl.org/spar/datacite/ +dcterms http://purl.org/dc/terms/ eco http://purl.obolibrary.org/obo/ECO_ -sepio http://purl.obolibrary.org/obo/SEPIO_ \ No newline at end of file +edam http://edamontology.org/ +foaf http://xmlns.com/foaf/0.1/ +iao http://purl.obolibrary.org/obo/IAO_ +linkml https://w3id.org/linkml/ +oa http://www.w3.org/ns/oa# +prov http://www.w3.org/ns/prov# +ro http://purl.obolibrary.org/obo/RO_ +schema http://schema.org/ +sepio http://purl.obolibrary.org/obo/SEPIO_ +sio http://semanticscience.org/resource/SIO_ +spdx http://spdx.org/rdf/terms# \ No newline at end of file diff --git a/linkml-schema/source_assertion_evidence/gsheet_output/Relations.tsv b/linkml-schema/source_assertion_evidence/gsheet_output/Relations.tsv index 0e799b2cb..226bc15b8 100644 --- a/linkml-schema/source_assertion_evidence/gsheet_output/Relations.tsv +++ b/linkml-schema/source_assertion_evidence/gsheet_output/Relations.tsv @@ -1,12 +1,12 @@ Object Predicate (more general) Subject Multivalued ExactlyOneOf (True/False, default=False) Required (True/False) Slot Definition Property Type Characteristics Addition information Suggestions/Comments Suggested/Commented by > class slot range slot_uri multivalued ignore required description ignore ignore ignore ignore ignore -> - uses Evidence The eco:uses property is the inverse of the eco:used_in property and defines the relationship between eco:Assertion and eco:Evidence, indicating that an assertion relies on the evidence. Object Property Functional inverse of eco:used_in - used_in Assertion The eco:used_in property establishes a relationship between eco:Evidence and eco:Assertion, indicating that the evidence is utilized to support the corresponding assertion. Object Property Functional inverse of eco:uses - has_assertion_method AssertionMethod The brainkb:hasAssertionMethod property relates an eco:Assertion to an brainkb:AssertionMethod that differentiates different types of assertions techniques used while making an assertion. Object Property Functional -Evidence used_in Object Property Functional inverse of eco:uses -Assertion has_assertion_method The brainkb:hasAssertionMethod property relates an eco:Assertion to an brainkb:AssertionMethod that differentiates different types of assertions techniques used while making an assertion. Object Property Functional -Agent is_associated_with Activity The brainkb:isAssociatedWith property establishes relationships between different entities: it connects prov:Agent to prov:Activity, reflecting the involvement or connection between an agent and an activity. Object Property -Assertion is_associated_with AssertionSummary The brainkb:isAssociatedWith property establishes relationships between different entities:it links sepio:Assertion to brainkb:AssertionSummary, indicating the association between an assertion and its corresponding summary. Object Property -Assertion has_data_annotation DataAnnotation -Evidence is_associated_with EvidenceSummary The brainkb:isAssociatedWith property establishes relationships between different entities: it associates eco:Evidence with brainkb:EvidenceSummary, signifying the connection between evidence and its summarized representation. Object Property \ No newline at end of file +> internal_separator: "|" +Activity was_associate_with Agent prov:wasAssociatedWith +Agent has_identifier Identifier edam:has_identifier +Assertion has_annotation Annotation sio:000255 +Assertion was_generated_by Activity prov:wasGeneratedBy +Assertion has_evidence_line EvidenceLine sepio:0000006 A relationship between an assertion or proposition and an evidence line used in evaluating its validity. Object Property Functional +EvidenceItem reference Document sepio:0000442 +EvidenceLine has_evidence_item EvidenceItem sepio:0000084 A relation holding between an evidence line and an individual information entity that contributes to the argument it represents. +EvidenceLine was_generated_by Activity prov:wasGeneratedBy +Person member Organization foaf:member \ No newline at end of file diff --git a/linkml-schema/source_assertion_evidence/gsheet_output/Slots.tsv b/linkml-schema/source_assertion_evidence/gsheet_output/Slots.tsv index 8448840c8..b99ac43c1 100644 --- a/linkml-schema/source_assertion_evidence/gsheet_output/Slots.tsv +++ b/linkml-schema/source_assertion_evidence/gsheet_output/Slots.tsv @@ -1,12 +1,13 @@ - LinkML Slot or Attribute Name BICAN UUID SubGroup/LinkML Class Name Aliases Definition Nullable Multivalued Permissible Values Data Type Data Examples Min Value Max Value Unit Statistical Type Subsets Notes -> alias attribute slot_uri class ignore description ignore multivalued ignore range ignore ignore ignore ignore ignore in_subset ignore +SubGroup/LinkML Class Name LinkML Slot or Attribute Name BICAN UUID Alias Aliases Definition Nullable Multivalued Permissible Values Data Type Data Examples Min Value Max Value Unit Statistical Type Subsets Notes +> class attribute slot_uri alias ignore description ignore multivalued ignore range ignore ignore ignore ignore ignore in_subset ignore > internal_separator: "|" -hasAssertionCategory has_assertion_category brainkb:hasAssertionCategory Assertion The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to. FALSE Categories Object Property -hasEvidenceCategory has_evidence_category brainkb:hasEvidenceCategory Evidence The brainkb:hasEvidenceCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the evidence belongs to. FALSE Categories Object Property -hasEvidenceText has_evidence_text brainkb:hasEvidenceText Evidence The brainkb:hasEvidenceText property relates an eco:Evidence to an xsd:string, providing a textual excerpt of the evidence supporting the assertion. FALSE string Data Property -hasAssertionText has_assertion_text brainkb:hasAssertionText Assertion The brainkb:hasAssertionText property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made. FALSE string Data Property -hasAssertionMethod has_assertion_method brainkb:hasAssertionMethod Assertion The brainkb:hasAssertionMethod property relates an eco:Assertion to an eco:assertion method that differentiates different types of assertions techniques used while making an assertion. FALSE AssertionMethod Object Property -hasAssertionSummary has_assertion_summary brainkb:hasAssertionSummary AssertionSummary The brainkb:hasAssertionSummary property relates a brainkb:AssertionSummary to an xsd:string, providing a concise overview that differentiates various assertions. This summary encapsulates the core content of the assertion, allowing for easy identification and understanding of its essence. FALSE string Data Property -hasEvidenceSummary has_evidence_summary brainkb:hasEvidenceSummary EvidenceSummary The brainkb:hasEvidenceSummary property relates a brainkb:EvidenceSummary to an xsd:string, providing a concise overview that differentiates various evidence. This summary encapsulates the core content of the evidence, allowing for easy identification and understanding of its essence. FALSE string Data Property -endedAtTime ended_at_time Activity The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended. FALSE datetime Data Property -startedAtTime started_at_time Activity The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started. FALSE datetime Data Property \ No newline at end of file +Activity ended_at_time endedAtTime The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended. FALSE datetime Data Property +Activity started_at_time startedAtTime The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started. FALSE datetime Data Property +Assertion has_assertion_category brainkb:has_assertion_category The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to. FALSE Categories Object Property +Assertion has_assertion_description brainkb:has_assertion_description string +Assertion has_assertion_summary brainkb:has_assertion_summary The brainkb:has_assertion_text property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made. FALSE string Data Property +Document identifier datacite:identifier FALSE uri +EvidenceLine evidence_direction sepio:0000183 A relation indicating whether an evidence line supports or disputes a target proposition (or represents inconclusive evidence that is not sufficient for either). EvidenceDirection +EvidenceLine evidence_line_strength sepio:0000132 A relation describing the degree of support provided by an evidence line for a target assertion or proposition. EvidenceStrength +EvidenceLine has_evidence_category brainkb:has_evidence_category Categories +EvidenceLine has_evidenceline_description braiankb:has_evidenceline_description string \ No newline at end of file diff --git a/linkml-schema/source_assertion_evidence/gsheet_output/ValueSets.tsv b/linkml-schema/source_assertion_evidence/gsheet_output/ValueSets.tsv index 010b554ac..2a3abf02e 100644 --- a/linkml-schema/source_assertion_evidence/gsheet_output/ValueSets.tsv +++ b/linkml-schema/source_assertion_evidence/gsheet_output/ValueSets.tsv @@ -1,40 +1,38 @@ -variable_name value description category terminology_nhash -> enum permissible_value description ignore ignore -AssertionType Positive -AssertionType Negative -AssertionType Inconclusive -Categories Behavioral -Categories Biomarker -Categories DrugTarget -Categories Genetic -Categories ClinicalTrial -Categories Etiologic -Categories Neuroimaging -Categories Electrophysiological -Categories Molecular -Categories Pharmacological -Categories Neuropsychological -Categories Neurogenetic -Categories Neurochemical -Categories Neuroanatomical -Categories Neurodevelopmental -Categories Neuroinflammatory -Categories Neuroplasticity -Categories Neuropathological -Categories Neurocomputational -Categories Neuroendocrine -Categories Neuropharmacogenomic -Categories Neuroproteomic -Categories Neurogenomic -Categories Epigenetic -Categories Environmental -Categories Translational -Categories Therapeutic -Categories CognitiveNeuroscience -SignificanceLevel HighlySignificant P value less than 0.01 -SignificanceLevel Significant P value less than 0.05 -SignificanceLevel MarginallySignificant P value less than 0.10 -SignificanceLevel NotSignificant P value greater than or equal to 0.10 -SignificanceLevel Unknown Specifies that the significance level is unknown as the information is not present in the study. -Significance Clinical -Significance NonClinical \ No newline at end of file +variable_name value title description category terminology_nhash meaning +> enum permissible_value title description ignore ignore ignore +Categories Behavioral +Categories Biomarker +Categories DrugTarget +Categories Genetic +Categories ClinicalTrial +Categories Etiologic +Categories Neuroimaging +Categories Electrophysiological +Categories Molecular +Categories Pharmacological +Categories Neuropsychological +Categories Neurogenetic +Categories Neurochemical +Categories Neuroanatomical +Categories Neurodevelopmental +Categories Neuroinflammatory +Categories Neuroplasticity +Categories Neuropathological +Categories Neurocomputational +Categories Neuroendocrine +Categories Neuropharmacogenomic +Categories Neuroproteomic +Categories Neurogenomic +Categories Epigenetic +Categories Environmental +Categories Translational +Categories Therapeutic +Categories CognitiveNeuroscience +EvidenceStrength HighlySignificant P value less than 0.01 +EvidenceStrength Significant P value less than 0.05 +EvidenceStrength MarginallySignificant P value less than 0.10 +EvidenceStrength NotSignificant P value greater than or equal to 0.10 +EvidenceStrength Unknown Specifies that the significance level is unknown as the information is not present in the study. +EvidenceDirection supporting sepio:0000403 +EvidenceDirection disputing sepio:0000404 +EvidenceDirection inconclusive sepio:0000405 \ No newline at end of file From 8073cc6d259e64f773d09fa4826789b7bcacf774 Mon Sep 17 00:00:00 2001 From: "action@github.com" Date: Fri, 20 Dec 2024 00:05:12 +0000 Subject: [PATCH 06/26] generate another formats for assertion_evidence model --- erdiagram-autogen/assertion_evidence.md | 69 +++- json-schema-autogen/assertion_evidence.json | 214 +++++++---- .../assertion_evidence.context.jsonld | 137 +++++-- models_py-autogen/assertion_evidence.py | 346 +++++++++++------- 4 files changed, 495 insertions(+), 271 deletions(-) diff --git a/erdiagram-autogen/assertion_evidence.md b/erdiagram-autogen/assertion_evidence.md index c534ffef6..e1c379ecc 100644 --- a/erdiagram-autogen/assertion_evidence.md +++ b/erdiagram-autogen/assertion_evidence.md @@ -1,42 +1,71 @@ ```mermaid erDiagram +Activity { + datetime ended_at_time + datetime started_at_time +} +Agent { + +} +Annotation { + +} Assertion { Categories has_assertion_category - string has_assertion_text + string has_assertion_description + string has_assertion_summary +} +CellAnnotation { + } Document { + uri identifier +} +EvidenceItem { } -Activity { - datetime ended_at_time - datetime started_at_time +EvidenceLine { + EvidenceDirection evidence_direction + EvidenceStrength evidence_line_strength + Categories has_evidence_category + string has_evidenceline_description } -Agent { +Group { } -AssertionSummary { - string has_assertion_summary +Identifier { + } -EvidenceSummary { - string has_evidence_summary +OrcidIdentifier { + } -AssertionMethod { +Organization { } -DataAnnotation { +Person { } -Evidence { - Categories has_evidence_category - string has_evidence_text +PersonIdentifier { + +} +SoftwareAgent { + } -Assertion ||--|o AssertionMethod : "has_assertion_method" -Assertion ||--|o AssertionSummary : "is_associated_with" -Assertion ||--|o DataAnnotation : "has_data_annotation" -Agent ||--|o Activity : "is_associated_with" -Evidence ||--|o Assertion : "used_in" -Evidence ||--|o EvidenceSummary : "is_associated_with" +Activity ||--|o Agent : "was_associate_with" +Agent ||--|o Identifier : "has_identifier" +Assertion ||--|o Annotation : "has_annotation" +Assertion ||--|o Activity : "was_generated_by" +Assertion ||--|o EvidenceLine : "has_evidence_line" +Document ||--|o Document : "reference" +EvidenceItem ||--|o Document : "reference" +EvidenceLine ||--|o EvidenceItem : "has_evidence_item" +EvidenceLine ||--|o Activity : "was_generated_by" +Group ||--|o Identifier : "has_identifier" +Organization ||--|o Identifier : "has_identifier" +Person ||--|o Organization : "member" +Person ||--|o Identifier : "has_identifier" +SoftwareAgent ||--|o Identifier : "has_identifier" ``` diff --git a/json-schema-autogen/assertion_evidence.json b/json-schema-autogen/assertion_evidence.json index 6d8fd4db1..b0950580f 100644 --- a/json-schema-autogen/assertion_evidence.json +++ b/json-schema-autogen/assertion_evidence.json @@ -13,6 +13,9 @@ "description": "The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started.", "format": "date-time", "type": "string" + }, + "was_associate_with": { + "$ref": "#/$defs/Agent" } }, "title": "Activity", @@ -22,69 +25,48 @@ "additionalProperties": false, "description": "An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity.", "properties": { - "is_associated_with": { - "$ref": "#/$defs/Activity", - "description": "The brainkb:isAssociatedWith property establishes relationships between different entities: it connects prov:Agent to prov:Activity, reflecting the involvement or connection between an agent and an activity." + "has_identifier": { + "$ref": "#/$defs/Identifier" } }, "title": "Agent", "type": "object" }, + "Annotation": { + "additionalProperties": false, + "description": "An annotation is a written explanatory or critical description, or other in-context information (e.g., pattern, motif, link), that has been associated with data or other types of information.", + "title": "Annotation", + "type": "object" + }, "Assertion": { "additionalProperties": false, "description": "A statement made by a particular agent on a particular occasion that a particular proposition is true, based on the evaluation of one or more lines of evidence.", "properties": { - "hasAssertionCategory": { + "has_annotation": { + "$ref": "#/$defs/Annotation" + }, + "has_assertion_category": { "$ref": "#/$defs/Categories", "description": "The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to." }, - "hasAssertionMethod": { - "$ref": "#/$defs/AssertionMethod", - "description": "The brainkb:hasAssertionMethod property relates an eco:Assertion to an brainkb:AssertionMethod that differentiates different types of assertions techniques used while making an assertion." + "has_assertion_description": { + "type": "string" }, - "hasAssertionText": { - "description": "The brainkb:hasAssertionText property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.", + "has_assertion_summary": { + "description": "The brainkb:has_assertion_text property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.", "type": "string" }, - "has_data_annotation": { - "$ref": "#/$defs/DataAnnotation" + "has_evidence_line": { + "$ref": "#/$defs/EvidenceLine", + "description": "A relationship between an assertion or proposition and an evidence line used in evaluating its validity." }, - "is_associated_with": { - "$ref": "#/$defs/AssertionSummary", - "description": "The brainkb:isAssociatedWith property establishes relationships between different entities:it links sepio:Assertion to brainkb:AssertionSummary, indicating the association between an assertion and its corresponding summary." + "was_generated_by": { + "$ref": "#/$defs/Activity" } }, "title": "Assertion", "type": "object" }, - "AssertionMethod": { - "additionalProperties": false, - "description": "A means by which a statement is made about the entity", - "title": "AssertionMethod", - "type": "object" - }, - "AssertionSummary": { - "additionalProperties": false, - "description": "A summary is a brief statement or description of the main points, especially as a conclusion to a work about the assertion.", - "properties": { - "hasAssertionSummary": { - "description": "The brainkb:hasAssertionSummary property relates a brainkb:AssertionSummary to an xsd:string, providing a concise overview that differentiates various assertions. This summary encapsulates the core content of the assertion, allowing for easy identification and understanding of its essence.", - "type": "string" - } - }, - "title": "AssertionSummary", - "type": "object" - }, - "AssertionType": { - "description": "", - "enum": [ - "Positive", - "Negative", - "Inconclusive" - ], - "title": "AssertionType", - "type": "string" - }, "Categories": { "description": "", "enum": [ @@ -120,64 +102,77 @@ "title": "Categories", "type": "string" }, - "DataAnnotation": { + "CellAnnotation": { "additionalProperties": false, "description": "", - "title": "DataAnnotation", + "title": "CellAnnotation", "type": "object" }, "Document": { "additionalProperties": false, "description": "A collection of information content entities intended to be understood together as a whole", + "properties": { + "identifier": { + "type": "string" + }, + "reference": { + "$ref": "#/$defs/Document" + } + }, "title": "Document", "type": "object" }, - "Evidence": { + "EvidenceDirection": { + "description": "", + "enum": [ + "supporting", + "disputing", + "inconclusive" + ], + "title": "EvidenceDirection", + "type": "string" + }, + "EvidenceItem": { "additionalProperties": false, "description": "", "properties": { - "hasEvidenceCategory": { - "$ref": "#/$defs/Categories", - "description": "The brainkb:hasEvidenceCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the evidence belongs to." - }, - "hasEvidenceText": { - "description": "The brainkb:hasEvidenceText property relates an eco:Evidence to an xsd:string, providing a textual excerpt of the evidence supporting the assertion.", - "type": "string" - }, - "is_associated_with": { - "$ref": "#/$defs/EvidenceSummary", - "description": "The brainkb:isAssociatedWith property establishes relationships between different entities: it associates eco:Evidence with brainkb:EvidenceSummary, signifying the connection between evidence and its summarized representation." - }, - "used_in": { - "$ref": "#/$defs/Assertion", - "description": "The eco:used_in property establishes a relationship between eco:Evidence and eco:Assertion, indicating that the evidence is utilized to support the corresponding assertion." + "reference": { + "$ref": "#/$defs/Document" } }, - "title": "Evidence", + "title": "EvidenceItem", "type": "object" }, - "EvidenceSummary": { + "EvidenceLine": { "additionalProperties": false, - "description": "A summary is a brief statement or description of the main points, especially as a conclusion to a work about the evidence.", + "description": "An evidence line represents an independent and meaningful argument for or against a particular proposition, that is based on the interpretation of one or more pieces of information as evidence.", "properties": { - "hasEvidenceSummary": { - "description": "The brainkb:hasEvidenceSummary property relates a brainkb:EvidenceSummary to an xsd:string, providing a concise overview that differentiates various evidence. This summary encapsulates the core content of the evidence, allowing for easy identification and understanding of its essence.", + "evidence_direction": { + "$ref": "#/$defs/EvidenceDirection", + "description": "A relation indicating whether an evidence line supports or disputes a target proposition (or represents inconclusive evidence that is not sufficient for either)." + }, + "evidence_line_strength": { + "$ref": "#/$defs/EvidenceStrength", + "description": "A relation describing the degree of support provided by an evidence line for a target assertion or proposition." + }, + "has_evidence_category": { + "$ref": "#/$defs/Categories" + }, + "has_evidence_item": { + "$ref": "#/$defs/EvidenceItem", + "description": "A relation holding between an evidence line and an individual information entity that contributes to the argument it represents." + }, + "has_evidenceline_description": { "type": "string" + }, + "was_generated_by": { + "$ref": "#/$defs/Activity" } }, - "title": "EvidenceSummary", + "title": "EvidenceLine", "type": "object" }, - "Significance": { - "description": "", - "enum": [ - "Clinical", - "NonClinical" - ], - "title": "Significance", - "type": "string" - }, - "SignificanceLevel": { + "EvidenceStrength": { "description": "", "enum": [ "HighlySignificant", @@ -186,8 +181,73 @@ "NotSignificant", "Unknown" ], - "title": "SignificanceLevel", + "title": "EvidenceStrength", "type": "string" + }, + "Group": { + "additionalProperties": false, + "description": "", + "properties": { + "has_identifier": { + "$ref": "#/$defs/Identifier" + } + }, + "title": "Group", + "type": "object" + }, + "Identifier": { + "additionalProperties": false, + "description": "", + "title": "Identifier", + "type": "object" + }, + "OrcidIdentifier": { + "additionalProperties": false, + "description": "", + "title": "OrcidIdentifier", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "description": "", + "properties": { + "has_identifier": { + "$ref": "#/$defs/Identifier" + } + }, + "title": "Organization", + "type": "object" + }, + "Person": { + "additionalProperties": false, + "description": "", + "properties": { + "has_identifier": { + "$ref": "#/$defs/Identifier" + }, + "member": { + "$ref": "#/$defs/Organization" + } + }, + "title": "Person", + "type": "object" + }, + "PersonIdentifier": { + "additionalProperties": false, + "description": "", + "title": "PersonIdentifier", + "type": "object" + }, + "SoftwareAgent": { + "additionalProperties": false, + "description": "", + "properties": { + "has_identifier": { + "$ref": "#/$defs/Identifier" + } + }, + "title": "SoftwareAgent", + "type": "object" } }, "$id": "https://identifiers.org/brain-bican/assertion-evidence-schema", diff --git a/jsonld-context-autogen/assertion_evidence.context.jsonld b/jsonld-context-autogen/assertion_evidence.context.jsonld index 2175fccb2..552ad74ff 100644 --- a/jsonld-context-autogen/assertion_evidence.context.jsonld +++ b/jsonld-context-autogen/assertion_evidence.context.jsonld @@ -5,18 +5,36 @@ }, "@context": { "bican": "https://identifiers.org/brain-bican/vocab/", + "braiankb": "http://example.org/braiankb/", "brainkb": "https://brainkb.org/", + "datacite": "http://purl.org/spar/datacite/", + "dcterms": "http://purl.org/dc/terms/", "eco": { "@id": "http://purl.obolibrary.org/obo/ECO_", "@prefix": true }, + "edam": "http://edamontology.org/", + "foaf": "http://xmlns.com/foaf/0.1/", + "iao": { + "@id": "http://purl.obolibrary.org/obo/IAO_", + "@prefix": true + }, "linkml": "https://w3id.org/linkml/", + "oa": "http://www.w3.org/ns/oa#", "prov": "http://www.w3.org/ns/prov#", + "ro": { + "@id": "http://purl.obolibrary.org/obo/RO_", + "@prefix": true + }, "schema": "http://schema.org/", "sepio": { "@id": "http://purl.obolibrary.org/obo/SEPIO_", "@prefix": true }, + "sio": { + "@id": "http://semanticscience.org/resource/SIO_", + "@prefix": true + }, "skos": "http://www.w3.org/2004/02/skos/core#", "spdx": "http://spdx.org/rdf/terms#", "@vocab": "https://brainkb.org/", @@ -28,57 +46,78 @@ "@type": "xsd:dateTime", "@id": "startedAtTime" }, - "hasAssertionCategory": { + "has_assertion_category": { "@context": { "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" }, - "@id": "hasAssertionCategory" + "@id": "has_assertion_category" + }, + "has_assertion_description": { + "@id": "has_assertion_description" }, - "hasAssertionMethod": { + "has_assertion_summary": { + "@id": "has_assertion_summary" + }, + "identifier": { "@type": "@id", - "@id": "hasAssertionMethod" + "@id": "datacite:identifier" }, - "hasAssertionText": { - "@id": "hasAssertionText" + "evidence_direction": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "sepio:0000183" }, - "hasAssertionSummary": { - "@id": "hasAssertionSummary" + "evidence_line_strength": { + "@context": { + "@vocab": "@null", + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "sepio:0000132" }, - "hasEvidenceCategory": { + "has_evidence_category": { "@context": { "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" }, - "@id": "hasEvidenceCategory" + "@id": "has_evidence_category" }, - "hasEvidenceText": { - "@id": "hasEvidenceText" + "has_evidenceline_description": { + "@id": "braiankb:has_evidenceline_description" }, - "hasEvidenceSummary": { - "@id": "hasEvidenceSummary" + "has_annotation": { + "@id": "has_annotation" }, - "has_assertion_method": { - "@type": "@id", - "@id": "has_assertion_method" + "has_evidence_item": { + "@id": "has_evidence_item" }, - "has_data_annotation": { - "@id": "has_data_annotation" + "has_evidence_line": { + "@id": "has_evidence_line" }, - "is_associated_with": { - "@id": "is_associated_with" + "has_identifier": { + "@id": "has_identifier" }, - "used_in": { - "@type": "@id", - "@id": "used_in" + "member": { + "@id": "member" }, - "uses": { - "@type": "@id", - "@id": "uses" + "reference": { + "@id": "reference" + }, + "was_associate_with": { + "@id": "was_associate_with" + }, + "was_generated_by": { + "@id": "was_generated_by" }, "Activity": { "@id": "prov:Activity" @@ -86,26 +125,44 @@ "Agent": { "@id": "prov:Agent" }, + "Annotation": { + "@id": "oa:Annotation" + }, "Assertion": { - "@id": "sepio:Assertion" + "@id": "sepio:0000001" + }, + "CellAnnotation": { + "@id": "CellAnnotation" }, - "AssertionMethod": { - "@id": "eco:0000217" + "Document": { + "@id": "iao:0000310" }, - "AssertionSummary": { - "@id": "AssertionSummary" + "EvidenceItem": { + "@id": "sepio:0000149" }, - "DataAnnotation": { - "@id": "DataAnnotation" + "EvidenceLine": { + "@id": "sepio:0000002" }, - "Document": { - "@id": "sepio:Document" + "Group": { + "@id": "foaf:Group" + }, + "Identifier": { + "@id": "edam:data_0842" + }, + "OrcidIdentifier": { + "@id": "edam:data_4022" + }, + "Organization": { + "@id": "prov:Organization" + }, + "Person": { + "@id": "prov:Person" }, - "Evidence": { - "@id": "Evidence" + "PersonIdentifier": { + "@id": "edam:data_2118" }, - "EvidenceSummary": { - "@id": "EvidenceSummary" + "SoftwareAgent": { + "@id": "prov:SoftwareAgent" } } } diff --git a/models_py-autogen/assertion_evidence.py b/models_py-autogen/assertion_evidence.py index 2ae9fec24..aa5d3db8c 100644 --- a/models_py-autogen/assertion_evidence.py +++ b/models_py-autogen/assertion_evidence.py @@ -74,29 +74,41 @@ def __contains__(self, key:str) -> bool: 'name': 'assertion-evidence-schema', 'prefixes': {'bican': {'prefix_prefix': 'bican', 'prefix_reference': 'https://identifiers.org/brain-bican/vocab/'}, + 'braiankb': {'prefix_prefix': 'braiankb', + 'prefix_reference': 'http://example.org/braiankb/'}, 'brainkb': {'prefix_prefix': 'brainkb', 'prefix_reference': 'https://brainkb.org/'}, + 'datacite': {'prefix_prefix': 'datacite', + 'prefix_reference': 'http://purl.org/spar/datacite/'}, + 'dcterms': {'prefix_prefix': 'dcterms', + 'prefix_reference': 'http://purl.org/dc/terms/'}, 'eco': {'prefix_prefix': 'eco', 'prefix_reference': 'http://purl.obolibrary.org/obo/ECO_'}, + 'edam': {'prefix_prefix': 'edam', + 'prefix_reference': 'http://edamontology.org/'}, + 'foaf': {'prefix_prefix': 'foaf', + 'prefix_reference': 'http://xmlns.com/foaf/0.1/'}, + 'iao': {'prefix_prefix': 'iao', + 'prefix_reference': 'http://purl.obolibrary.org/obo/IAO_'}, 'linkml': {'prefix_prefix': 'linkml', 'prefix_reference': 'https://w3id.org/linkml/'}, + 'oa': {'prefix_prefix': 'oa', + 'prefix_reference': 'http://www.w3.org/ns/oa#'}, 'prov': {'prefix_prefix': 'prov', 'prefix_reference': 'http://www.w3.org/ns/prov#'}, + 'ro': {'prefix_prefix': 'ro', + 'prefix_reference': 'http://purl.obolibrary.org/obo/RO_'}, 'schema': {'prefix_prefix': 'schema', 'prefix_reference': 'http://schema.org/'}, 'sepio': {'prefix_prefix': 'sepio', 'prefix_reference': 'http://purl.obolibrary.org/obo/SEPIO_'}, + 'sio': {'prefix_prefix': 'sio', + 'prefix_reference': 'http://semanticscience.org/resource/SIO_'}, 'spdx': {'prefix_prefix': 'spdx', 'prefix_reference': 'http://spdx.org/rdf/terms#'}}, 'source_file': 'assertion_evidence.yaml', 'title': 'Assertion Evidence Schema'} ) -class AssertionType(str, Enum): - Positive = "Positive" - Negative = "Negative" - Inconclusive = "Inconclusive" - - class Categories(str, Enum): Behavioral = "Behavioral" Biomarker = "Biomarker" @@ -128,7 +140,7 @@ class Categories(str, Enum): CognitiveNeuroscience = "CognitiveNeuroscience" -class SignificanceLevel(str, Enum): +class EvidenceStrength(str, Enum): # P value less than 0.01 HighlySignificant = "HighlySignificant" # P value less than 0.05 @@ -141,182 +153,248 @@ class SignificanceLevel(str, Enum): Unknown = "Unknown" -class Significance(str, Enum): - Clinical = "Clinical" - NonClinical = "NonClinical" +class EvidenceDirection(str, Enum): + supporting = "supporting" + disputing = "disputing" + inconclusive = "inconclusive" + + + +class Activity(ConfiguredBaseModel): + """ + An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Activity', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', + 'slot_usage': {'was_associate_with': {'name': 'was_associate_with', + 'range': 'Agent', + 'slot_uri': 'prov:wasAssociatedWith'}}}) + + was_associate_with: Optional[Agent] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'was_associate_with', + 'domain_of': ['Activity'], + 'slot_uri': 'prov:wasAssociatedWith'} }) + ended_at_time: Optional[datetime ] = Field(None, description="""The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended.""", json_schema_extra = { "linkml_meta": {'alias': 'endedAtTime', 'domain_of': ['Activity']} }) + started_at_time: Optional[datetime ] = Field(None, description="""The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started.""", json_schema_extra = { "linkml_meta": {'alias': 'startedAtTime', 'domain_of': ['Activity']} }) + + +class Agent(ConfiguredBaseModel): + """ + An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Agent', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', + 'slot_usage': {'has_identifier': {'domain_of': ['Agent'], + 'name': 'has_identifier', + 'range': 'Identifier', + 'slot_uri': 'edam:has_identifier'}}}) + + has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + 'domain_of': ['Agent'], + 'slot_uri': 'edam:has_identifier'} }) +class Annotation(ConfiguredBaseModel): + """ + An annotation is a written explanatory or critical description, or other in-context information (e.g., pattern, motif, link), that has been associated with data or other types of information. + """ + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'oa:Annotation', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) + + pass + class Assertion(ConfiguredBaseModel): """ A statement made by a particular agent on a particular occasion that a particular proposition is true, based on the evaluation of one or more lines of evidence. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'sepio:Assertion', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'sepio:0000001', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', - 'slot_usage': {'has_assertion_method': {'description': 'The ' - 'brainkb:hasAssertionMethod ' - 'property relates an ' - 'eco:Assertion to an ' - 'brainkb:AssertionMethod ' - 'that differentiates ' - 'different types of ' - 'assertions techniques ' - 'used while making an ' - 'assertion.', - 'name': 'has_assertion_method'}, - 'has_data_annotation': {'name': 'has_data_annotation', - 'range': 'DataAnnotation'}, - 'is_associated_with': {'description': 'The ' - 'brainkb:isAssociatedWith ' - 'property establishes ' - 'relationships between ' - 'different entities:it ' - 'links sepio:Assertion ' - 'to ' - 'brainkb:AssertionSummary, ' - 'indicating the ' - 'association between an ' - 'assertion and its ' - 'corresponding summary.', - 'name': 'is_associated_with', - 'range': 'AssertionSummary'}}}) - - has_assertion_method: Optional[AssertionMethod] = Field(None, description="""The brainkb:hasAssertionMethod property relates an eco:Assertion to an brainkb:AssertionMethod that differentiates different types of assertions techniques used while making an assertion.""", json_schema_extra = { "linkml_meta": {'alias': 'hasAssertionMethod', + 'slot_usage': {'has_annotation': {'name': 'has_annotation', + 'range': 'Annotation', + 'slot_uri': 'sio:000255'}, + 'has_evidence_line': {'description': 'A relationship between ' + 'an assertion or ' + 'proposition and an ' + 'evidence line used in ' + 'evaluating its validity.', + 'name': 'has_evidence_line', + 'range': 'EvidenceLine', + 'slot_uri': 'sepio:0000006'}, + 'was_generated_by': {'name': 'was_generated_by', + 'range': 'Activity', + 'slot_uri': 'prov:wasGeneratedBy'}}}) + + has_annotation: Optional[Annotation] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_annotation', + 'domain_of': ['Assertion'], + 'slot_uri': 'sio:000255'} }) + was_generated_by: Optional[Activity] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + 'domain_of': ['Assertion', 'EvidenceLine'], + 'slot_uri': 'prov:wasGeneratedBy'} }) + has_evidence_line: Optional[EvidenceLine] = Field(None, description="""A relationship between an assertion or proposition and an evidence line used in evaluating its validity.""", json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_line', 'domain_of': ['Assertion'], - 'slot_uri': 'brainkb:hasAssertionMethod'} }) - is_associated_with: Optional[AssertionSummary] = Field(None, description="""The brainkb:isAssociatedWith property establishes relationships between different entities:it links sepio:Assertion to brainkb:AssertionSummary, indicating the association between an assertion and its corresponding summary.""", json_schema_extra = { "linkml_meta": {'alias': 'is_associated_with', 'domain_of': ['Assertion', 'Agent', 'Evidence']} }) - has_data_annotation: Optional[DataAnnotation] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_data_annotation', 'domain_of': ['Assertion']} }) - has_assertion_category: Optional[Categories] = Field(None, description="""The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to.""", json_schema_extra = { "linkml_meta": {'alias': 'hasAssertionCategory', + 'slot_uri': 'sepio:0000006'} }) + has_assertion_category: Optional[Categories] = Field(None, description="""The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to.""", json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_category', 'domain_of': ['Assertion'], - 'slot_uri': 'brainkb:hasAssertionCategory'} }) - has_assertion_text: Optional[str] = Field(None, description="""The brainkb:hasAssertionText property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.""", json_schema_extra = { "linkml_meta": {'alias': 'hasAssertionText', + 'slot_uri': 'brainkb:has_assertion_category'} }) + has_assertion_description: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_description', 'domain_of': ['Assertion'], - 'slot_uri': 'brainkb:hasAssertionText'} }) + 'slot_uri': 'brainkb:has_assertion_description'} }) + has_assertion_summary: Optional[str] = Field(None, description="""The brainkb:has_assertion_text property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.""", json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_summary', + 'domain_of': ['Assertion'], + 'slot_uri': 'brainkb:has_assertion_summary'} }) -class Document(ConfiguredBaseModel): - """ - A collection of information content entities intended to be understood together as a whole - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'sepio:Document', +class CellAnnotation(Annotation): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'brainkb:CellAnnotation', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) pass -class Activity(ConfiguredBaseModel): +class EvidenceItem(ConfiguredBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'sepio:0000149', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', + 'slot_usage': {'reference': {'name': 'reference', + 'range': 'Document', + 'slot_uri': 'sepio:0000442'}}}) + + reference: Optional[Document] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'reference', + 'domain_of': ['EvidenceItem'], + 'slot_uri': 'sepio:0000442'} }) + + +class Document(EvidenceItem): """ - An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities. + A collection of information content entities intended to be understood together as a whole """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Activity', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'iao:0000310', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - ended_at_time: Optional[datetime ] = Field(None, description="""The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended.""", json_schema_extra = { "linkml_meta": {'alias': 'endedAtTime', 'domain_of': ['Activity']} }) - started_at_time: Optional[datetime ] = Field(None, description="""The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started.""", json_schema_extra = { "linkml_meta": {'alias': 'startedAtTime', 'domain_of': ['Activity']} }) + identifier: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'identifier', + 'domain_of': ['Document'], + 'slot_uri': 'datacite:identifier'} }) + reference: Optional[Document] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'reference', + 'domain_of': ['EvidenceItem'], + 'slot_uri': 'sepio:0000442'} }) -class Agent(ConfiguredBaseModel): +class EvidenceLine(ConfiguredBaseModel): """ - An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity. + An evidence line represents an independent and meaningful argument for or against a particular proposition, that is based on the interpretation of one or more pieces of information as evidence. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Agent', + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'sepio:0000002', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', - 'slot_usage': {'is_associated_with': {'description': 'The ' - 'brainkb:isAssociatedWith ' - 'property establishes ' - 'relationships between ' - 'different entities: it ' - 'connects prov:Agent to ' - 'prov:Activity, ' - 'reflecting the ' - 'involvement or ' - 'connection between an ' - 'agent and an activity.', - 'name': 'is_associated_with', - 'range': 'Activity'}}}) - - is_associated_with: Optional[Activity] = Field(None, description="""The brainkb:isAssociatedWith property establishes relationships between different entities: it connects prov:Agent to prov:Activity, reflecting the involvement or connection between an agent and an activity.""", json_schema_extra = { "linkml_meta": {'alias': 'is_associated_with', 'domain_of': ['Assertion', 'Agent', 'Evidence']} }) - - -class AssertionSummary(ConfiguredBaseModel): - """ - A summary is a brief statement or description of the main points, especially as a conclusion to a work about the assertion. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'brainkb:AssertionSummary', + 'slot_usage': {'has_evidence_item': {'description': 'A relation holding ' + 'between an evidence line ' + 'and an individual ' + 'information entity that ' + 'contributes to the ' + 'argument it represents.', + 'domain_of': ['EvidenceLine'], + 'name': 'has_evidence_item', + 'range': 'EvidenceItem', + 'slot_uri': 'sepio:0000084'}, + 'was_generated_by': {'domain_of': ['Assertion', 'EvidenceLine'], + 'name': 'was_generated_by', + 'range': 'Activity', + 'slot_uri': 'prov:wasGeneratedBy'}}}) + + has_evidence_item: Optional[EvidenceItem] = Field(None, description="""A relation holding between an evidence line and an individual information entity that contributes to the argument it represents.""", json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_item', + 'domain_of': ['EvidenceLine'], + 'slot_uri': 'sepio:0000084'} }) + was_generated_by: Optional[Activity] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + 'domain_of': ['Assertion', 'EvidenceLine'], + 'slot_uri': 'prov:wasGeneratedBy'} }) + evidence_direction: Optional[EvidenceDirection] = Field(None, description="""A relation indicating whether an evidence line supports or disputes a target proposition (or represents inconclusive evidence that is not sufficient for either).""", json_schema_extra = { "linkml_meta": {'alias': 'evidence_direction', + 'domain_of': ['EvidenceLine'], + 'slot_uri': 'sepio:0000183'} }) + evidence_line_strength: Optional[EvidenceStrength] = Field(None, description="""A relation describing the degree of support provided by an evidence line for a target assertion or proposition.""", json_schema_extra = { "linkml_meta": {'alias': 'evidence_line_strength', + 'domain_of': ['EvidenceLine'], + 'slot_uri': 'sepio:0000132'} }) + has_evidence_category: Optional[Categories] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_category', + 'domain_of': ['EvidenceLine'], + 'slot_uri': 'brainkb:has_evidence_category'} }) + has_evidenceline_description: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_evidenceline_description', + 'domain_of': ['EvidenceLine'], + 'slot_uri': 'braiankb:has_evidenceline_description'} }) + + +class Group(Agent): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'foaf:Group', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - has_assertion_summary: Optional[str] = Field(None, description="""The brainkb:hasAssertionSummary property relates a brainkb:AssertionSummary to an xsd:string, providing a concise overview that differentiates various assertions. This summary encapsulates the core content of the assertion, allowing for easy identification and understanding of its essence.""", json_schema_extra = { "linkml_meta": {'alias': 'hasAssertionSummary', - 'domain_of': ['AssertionSummary'], - 'slot_uri': 'brainkb:hasAssertionSummary'} }) + has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + 'domain_of': ['Agent'], + 'slot_uri': 'edam:has_identifier'} }) -class EvidenceSummary(ConfiguredBaseModel): - """ - A summary is a brief statement or description of the main points, especially as a conclusion to a work about the evidence. - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'brainkb:EvidenceSummary', +class Identifier(ConfiguredBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'edam:data_0842', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - has_evidence_summary: Optional[str] = Field(None, description="""The brainkb:hasEvidenceSummary property relates a brainkb:EvidenceSummary to an xsd:string, providing a concise overview that differentiates various evidence. This summary encapsulates the core content of the evidence, allowing for easy identification and understanding of its essence.""", json_schema_extra = { "linkml_meta": {'alias': 'hasEvidenceSummary', - 'domain_of': ['EvidenceSummary'], - 'slot_uri': 'brainkb:hasEvidenceSummary'} }) + pass -class AssertionMethod(ConfiguredBaseModel): - """ - A means by which a statement is made about the entity - """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'eco:0000217', +class Organization(Group): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Organization', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) + + has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + 'domain_of': ['Agent'], + 'slot_uri': 'edam:has_identifier'} }) + + +class Person(Agent): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Person', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', + 'slot_usage': {'member': {'name': 'member', + 'range': 'Organization', + 'slot_uri': 'foaf:member'}}}) + + member: Optional[Organization] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'member', 'domain_of': ['Person'], 'slot_uri': 'foaf:member'} }) + has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + 'domain_of': ['Agent'], + 'slot_uri': 'edam:has_identifier'} }) + + +class PersonIdentifier(Identifier): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'edam:data_2118', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) pass -class DataAnnotation(ConfiguredBaseModel): - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'brainkb:DataAnnotation', +class OrcidIdentifier(PersonIdentifier): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'edam:data_4022', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) pass -class Evidence(ConfiguredBaseModel): - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', - 'slot_usage': {'is_associated_with': {'description': 'The ' - 'brainkb:isAssociatedWith ' - 'property establishes ' - 'relationships between ' - 'different entities: it ' - 'associates eco:Evidence ' - 'with ' - 'brainkb:EvidenceSummary, ' - 'signifying the ' - 'connection between ' - 'evidence and its ' - 'summarized ' - 'representation.', - 'name': 'is_associated_with', - 'range': 'EvidenceSummary'}, - 'used_in': {'name': 'used_in'}}}) - - used_in: Optional[Assertion] = Field(None, description="""The eco:used_in property establishes a relationship between eco:Evidence and eco:Assertion, indicating that the evidence is utilized to support the corresponding assertion.""", json_schema_extra = { "linkml_meta": {'alias': 'used_in', 'domain_of': ['Evidence']} }) - is_associated_with: Optional[EvidenceSummary] = Field(None, description="""The brainkb:isAssociatedWith property establishes relationships between different entities: it associates eco:Evidence with brainkb:EvidenceSummary, signifying the connection between evidence and its summarized representation.""", json_schema_extra = { "linkml_meta": {'alias': 'is_associated_with', 'domain_of': ['Assertion', 'Agent', 'Evidence']} }) - has_evidence_category: Optional[Categories] = Field(None, description="""The brainkb:hasEvidenceCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the evidence belongs to.""", json_schema_extra = { "linkml_meta": {'alias': 'hasEvidenceCategory', - 'domain_of': ['Evidence'], - 'slot_uri': 'brainkb:hasEvidenceCategory'} }) - has_evidence_text: Optional[str] = Field(None, description="""The brainkb:hasEvidenceText property relates an eco:Evidence to an xsd:string, providing a textual excerpt of the evidence supporting the assertion.""", json_schema_extra = { "linkml_meta": {'alias': 'hasEvidenceText', - 'domain_of': ['Evidence'], - 'slot_uri': 'brainkb:hasEvidenceText'} }) +class SoftwareAgent(Agent): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:SoftwareAgent', + 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) + + has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + 'domain_of': ['Agent'], + 'slot_uri': 'edam:has_identifier'} }) # Model rebuild # see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model -Assertion.model_rebuild() -Document.model_rebuild() Activity.model_rebuild() Agent.model_rebuild() -AssertionSummary.model_rebuild() -EvidenceSummary.model_rebuild() -AssertionMethod.model_rebuild() -DataAnnotation.model_rebuild() -Evidence.model_rebuild() +Annotation.model_rebuild() +Assertion.model_rebuild() +CellAnnotation.model_rebuild() +EvidenceItem.model_rebuild() +Document.model_rebuild() +EvidenceLine.model_rebuild() +Group.model_rebuild() +Identifier.model_rebuild() +Organization.model_rebuild() +Person.model_rebuild() +PersonIdentifier.model_rebuild() +OrcidIdentifier.model_rebuild() +SoftwareAgent.model_rebuild() From d4aebcb947d4c78c391dde2e58f57ec8f618be5f Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 9 Jan 2025 07:33:28 -0500 Subject: [PATCH 07/26] updating README files --- README.md | 79 +++++++++++++++-------------- erdiagram-autogen/README.md | 3 ++ json-schema-autogen/README.md | 3 ++ jsonld-context-autogen/README.md | 3 ++ linkml-schema/README.md | 86 +++++++++++++++++++++++++++++++- models_py-autogen/README.md | 6 ++- 6 files changed, 137 insertions(+), 43 deletions(-) create mode 100644 erdiagram-autogen/README.md create mode 100644 json-schema-autogen/README.md create mode 100644 jsonld-context-autogen/README.md diff --git a/README.md b/README.md index 8ae539481..c31f5fb3d 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,21 @@ # BICAN Knowledgebase Data Models -This repo contains data models generated using [LinkML](https://linkml.io/linkml/) for BICAN knowledgebase. LinkML is a linked data modeling language that supports YAML, RDF, and JSON. +This repo contains data models generated using [LinkML](https://linkml.io/linkml/) for the [BICAN knowledgebase project](https://www.portal.brain-bican.org/teams/bican-knowledgebase) founded by the National Institute of Mental Health. -In `/linkml-schema`, there are linkML `yaml` schema files that adhere to the linkML version of `1.5.0`. -* The __Library Generation Model__ is designed to represent types and relationships of samples and digital data assets generated during processes that generate multimodal genomic data. -* The __Genome Annotation Model__ is designed to represent types and relationships of an organism's annotated genome i.e. gene annotations, genome annotations, genome assemblies, organisms. -* The __Anatomical Strucutre Model__ is designed to represent types and relationships of anatomical brain structures. -* The existing models such as __Biolink__ and __CCN__ are imported. - -In `/json-schema` and `/models_py`, there are `json` and `py` files generated using linkML schema for e.g.: -* `gen-json-schema linkml-schema/genome_annotation.yaml > json-schema/genome_annotation.json` -* `gen-pydantic linkml-schema/genome_annotation.yaml > models_py/genome_annotation.py` - -In `/data-examples`, there are source data files: -* `figure1exampledata.yaml` is representing relational data in figure 1 of `A high-resolution transcriptomic and spatial atlas of cell types in the whole mouse brain` -* https://www.biorxiv.org/content/10.1101/2023.03.06.531121v1.full.pdf - -Notes: -Initialize the packages using: -* `python -m pip install .` -* `python -m pip install .[test]` - -Run `pytest` to run all tests in `/tests` ## Status Board Here are the BICAN LinkML knowledgebase schemas and their statuses. -| Model | Version | Release | Status | -|:--|:--|:--|:--| -| [Assertion Evidence Model] | [] | [] | under development | -| [Library Generation Model] | [] | [] | under development | -| [Anatomical Structure Model] | [] | [] | under development | -| [Genome Annotation Model] | [] | [] | under development | -| [BICAN BioLink] | [] | [] | under development | -| [CCN2] | [] | [] | deprecated | -| [Figure1] | [] | [] | deprecated | -| | | | | +| Model | Short Description | Release with Latest Updates | Status | +|:---------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------|:----------------------------|:--| +| [Assertion Evidence Model] | Types and relationships of assertions and evidences/ | 0.2.0 | under development | +| [Library Generation Model] | Types and relationships of samples and digital data assets generated during processes that generate multimodal genomic data. | 0.2.0 | under development | +| [Anatomical Structure Model] | Types and relationships of anatomical brain structures. | 0.1.0 | under development | +| [Genome Annotation Model] | Types and relationships of an organism's annotated genome. | 0.2.0 | under development | +| [BICAN BioLink] | BICAN subset of classes from the Biolink model. | 0.2.0 | under development | +| [CCN2] | | 0.1.0 | deprecated | +| [Figure1] | | 0.1.0 | deprecated | | | | [Assertion Evidence Model]: linkml-schema/assertion_evidence.yaml @@ -52,23 +31,43 @@ Here are the BICAN LinkML knowledgebase schemas and their statuses. [Figure1]: linkml-schema/figure1.yaml -## Contact +## Structure of the Repository + +### LinkML Schema + +In this project we use the [LinkML](https://linkml.io/linkml/), the Linked Data Modeling Language, to define the data models. +LinkML is a flexible modeling language that allows you to author schemas in YAML format, and it is designed to be both human-readable and machine-readable. +LinkML framework provides also a set of tools to generate code in different languages, such as Python, JSON, and RDF, from the schema files. -Satra Ghosh (PI -- MIT) +All the LinkML schema files are stored in the `linkml-schema` directory. +Some of the models are written directly in the YAML format, while others automatically generated from Google sheets using the LinkML tool [schemasheets](https://linkml.io/schemasheets/), + and the `schema2model` tool from the [`bkbit` package](https://github.com/brain-bican/bkbit). +You can find the specific information in [linkml-schema/README.md](linkml-schema/README.md). -Lydia Ng (PI -- Allen Institute for Brain Science) +### Additional Formats -Puja Trivedi (MIT) +The LinkML schema files are used to generate additional formats, such as JSON Schema and Pydantic models. +All files are generated automatically using GitHub Actions workflow whenever the LinkML schema files are updated. +You can see the specific workflow in the [reusable workflow](.github/workflows/reusable-generate_other_formats.yaml) that is reused for all models. -Dorota Jarecki (MIT) +Currently, we are supporting the following formats: +- [Pydantic models](models_py-autogen): these models are used in the [Brain Knowledge Base Interaction Toolkit (bkbit)](https://github.com/brain-bican/bkbit) +- [JSON Schema](json-schema-autogen) +- [JSON-LD Context](jsonld-context-autogen) +- [ER Diagrams](erdiagram-autogen) -Prajal Bishkawarma (Allen Institute for Brain Science) -Tim Fliss (Allen Insitute for Brain Science) -Pamela Baker (Allen Institute for Brain Science) +### Validation +All the schemas are automatically tested in the GitHub Actions workflow +using LinkML validation tools ([see test_lint.yaml for details](.github/workflows/tests_lint.yaml)) +and Python API and pytest ([see test_models.yaml for details](.github/workflows/tests_models.yaml)). -Patrick Ray (Allen Institute for Brain Science) +In order to run the pytest test locally, you can use the following commands: +```python +pip install -e .[test] +pytest -vs +``` ## Terms of Use diff --git a/erdiagram-autogen/README.md b/erdiagram-autogen/README.md new file mode 100644 index 000000000..c45a8efd1 --- /dev/null +++ b/erdiagram-autogen/README.md @@ -0,0 +1,3 @@ +## Autogenerated ER diagrams + +This directory contains the autogenerated Pydantic models from the [LinkML schemas](../linkml-schema). diff --git a/json-schema-autogen/README.md b/json-schema-autogen/README.md new file mode 100644 index 000000000..b5bdb2d80 --- /dev/null +++ b/json-schema-autogen/README.md @@ -0,0 +1,3 @@ +## Autogenerated JSON schemas + +This directory contains the autogenerated Pydantic models from the [LinkML schemas](../linkml-schema). diff --git a/jsonld-context-autogen/README.md b/jsonld-context-autogen/README.md new file mode 100644 index 000000000..6be034957 --- /dev/null +++ b/jsonld-context-autogen/README.md @@ -0,0 +1,3 @@ +## Autogenerated JSON-LD contexts + +This directory contains the autogenerated Pydantic models from the [LinkML schemas](../linkml-schema). diff --git a/linkml-schema/README.md b/linkml-schema/README.md index 27ed335f6..ee2d6e724 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -1,9 +1,68 @@ -## `LinkML` schemas for the BICAN project: +# `LinkML` schemas for the BICAN project -### bican_biolink.yaml +This folder contains all the original LinkML schemas written in YAML format. +You can learn more about the LinkML language [here](https://linkml.io/linkml/). + +Some of the models are written directly in the YAML format, while others automatically generated from Google sheets using the LinkML tool [schemasheets](https://linkml.io/schemasheets/), + and the `schema2model` tool from the [`bkbit` package](https://github.com/brain-bican/bkbit). + + +## Main models + +The list below contains the main models, that are exported to different formats, such as JSON Schema, Pydantic models, and JSON-LD context. +We also have some additional auxiliary models that are used to extract the core types and used by the main models. + +### [anatomical_structure](anatomical_structure.yaml) +The Anatomical Structure schema is designed to represent types and relationships of anatomical brain structures. + +##### Updates +The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. + + +### [assertion_evidence](assertion_evidence.yaml) +The Assertion Evidence schema is designed to represent types and relationships of assertions and evidences. + +##### Updates +The model has been created from the Google sheet, all information of the Google sheet id and id of the specifics tabs + are in the [setting file](source_assertion_evidence/gsheet.yaml). +The [source_assertion_evidence/gsheet_output](source_assertion_evidence/gsheet_output) folder contains the _cvs_ files generated from the Google sheet +at the time of the model creation. + +### [genome_annotation](genome_annotation.yaml) +The Genome Annotation schema is designed to represent types and relationships of an organism's annotated genome. + +##### Updates +The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. + +### [library_generation](library_generation.yaml) +The Library Generation schema is designed to represent types and relationships of samples and +digital data assets generated during processes that generate multimodal genomic data. + +##### Updates +The model has been created from the Google sheet, all information of the Google sheet id and id of the specifics tabs + are in the [setting file](source_library_generation/gsheet.yaml). +The [source_library_generation/gsheet_output](source_library_generation/gsheet_output) folder contains the _cvs_ files generated from the Google sheet +at the time of the model creation. + + +## Auxiliary models + +These models are used to extract the core types and used by the main models, you can see it in the `imports` sections. + +### [anatomical_structure_core](anatomical_structure_core.yaml) + +Contains the core types used in the [Anatomical Structure schema](anatomical_structure.yaml). + +##### Updates +The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. + + +### [bican_biolink](bican_biolink.yaml) The model contains a subset of classes from the [Biolink model](https://biolink.github.io/biolink-model/) with some small modification to fit the needs of the BICAN project (currently only the `category` slot is modified). +##### Updates + The yaml file can be recreated by running the [LinkML trimmer](https://github.com/brain-bican/bkbit/blob/main/bkbit/model_editors/README.md) from `bkbit` package.: ```bash @@ -13,3 +72,26 @@ In order to adjust the `category` slot, the following you can run: ```commandline python ../utils/bican_biolink_edit.py bican_biolink.yaml ``` + +### [bican_core](bican_core.yaml) +The BICAN Core schema is designed to represent classes, slots, and enums that are frequently used in BICAN schemas. + +##### Updates +The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. + +### [bican_prov](bican_prov.yaml) +The BICAN Prov schema contains a subset of classes from the Prov Data Model (PROV-DM) that are frequently used in BICAN schemas. + +##### Updates +The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. + + +## Deprecated models + +These are models that are no longer used, but are kept for reference. + +### [ccn2](ccn2.yaml) +A depreciated model, initial attempt to convert a CCN2 model to LinkML. + +### [figure1](figure1.yaml) +A depreciated model, initial attempt to provide a schema for data presented on Figure1 from [Yao, Z. et al., _Nature_ 624 (2023)](https://www.nature.com/articles/s41586-023-06812-z#citeas). diff --git a/models_py-autogen/README.md b/models_py-autogen/README.md index b029c5bd8..3ea230cb0 100644 --- a/models_py-autogen/README.md +++ b/models_py-autogen/README.md @@ -1 +1,5 @@ -Autogenerated Pydantic models \ No newline at end of file +## Autogenerated Pydantic models + +This directory contains the autogenerated Pydantic models from the [LinkML schemas](../linkml-schema). + +The Pydantic models are used in the [Brain Knowledge Base Interaction Toolkit (bkbit)](https://github.com/brain-bican/bkbit). \ No newline at end of file From 134239e8d52ea1c441e38707920789db1e19fd58 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 9 Jan 2025 11:22:31 -0500 Subject: [PATCH 08/26] adding generate_yaml_model wf --- linkml-schema/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index ee2d6e724..f65eedcab 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -28,6 +28,10 @@ The model has been created from the Google sheet, all information of the Google The [source_assertion_evidence/gsheet_output](source_assertion_evidence/gsheet_output) folder contains the _cvs_ files generated from the Google sheet at the time of the model creation. +In order to update the model, the Google sheet has to be edited, +and the [generate_yaml_model workflow](../.github/workflows/generate_yaml_model.yaml) has to be triggered manually. + + ### [genome_annotation](genome_annotation.yaml) The Genome Annotation schema is designed to represent types and relationships of an organism's annotated genome. @@ -44,6 +48,9 @@ The model has been created from the Google sheet, all information of the Google The [source_library_generation/gsheet_output](source_library_generation/gsheet_output) folder contains the _cvs_ files generated from the Google sheet at the time of the model creation. +In order to update the model, the Google sheet has to be edited, +and the [generate_yaml_model workflow](../.github/workflows/generate_yaml_model.yaml) has to be triggered manually. + ## Auxiliary models From 8b6c1b2878786e4fa75a4b073b5bda27a25f5bd8 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:47:40 -0500 Subject: [PATCH 09/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index f65eedcab..5ac9ac455 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -39,7 +39,7 @@ The Genome Annotation schema is designed to represent types and relationships of The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. ### [library_generation](library_generation.yaml) -The Library Generation schema is designed to represent types and relationships of samples and +The Library Generation schema is designed to represent types and relationships between samples and digital data assets generated during processes that generate multimodal genomic data. ##### Updates From c3301c44941d1ce9787316b384477d589b4b4704 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:48:02 -0500 Subject: [PATCH 10/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index 5ac9ac455..0d2e8095f 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -33,7 +33,7 @@ and the [generate_yaml_model workflow](../.github/workflows/generate_yaml_model. ### [genome_annotation](genome_annotation.yaml) -The Genome Annotation schema is designed to represent types and relationships of an organism's annotated genome. +The Genome Annotation schema is designed to represent types and relationships between entities that constitute an organism's annotated genome. ##### Updates The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. From 9efed4a63fa641d09c3fd2ad44e85727c43c0acb Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:48:21 -0500 Subject: [PATCH 11/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index 0d2e8095f..c1f6187a4 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -23,7 +23,7 @@ The model has been created directly in the YAML format, and all the updates can The Assertion Evidence schema is designed to represent types and relationships of assertions and evidences. ##### Updates -The model has been created from the Google sheet, all information of the Google sheet id and id of the specifics tabs +The model has been created from a Google sheet and all information of the Google sheet id and id of the specific tabs are in the [setting file](source_assertion_evidence/gsheet.yaml). The [source_assertion_evidence/gsheet_output](source_assertion_evidence/gsheet_output) folder contains the _cvs_ files generated from the Google sheet at the time of the model creation. From 78f26334fe0b22c6f0facbc7d4a3bae3a8a2e87c Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:48:33 -0500 Subject: [PATCH 12/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index c1f6187a4..6f38d80fd 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -9,7 +9,7 @@ Some of the models are written directly in the YAML format, while others automat ## Main models -The list below contains the main models, that are exported to different formats, such as JSON Schema, Pydantic models, and JSON-LD context. +The list below contains the main models that are exported to different formats, such as JSON Schema, Pydantic models, and JSON-LD context. We also have some additional auxiliary models that are used to extract the core types and used by the main models. ### [anatomical_structure](anatomical_structure.yaml) From 54b55fe909ad9951ca469b324edf20e5a78f4db5 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:48:45 -0500 Subject: [PATCH 13/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index 6f38d80fd..2b424c3e8 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -13,7 +13,7 @@ The list below contains the main models that are exported to different formats, We also have some additional auxiliary models that are used to extract the core types and used by the main models. ### [anatomical_structure](anatomical_structure.yaml) -The Anatomical Structure schema is designed to represent types and relationships of anatomical brain structures. +The Anatomical Structure schema is designed to represent types and relationships between anatomical brain structures. ##### Updates The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. From a0f6cfc8a5f7f31604fe2c6cced77c4fa454ad97 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:48:56 -0500 Subject: [PATCH 14/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index 2b424c3e8..6a8de3554 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -16,7 +16,7 @@ We also have some additional auxiliary models that are used to extract the core The Anatomical Structure schema is designed to represent types and relationships between anatomical brain structures. ##### Updates -The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. +The model has been created directly in the YAML format and all the updates can be done by editing the file directly. ### [assertion_evidence](assertion_evidence.yaml) From 478d005dfc66aee696d58cd325796338fb69ed86 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Mon, 13 Jan 2025 11:49:07 -0500 Subject: [PATCH 15/26] Update linkml-schema/README.md Co-authored-by: Patrick Lloyd Ray <67486986+patrick-lloyd-ray@users.noreply.github.com> --- linkml-schema/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index 6a8de3554..f6613e9da 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -20,7 +20,7 @@ The model has been created directly in the YAML format and all the updates can b ### [assertion_evidence](assertion_evidence.yaml) -The Assertion Evidence schema is designed to represent types and relationships of assertions and evidences. +The Assertion Evidence schema is designed to represent types and relationships between assertions and evidence items. ##### Updates The model has been created from a Google sheet and all information of the Google sheet id and id of the specific tabs From 68e93820b36bdc4fc7da5ebae508240fb231bc86 Mon Sep 17 00:00:00 2001 From: puja-trivedi <44144244+puja-trivedi@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:49:47 -0800 Subject: [PATCH 16/26] Update README.md added additional information to bican_biolink section of README --- linkml-schema/README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/linkml-schema/README.md b/linkml-schema/README.md index f6613e9da..b21ee873d 100644 --- a/linkml-schema/README.md +++ b/linkml-schema/README.md @@ -58,22 +58,25 @@ These models are used to extract the core types and used by the main models, you ### [anatomical_structure_core](anatomical_structure_core.yaml) -Contains the core types used in the [Anatomical Structure schema](anatomical_structure.yaml). +Contains the core types used in the [Anatomical Structure Schema](anatomical_structure.yaml). ##### Updates The model has been created directly in the YAML format, and all the updates can be done by editing the file directly. ### [bican_biolink](bican_biolink.yaml) -The model contains a subset of classes from the [Biolink model](https://biolink.github.io/biolink-model/) -with some small modification to fit the needs of the BICAN project (currently only the `category` slot is modified). +The model contains a subset of classes from the [Biolink Model](https://biolink.github.io/biolink-model/) +with some modifications to fit the needs of the BICAN project (currently only the `category` slot is modified). The model +is created using the [LinkML Schema Trimmer](https://brain-bican.github.io/bkbit/linkml_trimmer.html) from the bkbit package. The Biolink Model was +trimmed to contain these classes: 'gene', 'genome', 'organism taxon', 'thing with taxon', 'material sample', 'procedure', 'entity', 'activity', 'named thing'; +as well as respective dependency classes, slots, and enums to create BICAN Biolink. ##### Updates -The yaml file can be recreated by running the [LinkML trimmer](https://github.com/brain-bican/bkbit/blob/main/bkbit/model_editors/README.md) -from `bkbit` package.: +The yaml file can be recreated by running the [LinkML Schema Trimmer](https://brain-bican.github.io/bkbit/linkml_trimmer.html) +from `bkbit` package: ```bash -TODO +$ bkbit linkml-trimmer --classes "gene, genome, organism taxon, thing with taxon, material sample, procedure, entity, activity, named thing" biolink.yaml > bican-biolink.yaml ``` In order to adjust the `category` slot, the following you can run: ```commandline From 026791c89ffb1507d990fd1f0c335b69fe5f9ab6 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 16 Jan 2025 19:23:50 -0500 Subject: [PATCH 17/26] create new GA workflows to test new version of linkml; creating a new version of reusable workflow that should replace the current one --- .../reusable-generate_other_formats_new.yaml | 100 ++++++++++++++++++ ...oftware_update_generate_other_formats.yaml | 24 +++++ owl-autogen/.gitkeep | 0 3 files changed, 124 insertions(+) create mode 100644 .github/workflows/reusable-generate_other_formats_new.yaml create mode 100644 .github/workflows/software_update_generate_other_formats.yaml create mode 100644 owl-autogen/.gitkeep diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml new file mode 100644 index 000000000..62cf21e13 --- /dev/null +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -0,0 +1,100 @@ +name: Reusable workflow for generating other formats + +on: + workflow_call: + inputs: + model_name: + description: 'A name of the model(s), without the .yaml extension. Models should be separated by a comma.' + required: true + type: string + linkml_version: + description: 'linkml version to test (optional, by default it uses one from the pyproject.toml)' + required: false + type: string + +permissions: + contents: write + +jobs: + # This job is used to set up the environment for the workflow + setup-environment: + runs-on: ubuntu-latest + steps: + - name: Checkout this repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install the required python packages + run: python -m pip install .[test] + + - name: Updating linkml if requested + if: ${{ inputs.linkml_version != null }} + run: | + pip install linkml==${{ inputs.linkml_version }} + echo "linkml version: ${{ inputs.linkml_version }} has been installed" + + - name: Other installations + run: | + sudo apt-get update + sudo apt-get install -y build-essential git wget curl + + # This job is used to generate other formats for the model(s) + generate: + runs-on: ubuntu-latest + needs: [setup-environment] + strategy: + matrix: + name: ${{ fromJson('["' + replace(inputs.model_name, ',', '","') + '"]') }} + steps: + - name: Generate other model representations + run: | + cd linkml-schema + echo "Processing $name model..."; + linkml generate json-schema ${name}.yaml > ../json-schema-autogen/${name}.json; + # generating jsonld context and removing generation_date field to avoid constant updates + linkml generate jsonld-context ${name}.yaml > ../jsonld-context-autogen/${name}.context.jsonld; + sed -i "/generation_date/d" ../jsonld-context-autogen/${name}.context.jsonld; + linkml generate pydantic ${name}.yaml > ../models_py-autogen/${name}.py; + linkml generate owl ${name}.yaml > ../owl-autogen/${name}.owl; + if [ ${name} = "library_generation" ] || [ ${name} = "genome_annotation" ]; then + echo "Fixing erdiagrams for $name"; + python ../utils/fix_and_create_erdiagram.py; + else + linkml generate erdiagram ${name}.yaml > ../erdiagram-autogen/${name}.md; + fi + cd .. + push-changes: + runs-on: ubuntu-latest + needs: [generate] + steps: + - name: Adding other model representations to git + run: | + git config --global user.name "action@github.com" + git config --global user.email "Github Actions" + git branch + git diff + models_list="${{ inputs.model_name }}" + echo "Model list: $model_list" + for name in $(echo "$model_list" | tr ',' '\n'); do + echo "Processing: $name" + git add json-schema-autogen/${name}.json + git add owl-autogen/${name}.owl + git add jsonld-context-autogen/${name}.context.jsonld + git add models_py-autogen/${name}.py + git add erdiagram-autogen/${name}.md + done + if ! git diff --quiet HEAD; then + git commit -m "generate another formats for ${model_list} model(s)" + git pull --rebase # to avoid conflicts with different wf runs + git push + else + echo "No changes to commit" + fi \ No newline at end of file diff --git a/.github/workflows/software_update_generate_other_formats.yaml b/.github/workflows/software_update_generate_other_formats.yaml new file mode 100644 index 000000000..a9f3f6d37 --- /dev/null +++ b/.github/workflows/software_update_generate_other_formats.yaml @@ -0,0 +1,24 @@ +name: generating other formats for multiple models for the specific linkml version + +#on: +# workflow_dispatch: +# inputs: +# linkml_version: +# description: 'linkml version to test' +# required: true +# type: string + +on: + pull_request_target: + types: [opened, synchronize] + +permissions: + contents: write + +jobs: + generate_from_reusable: + uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main + with: + model_name: genome_annotation,library_generation,anatomical_structure,assertion_evidence + #linkml_version: ${{ github.event.inputs.linkml_version }} + linkml_version: "1.8.6" \ No newline at end of file diff --git a/owl-autogen/.gitkeep b/owl-autogen/.gitkeep new file mode 100644 index 000000000..e69de29bb From aa49148e5f0a4f351a5b11550c78270ce895c65e Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 16 Jan 2025 19:27:58 -0500 Subject: [PATCH 18/26] changing to workflow_dispatch --- ...oftware_update_generate_other_formats.yaml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/.github/workflows/software_update_generate_other_formats.yaml b/.github/workflows/software_update_generate_other_formats.yaml index a9f3f6d37..17d4ccbda 100644 --- a/.github/workflows/software_update_generate_other_formats.yaml +++ b/.github/workflows/software_update_generate_other_formats.yaml @@ -1,16 +1,12 @@ name: generating other formats for multiple models for the specific linkml version -#on: -# workflow_dispatch: -# inputs: -# linkml_version: -# description: 'linkml version to test' -# required: true -# type: string - on: - pull_request_target: - types: [opened, synchronize] + workflow_dispatch: + inputs: + linkml_version: + description: 'linkml version to test' + required: true + type: string permissions: contents: write @@ -20,5 +16,4 @@ jobs: uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main with: model_name: genome_annotation,library_generation,anatomical_structure,assertion_evidence - #linkml_version: ${{ github.event.inputs.linkml_version }} - linkml_version: "1.8.6" \ No newline at end of file + linkml_version: ${{ github.event.inputs.linkml_version }} From 4d31c2a3608d325d85e3e270c953589d9c6e5fc2 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 16 Jan 2025 19:30:11 -0500 Subject: [PATCH 19/26] fixing the wf, changing name --- .github/workflows/software_update_generate_other_formats.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/software_update_generate_other_formats.yaml b/.github/workflows/software_update_generate_other_formats.yaml index 17d4ccbda..4437f5754 100644 --- a/.github/workflows/software_update_generate_other_formats.yaml +++ b/.github/workflows/software_update_generate_other_formats.yaml @@ -1,4 +1,4 @@ -name: generating other formats for multiple models for the specific linkml version +name: testing a linkml version, generating other formats for multiple models on: workflow_dispatch: @@ -13,7 +13,7 @@ permissions: jobs: generate_from_reusable: - uses: brain-bican/models/.github/workflows/reusable-generate_other_formats.yaml@main + uses: brain-bican/models/.github/workflows/reusable-generate_other_formats_new.yaml@main with: model_name: genome_annotation,library_generation,anatomical_structure,assertion_evidence linkml_version: ${{ github.event.inputs.linkml_version }} From d4e34e5da5d3c5d2f4ee196b498159815ec2b640 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 16 Jan 2025 19:38:03 -0500 Subject: [PATCH 20/26] fixing the matrix --- .../reusable-generate_other_formats_new.yaml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml index 62cf21e13..40273ddb8 100644 --- a/.github/workflows/reusable-generate_other_formats_new.yaml +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -52,23 +52,23 @@ jobs: needs: [setup-environment] strategy: matrix: - name: ${{ fromJson('["' + replace(inputs.model_name, ',', '","') + '"]') }} + name: ${{ fromJson(format('["{0}"]', replace(inputs.model_name, ',', '","'))) }} steps: - name: Generate other model representations run: | cd linkml-schema - echo "Processing $name model..."; - linkml generate json-schema ${name}.yaml > ../json-schema-autogen/${name}.json; + echo "Processing ${{ matrix.name }} model..."; + linkml generate json-schema ${{ matrix.name }}.yaml > ../json-schema-autogen/${{ matrix.name }}.json; # generating jsonld context and removing generation_date field to avoid constant updates - linkml generate jsonld-context ${name}.yaml > ../jsonld-context-autogen/${name}.context.jsonld; - sed -i "/generation_date/d" ../jsonld-context-autogen/${name}.context.jsonld; - linkml generate pydantic ${name}.yaml > ../models_py-autogen/${name}.py; - linkml generate owl ${name}.yaml > ../owl-autogen/${name}.owl; - if [ ${name} = "library_generation" ] || [ ${name} = "genome_annotation" ]; then - echo "Fixing erdiagrams for $name"; + linkml generate jsonld-context ${{ matrix.name }}.yaml > ../jsonld-context-autogen/${{ matrix.name }}.context.jsonld; + sed -i "/generation_date/d" ../jsonld-context-autogen/${{ matrix.name }}.context.jsonld; + linkml generate pydantic ${{ matrix.name }}.yaml > ../models_py-autogen/${{ matrix.name }}.py; + linkml generate owl ${{ matrix.name }}.yaml > ../owl-autogen/${{ matrix.name }}.owl; + if [ ${{ matrix.name }} = "library_generation" ] || [ ${{ matrix.name }} = "genome_annotation" ]; then + echo "Fixing erdiagrams for ${{ matrix.name }}"; python ../utils/fix_and_create_erdiagram.py; else - linkml generate erdiagram ${name}.yaml > ../erdiagram-autogen/${name}.md; + linkml generate erdiagram ${{ matrix.name }}.yaml > ../erdiagram-autogen/${{ matrix.name }}.md; fi cd .. push-changes: From 9728ada094956a7374dfafa7378e49dee020ed67 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 16 Jan 2025 19:44:02 -0500 Subject: [PATCH 21/26] removing matrix for now --- .../reusable-generate_other_formats_new.yaml | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml index 40273ddb8..7370b92cd 100644 --- a/.github/workflows/reusable-generate_other_formats_new.yaml +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -50,26 +50,27 @@ jobs: generate: runs-on: ubuntu-latest needs: [setup-environment] - strategy: - matrix: - name: ${{ fromJson(format('["{0}"]', replace(inputs.model_name, ',', '","'))) }} steps: - name: Generate other model representations run: | cd linkml-schema - echo "Processing ${{ matrix.name }} model..."; - linkml generate json-schema ${{ matrix.name }}.yaml > ../json-schema-autogen/${{ matrix.name }}.json; - # generating jsonld context and removing generation_date field to avoid constant updates - linkml generate jsonld-context ${{ matrix.name }}.yaml > ../jsonld-context-autogen/${{ matrix.name }}.context.jsonld; - sed -i "/generation_date/d" ../jsonld-context-autogen/${{ matrix.name }}.context.jsonld; - linkml generate pydantic ${{ matrix.name }}.yaml > ../models_py-autogen/${{ matrix.name }}.py; - linkml generate owl ${{ matrix.name }}.yaml > ../owl-autogen/${{ matrix.name }}.owl; - if [ ${{ matrix.name }} = "library_generation" ] || [ ${{ matrix.name }} = "genome_annotation" ]; then - echo "Fixing erdiagrams for ${{ matrix.name }}"; - python ../utils/fix_and_create_erdiagram.py; - else - linkml generate erdiagram ${{ matrix.name }}.yaml > ../erdiagram-autogen/${{ matrix.name }}.md; - fi + models_list="${{ inputs.model_name }}" + echo "Model list: $model_list" + for name in $(echo "$model_list" | tr ',' '\n'); do + echo "Processing $name model..."; + linkml generate json-schema ${name}.yaml > ../json-schema-autogen/${name}.json; + # generating jsonld context and removing generation_date field to avoid constant updates + linkml generate jsonld-context ${name}.yaml > ../jsonld-context-autogen/${name}.context.jsonld; + sed -i "/generation_date/d" ../jsonld-context-autogen/${name}.context.jsonld; + linkml generate pydantic ${name}.yaml > ../models_py-autogen/${name}.py; + linkml generate owl ${name}.yaml > ../owl-autogen/${name}.owl; + if [ ${name} = "library_generation" ] || [ ${name} = "genome_annotation" ]; then + echo "Fixing erdiagrams for $name"; + python ../utils/fix_and_create_erdiagram.py; + else + linkml generate erdiagram ${name}.yaml > ../erdiagram-autogen/${name}.md; + fi + done cd .. push-changes: runs-on: ubuntu-latest From 156a2e754bfc997d71d2317f79a66d8f79ce2622 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Thu, 16 Jan 2025 19:53:29 -0500 Subject: [PATCH 22/26] fixing: simplifying teh wf --- .../reusable-generate_other_formats_new.yaml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml index 7370b92cd..86cd7d01e 100644 --- a/.github/workflows/reusable-generate_other_formats_new.yaml +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -16,8 +16,7 @@ permissions: contents: write jobs: - # This job is used to set up the environment for the workflow - setup-environment: + generate: runs-on: ubuntu-latest steps: - name: Checkout this repository @@ -46,11 +45,6 @@ jobs: sudo apt-get update sudo apt-get install -y build-essential git wget curl - # This job is used to generate other formats for the model(s) - generate: - runs-on: ubuntu-latest - needs: [setup-environment] - steps: - name: Generate other model representations run: | cd linkml-schema @@ -72,10 +66,7 @@ jobs: fi done cd .. - push-changes: - runs-on: ubuntu-latest - needs: [generate] - steps: + - name: Adding other model representations to git run: | git config --global user.name "action@github.com" From 88c771bddae0d42660ae675b7a7b6fb067217455 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Fri, 17 Jan 2025 12:29:33 -0500 Subject: [PATCH 23/26] fixing typo --- .../workflows/reusable-generate_other_formats_new.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml index 86cd7d01e..25fb62e22 100644 --- a/.github/workflows/reusable-generate_other_formats_new.yaml +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -49,8 +49,8 @@ jobs: run: | cd linkml-schema models_list="${{ inputs.model_name }}" - echo "Model list: $model_list" - for name in $(echo "$model_list" | tr ',' '\n'); do + echo "Model list: $models_list" + for name in $(echo "$models_list" | tr ',' '\n'); do echo "Processing $name model..."; linkml generate json-schema ${name}.yaml > ../json-schema-autogen/${name}.json; # generating jsonld context and removing generation_date field to avoid constant updates @@ -74,8 +74,8 @@ jobs: git branch git diff models_list="${{ inputs.model_name }}" - echo "Model list: $model_list" - for name in $(echo "$model_list" | tr ',' '\n'); do + echo "Model list: $models_list" + for name in $(echo "$models_list" | tr ',' '\n'); do echo "Processing: $name" git add json-schema-autogen/${name}.json git add owl-autogen/${name}.owl @@ -84,7 +84,7 @@ jobs: git add erdiagram-autogen/${name}.md done if ! git diff --quiet HEAD; then - git commit -m "generate another formats for ${model_list} model(s)" + git commit -m "generate another formats for ${models_list} model(s)" git pull --rebase # to avoid conflicts with different wf runs git push else From 1346a8f1fe878c3283101b9e2dc07b28afb3b409 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Fri, 17 Jan 2025 13:30:39 -0500 Subject: [PATCH 24/26] removing owl for now, returned StopIterate for some models --- .github/workflows/reusable-generate_other_formats_new.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml index 25fb62e22..39724e961 100644 --- a/.github/workflows/reusable-generate_other_formats_new.yaml +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -49,21 +49,25 @@ jobs: run: | cd linkml-schema models_list="${{ inputs.model_name }}" + echo " " echo "Model list: $models_list" for name in $(echo "$models_list" | tr ',' '\n'); do echo "Processing $name model..."; linkml generate json-schema ${name}.yaml > ../json-schema-autogen/${name}.json; + echo "json-schema generated"; # generating jsonld context and removing generation_date field to avoid constant updates linkml generate jsonld-context ${name}.yaml > ../jsonld-context-autogen/${name}.context.jsonld; sed -i "/generation_date/d" ../jsonld-context-autogen/${name}.context.jsonld; + echo "jsonld-context generated"; linkml generate pydantic ${name}.yaml > ../models_py-autogen/${name}.py; - linkml generate owl ${name}.yaml > ../owl-autogen/${name}.owl; + echo "pydantic model generated"; if [ ${name} = "library_generation" ] || [ ${name} = "genome_annotation" ]; then echo "Fixing erdiagrams for $name"; python ../utils/fix_and_create_erdiagram.py; else linkml generate erdiagram ${name}.yaml > ../erdiagram-autogen/${name}.md; fi + echo "erdiagram generated"; done cd .. From 299575dd582270ea3318bf4ac0f07225c3422e64 Mon Sep 17 00:00:00 2001 From: Dorota Jarecka Date: Fri, 17 Jan 2025 13:37:39 -0500 Subject: [PATCH 25/26] Update reusable-generate_other_formats_new.yaml --- .github/workflows/reusable-generate_other_formats_new.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/reusable-generate_other_formats_new.yaml b/.github/workflows/reusable-generate_other_formats_new.yaml index 39724e961..36ce72075 100644 --- a/.github/workflows/reusable-generate_other_formats_new.yaml +++ b/.github/workflows/reusable-generate_other_formats_new.yaml @@ -76,13 +76,11 @@ jobs: git config --global user.name "action@github.com" git config --global user.email "Github Actions" git branch - git diff models_list="${{ inputs.model_name }}" echo "Model list: $models_list" for name in $(echo "$models_list" | tr ',' '\n'); do echo "Processing: $name" git add json-schema-autogen/${name}.json - git add owl-autogen/${name}.owl git add jsonld-context-autogen/${name}.context.jsonld git add models_py-autogen/${name}.py git add erdiagram-autogen/${name}.md @@ -93,4 +91,4 @@ jobs: git push else echo "No changes to commit" - fi \ No newline at end of file + fi From f19a74b858649cdb3b0f119df449b08bbb3156d7 Mon Sep 17 00:00:00 2001 From: "action@github.com" Date: Fri, 17 Jan 2025 18:39:08 +0000 Subject: [PATCH 26/26] generate another formats for genome_annotation,library_generation,anatomical_structure,assertion_evidence model(s) --- json-schema-autogen/anatomical_structure.json | 122 +- json-schema-autogen/assertion_evidence.json | 156 +- json-schema-autogen/genome_annotation.json | 943 +++++-- json-schema-autogen/library_generation.json | 2193 +++++++++++++---- .../anatomical_structure.context.jsonld | 7 +- .../assertion_evidence.context.jsonld | 7 +- .../genome_annotation.context.jsonld | 16 +- .../library_generation.context.jsonld | 25 +- models_py-autogen/anatomical_structure.py | 206 +- models_py-autogen/assertion_evidence.py | 89 +- models_py-autogen/genome_annotation.py | 656 ++--- models_py-autogen/library_generation.py | 1476 ++++++----- 12 files changed, 3960 insertions(+), 1936 deletions(-) diff --git a/json-schema-autogen/anatomical_structure.json b/json-schema-autogen/anatomical_structure.json index b00e2985a..77fc09129 100644 --- a/json-schema-autogen/anatomical_structure.json +++ b/json-schema-autogen/anatomical_structure.json @@ -23,7 +23,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -53,6 +56,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" @@ -82,7 +88,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -112,6 +121,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" @@ -151,7 +163,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -169,6 +184,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" @@ -186,12 +204,18 @@ }, "x_resolution": { "description": "The resolution (length / pixel) in along the x axis (numerical value part).", - "type": "number" + "type": [ + "number", + "null" + ] }, "x_size": { "description": "The number of pixels/voxels (size) along the x axis.", "minimum": 1, - "type": "integer" + "type": [ + "integer", + "null" + ] }, "y_direction": { "$ref": "#/$defs/ANATOMICALDIRECTION", @@ -199,12 +223,18 @@ }, "y_resolution": { "description": "The resolution (length / pixel) in along the y axis (numerical value part).", - "type": "number" + "type": [ + "number", + "null" + ] }, "y_size": { "description": "The number of pixels/voxels (size) along the y axis.", "minimum": 1, - "type": "integer" + "type": [ + "integer", + "null" + ] }, "z_direction": { "$ref": "#/$defs/ANATOMICALDIRECTION", @@ -212,12 +242,18 @@ }, "z_resolution": { "description": "The resolution (length / pixel) in along the z axis (numerical value part).", - "type": "number" + "type": [ + "number", + "null" + ] }, "z_size": { "description": "The number of pixels/voxels (size) along the y axis.", "minimum": 1, - "type": "integer" + "type": [ + "integer", + "null" + ] } }, "required": [ @@ -251,7 +287,10 @@ "voxel_count": { "description": "The number of voxels (3D pixels) spanned by the parcellation annotation (optional).", "minimum": 0, - "type": "integer" + "type": [ + "integer", + "null" + ] } }, "required": [ @@ -308,7 +347,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -362,6 +404,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" @@ -373,6 +418,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "description": "Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of.", @@ -400,7 +448,10 @@ "properties": { "color": { "description": "A string representing to hex triplet code of a color", - "type": "string" + "type": [ + "string", + "null" + ] }, "part_of_parcellation_color_scheme": { "anyOf": [ @@ -445,7 +496,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -463,6 +517,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" @@ -504,7 +561,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -516,6 +576,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "description": "Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of", @@ -530,7 +593,10 @@ "ordinal": { "description": "Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology.", "minimum": 0, - "type": "integer" + "type": [ + "integer", + "null" + ] }, "part_of_parcellation_term_set": { "anyOf": [ @@ -546,7 +612,10 @@ }, "symbol": { "description": "Symbol representing a parcellation term.", - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -569,7 +638,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -581,6 +653,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "description": "Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of.", @@ -595,7 +670,10 @@ "ordinal": { "description": "Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology.", "minimum": 0, - "type": "integer" + "type": [ + "integer", + "null" + ] }, "part_of_parcellation_terminology": { "anyOf": [ @@ -630,7 +708,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "description": { "type": "string" @@ -648,6 +729,9 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" diff --git a/json-schema-autogen/assertion_evidence.json b/json-schema-autogen/assertion_evidence.json index b0950580f..5d267a2c5 100644 --- a/json-schema-autogen/assertion_evidence.json +++ b/json-schema-autogen/assertion_evidence.json @@ -7,15 +7,28 @@ "endedAtTime": { "description": "The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended.", "format": "date-time", - "type": "string" + "type": [ + "string", + "null" + ] }, "startedAtTime": { "description": "The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started.", "format": "date-time", - "type": "string" + "type": [ + "string", + "null" + ] }, "was_associate_with": { - "$ref": "#/$defs/Agent" + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "type": "null" + } + ] } }, "title": "Activity", @@ -26,7 +39,14 @@ "description": "An agent is something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity.", "properties": { "has_identifier": { - "$ref": "#/$defs/Identifier" + "anyOf": [ + { + "$ref": "#/$defs/Identifier" + }, + { + "type": "null" + } + ] } }, "title": "Agent", @@ -43,25 +63,52 @@ "description": "A statement made by a particular agent on a particular occasion that a particular proposition is true, based on the evaluation of one or more lines of evidence.", "properties": { "has_annotation": { - "$ref": "#/$defs/Annotation" + "anyOf": [ + { + "$ref": "#/$defs/Annotation" + }, + { + "type": "null" + } + ] }, "has_assertion_category": { "$ref": "#/$defs/Categories", "description": "The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to." }, "has_assertion_description": { - "type": "string" + "type": [ + "string", + "null" + ] }, "has_assertion_summary": { "description": "The brainkb:has_assertion_text property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_evidence_line": { - "$ref": "#/$defs/EvidenceLine", + "anyOf": [ + { + "$ref": "#/$defs/EvidenceLine" + }, + { + "type": "null" + } + ], "description": "A relationship between an assertion or proposition and an evidence line used in evaluating its validity." }, "was_generated_by": { - "$ref": "#/$defs/Activity" + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "type": "null" + } + ] } }, "title": "Assertion", @@ -113,10 +160,20 @@ "description": "A collection of information content entities intended to be understood together as a whole", "properties": { "identifier": { - "type": "string" + "type": [ + "string", + "null" + ] }, "reference": { - "$ref": "#/$defs/Document" + "anyOf": [ + { + "$ref": "#/$defs/Document" + }, + { + "type": "null" + } + ] } }, "title": "Document", @@ -137,7 +194,14 @@ "description": "", "properties": { "reference": { - "$ref": "#/$defs/Document" + "anyOf": [ + { + "$ref": "#/$defs/Document" + }, + { + "type": "null" + } + ] } }, "title": "EvidenceItem", @@ -159,14 +223,31 @@ "$ref": "#/$defs/Categories" }, "has_evidence_item": { - "$ref": "#/$defs/EvidenceItem", + "anyOf": [ + { + "$ref": "#/$defs/EvidenceItem" + }, + { + "type": "null" + } + ], "description": "A relation holding between an evidence line and an individual information entity that contributes to the argument it represents." }, "has_evidenceline_description": { - "type": "string" + "type": [ + "string", + "null" + ] }, "was_generated_by": { - "$ref": "#/$defs/Activity" + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "type": "null" + } + ] } }, "title": "EvidenceLine", @@ -189,7 +270,14 @@ "description": "", "properties": { "has_identifier": { - "$ref": "#/$defs/Identifier" + "anyOf": [ + { + "$ref": "#/$defs/Identifier" + }, + { + "type": "null" + } + ] } }, "title": "Group", @@ -212,7 +300,14 @@ "description": "", "properties": { "has_identifier": { - "$ref": "#/$defs/Identifier" + "anyOf": [ + { + "$ref": "#/$defs/Identifier" + }, + { + "type": "null" + } + ] } }, "title": "Organization", @@ -223,10 +318,24 @@ "description": "", "properties": { "has_identifier": { - "$ref": "#/$defs/Identifier" + "anyOf": [ + { + "$ref": "#/$defs/Identifier" + }, + { + "type": "null" + } + ] }, "member": { - "$ref": "#/$defs/Organization" + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "type": "null" + } + ] } }, "title": "Person", @@ -243,7 +352,14 @@ "description": "", "properties": { "has_identifier": { - "$ref": "#/$defs/Identifier" + "anyOf": [ + { + "$ref": "#/$defs/Identifier" + }, + { + "type": "null" + } + ] } }, "title": "SoftwareAgent", diff --git a/json-schema-autogen/genome_annotation.json b/json-schema-autogen/genome_annotation.json index 08abd733c..67322045e 100644 --- a/json-schema-autogen/genome_annotation.json +++ b/json-schema-autogen/genome_annotation.json @@ -13,26 +13,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -40,38 +55,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -88,19 +121,28 @@ "items": { "$ref": "#/$defs/GeneAnnotation" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "genome_annotations": { "items": { "$ref": "#/$defs/GenomeAnnotation" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "genome_assemblies": { "items": { "$ref": "#/$defs/GenomeAssembly" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "title": "AnnotationCollection", @@ -119,26 +161,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_attribute_type": { "description": "connects an attribute to a class that describes it", @@ -146,14 +203,20 @@ }, "has_qualitative_value": { "description": "connects an attribute to a value", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_quantitative_value": { "description": "connects an attribute to a value", "items": { "$ref": "#/$defs/QuantityValue" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -161,38 +224,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -233,7 +314,10 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "checksum_algorithm": { "$ref": "#/$defs/DigestType", @@ -241,18 +325,27 @@ }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -260,21 +353,33 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "value": { "description": "The checksum value obtained from a specific cryotographic hash function.", - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -296,34 +401,55 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "creation_date": { "description": "date on which an entity was created. This can be applied to nodes or edges", "format": "date", - "type": "string" + "type": [ + "string", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "format": { - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -331,44 +457,68 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "license": { - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "rights": { - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -400,30 +550,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_biological_sequence": { "description": "connects a genomic feature to its sequence", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -434,50 +602,77 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "symbol": { "description": "Symbol for a particular thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -499,30 +694,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_biological_sequence": { "description": "connects a genomic feature to its sequence", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -533,15 +746,24 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "molecular_type": { "anyOf": [ @@ -550,20 +772,29 @@ }, { "type": "string" + }, + { + "type": "null" } ], "type": "string" }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "referenced_in": { "anyOf": [ @@ -579,31 +810,46 @@ }, "source_id": { "description": "The authority specific identifier.", - "type": "string" + "type": [ + "string", + "null" + ] }, "symbol": { "description": "Symbol for a particular thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -626,30 +872,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_biological_sequence": { "description": "connects a genomic feature to its sequence", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -660,46 +924,70 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -725,21 +1013,33 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "content_url": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "digest": { "description": "Stores checksum information.", @@ -754,22 +1054,34 @@ ], "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_biological_sequence": { "description": "connects a genomic feature to its sequence", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -780,26 +1092,41 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "reference_assembly": { "anyOf": [ @@ -818,23 +1145,35 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "version": { - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -857,26 +1196,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -887,53 +1241,83 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "strain": { "description": "The genetic variant or subtype of a species or organism.", - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "version": { - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -955,26 +1339,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -982,38 +1381,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1035,26 +1452,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1062,38 +1494,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1115,29 +1565,47 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_taxonomic_rank": { - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1145,38 +1613,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1198,26 +1684,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1225,38 +1726,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1278,26 +1797,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1305,38 +1839,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1351,11 +1903,17 @@ "properties": { "has_numeric_value": { "description": "connects a quantity value to a number", - "type": "number" + "type": [ + "number", + "null" + ] }, "has_unit": { "description": "connects a quantity value to a unit", - "type": "string" + "type": [ + "string", + "null" + ] } }, "title": "QuantityValue", @@ -1387,19 +1945,28 @@ "items": { "$ref": "#/$defs/GeneAnnotation" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "genome_annotations": { "items": { "$ref": "#/$defs/GenomeAnnotation" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "genome_assemblies": { "items": { "$ref": "#/$defs/GenomeAssembly" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "title": "genome-annotation-schema", diff --git a/json-schema-autogen/library_generation.json b/json-schema-autogen/library_generation.json index 4c2a9c0ec..9c0e5af21 100644 --- a/json-schema-autogen/library_generation.json +++ b/json-schema-autogen/library_generation.json @@ -13,26 +13,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -40,38 +55,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -109,11 +142,17 @@ }, "amplified_cDNA_amplified_quantity_ng": { "description": "Amount of cDNA produced after cDNA amplification measured in nanograms.", - "type": "number" + "type": [ + "number", + "null" + ] }, "amplified_cDNA_percent_cDNA_longer_than_400bp": { "description": "QC metric to measure mRNA degradation of cDNA. Higher % is higher quality starting material. Over 400bp is used as a universal cutoff for intact (full length) vs degraded cDNA and is a common output from Bioanalyzer and Fragment Analyzer elecropheragrams.", - "type": "number" + "type": [ + "number", + "null" + ] }, "category": { "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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.", @@ -124,26 +163,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -151,46 +205,70 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of a collection of cDNA molecules derived and amplified from an input barcoded_cell_sample. These cDNA molecules represent the gene expression of each cell, with all cDNA molecules from a given cell retaining that cell's unique barcode from the cell barcoding step. This is a necessary step for GEX methods but is not used for ATAC methods.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The input barcoded cell sample from which amplified cDNA was derived from.", - "type": "string" + "type": [ + "string", + "null" + ] }, "was_generated_by": { "description": "The cDNA amplification process from which the amplified cDNA was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -223,26 +301,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_attribute_type": { "description": "connects an attribute to a class that describes it", @@ -250,14 +343,20 @@ }, "has_qualitative_value": { "description": "connects an attribute to a value", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_quantitative_value": { "description": "connects an attribute to a value", "items": { "$ref": "#/$defs/QuantityValue" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -265,38 +364,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -319,30 +436,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "expected_cell_capture": { "description": "Expected number of cells/nuclei of a barcoded_cell_sample that will be barcoded and available for sequencing. This is a derived number from 'Barcoded cell input quantity count' that is dependent on the \"capture rate\" of the barcoding method. It is usually a calculated fraction of the 'Barcoded cell input quantity count' going into the barcoding method.", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -350,31 +485,46 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of a collection of barcoded cells. Input will be either dissociated_cell_sample or enriched_cell_sample. Cell barcodes are only guaranteed to be unique within this one collection. One dissociated_cell_sample or enriched_cell_sample can lead to multiple barcoded_cell_samples.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The input dissociated or enriched cell sample(s) from which the barcoded cell sample was derived from.", @@ -389,18 +539,27 @@ } ] }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_generated_by": { "description": "The barcoding process from which the barcoded cell sample is generated from.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -433,26 +592,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -460,46 +634,70 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of a thick flat piece of brain tissue obtained by slicing a whole brain, brain hemisphere or subdivision with a blade at regular interval. When multiple brain slabs are obtained from the slicing process, an ordinal is assigned to provide information about the relative positioning of the slabs.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { - "$ref": "#/$defs/ProvEntity", "anyOf": [ { "type": "string" }, { "type": "string" + }, + { + "type": "null" } ], "description": "The donor from which the brain slab was derived from." }, "was_generated_by": { - "$ref": "#/$defs/ProvActivity", + "anyOf": [ + { + "$ref": "#/$defs/ProvActivity" + }, + { + "type": "null" + } + ], "description": "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation." }, "xref": { @@ -507,7 +705,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -522,16 +723,25 @@ "properties": { "amplified_cDNA_PCR_cycles": { "description": "Number of PCR cycles used during cDNA amplification for this cDNA.", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "cDNA_amplification_process_date": { "description": "Date of cDNA amplification.", "format": "date", - "type": "string" + "type": [ + "string", + "null" + ] }, "cDNA_amplification_set": { "description": "cDNA amplification set, containing multiple amplified_cDNA_names that were processed at the same time.", - "type": "string" + "type": [ + "string", + "null" + ] }, "category": { "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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.", @@ -542,26 +752,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -569,42 +794,63 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The input barcoded cell sample from which amplified cDNA was derived from.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -619,11 +865,17 @@ "properties": { "barcoded_cell_input_quantity_count": { "description": "Number of enriched or dissociated cells/nuclei going into the barcoding process.", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "barcoded_cell_sample_port_well": { "description": "Specific position of the loaded port of the 10x chip. An Enriched or Dissociated Cell Sample is loaded into a port on a chip (creating a Barcoded Cell Sample). Can be left null for non-10x methods.", - "type": "string" + "type": [ + "string", + "null" + ] }, "category": { "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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.", @@ -634,26 +886,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -661,7 +928,10 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "method": { "$ref": "#/$defs/BarcodedCellSampleTechnique", @@ -669,31 +939,46 @@ }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "process_date": { "description": "Date of cell barcoding process.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The input dissociated or enriched cell sample(s) from which the barcoded cell sample was derived from.", @@ -708,14 +993,20 @@ } ] }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -737,26 +1028,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -764,49 +1070,73 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "process_date": { "description": "Date of cell dissociation process.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The input tissue sample(s) from which the dissociated cell sample was derived from.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -828,26 +1158,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -855,49 +1200,73 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "process_date": { "description": "Date of cell enrichment process.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The input dissociated cell sample(s) from which the enriched cell sample was derived from.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -919,7 +1288,10 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "checksum_algorithm": { "$ref": "#/$defs/DigestType", @@ -927,18 +1299,27 @@ }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -946,21 +1327,33 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "value": { "description": "The checksum value obtained from a specific cryotographic hash function.", - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -982,34 +1375,55 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "creation_date": { "description": "date on which an entity was created. This can be applied to nodes or edges", "format": "date", - "type": "string" + "type": [ + "string", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "format": { - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1017,44 +1431,68 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "license": { - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "rights": { - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1086,48 +1524,86 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "content_url": { - "type": "string" + "type": [ + "string", + "null" + ] }, "creation_date": { "description": "date on which an entity was created. This can be applied to nodes or edges", "format": "date", - "type": "string" + "type": [ + "string", + "null" + ] }, "data_type": { "description": "The type of data in the file", - "type": "string" + "type": [ + "string", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "digest": { "description": "Stores checksum information.", "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string" + } + ], "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "format": { - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1135,44 +1611,75 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "license": { - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "rights": { - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "was_generated_by": { - "$ref": "#/$defs/ProvActivity", + "anyOf": [ + { + "$ref": "#/$defs/ProvActivity" + }, + { + "type": "null" + } + ], "description": "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation." }, "xref": { @@ -1180,7 +1687,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1202,26 +1712,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1229,42 +1754,63 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The brain slab that was annotated by the delineation process.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1279,7 +1825,10 @@ "properties": { "annotates": { "description": "The brain slab that was annotated by the delineation process.", - "type": "string" + "type": [ + "string", + "null" + ] }, "category": { "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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.", @@ -1290,22 +1839,34 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1313,25 +1874,44 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of a polygon annotated on a brain slab image delineating a region of interest (ROI) for a tissue sample dissectioning.", - "type": "string" + "type": [ + "string", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { - "$ref": "#/$defs/ProvEntity", + "anyOf": [ + { + "$ref": "#/$defs/ProvEntity" + }, + { + "type": "null" + } + ], "description": "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity." }, "was_generated_by": { "description": "The delineation process from which the dissection ROI polygon was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -1353,15 +1933,24 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "dissociated_cell_oligo_tag_name": { "$ref": "#/$defs/DissociatedCellSampleCellLabelBarcode", @@ -1373,14 +1962,20 @@ }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1388,49 +1983,73 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of a collection of dissociated cells or nuclei derived from dissociation of a tissue sample.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The input tissue sample(s) from which dissociated cell sample was derived from.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_generated_by": { "description": "The cell dissociation process from which the dissociated cell sample was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1483,7 +2102,10 @@ "properties": { "age_at_death_description": { "description": "Text description of the age of death following typical scientific convention for the species or developmental stage. For example: P56, E11.5", - "type": "string" + "type": [ + "string", + "null" + ] }, "age_at_death_reference_point": { "$ref": "#/$defs/AgeAtDeathReferencePoint", @@ -1495,7 +2117,10 @@ }, "age_at_death_value": { "description": "The value representing the donor age from the reference point.", - "type": "number" + "type": [ + "number", + "null" + ] }, "biological_sex": { "$ref": "#/$defs/Sex", @@ -1510,30 +2135,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "donor_species": { "description": "Species of donor.", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1544,46 +2187,81 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of person or organism that is the source of a biological sample for scientific study. Many biological samples are generated from a single donor.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { - "$ref": "#/$defs/ProvEntity", + "anyOf": [ + { + "$ref": "#/$defs/ProvEntity" + }, + { + "type": "null" + } + ], "description": "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity." }, "was_generated_by": { - "$ref": "#/$defs/ProvActivity", + "anyOf": [ + { + "$ref": "#/$defs/ProvActivity" + }, + { + "type": "null" + } + ], "description": "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation." }, "xref": { @@ -1591,7 +2269,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1613,38 +2294,62 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "cell_source_oligo_name": { "description": "Name of cell source oligo used in cell plexing. The oligo molecularly tags all the cells in the enriched cell sample and allows separate enriched cell samples to be combined downstream in the barcoded cell sample. The oligo name is associated with a sequence in a lookup table. This sequence will be needed during alignment to associate reads with the parent source enriched cell sample.", - "type": "string" + "type": [ + "string", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "enrichment_population": { "description": "Actual percentage of cells as a result of using set of fluorescent marker label(s) to enrich dissociated_cell_sample with desired mix of cell populations. This plan can also be used to describe 'No FACS' where no enrichment was performed. This is a property of enriched_cell_prep_container.", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "histone_modification_marker": { "description": "Histone modification marker antibodies (eg H3K27ac, H3K27me3, H3K9me3) used in conjunction with an Enriched Cell Source Barcode in order to combine multiple Enriched Cell Populations before Barcoded Cell Sample step for 10xMultiome method. Each of the Histone antibodies captures an essential part of the epigenome.", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1652,31 +2357,46 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Name of collection of enriched cells or nuclei after enrichment process (usually via FACS using the Enrichment Plan) applied to dissociated_cell_sample.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The dissociated or enriched cell sample(s) from which the enriched cell sample was derived from.", @@ -1691,16 +2411,21 @@ } ] }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_generated_by": { - "$ref": "#/$defs/ProvActivity", "anyOf": [ { "type": "string" }, { "type": "string" + }, + { + "type": "null" } ], "description": "The cell enrichment or sample splitting process from which the enriched cell sample was generated by." @@ -1710,7 +2435,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1732,26 +2460,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1759,42 +2502,63 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The enrichment cell sample splitting process from which the enriched cell sample was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1816,30 +2580,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_biological_sequence": { "description": "connects a genomic feature to its sequence", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1850,50 +2632,77 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "symbol": { "description": "Symbol for a particular thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -1915,30 +2724,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_biological_sequence": { "description": "connects a genomic feature to its sequence", - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -1949,46 +2776,70 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "in_taxon_label": { "description": "The human readable scientific name for the taxon of the entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -2014,26 +2865,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -2041,15 +2907,24 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "library_avg_size_bp": { "description": "Average size of the library in terms of base pairs. This is used to calculate the molarity before pooling and sequencing.", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "library_concentration_nm": { "description": "Concentration of library in terms of nM (nMol/L). Number of molecules is needed for accurate pooling of the libraries and for generating the number of target reads/cell in sequencing.", - "type": "number" + "type": [ + "number", + "null" + ] }, "library_prep_pass_fail": { "$ref": "#/$defs/LibraryPrepPassFail", @@ -2057,58 +2932,84 @@ }, "library_quantification_fmol": { "description": "Amount of library generated in terms of femtomoles", - "type": "number" + "type": [ + "number", + "null" + ] }, "library_quantification_ng": { "description": "Amount of library generated in terms of nanograms", - "type": "number" + "type": [ + "number", + "null" + ] }, "name": { "description": "Name of a library, which is a collection of fragmented and barcode-indexed DNA molecules for sequencing. An index or barcode is typically introduced to enable identification of library origin to allow libraries to be pooled together for sequencing.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { - "$ref": "#/$defs/ProvEntity", "anyOf": [ { "type": "string" }, { "type": "string" + }, + { + "type": "null" } ], "description": "The input barcoded cell sample or amplified cDNA from which the library was derived from." }, "was_generated_by": { "description": "The library construction process from which the library was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -2130,26 +3031,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -2157,38 +3073,63 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "One library in the library pool. Each Library_aliquot_name in a library pool will have a unique R1/R2 index to allow for sequencing together then separating the sequencing output by originating library aliquot through the process of demultiplexing. The resulting demultiplexed fastq files will include the library_aliquot_name.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The input library from which the library aliquot was derived from.", - "type": "string" + "type": [ + "string", + "null" + ] }, "was_generated_by": { - "$ref": "#/$defs/ProvActivity", + "anyOf": [ + { + "$ref": "#/$defs/ProvActivity" + }, + { + "type": "null" + } + ], "description": "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation." }, "xref": { @@ -2196,7 +3137,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -2218,26 +3162,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -2245,16 +3204,25 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "library_creation_date": { "description": "Date of library construction.", "format": "date", - "type": "string" + "type": [ + "string", + "null" + ] }, "library_input_ng": { "description": "Amount of cDNA going into library construction in nanograms.", - "type": "number" + "type": [ + "number", + "null" + ] }, "library_method": { "$ref": "#/$defs/LibraryTechnique", @@ -2262,40 +3230,57 @@ }, "library_prep_set": { "description": "Library set, containing multiple library_names that were processed at the same time.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { - "$ref": "#/$defs/ProvEntity", "anyOf": [ { "type": "string" }, { "type": "string" + }, + { + "type": "null" } ], "description": "The input barcoded cell sample or amplified cDNA from which the library was derived from." @@ -2305,7 +3290,10 @@ "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -2327,26 +3315,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -2354,53 +3357,80 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "library_pool_tube_internal_label": { "description": "Library Pool Tube local name. Label of the tube containing the library pool, which is made up of multiple library_aliquots. This is a Library Lab local tube name, before the pool is aliquoted to the Seq Core provided tube 'Library Pool Tube Name'.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Library lab's library pool name. For some labs this may be the same as \"Libray pool tube local name\". Other labs distinguish between the local tube label of the library pool and the library pool name provided to SeqCore for tracking. Local Pool Name is used to communicate sequencing status between SeqCore and Library Labs.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The input aliquot(s) from which the library pool was derived from.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_generated_by": { "description": "The pooling process from which the library pool was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -2422,26 +3452,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -2449,49 +3494,73 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "process_date": { "description": "Date of library pooling process.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The input aliquot(s) from which the library pool was derived from.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3064,26 +4133,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3091,38 +4175,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3144,26 +4246,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3171,38 +4288,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3224,29 +4359,47 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "has_taxonomic_rank": { - "type": "string" + "type": [ + "string", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3254,38 +4407,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3307,26 +4478,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3334,38 +4520,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3387,26 +4591,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3414,38 +4633,56 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3460,11 +4697,17 @@ "properties": { "has_numeric_value": { "description": "connects a quantity value to a number", - "type": "number" + "type": [ + "number", + "null" + ] }, "has_unit": { "description": "connects a quantity value to a unit", - "type": "string" + "type": [ + "string", + "null" + ] } }, "title": "QuantityValue", @@ -3510,26 +4753,41 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3537,46 +4795,70 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "A human-readable name for an attribute or entity.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "used": { "description": "The brain slab from which the tissue sample was dissected from.", - "type": "string" + "type": [ + "string", + "null" + ] }, "was_guided_by": { "description": "The dissection ROI polygon which was used to guide the tissue dissection.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ @@ -3598,30 +4880,48 @@ "pattern": "^bican:[A-Z][A-Za-z]+$", "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "deprecated": { "description": "A boolean flag indicating that an entity is no longer considered current or valid.", - "type": "boolean" + "type": [ + "boolean", + "null" + ] }, "description": { "description": "a human-readable description of an entity", - "type": "string" + "type": [ + "string", + "null" + ] }, "dissection_was_guided_by": { "description": "The dissection ROI polygon that was used to guide the dissection.", - "type": "string" + "type": [ + "string", + "null" + ] }, "full_name": { "description": "a long-form human readable name for a thing", - "type": "string" + "type": [ + "string", + "null" + ] }, "has_attribute": { "description": "connects any entity to an attribute", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "id": { "description": "A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI", @@ -3629,53 +4929,80 @@ }, "iri": { "description": "An IRI for an entity. This is determined by the id using expansion rules.", - "type": "string" + "type": [ + "string", + "null" + ] }, "name": { "description": "Identifier name for final intact piece of tissue before cell or nuclei prep. This piece of tissue will be used in dissociation and has an ROI associated with it.", - "type": "string" + "type": [ + "string", + "null" + ] }, "provided_by": { "description": "The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "synonym": { "description": "Alternate human-readable names for a thing", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "tissue_sample_structure": { "description": "Strucure of tissue sample.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "type": { "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] }, "was_derived_from": { "description": "The donor or brain slab from which the tissue sample was derived from.", - "type": "string" + "type": [ + "string", + "null" + ] }, "was_generated_by": { "description": "The dissection process from which the tissue sample was generated by.", - "type": "string" + "type": [ + "string", + "null" + ] }, "xref": { "description": "A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.", "items": { "type": "string" }, - "type": "array" + "type": [ + "array", + "null" + ] } }, "required": [ diff --git a/jsonld-context-autogen/anatomical_structure.context.jsonld b/jsonld-context-autogen/anatomical_structure.context.jsonld index 0e7dc5465..23da6b9f9 100644 --- a/jsonld-context-autogen/anatomical_structure.context.jsonld +++ b/jsonld-context-autogen/anatomical_structure.context.jsonld @@ -4,6 +4,7 @@ "source": "anatomical_structure.yaml" }, "@context": { + "xsd": "http://www.w3.org/2001/XMLSchema#", "AnS": "https://w3id.org/my-org/anatomical-structure-schema/", "PATO": { "@id": "http://purl.obolibrary.org/obo/PATO_", @@ -23,7 +24,7 @@ "@id": "measures" }, "category": { - "@type": "@id", + "@type": "xsd:anyURI", "@id": "category" }, "description": { @@ -32,7 +33,6 @@ "id": "@id", "unit": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -41,7 +41,6 @@ }, "x_direction": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -58,7 +57,6 @@ }, "y_direction": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -75,7 +73,6 @@ }, "z_direction": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" diff --git a/jsonld-context-autogen/assertion_evidence.context.jsonld b/jsonld-context-autogen/assertion_evidence.context.jsonld index 552ad74ff..07cd57e50 100644 --- a/jsonld-context-autogen/assertion_evidence.context.jsonld +++ b/jsonld-context-autogen/assertion_evidence.context.jsonld @@ -4,6 +4,7 @@ "source": "assertion_evidence.yaml" }, "@context": { + "xsd": "http://www.w3.org/2001/XMLSchema#", "bican": "https://identifiers.org/brain-bican/vocab/", "braiankb": "http://example.org/braiankb/", "brainkb": "https://brainkb.org/", @@ -48,7 +49,6 @@ }, "has_assertion_category": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -62,12 +62,11 @@ "@id": "has_assertion_summary" }, "identifier": { - "@type": "@id", + "@type": "xsd:anyURI", "@id": "datacite:identifier" }, "evidence_direction": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -76,7 +75,6 @@ }, "evidence_line_strength": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -85,7 +83,6 @@ }, "has_evidence_category": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" diff --git a/jsonld-context-autogen/genome_annotation.context.jsonld b/jsonld-context-autogen/genome_annotation.context.jsonld index 1525e3c88..451268ca8 100644 --- a/jsonld-context-autogen/genome_annotation.context.jsonld +++ b/jsonld-context-autogen/genome_annotation.context.jsonld @@ -4,6 +4,7 @@ "source": "genome_annotation.yaml" }, "@context": { + "xsd": "http://www.w3.org/2001/XMLSchema#", "AGRKB": "https://www.alliancegenome.org/", "AspGD": { "@id": "http://www.aspergillusgenome.org/cgi-bin/locus.pl?dbid=", @@ -192,23 +193,21 @@ "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "schema": "http://schema.org/", "skos": "http://www.w3.org/2004/02/skos/core#", - "xsd": "http://www.w3.org/2001/XMLSchema#", "@vocab": "https://identifiers.org/brain-bican/vocab/", "annotations": { - "@type": "@id", + "@type": "bican:GeneAnnotation", "@id": "annotations" }, "genome_annotations": { - "@type": "@id", + "@type": "bican:GenomeAnnotation", "@id": "genome_annotations" }, "genome_assemblies": { - "@type": "@id", + "@type": "bican:GenomeAssembly", "@id": "genome_assemblies" }, "authority": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -220,7 +219,6 @@ }, "checksum_algorithm": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -282,7 +280,7 @@ "@id": "biolink:has_qualitative_value" }, "has_quantitative_value": { - "@type": "@id", + "@type": "biolink:QuantityValue", "@id": "biolink:has_quantitative_value" }, "has_taxonomic_rank": { @@ -302,7 +300,7 @@ "@id": "biolink:in_taxon_label" }, "iri": { - "@type": "@id", + "@type": "xsd:anyURI", "@id": "biolink:iri" }, "license": { @@ -350,7 +348,7 @@ "@id": "biolink:version" }, "xref": { - "@type": "@id", + "@type": "xsd:anyURI", "@id": "biolink:xref" }, "Activity": { diff --git a/jsonld-context-autogen/library_generation.context.jsonld b/jsonld-context-autogen/library_generation.context.jsonld index ccc63588c..0288bce33 100644 --- a/jsonld-context-autogen/library_generation.context.jsonld +++ b/jsonld-context-autogen/library_generation.context.jsonld @@ -4,6 +4,7 @@ "source": "library_generation.yaml" }, "@context": { + "xsd": "http://www.w3.org/2001/XMLSchema#", "AGRKB": "https://www.alliancegenome.org/", "AspGD": { "@id": "http://www.aspergillusgenome.org/cgi-bin/locus.pl?dbid=", @@ -197,11 +198,9 @@ "schema": "http://schema.org/", "skos": "http://www.w3.org/2004/02/skos/core#", "spdx": "http://spdx.org/rdf/terms#", - "xsd": "http://www.w3.org/2001/XMLSchema#", "@vocab": "https://identifiers.org/brain-bican/vocab/", "amplified_cDNA_RNA_amplification_pass_fail": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -240,7 +239,6 @@ }, "method": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -255,7 +253,6 @@ }, "checksum_algorithm": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -292,7 +289,6 @@ }, "dissociated_cell_sample_cell_prep_type": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -301,7 +297,6 @@ }, "dissociated_cell_oligo_tag_name": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -313,7 +308,6 @@ }, "age_at_death_reference_point": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -322,7 +316,6 @@ }, "age_at_death_unit": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -335,7 +328,6 @@ }, "biological_sex": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -380,7 +372,7 @@ "@id": "biolink:has_qualitative_value" }, "has_quantitative_value": { - "@type": "@id", + "@type": "biolink:QuantityValue", "@id": "biolink:has_quantitative_value" }, "has_taxonomic_rank": { @@ -400,7 +392,7 @@ "@id": "biolink:in_taxon_label" }, "iri": { - "@type": "@id", + "@type": "xsd:anyURI", "@id": "biolink:iri" }, "library_avg_size_bp": { @@ -413,7 +405,6 @@ }, "library_prep_pass_fail": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -430,7 +421,6 @@ }, "R1_R2_index_name": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -443,7 +433,6 @@ }, "library_method": { "@context": { - "@vocab": "@null", "text": "skos:notation", "description": "skos:prefLabel", "meaning": "@id" @@ -504,22 +493,22 @@ "@id": "rdf:type" }, "used": { - "@type": "@id", + "@type": "prov:Entity", "@id": "prov:used" }, "version": { "@id": "biolink:version" }, "was_derived_from": { - "@type": "@id", + "@type": "prov:Entity", "@id": "prov:wasDerivedFrom" }, "was_generated_by": { - "@type": "@id", + "@type": "prov:Activity", "@id": "prov:wasGeneratedBy" }, "xref": { - "@type": "@id", + "@type": "xsd:anyURI", "@id": "biolink:xref" }, "Activity": { diff --git a/models_py-autogen/anatomical_structure.py b/models_py-autogen/anatomical_structure.py index fe8926f40..ec53d18db 100644 --- a/models_py-autogen/anatomical_structure.py +++ b/models_py-autogen/anatomical_structure.py @@ -1,36 +1,32 @@ from __future__ import annotations + +import re +import sys from datetime import ( + date, datetime, - date + time ) from decimal import Decimal from enum import Enum -import re -import sys from typing import ( Any, ClassVar, + Dict, List, Literal, - Dict, Optional, Union ) -from pydantic.version import VERSION as PYDANTIC_VERSION -if int(PYDANTIC_VERSION[0])>=2: - from pydantic import ( - BaseModel, - ConfigDict, - Field, - RootModel, - field_validator - ) -else: - from pydantic import ( - BaseModel, - Field, - validator - ) + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + RootModel, + field_validator +) + metamodel_version = "None" version = "None" @@ -117,10 +113,10 @@ class NamedThing(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, 'from_schema': 'https://w3id.org/my-org/anatomical-structure-core-schema'}) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/NamedThing","AnS:NamedThing"]] = Field(["AnS:NamedThing"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/NamedThing","AnS:NamedThing"]] = Field(default=["AnS:NamedThing"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -133,12 +129,12 @@ class VersionedNamedThing(NamedThing): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, 'from_schema': 'https://w3id.org/my-org/anatomical-structure-core-schema'}) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/VersionedNamedThing","AnS:VersionedNamedThing"]] = Field(["AnS:VersionedNamedThing"], json_schema_extra = { "linkml_meta": {'alias': 'category', + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'domain_of': ['VersionedNamedThing']} }) + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/VersionedNamedThing","AnS:VersionedNamedThing"]] = Field(default=["AnS:VersionedNamedThing"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -153,30 +149,30 @@ class ImageDataset(VersionedNamedThing): {'range': 'string'}], 'name': 'revision_of'}}}) - x_direction: Optional[ANATOMICALDIRECTION] = Field(None, description="""A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction.""", json_schema_extra = { "linkml_meta": {'alias': 'x_direction', 'domain_of': ['ImageDataset']} }) - y_direction: Optional[ANATOMICALDIRECTION] = Field(None, description="""A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction.""", json_schema_extra = { "linkml_meta": {'alias': 'y_direction', 'domain_of': ['ImageDataset']} }) - z_direction: Optional[ANATOMICALDIRECTION] = Field(None, description="""A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction.""", json_schema_extra = { "linkml_meta": {'alias': 'z_direction', 'domain_of': ['ImageDataset']} }) - x_size: Optional[int] = Field(None, description="""The number of pixels/voxels (size) along the x axis.""", ge=1, json_schema_extra = { "linkml_meta": {'alias': 'x_size', 'domain_of': ['ImageDataset']} }) - y_size: Optional[int] = Field(None, description="""The number of pixels/voxels (size) along the y axis.""", ge=1, json_schema_extra = { "linkml_meta": {'alias': 'y_size', 'domain_of': ['ImageDataset']} }) - z_size: Optional[int] = Field(None, description="""The number of pixels/voxels (size) along the y axis.""", ge=1, json_schema_extra = { "linkml_meta": {'alias': 'z_size', 'domain_of': ['ImageDataset']} }) - x_resolution: Optional[float] = Field(None, description="""The resolution (length / pixel) in along the x axis (numerical value part).""", json_schema_extra = { "linkml_meta": {'alias': 'x_resolution', + x_direction: Optional[ANATOMICALDIRECTION] = Field(default=None, description="""A controlled vocabulary attribute defining the x axis direction in terms of anatomical direction.""", json_schema_extra = { "linkml_meta": {'alias': 'x_direction', 'domain_of': ['ImageDataset']} }) + y_direction: Optional[ANATOMICALDIRECTION] = Field(default=None, description="""A controlled vocabulary attribute defining the y axis direction in terms of anatomical direction.""", json_schema_extra = { "linkml_meta": {'alias': 'y_direction', 'domain_of': ['ImageDataset']} }) + z_direction: Optional[ANATOMICALDIRECTION] = Field(default=None, description="""A controlled vocabulary attribute defining the z axis direction in terms of anatomical direction.""", json_schema_extra = { "linkml_meta": {'alias': 'z_direction', 'domain_of': ['ImageDataset']} }) + x_size: Optional[int] = Field(default=None, description="""The number of pixels/voxels (size) along the x axis.""", ge=1, json_schema_extra = { "linkml_meta": {'alias': 'x_size', 'domain_of': ['ImageDataset']} }) + y_size: Optional[int] = Field(default=None, description="""The number of pixels/voxels (size) along the y axis.""", ge=1, json_schema_extra = { "linkml_meta": {'alias': 'y_size', 'domain_of': ['ImageDataset']} }) + z_size: Optional[int] = Field(default=None, description="""The number of pixels/voxels (size) along the y axis.""", ge=1, json_schema_extra = { "linkml_meta": {'alias': 'z_size', 'domain_of': ['ImageDataset']} }) + x_resolution: Optional[float] = Field(default=None, description="""The resolution (length / pixel) in along the x axis (numerical value part).""", json_schema_extra = { "linkml_meta": {'alias': 'x_resolution', 'domain_of': ['ImageDataset'], 'structured_pattern': {'syntax': '{PositiveFloat}'}} }) - y_resolution: Optional[float] = Field(None, description="""The resolution (length / pixel) in along the y axis (numerical value part).""", json_schema_extra = { "linkml_meta": {'alias': 'y_resolution', + y_resolution: Optional[float] = Field(default=None, description="""The resolution (length / pixel) in along the y axis (numerical value part).""", json_schema_extra = { "linkml_meta": {'alias': 'y_resolution', 'domain_of': ['ImageDataset'], 'structured_pattern': {'syntax': '{PositiveFloat}'}} }) - z_resolution: Optional[float] = Field(None, description="""The resolution (length / pixel) in along the z axis (numerical value part).""", json_schema_extra = { "linkml_meta": {'alias': 'z_resolution', + z_resolution: Optional[float] = Field(default=None, description="""The resolution (length / pixel) in along the z axis (numerical value part).""", json_schema_extra = { "linkml_meta": {'alias': 'z_resolution', 'domain_of': ['ImageDataset'], 'structured_pattern': {'syntax': '{PositiveFloat}'}} }) - unit: Optional[DISTANCEUNIT] = Field(None, description="""A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values.""", json_schema_extra = { "linkml_meta": {'alias': 'unit', 'domain_of': ['ImageDataset']} }) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', + unit: Optional[DISTANCEUNIT] = Field(default=None, description="""A controlled vocabulary attribute defining the length unit of the x, y, and z resolution values.""", json_schema_extra = { "linkml_meta": {'alias': 'unit', 'domain_of': ['ImageDataset']} }) + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'any_of': [{'range': 'ImageDataset'}, {'range': 'string'}], 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ImageDataset","AnS:ImageDataset"]] = Field(["AnS:ImageDataset"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ImageDataset","AnS:ImageDataset"]] = Field(default=["AnS:ImageDataset"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -191,17 +187,17 @@ class AnatomicalSpace(VersionedNamedThing): {'range': 'string'}], 'name': 'revision_of'}}}) - measures: str = Field(..., description="""Reference to the specific image dataset used to define the anatomical space.""", json_schema_extra = { "linkml_meta": {'alias': 'measures', + measures: str = Field(default=..., description="""Reference to the specific image dataset used to define the anatomical space.""", json_schema_extra = { "linkml_meta": {'alias': 'measures', 'any_of': [{'range': 'ImageDataset'}, {'range': 'string'}], 'domain_of': ['AnatomicalSpace']} }) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'any_of': [{'range': 'AnatomicalSpace'}, {'range': 'string'}], 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/AnatomicalSpace","AnS:AnatomicalSpace"]] = Field(["AnS:AnatomicalSpace"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/AnatomicalSpace","AnS:AnatomicalSpace"]] = Field(default=["AnS:AnatomicalSpace"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -216,14 +212,14 @@ class ParcellationTerminology(VersionedNamedThing): {'range': 'string'}], 'name': 'revision_of'}}}) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'any_of': [{'range': 'ParcellationTerminology'}, {'range': 'string'}], 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationTerminology","AnS:ParcellationTerminology"]] = Field(["AnS:ParcellationTerminology"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationTerminology","AnS:ParcellationTerminology"]] = Field(default=["AnS:ParcellationTerminology"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -235,17 +231,17 @@ class ParcellationTermSet(NamedThing): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/my-org/anatomical-structure-schema'}) - part_of_parcellation_terminology: str = Field(..., description="""Reference to the parcellation terminology for which the parcellation term set partitions.""", json_schema_extra = { "linkml_meta": {'alias': 'part_of_parcellation_terminology', + part_of_parcellation_terminology: str = Field(default=..., description="""Reference to the parcellation terminology for which the parcellation term set partitions.""", json_schema_extra = { "linkml_meta": {'alias': 'part_of_parcellation_terminology', 'any_of': [{'range': 'ParcellationTerminology'}, {'range': 'string'}], 'domain_of': ['ParcellationTermSet']} }) - ordinal: Optional[int] = Field(None, description="""Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology.""", ge=0, json_schema_extra = { "linkml_meta": {'alias': 'ordinal', 'domain_of': ['ParcellationTermSet', 'ParcellationTerm']} }) - has_parent_parcellation_term_set: Optional[str] = Field(None, description="""Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of.""", json_schema_extra = { "linkml_meta": {'alias': 'has_parent_parcellation_term_set', + ordinal: Optional[int] = Field(default=None, description="""Ordinal of the parcellation term set among other term sets within the context of the associated parcellation terminology.""", ge=0, json_schema_extra = { "linkml_meta": {'alias': 'ordinal', 'domain_of': ['ParcellationTermSet', 'ParcellationTerm']} }) + has_parent_parcellation_term_set: Optional[str] = Field(default=None, description="""Reference to the parent parcellation term set for which the parcellation term set is a child (lower taxonomic rank) of.""", json_schema_extra = { "linkml_meta": {'alias': 'has_parent_parcellation_term_set', 'any_of': [{'range': 'ParcellationTermSet'}, {'range': 'string'}], 'domain_of': ['ParcellationTermSet']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationTermSet","AnS:ParcellationTermSet"]] = Field(["AnS:ParcellationTermSet"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationTermSet","AnS:ParcellationTermSet"]] = Field(default=["AnS:ParcellationTermSet"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -257,18 +253,18 @@ class ParcellationTerm(NamedThing): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/my-org/anatomical-structure-schema'}) - symbol: Optional[str] = Field(None, description="""Symbol representing a parcellation term.""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', 'domain_of': ['ParcellationTerm']} }) - part_of_parcellation_term_set: str = Field(..., description="""Reference to the parcellation term set for which the parcellation term is part of.""", json_schema_extra = { "linkml_meta": {'alias': 'part_of_parcellation_term_set', + symbol: Optional[str] = Field(default=None, description="""Symbol representing a parcellation term.""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', 'domain_of': ['ParcellationTerm']} }) + part_of_parcellation_term_set: str = Field(default=..., description="""Reference to the parcellation term set for which the parcellation term is part of.""", json_schema_extra = { "linkml_meta": {'alias': 'part_of_parcellation_term_set', 'any_of': [{'range': 'ParcellationTermSet'}, {'range': 'string'}], 'domain_of': ['ParcellationTerm']} }) - ordinal: Optional[int] = Field(None, description="""Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology.""", ge=0, json_schema_extra = { "linkml_meta": {'alias': 'ordinal', 'domain_of': ['ParcellationTermSet', 'ParcellationTerm']} }) - has_parent_parcellation_term: Optional[str] = Field(None, description="""Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of""", json_schema_extra = { "linkml_meta": {'alias': 'has_parent_parcellation_term', + ordinal: Optional[int] = Field(default=None, description="""Ordinal of the parcellation term among other terms within the context of the associated parcellation terminology.""", ge=0, json_schema_extra = { "linkml_meta": {'alias': 'ordinal', 'domain_of': ['ParcellationTermSet', 'ParcellationTerm']} }) + has_parent_parcellation_term: Optional[str] = Field(default=None, description="""Reference to the parent parcellation term for which the parcellation term is a child ( spatially part) of""", json_schema_extra = { "linkml_meta": {'alias': 'has_parent_parcellation_term', 'any_of': [{'range': 'ParcellationTerm'}, {'range': 'string'}], 'domain_of': ['ParcellationTerm']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationTerm","AnS:ParcellationTerm"]] = Field(["AnS:ParcellationTerm"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationTerm","AnS:ParcellationTerm"]] = Field(default=["AnS:ParcellationTerm"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -283,17 +279,17 @@ class ParcellationColorScheme(VersionedNamedThing): {'range': 'string'}], 'name': 'revision_of'}}}) - subject_parcellation_terminology: str = Field(..., description="""Reference to the parcellation terminology for which the parcellation color scheme is in context of.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_terminology', + subject_parcellation_terminology: str = Field(default=..., description="""Reference to the parcellation terminology for which the parcellation color scheme is in context of.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_terminology', 'any_of': [{'range': 'ParcellationTerminology'}, {'range': 'string'}], 'domain_of': ['ParcellationColorScheme']} }) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'any_of': [{'range': 'ParcellationColorScheme'}, {'range': 'string'}], 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationColorScheme","AnS:ParcellationColorScheme"]] = Field(["AnS:ParcellationColorScheme"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationColorScheme","AnS:ParcellationColorScheme"]] = Field(default=["AnS:ParcellationColorScheme"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -305,13 +301,13 @@ class ParcellationColorAssignment(ConfiguredBaseModel): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/my-org/anatomical-structure-schema'}) - part_of_parcellation_color_scheme: str = Field(..., description="""Reference to the parcellation color scheme for which the color assignment is part of.""", json_schema_extra = { "linkml_meta": {'alias': 'part_of_parcellation_color_scheme', + part_of_parcellation_color_scheme: str = Field(default=..., description="""Reference to the parcellation color scheme for which the color assignment is part of.""", json_schema_extra = { "linkml_meta": {'alias': 'part_of_parcellation_color_scheme', 'any_of': [{'range': 'ParcellationColorScheme'}, {'range': 'string'}], 'domain_of': ['ParcellationColorAssignment']} }) - subject_parcellation_term: str = Field(..., description="""Reference to the parcellation term identifier for which the color assignment is about.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_term', + subject_parcellation_term: str = Field(default=..., description="""Reference to the parcellation term identifier for which the color assignment is about.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_term', 'any_of': [{'range': 'ParcellationTerm'}, {'range': 'string'}], 'domain_of': ['ParcellationColorAssignment', 'ParcellationAnnotationTermMap']} }) - color: Optional[str] = Field(None, description="""A string representing to hex triplet code of a color""", json_schema_extra = { "linkml_meta": {'alias': 'color', + color: Optional[str] = Field(default=None, description="""A string representing to hex triplet code of a color""", json_schema_extra = { "linkml_meta": {'alias': 'color', 'domain_of': ['ParcellationColorAssignment'], 'structured_pattern': {'syntax': '{ColorHexTriplet}'}} }) @@ -325,17 +321,17 @@ class AnatomicalAnnotationSet(VersionedNamedThing): {'range': 'string'}], 'name': 'revision_of'}}}) - parameterizes: str = Field(..., description="""Reference to the anatomical space for which the anatomical annotation set is anchored""", json_schema_extra = { "linkml_meta": {'alias': 'parameterizes', + parameterizes: str = Field(default=..., description="""Reference to the anatomical space for which the anatomical annotation set is anchored""", json_schema_extra = { "linkml_meta": {'alias': 'parameterizes', 'any_of': [{'range': 'AnatomicalSpace'}, {'range': 'string'}], 'domain_of': ['AnatomicalAnnotationSet']} }) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'any_of': [{'range': 'AnatomicalAnnotationSet'}, {'range': 'string'}], 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/AnatomicalAnnotationSet","AnS:AnatomicalAnnotationSet"]] = Field(["AnS:AnatomicalAnnotationSet"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/AnatomicalAnnotationSet","AnS:AnatomicalAnnotationSet"]] = Field(default=["AnS:AnatomicalAnnotationSet"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) @@ -347,11 +343,11 @@ class ParcellationAnnotation(ConfiguredBaseModel): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/my-org/anatomical-structure-schema'}) - part_of_anatomical_annotation_set: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'part_of_anatomical_annotation_set', + part_of_anatomical_annotation_set: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'part_of_anatomical_annotation_set', 'any_of': [{'range': 'AnatomicalAnnotationSet'}, {'range': 'string'}], 'domain_of': ['ParcellationAnnotation']} }) - internal_identifier: str = Field(..., description="""An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set""", json_schema_extra = { "linkml_meta": {'alias': 'internal_identifier', 'domain_of': ['ParcellationAnnotation']} }) - voxel_count: Optional[int] = Field(None, description="""The number of voxels (3D pixels) spanned by the parcellation annotation (optional).""", ge=0, json_schema_extra = { "linkml_meta": {'alias': 'voxel_count', 'domain_of': ['ParcellationAnnotation']} }) + internal_identifier: str = Field(default=..., description="""An identifier that uniquely denotes a specific parcellation annotation within the context of an anatomical annotation set""", json_schema_extra = { "linkml_meta": {'alias': 'internal_identifier', 'domain_of': ['ParcellationAnnotation']} }) + voxel_count: Optional[int] = Field(default=None, description="""The number of voxels (3D pixels) spanned by the parcellation annotation (optional).""", ge=0, json_schema_extra = { "linkml_meta": {'alias': 'voxel_count', 'domain_of': ['ParcellationAnnotation']} }) class ParcellationAnnotationTermMap(ConfiguredBaseModel): @@ -360,10 +356,10 @@ class ParcellationAnnotationTermMap(ConfiguredBaseModel): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://w3id.org/my-org/anatomical-structure-schema'}) - subject_parcellation_annotation: Union[ParcellationAnnotation, str] = Field(..., description="""Reference to the parcellation annotation that is the subject of the association.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_annotation', + subject_parcellation_annotation: Union[ParcellationAnnotation, str] = Field(default=..., description="""Reference to the parcellation annotation that is the subject of the association.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_annotation', 'any_of': [{'range': 'ParcellationAnnotation'}, {'range': 'string'}], 'domain_of': ['ParcellationAnnotationTermMap']} }) - subject_parcellation_term: str = Field(..., description="""Reference to the parcellation term that is the subject of the association.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_term', + subject_parcellation_term: str = Field(default=..., description="""Reference to the parcellation term that is the subject of the association.""", json_schema_extra = { "linkml_meta": {'alias': 'subject_parcellation_term', 'any_of': [{'range': 'ParcellationTerm'}, {'range': 'string'}], 'domain_of': ['ParcellationColorAssignment', 'ParcellationAnnotationTermMap']} }) @@ -377,26 +373,26 @@ class ParcellationAtlas(VersionedNamedThing): {'range': 'string'}], 'name': 'revision_of'}}}) - has_anatomical_space: str = Field(..., description="""Reference to the anatomical space component of the parcellation atlas""", json_schema_extra = { "linkml_meta": {'alias': 'has_anatomical_space', + has_anatomical_space: str = Field(default=..., description="""Reference to the anatomical space component of the parcellation atlas""", json_schema_extra = { "linkml_meta": {'alias': 'has_anatomical_space', 'any_of': [{'range': 'AnatomicalSpace'}, {'range': 'string'}], 'domain_of': ['ParcellationAtlas']} }) - has_anatomical_annotation_set: str = Field(..., description="""Reference to the anatomical annotation set component of the parcellation atlas""", json_schema_extra = { "linkml_meta": {'alias': 'has_anatomical_annotation_set', + has_anatomical_annotation_set: str = Field(default=..., description="""Reference to the anatomical annotation set component of the parcellation atlas""", json_schema_extra = { "linkml_meta": {'alias': 'has_anatomical_annotation_set', 'any_of': [{'range': 'AnatomicalAnnotationSet'}, {'range': 'string'}], 'domain_of': ['ParcellationAtlas']} }) - has_parcellation_terminology: str = Field(..., description="""Reference to the parcellation terminology component of the parcellation atlas""", json_schema_extra = { "linkml_meta": {'alias': 'has_parcellation_terminology', + has_parcellation_terminology: str = Field(default=..., description="""Reference to the parcellation terminology component of the parcellation atlas""", json_schema_extra = { "linkml_meta": {'alias': 'has_parcellation_terminology', 'any_of': [{'range': 'ParcellationTerminology'}, {'range': 'string'}], 'domain_of': ['ParcellationAtlas']} }) - specialization_of: Optional[str] = Field(None, description="""Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of.""", json_schema_extra = { "linkml_meta": {'alias': 'specialization_of', + specialization_of: Optional[str] = Field(default=None, description="""Reference to the general (non versioned) parcellation atlas for which the parcellation atlas is a specific version release of.""", json_schema_extra = { "linkml_meta": {'alias': 'specialization_of', 'any_of': [{'range': 'ParcellationAtlas'}, {'range': 'string'}], 'domain_of': ['ParcellationAtlas']} }) - version: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) - revision_of: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', + version: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'version', 'domain_of': ['VersionedNamedThing']} }) + revision_of: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'revision_of', 'any_of': [{'range': 'ParcellationAtlas'}, {'range': 'string'}], 'domain_of': ['VersionedNamedThing']} }) - id: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) - name: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) - description: str = Field(..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) - category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationAtlas","AnS:ParcellationAtlas"]] = Field(["AnS:ParcellationAtlas"], json_schema_extra = { "linkml_meta": {'alias': 'category', + id: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'id', 'domain_of': ['NamedThing']} }) + name: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'name', 'domain_of': ['NamedThing']} }) + description: str = Field(default=..., json_schema_extra = { "linkml_meta": {'alias': 'description', 'domain_of': ['NamedThing']} }) + category: List[Literal["https://w3id.org/my-org/anatomical-structure-schema/ParcellationAtlas","AnS:ParcellationAtlas"]] = Field(default=["AnS:ParcellationAtlas"], json_schema_extra = { "linkml_meta": {'alias': 'category', 'designates_type': True, 'domain_of': ['NamedThing'], 'is_class_field': True} }) diff --git a/models_py-autogen/assertion_evidence.py b/models_py-autogen/assertion_evidence.py index aa5d3db8c..4385987a0 100644 --- a/models_py-autogen/assertion_evidence.py +++ b/models_py-autogen/assertion_evidence.py @@ -1,36 +1,32 @@ from __future__ import annotations + +import re +import sys from datetime import ( + date, datetime, - date + time ) from decimal import Decimal from enum import Enum -import re -import sys from typing import ( Any, ClassVar, + Dict, List, Literal, - Dict, Optional, Union ) -from pydantic.version import VERSION as PYDANTIC_VERSION -if int(PYDANTIC_VERSION[0])>=2: - from pydantic import ( - BaseModel, - ConfigDict, - Field, - RootModel, - field_validator - ) -else: - from pydantic import ( - BaseModel, - Field, - validator - ) + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + RootModel, + field_validator +) + metamodel_version = "None" version = "None" @@ -170,11 +166,11 @@ class Activity(ConfiguredBaseModel): 'range': 'Agent', 'slot_uri': 'prov:wasAssociatedWith'}}}) - was_associate_with: Optional[Agent] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'was_associate_with', + was_associate_with: Optional[Agent] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'was_associate_with', 'domain_of': ['Activity'], 'slot_uri': 'prov:wasAssociatedWith'} }) - ended_at_time: Optional[datetime ] = Field(None, description="""The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended.""", json_schema_extra = { "linkml_meta": {'alias': 'endedAtTime', 'domain_of': ['Activity']} }) - started_at_time: Optional[datetime ] = Field(None, description="""The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started.""", json_schema_extra = { "linkml_meta": {'alias': 'startedAtTime', 'domain_of': ['Activity']} }) + endedAtTime: Optional[datetime ] = Field(default=None, description="""The prov:endedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity ended.""", json_schema_extra = { "linkml_meta": {'alias': 'endedAtTime', 'domain_of': ['Activity']} }) + startedAtTime: Optional[datetime ] = Field(default=None, description="""The prov:startedAtTime establishes the relationship between prov:Activity and xsd:DateTime that allows one to specify the time when the activity started.""", json_schema_extra = { "linkml_meta": {'alias': 'startedAtTime', 'domain_of': ['Activity']} }) class Agent(ConfiguredBaseModel): @@ -183,12 +179,11 @@ class Agent(ConfiguredBaseModel): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Agent', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema', - 'slot_usage': {'has_identifier': {'domain_of': ['Agent'], - 'name': 'has_identifier', + 'slot_usage': {'has_identifier': {'name': 'has_identifier', 'range': 'Identifier', 'slot_uri': 'edam:has_identifier'}}}) - has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + has_identifier: Optional[Identifier] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', 'domain_of': ['Agent'], 'slot_uri': 'edam:has_identifier'} }) @@ -224,22 +219,22 @@ class Assertion(ConfiguredBaseModel): 'range': 'Activity', 'slot_uri': 'prov:wasGeneratedBy'}}}) - has_annotation: Optional[Annotation] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_annotation', + has_annotation: Optional[Annotation] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_annotation', 'domain_of': ['Assertion'], 'slot_uri': 'sio:000255'} }) - was_generated_by: Optional[Activity] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[Activity] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['Assertion', 'EvidenceLine'], 'slot_uri': 'prov:wasGeneratedBy'} }) - has_evidence_line: Optional[EvidenceLine] = Field(None, description="""A relationship between an assertion or proposition and an evidence line used in evaluating its validity.""", json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_line', + has_evidence_line: Optional[EvidenceLine] = Field(default=None, description="""A relationship between an assertion or proposition and an evidence line used in evaluating its validity.""", json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_line', 'domain_of': ['Assertion'], 'slot_uri': 'sepio:0000006'} }) - has_assertion_category: Optional[Categories] = Field(None, description="""The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to.""", json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_category', + has_assertion_category: Optional[Categories] = Field(default=None, description="""The brainkb:hasAssertionCategory property relates brainkb:Evidence and brainkb:Categories, specifying the classification or category that the assertion belongs to.""", json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_category', 'domain_of': ['Assertion'], 'slot_uri': 'brainkb:has_assertion_category'} }) - has_assertion_description: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_description', + has_assertion_description: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_description', 'domain_of': ['Assertion'], 'slot_uri': 'brainkb:has_assertion_description'} }) - has_assertion_summary: Optional[str] = Field(None, description="""The brainkb:has_assertion_text property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.""", json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_summary', + has_assertion_summary: Optional[str] = Field(default=None, description="""The brainkb:has_assertion_text property relates an eco:Assertion to an xsd:string, providing a textual excerpt of the assertion being made.""", json_schema_extra = { "linkml_meta": {'alias': 'has_assertion_summary', 'domain_of': ['Assertion'], 'slot_uri': 'brainkb:has_assertion_summary'} }) @@ -258,7 +253,7 @@ class EvidenceItem(ConfiguredBaseModel): 'range': 'Document', 'slot_uri': 'sepio:0000442'}}}) - reference: Optional[Document] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'reference', + reference: Optional[Document] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'reference', 'domain_of': ['EvidenceItem'], 'slot_uri': 'sepio:0000442'} }) @@ -270,10 +265,10 @@ class Document(EvidenceItem): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'iao:0000310', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - identifier: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'identifier', + identifier: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'identifier', 'domain_of': ['Document'], 'slot_uri': 'datacite:identifier'} }) - reference: Optional[Document] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'reference', + reference: Optional[Document] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'reference', 'domain_of': ['EvidenceItem'], 'slot_uri': 'sepio:0000442'} }) @@ -290,31 +285,29 @@ class EvidenceLine(ConfiguredBaseModel): 'information entity that ' 'contributes to the ' 'argument it represents.', - 'domain_of': ['EvidenceLine'], 'name': 'has_evidence_item', 'range': 'EvidenceItem', 'slot_uri': 'sepio:0000084'}, - 'was_generated_by': {'domain_of': ['Assertion', 'EvidenceLine'], - 'name': 'was_generated_by', + 'was_generated_by': {'name': 'was_generated_by', 'range': 'Activity', 'slot_uri': 'prov:wasGeneratedBy'}}}) - has_evidence_item: Optional[EvidenceItem] = Field(None, description="""A relation holding between an evidence line and an individual information entity that contributes to the argument it represents.""", json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_item', + has_evidence_item: Optional[EvidenceItem] = Field(default=None, description="""A relation holding between an evidence line and an individual information entity that contributes to the argument it represents.""", json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_item', 'domain_of': ['EvidenceLine'], 'slot_uri': 'sepio:0000084'} }) - was_generated_by: Optional[Activity] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[Activity] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['Assertion', 'EvidenceLine'], 'slot_uri': 'prov:wasGeneratedBy'} }) - evidence_direction: Optional[EvidenceDirection] = Field(None, description="""A relation indicating whether an evidence line supports or disputes a target proposition (or represents inconclusive evidence that is not sufficient for either).""", json_schema_extra = { "linkml_meta": {'alias': 'evidence_direction', + evidence_direction: Optional[EvidenceDirection] = Field(default=None, description="""A relation indicating whether an evidence line supports or disputes a target proposition (or represents inconclusive evidence that is not sufficient for either).""", json_schema_extra = { "linkml_meta": {'alias': 'evidence_direction', 'domain_of': ['EvidenceLine'], 'slot_uri': 'sepio:0000183'} }) - evidence_line_strength: Optional[EvidenceStrength] = Field(None, description="""A relation describing the degree of support provided by an evidence line for a target assertion or proposition.""", json_schema_extra = { "linkml_meta": {'alias': 'evidence_line_strength', + evidence_line_strength: Optional[EvidenceStrength] = Field(default=None, description="""A relation describing the degree of support provided by an evidence line for a target assertion or proposition.""", json_schema_extra = { "linkml_meta": {'alias': 'evidence_line_strength', 'domain_of': ['EvidenceLine'], 'slot_uri': 'sepio:0000132'} }) - has_evidence_category: Optional[Categories] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_category', + has_evidence_category: Optional[Categories] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_evidence_category', 'domain_of': ['EvidenceLine'], 'slot_uri': 'brainkb:has_evidence_category'} }) - has_evidenceline_description: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_evidenceline_description', + has_evidenceline_description: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_evidenceline_description', 'domain_of': ['EvidenceLine'], 'slot_uri': 'braiankb:has_evidenceline_description'} }) @@ -323,7 +316,7 @@ class Group(Agent): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'foaf:Group', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + has_identifier: Optional[Identifier] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', 'domain_of': ['Agent'], 'slot_uri': 'edam:has_identifier'} }) @@ -339,7 +332,7 @@ class Organization(Group): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:Organization', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + has_identifier: Optional[Identifier] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', 'domain_of': ['Agent'], 'slot_uri': 'edam:has_identifier'} }) @@ -351,8 +344,8 @@ class Person(Agent): 'range': 'Organization', 'slot_uri': 'foaf:member'}}}) - member: Optional[Organization] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'member', 'domain_of': ['Person'], 'slot_uri': 'foaf:member'} }) - has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + member: Optional[Organization] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'member', 'domain_of': ['Person'], 'slot_uri': 'foaf:member'} }) + has_identifier: Optional[Identifier] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', 'domain_of': ['Agent'], 'slot_uri': 'edam:has_identifier'} }) @@ -375,7 +368,7 @@ class SoftwareAgent(Agent): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'prov:SoftwareAgent', 'from_schema': 'https://identifiers.org/brain-bican/assertion-evidence-schema'}) - has_identifier: Optional[Identifier] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', + has_identifier: Optional[Identifier] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_identifier', 'domain_of': ['Agent'], 'slot_uri': 'edam:has_identifier'} }) diff --git a/models_py-autogen/genome_annotation.py b/models_py-autogen/genome_annotation.py index 539ae72e8..c07e35058 100644 --- a/models_py-autogen/genome_annotation.py +++ b/models_py-autogen/genome_annotation.py @@ -1,36 +1,32 @@ from __future__ import annotations + +import re +import sys from datetime import ( + date, datetime, - date + time ) from decimal import Decimal from enum import Enum -import re -import sys from typing import ( Any, ClassVar, + Dict, List, Literal, - Dict, Optional, Union ) -from pydantic.version import VERSION as PYDANTIC_VERSION -if int(PYDANTIC_VERSION[0])>=2: - from pydantic import ( - BaseModel, - ConfigDict, - Field, - RootModel, - field_validator - ) -else: - from pydantic import ( - BaseModel, - Field, - validator - ) + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + RootModel, + field_validator +) + metamodel_version = "None" version = "None" @@ -130,7 +126,7 @@ class OntologyClass(ConfiguredBaseModel): 'mixin': True, 'see_also': ['https://github.com/biolink/biolink-model/issues/486']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -173,7 +169,7 @@ class QuantityValue(Annotation): 'definition_uri': 'https://w3id.org/biolink/vocab/QuantityValue', 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - has_unit: Optional[str] = Field(None, description="""connects a quantity value to a unit""", json_schema_extra = { "linkml_meta": {'alias': 'has_unit', + has_unit: Optional[str] = Field(default=None, description="""connects a quantity value to a unit""", json_schema_extra = { "linkml_meta": {'alias': 'has_unit', 'close_mappings': ['EFO:0001697', 'UO-PROPERTY:is_unit_of'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_unit', 'domain': 'quantity value', @@ -186,7 +182,7 @@ class QuantityValue(Annotation): 'SNOMED:has_presentation_strength_numerator_unit', 'SNOMED:has_unit_of_presentation'], 'slot_uri': 'biolink:has_unit'} }) - has_numeric_value: Optional[float] = Field(None, description="""connects a quantity value to a number""", json_schema_extra = { "linkml_meta": {'alias': 'has_numeric_value', + has_numeric_value: Optional[float] = Field(default=None, description="""connects a quantity value to a number""", json_schema_extra = { "linkml_meta": {'alias': 'has_numeric_value', 'definition_uri': 'https://w3id.org/biolink/vocab/has_numeric_value', 'domain': 'quantity value', 'domain_of': ['quantity value'], @@ -204,7 +200,7 @@ class Entity(ConfiguredBaseModel): 'definition_uri': 'https://w3id.org/biolink/vocab/Entity', 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -225,7 +221,7 @@ class Entity(ConfiguredBaseModel): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -243,7 +239,7 @@ class Entity(ConfiguredBaseModel): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Entity","biolink:Entity"]] = Field(["biolink:Entity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Entity","biolink:Entity"]] = Field(default=["biolink:Entity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -264,7 +260,7 @@ class Entity(ConfiguredBaseModel): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -283,7 +279,7 @@ class Entity(ConfiguredBaseModel): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -307,7 +303,7 @@ class Entity(ConfiguredBaseModel): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -328,7 +324,7 @@ class Entity(ConfiguredBaseModel): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -422,7 +418,7 @@ class Entity(ConfiguredBaseModel): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -445,7 +441,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -466,7 +462,7 @@ class NamedThing(Entity): 'dcid:Thing'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -487,7 +483,7 @@ class NamedThing(Entity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -505,7 +501,7 @@ class NamedThing(Entity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/NamedThing","biolink:NamedThing"]] = Field(["biolink:NamedThing"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/NamedThing","biolink:NamedThing"]] = Field(default=["biolink:NamedThing"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -526,7 +522,7 @@ class NamedThing(Entity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -545,7 +541,7 @@ class NamedThing(Entity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -569,7 +565,7 @@ class NamedThing(Entity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -590,7 +586,7 @@ class NamedThing(Entity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -684,7 +680,7 @@ class NamedThing(Entity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -701,7 +697,7 @@ class NamedThing(Entity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -718,7 +714,7 @@ class NamedThing(Entity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -737,7 +733,7 @@ class NamedThing(Entity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -754,7 +750,7 @@ class NamedThing(Entity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -786,7 +782,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -804,7 +800,7 @@ class Attribute(NamedThing, OntologyClass): 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'id_prefixes': ['EDAM-DATA', 'EDAM-FORMAT', 'EDAM-OPERATION', 'EDAM-TOPIC'], 'in_subset': ['samples'], - 'mixins': ['OntologyClass'], + 'mixins': ['ontology class'], 'slot_usage': {'name': {'description': "The human-readable 'attribute name' " 'can be set to a string which reflects ' 'its context of interpretation, e.g. ' @@ -814,7 +810,7 @@ class Attribute(NamedThing, OntologyClass): "attribute type' slot ontology term.", 'name': 'name'}}}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -835,7 +831,7 @@ class Attribute(NamedThing, OntologyClass): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Attribute","biolink:Attribute"]] = Field(["biolink:Attribute"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Attribute","biolink:Attribute"]] = Field(default=["biolink:Attribute"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -856,7 +852,7 @@ class Attribute(NamedThing, OntologyClass): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -875,7 +871,7 @@ class Attribute(NamedThing, OntologyClass): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -896,7 +892,7 @@ class Attribute(NamedThing, OntologyClass): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -990,7 +986,7 @@ class Attribute(NamedThing, OntologyClass): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -1007,7 +1003,7 @@ class Attribute(NamedThing, OntologyClass): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1024,7 +1020,7 @@ class Attribute(NamedThing, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -1043,7 +1039,7 @@ class Attribute(NamedThing, OntologyClass): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1060,7 +1056,7 @@ class Attribute(NamedThing, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -1086,27 +1082,38 @@ class Attribute(NamedThing, OntologyClass): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - attribute_name: Optional[str] = Field(None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', - 'domain': 'attribute', - 'domain_of': ['attribute'], + 'domain': 'entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', + 'named thing', + 'organism taxon', + 'information content entity', + 'dataset', + 'physical entity', + 'activity', + 'procedure', + 'material sample', + 'biological entity', + 'gene or gene product', + 'gene', + 'genome'], 'exact_mappings': ['gff3:Name', 'gpi:DB_Object_Name'], 'in_subset': ['translator_minimal', 'samples'], - 'is_a': 'name', - 'is_usage_slot': True, 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], - 'slot_uri': 'rdfs:label', - 'usage_slot_name': 'name'} }) - has_attribute_type: str = Field(..., description="""connects an attribute to a class that describes it""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute_type', + 'slot_uri': 'rdfs:label'} }) + has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute_type', 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute_type', 'domain': 'attribute', 'domain_of': ['attribute'], 'in_subset': ['samples'], 'narrow_mappings': ['LOINC:has_modality_type', 'LOINC:has_view_type'], 'slot_uri': 'biolink:has_attribute_type'} }) - has_quantitative_value: Optional[List[QuantityValue]] = Field(None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_quantitative_value', + has_quantitative_value: Optional[List[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_quantitative_value', 'definition_uri': 'https://w3id.org/biolink/vocab/has_quantitative_value', 'domain': 'attribute', 'domain_of': ['attribute'], @@ -1116,13 +1123,13 @@ class Attribute(NamedThing, OntologyClass): 'SNOMED:has_presentation_strength_denominator_value', 'SNOMED:has_presentation_strength_numerator_value'], 'slot_uri': 'biolink:has_quantitative_value'} }) - has_qualitative_value: Optional[str] = Field(None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_qualitative_value', + has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_qualitative_value', 'definition_uri': 'https://w3id.org/biolink/vocab/has_qualitative_value', 'domain': 'attribute', 'domain_of': ['attribute'], 'in_subset': ['samples'], 'slot_uri': 'biolink:has_qualitative_value'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -1140,31 +1147,13 @@ class Attribute(NamedThing, OntologyClass): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - name: Optional[str] = Field(None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""", json_schema_extra = { "linkml_meta": {'alias': 'name', - 'definition_uri': 'https://w3id.org/biolink/vocab/name', - 'domain': 'entity', - 'domain_of': ['entity', - 'named thing', - 'organism taxon', - 'information content entity', - 'dataset', - 'physical entity', - 'activity', - 'procedure', - 'material sample', - 'biological entity', - 'macromolecular machine mixin', - 'gene or gene product', - 'gene', - 'genome'], - 'slot_uri': 'rdfs:label'} }) @field_validator('category') def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -1182,7 +1171,7 @@ class TaxonomicRank(OntologyClass): 'id_prefixes': ['TAXRANK'], 'mappings': ['WIKIDATA:Q427626']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1219,7 +1208,7 @@ class OrganismTaxon(NamedThing): 'narrow_mappings': ['dcid:BiologicalSpecies'], 'values_from': ['NCBITaxon']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1240,7 +1229,7 @@ class OrganismTaxon(NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -1258,7 +1247,7 @@ class OrganismTaxon(NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/OrganismTaxon","biolink:OrganismTaxon"]] = Field(["biolink:OrganismTaxon"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/OrganismTaxon","biolink:OrganismTaxon"]] = Field(default=["biolink:OrganismTaxon"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -1279,7 +1268,7 @@ class OrganismTaxon(NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -1298,7 +1287,7 @@ class OrganismTaxon(NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -1322,7 +1311,7 @@ class OrganismTaxon(NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -1343,7 +1332,7 @@ class OrganismTaxon(NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -1437,7 +1426,7 @@ class OrganismTaxon(NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -1454,7 +1443,7 @@ class OrganismTaxon(NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1471,7 +1460,7 @@ class OrganismTaxon(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -1490,7 +1479,7 @@ class OrganismTaxon(NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1507,7 +1496,7 @@ class OrganismTaxon(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -1533,7 +1522,7 @@ class OrganismTaxon(NamedThing): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - has_taxonomic_rank: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_taxonomic_rank', + has_taxonomic_rank: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_taxonomic_rank', 'definition_uri': 'https://w3id.org/biolink/vocab/has_taxonomic_rank', 'domain': 'named thing', 'domain_of': ['organism taxon'], @@ -1546,7 +1535,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -1578,7 +1567,7 @@ class InformationContentEntity(NamedThing): 'STY:T171', 'STY:T185']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1599,7 +1588,7 @@ class InformationContentEntity(NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -1617,7 +1606,7 @@ class InformationContentEntity(NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/InformationContentEntity","biolink:InformationContentEntity"]] = Field(["biolink:InformationContentEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/InformationContentEntity","biolink:InformationContentEntity"]] = Field(default=["biolink:InformationContentEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -1638,7 +1627,7 @@ class InformationContentEntity(NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -1657,7 +1646,7 @@ class InformationContentEntity(NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -1681,7 +1670,7 @@ class InformationContentEntity(NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -1702,7 +1691,7 @@ class InformationContentEntity(NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -1796,7 +1785,7 @@ class InformationContentEntity(NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -1813,7 +1802,7 @@ class InformationContentEntity(NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1830,7 +1819,7 @@ class InformationContentEntity(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -1849,7 +1838,7 @@ class InformationContentEntity(NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1866,7 +1855,7 @@ class InformationContentEntity(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -1892,7 +1881,7 @@ class InformationContentEntity(NamedThing): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - license: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'license', + license: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'license', 'definition_uri': 'https://w3id.org/biolink/vocab/license', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], @@ -1900,21 +1889,21 @@ class InformationContentEntity(NamedThing): 'is_a': 'node property', 'narrow_mappings': ['WIKIDATA_PROPERTY:P275'], 'slot_uri': 'biolink:license'} }) - rights: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'rights', + rights: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'rights', 'definition_uri': 'https://w3id.org/biolink/vocab/rights', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:rights'], 'is_a': 'node property', 'slot_uri': 'biolink:rights'} }) - format: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'format', + format: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'format', 'definition_uri': 'https://w3id.org/biolink/vocab/format', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:format', 'WIKIDATA_PROPERTY:P2701'], 'is_a': 'node property', 'slot_uri': 'biolink:format'} }) - creation_date: Optional[date] = Field(None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', + creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', 'aliases': ['publication date'], 'definition_uri': 'https://w3id.org/biolink/vocab/creation_date', 'domain': 'named thing', @@ -1928,7 +1917,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -1948,7 +1937,7 @@ class Dataset(InformationContentEntity): 'dcid:Dataset'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1969,7 +1958,7 @@ class Dataset(InformationContentEntity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -1987,7 +1976,7 @@ class Dataset(InformationContentEntity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Dataset","biolink:Dataset"]] = Field(["biolink:Dataset"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Dataset","biolink:Dataset"]] = Field(default=["biolink:Dataset"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -2008,7 +1997,7 @@ class Dataset(InformationContentEntity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -2027,7 +2016,7 @@ class Dataset(InformationContentEntity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -2051,7 +2040,7 @@ class Dataset(InformationContentEntity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -2072,7 +2061,7 @@ class Dataset(InformationContentEntity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -2166,7 +2155,7 @@ class Dataset(InformationContentEntity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -2183,7 +2172,7 @@ class Dataset(InformationContentEntity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2200,7 +2189,7 @@ class Dataset(InformationContentEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -2219,7 +2208,7 @@ class Dataset(InformationContentEntity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2236,7 +2225,7 @@ class Dataset(InformationContentEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -2262,7 +2251,7 @@ class Dataset(InformationContentEntity): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - license: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'license', + license: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'license', 'definition_uri': 'https://w3id.org/biolink/vocab/license', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], @@ -2270,21 +2259,21 @@ class Dataset(InformationContentEntity): 'is_a': 'node property', 'narrow_mappings': ['WIKIDATA_PROPERTY:P275'], 'slot_uri': 'biolink:license'} }) - rights: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'rights', + rights: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'rights', 'definition_uri': 'https://w3id.org/biolink/vocab/rights', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:rights'], 'is_a': 'node property', 'slot_uri': 'biolink:rights'} }) - format: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'format', + format: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'format', 'definition_uri': 'https://w3id.org/biolink/vocab/format', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:format', 'WIKIDATA_PROPERTY:P2701'], 'is_a': 'node property', 'slot_uri': 'biolink:format'} }) - creation_date: Optional[date] = Field(None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', + creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', 'aliases': ['publication date'], 'definition_uri': 'https://w3id.org/biolink/vocab/creation_date', 'domain': 'named thing', @@ -2298,7 +2287,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -2338,10 +2327,10 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'definition_uri': 'https://w3id.org/biolink/vocab/PhysicalEntity', 'exact_mappings': ['STY:T072'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', - 'mixins': ['PhysicalEssence'], + 'mixins': ['physical essence'], 'narrow_mappings': ['STY:T073']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -2362,7 +2351,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -2380,7 +2369,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/PhysicalEntity","biolink:PhysicalEntity"]] = Field(["biolink:PhysicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/PhysicalEntity","biolink:PhysicalEntity"]] = Field(default=["biolink:PhysicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -2401,7 +2390,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -2420,7 +2409,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -2444,7 +2433,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -2465,7 +2454,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -2559,7 +2548,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -2576,7 +2565,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2593,7 +2582,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -2612,7 +2601,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2629,7 +2618,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -2661,7 +2650,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -2703,7 +2692,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'definition_uri': 'https://w3id.org/biolink/vocab/Activity', 'exact_mappings': ['prov:Activity', 'NCIT:C43431', 'STY:T052'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', - 'mixins': ['ActivityAndBehavior'], + 'mixins': ['activity and behavior'], 'narrow_mappings': ['STY:T056', 'STY:T057', 'STY:T064', @@ -2712,7 +2701,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'STY:T065', 'STY:T058']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -2733,7 +2722,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -2751,7 +2740,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Activity","biolink:Activity"]] = Field(["biolink:Activity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Activity","biolink:Activity"]] = Field(default=["biolink:Activity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -2772,7 +2761,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -2791,7 +2780,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -2815,7 +2804,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -2836,7 +2825,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -2930,7 +2919,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -2947,7 +2936,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2964,7 +2953,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -2983,7 +2972,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3000,7 +2989,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -3032,7 +3021,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -3049,10 +3038,10 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['UMLSSG:PROC', 'dcid:MedicalProcedure'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'id_prefixes': ['CPT'], - 'mixins': ['ActivityAndBehavior'], + 'mixins': ['activity and behavior'], 'narrow_mappings': ['STY:T059', 'STY:T060', 'STY:T061', 'STY:T063']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -3073,7 +3062,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -3091,7 +3080,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Procedure","biolink:Procedure"]] = Field(["biolink:Procedure"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Procedure","biolink:Procedure"]] = Field(default=["biolink:Procedure"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -3112,7 +3101,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -3131,7 +3120,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -3155,7 +3144,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -3176,7 +3165,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -3270,7 +3259,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -3287,7 +3276,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3304,7 +3293,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -3323,7 +3312,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3340,7 +3329,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -3372,7 +3361,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -3402,9 +3391,9 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['OBI:0000747', 'SIO:001050'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'id_prefixes': ['BIOSAMPLE', 'GOLD.META'], - 'mixins': ['SubjectOfInvestigation']}) + 'mixins': ['subject of investigation']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -3425,7 +3414,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -3443,7 +3432,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/MaterialSample","biolink:MaterialSample"]] = Field(["biolink:MaterialSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/MaterialSample","biolink:MaterialSample"]] = Field(default=["biolink:MaterialSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -3464,7 +3453,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -3483,7 +3472,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -3507,7 +3496,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -3528,7 +3517,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -3622,7 +3611,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -3639,7 +3628,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3656,7 +3645,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -3675,7 +3664,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3692,7 +3681,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -3724,7 +3713,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -3741,12 +3730,14 @@ class ThingWithTaxon(ConfiguredBaseModel): 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'mixin': True}) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -3756,7 +3747,8 @@ class ThingWithTaxon(ConfiguredBaseModel): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -3772,13 +3764,13 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'class_uri': 'biolink:BiologicalEntity', 'definition_uri': 'https://w3id.org/biolink/vocab/BiologicalEntity', 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', - 'mixins': ['ThingWithTaxon'], + 'mixins': ['thing with taxon'], 'narrow_mappings': ['WIKIDATA:Q28845870', 'STY:T050', 'SIO:010046', 'STY:T129']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -3799,7 +3791,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -3817,7 +3809,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/BiologicalEntity","biolink:BiologicalEntity"]] = Field(["biolink:BiologicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/BiologicalEntity","biolink:BiologicalEntity"]] = Field(default=["biolink:BiologicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -3838,7 +3830,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -3857,7 +3849,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -3881,7 +3873,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -3902,7 +3894,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -3996,7 +3988,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -4013,7 +4005,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4030,7 +4022,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -4049,7 +4041,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4066,7 +4058,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -4092,12 +4084,14 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -4107,7 +4101,8 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -4121,7 +4116,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -4137,7 +4132,7 @@ class GenomicEntity(ConfiguredBaseModel): 'mixin': True, 'narrow_mappings': ['STY:T028', 'GENO:0000897']}) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -4166,7 +4161,7 @@ class MacromolecularMachineMixin(ConfiguredBaseModel): 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'mixin': True}) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4202,7 +4197,7 @@ class GeneOrGeneProduct(MacromolecularMachineMixin): 'id_prefixes': ['CHEMBL.TARGET', 'IUPHAR.FAMILY'], 'mixin': True}) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4256,14 +4251,14 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'AspGD', 'PHARMGKB.GENE'], 'in_subset': ['translator_minimal', 'model_organism_database'], - 'mixins': ['GeneOrGeneProduct', - 'GenomicEntity', - 'ChemicalEntityOrGeneOrGeneProduct', - 'PhysicalEssence', - 'OntologyClass'], + 'mixins': ['gene or gene product', + 'genomic entity', + 'chemical entity or gene or gene product', + 'physical essence', + 'ontology class'], 'narrow_mappings': ['bioschemas:gene']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -4284,7 +4279,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -4302,7 +4297,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Gene","biolink:Gene"]] = Field(["biolink:Gene"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Gene","biolink:Gene"]] = Field(default=["biolink:Gene"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -4323,7 +4318,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -4342,7 +4337,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4366,7 +4361,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -4387,7 +4382,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -4481,7 +4476,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -4498,7 +4493,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4515,7 +4510,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4532,7 +4527,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -4558,12 +4553,14 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -4573,7 +4570,8 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -4581,14 +4579,14 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - symbol: Optional[str] = Field(None, description="""Symbol for a particular thing""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', + symbol: Optional[str] = Field(default=None, description="""Symbol for a particular thing""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', 'definition_uri': 'https://w3id.org/biolink/vocab/symbol', 'domain': 'named thing', 'domain_of': ['gene'], 'exact_mappings': ['AGRKB:symbol', 'gpi:DB_Object_Symbol'], 'is_a': 'node property', 'slot_uri': 'biolink:symbol'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -4607,7 +4605,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -4619,7 +4617,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -4637,9 +4635,9 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['SO:0001026', 'SIO:000984', 'WIKIDATA:Q7020'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'in_subset': ['model_organism_database'], - 'mixins': ['GenomicEntity', 'PhysicalEssence', 'OntologyClass']}) + 'mixins': ['genomic entity', 'physical essence', 'ontology class']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -4660,7 +4658,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -4678,7 +4676,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Genome","biolink:Genome"]] = Field(["biolink:Genome"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Genome","biolink:Genome"]] = Field(default=["biolink:Genome"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -4699,7 +4697,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -4718,7 +4716,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4742,7 +4740,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -4763,7 +4761,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -4857,7 +4855,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -4874,7 +4872,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4891,7 +4889,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -4910,7 +4908,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4927,7 +4925,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -4953,12 +4951,14 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -4968,7 +4968,8 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -4976,7 +4977,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -4988,7 +4989,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -5002,9 +5003,9 @@ class Checksum(Entity): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/bican-core-schema'}) - checksum_algorithm: Optional[DigestType] = Field(None, description="""The type of cryptographic hash function used to calculate the checksum value.""", json_schema_extra = { "linkml_meta": {'alias': 'checksum_algorithm', 'domain_of': ['checksum']} }) - value: Optional[str] = Field(None, description="""The checksum value obtained from a specific cryotographic hash function.""", json_schema_extra = { "linkml_meta": {'alias': 'value', 'domain_of': ['checksum']} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + checksum_algorithm: Optional[DigestType] = Field(default=None, description="""The type of cryptographic hash function used to calculate the checksum value.""", json_schema_extra = { "linkml_meta": {'alias': 'checksum_algorithm', 'domain_of': ['checksum']} }) + value: Optional[str] = Field(default=None, description="""The checksum value obtained from a specific cryotographic hash function.""", json_schema_extra = { "linkml_meta": {'alias': 'value', 'domain_of': ['checksum']} }) + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -5025,7 +5026,7 @@ class Checksum(Entity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -5043,7 +5044,7 @@ class Checksum(Entity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/Checksum","bican:Checksum"]] = Field(["bican:Checksum"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/Checksum","bican:Checksum"]] = Field(default=["bican:Checksum"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -5064,7 +5065,7 @@ class Checksum(Entity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -5083,7 +5084,7 @@ class Checksum(Entity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5107,7 +5108,7 @@ class Checksum(Entity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -5128,7 +5129,7 @@ class Checksum(Entity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -5222,7 +5223,7 @@ class Checksum(Entity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -5245,7 +5246,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -5260,16 +5261,16 @@ class GeneAnnotation(Gene): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/genome-annotation-schema', 'id_prefixes': ['ENSEMBL', 'MGI', 'NCBIGene']}) - molecular_type: Optional[Union[BioType, str]] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'molecular_type', + molecular_type: Optional[Union[BioType, str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'molecular_type', 'any_of': [{'range': 'BioType'}, {'range': 'string'}], 'domain_of': ['gene annotation']} }) - source_id: Optional[str] = Field(None, description="""The authority specific identifier.""", json_schema_extra = { "linkml_meta": {'alias': 'source_id', + source_id: Optional[str] = Field(default=None, description="""The authority specific identifier.""", json_schema_extra = { "linkml_meta": {'alias': 'source_id', 'domain_of': ['gene annotation'], 'slot_uri': 'schema:identifier'} }) - referenced_in: Union[GenomeAnnotation, str] = Field(..., description="""The genome annotation that this gene annotation was referenced from.""", json_schema_extra = { "linkml_meta": {'alias': 'referenced_in', + referenced_in: Union[GenomeAnnotation, str] = Field(default=..., description="""The genome annotation that this gene annotation was referenced from.""", json_schema_extra = { "linkml_meta": {'alias': 'referenced_in', 'any_of': [{'range': 'genome annotation'}, {'range': 'string'}], 'domain_of': ['gene annotation']} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -5290,7 +5291,7 @@ class GeneAnnotation(Gene): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -5308,7 +5309,7 @@ class GeneAnnotation(Gene): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/GeneAnnotation","bican:GeneAnnotation"]] = Field(["bican:GeneAnnotation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/GeneAnnotation","bican:GeneAnnotation"]] = Field(default=["bican:GeneAnnotation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -5329,7 +5330,7 @@ class GeneAnnotation(Gene): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -5348,7 +5349,7 @@ class GeneAnnotation(Gene): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5372,7 +5373,7 @@ class GeneAnnotation(Gene): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -5393,7 +5394,7 @@ class GeneAnnotation(Gene): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -5487,7 +5488,7 @@ class GeneAnnotation(Gene): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -5504,7 +5505,7 @@ class GeneAnnotation(Gene): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5521,7 +5522,7 @@ class GeneAnnotation(Gene): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5538,7 +5539,7 @@ class GeneAnnotation(Gene): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -5564,12 +5565,14 @@ class GeneAnnotation(Gene): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5579,7 +5582,8 @@ class GeneAnnotation(Gene): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5587,14 +5591,14 @@ class GeneAnnotation(Gene): 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - symbol: Optional[str] = Field(None, description="""Symbol for a particular thing""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', + symbol: Optional[str] = Field(default=None, description="""Symbol for a particular thing""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', 'definition_uri': 'https://w3id.org/biolink/vocab/symbol', 'domain': 'named thing', 'domain_of': ['gene'], 'exact_mappings': ['AGRKB:symbol', 'gpi:DB_Object_Symbol'], 'is_a': 'node property', 'slot_uri': 'biolink:symbol'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -5613,7 +5617,7 @@ class GeneAnnotation(Gene): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -5625,7 +5629,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -5639,24 +5643,24 @@ class GenomeAnnotation(Genome): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/genome-annotation-schema'}) - version: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'version', + version: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'version', 'broad_mappings': ['pav:version', 'owl:versionInfo'], 'definition_uri': 'https://w3id.org/biolink/vocab/version', 'domain': 'dataset', 'domain_of': ['genome annotation', 'genome assembly'], 'is_a': 'node property', 'slot_uri': 'biolink:version'} }) - digest: Optional[List[Union[Checksum, str]]] = Field(default_factory=list, description="""Stores checksum information.""", json_schema_extra = { "linkml_meta": {'alias': 'digest', + digest: Optional[List[Union[Checksum, str]]] = Field(default=None, description="""Stores checksum information.""", json_schema_extra = { "linkml_meta": {'alias': 'digest', 'any_of': [{'range': 'checksum'}, {'range': 'string'}], 'domain_of': ['genome annotation']} }) - content_url: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'content_url', + content_url: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'content_url', 'domain_of': ['genome annotation'], 'slot_uri': 'schema:url'} }) - authority: Optional[AuthorityType] = Field(None, description="""The organization responsible for publishing the data.""", json_schema_extra = { "linkml_meta": {'alias': 'authority', 'domain_of': ['genome annotation']} }) - reference_assembly: Union[GenomeAssembly, str] = Field(..., description="""The reference genome assembly that this genome annotation was created from.""", json_schema_extra = { "linkml_meta": {'alias': 'reference_assembly', + authority: Optional[AuthorityType] = Field(default=None, description="""The organization responsible for publishing the data.""", json_schema_extra = { "linkml_meta": {'alias': 'authority', 'domain_of': ['genome annotation']} }) + reference_assembly: Union[GenomeAssembly, str] = Field(default=..., description="""The reference genome assembly that this genome annotation was created from.""", json_schema_extra = { "linkml_meta": {'alias': 'reference_assembly', 'any_of': [{'range': 'genome assembly'}, {'range': 'string'}], 'domain_of': ['genome annotation']} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -5677,7 +5681,7 @@ class GenomeAnnotation(Genome): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -5695,7 +5699,7 @@ class GenomeAnnotation(Genome): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/GenomeAnnotation","bican:GenomeAnnotation"]] = Field(["bican:GenomeAnnotation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/GenomeAnnotation","bican:GenomeAnnotation"]] = Field(default=["bican:GenomeAnnotation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -5716,7 +5720,7 @@ class GenomeAnnotation(Genome): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -5735,7 +5739,7 @@ class GenomeAnnotation(Genome): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5759,7 +5763,7 @@ class GenomeAnnotation(Genome): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -5780,7 +5784,7 @@ class GenomeAnnotation(Genome): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -5874,7 +5878,7 @@ class GenomeAnnotation(Genome): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -5891,7 +5895,7 @@ class GenomeAnnotation(Genome): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5908,7 +5912,7 @@ class GenomeAnnotation(Genome): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -5927,7 +5931,7 @@ class GenomeAnnotation(Genome): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5944,7 +5948,7 @@ class GenomeAnnotation(Genome): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -5970,12 +5974,14 @@ class GenomeAnnotation(Genome): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5985,7 +5991,8 @@ class GenomeAnnotation(Genome): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5993,7 +6000,7 @@ class GenomeAnnotation(Genome): 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -6005,7 +6012,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -6018,22 +6025,24 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): Genome assembly to contain version and label information """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/genome-annotation-schema', - 'mixins': ['ThingWithTaxon']}) + 'mixins': ['thing with taxon']}) - version: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'version', + version: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'version', 'broad_mappings': ['pav:version', 'owl:versionInfo'], 'definition_uri': 'https://w3id.org/biolink/vocab/version', 'domain': 'dataset', 'domain_of': ['genome annotation', 'genome assembly'], 'is_a': 'node property', 'slot_uri': 'biolink:version'} }) - strain: Optional[str] = Field(None, description="""The genetic variant or subtype of a species or organism.""", json_schema_extra = { "linkml_meta": {'alias': 'strain', 'domain_of': ['genome assembly']} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + strain: Optional[str] = Field(default=None, description="""The genetic variant or subtype of a species or organism.""", json_schema_extra = { "linkml_meta": {'alias': 'strain', 'domain_of': ['genome assembly']} }) + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -6043,7 +6052,8 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -6051,7 +6061,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -6072,7 +6082,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -6090,7 +6100,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/GenomeAssembly","bican:GenomeAssembly"]] = Field(["bican:GenomeAssembly"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/GenomeAssembly","bican:GenomeAssembly"]] = Field(default=["bican:GenomeAssembly"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -6111,7 +6121,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -6130,7 +6140,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -6154,7 +6164,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -6175,7 +6185,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -6269,7 +6279,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -6286,7 +6296,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -6303,7 +6313,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -6322,7 +6332,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -6339,7 +6349,7 @@ class GenomeAssembly(ThingWithTaxon, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -6371,7 +6381,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -6383,9 +6393,9 @@ class AnnotationCollection(ConfiguredBaseModel): linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/genome-annotation-schema', 'tree_root': True}) - annotations: Optional[List[GeneAnnotation]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'annotations', 'domain_of': ['annotation collection']} }) - genome_annotations: Optional[List[GenomeAnnotation]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'genome_annotations', 'domain_of': ['annotation collection']} }) - genome_assemblies: Optional[List[GenomeAssembly]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'genome_assemblies', 'domain_of': ['annotation collection']} }) + annotations: Optional[List[GeneAnnotation]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'annotations', 'domain_of': ['annotation collection']} }) + genome_annotations: Optional[List[GenomeAnnotation]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'genome_annotations', 'domain_of': ['annotation collection']} }) + genome_assemblies: Optional[List[GenomeAssembly]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'genome_assemblies', 'domain_of': ['annotation collection']} }) # Model rebuild diff --git a/models_py-autogen/library_generation.py b/models_py-autogen/library_generation.py index 5b2796b26..0e5b29048 100644 --- a/models_py-autogen/library_generation.py +++ b/models_py-autogen/library_generation.py @@ -1,36 +1,32 @@ from __future__ import annotations + +import re +import sys from datetime import ( + date, datetime, - date + time ) from decimal import Decimal from enum import Enum -import re -import sys from typing import ( Any, ClassVar, + Dict, List, Literal, - Dict, Optional, Union ) -from pydantic.version import VERSION as PYDANTIC_VERSION -if int(PYDANTIC_VERSION[0])>=2: - from pydantic import ( - BaseModel, - ConfigDict, - Field, - RootModel, - field_validator - ) -else: - from pydantic import ( - BaseModel, - Field, - validator - ) + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + RootModel, + field_validator +) + metamodel_version = "None" version = "None" @@ -1336,7 +1332,7 @@ class OntologyClass(ConfiguredBaseModel): 'mixin': True, 'see_also': ['https://github.com/biolink/biolink-model/issues/486']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1379,7 +1375,7 @@ class QuantityValue(Annotation): 'definition_uri': 'https://w3id.org/biolink/vocab/QuantityValue', 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - has_unit: Optional[str] = Field(None, description="""connects a quantity value to a unit""", json_schema_extra = { "linkml_meta": {'alias': 'has_unit', + has_unit: Optional[str] = Field(default=None, description="""connects a quantity value to a unit""", json_schema_extra = { "linkml_meta": {'alias': 'has_unit', 'close_mappings': ['EFO:0001697', 'UO-PROPERTY:is_unit_of'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_unit', 'domain': 'quantity value', @@ -1392,7 +1388,7 @@ class QuantityValue(Annotation): 'SNOMED:has_presentation_strength_numerator_unit', 'SNOMED:has_unit_of_presentation'], 'slot_uri': 'biolink:has_unit'} }) - has_numeric_value: Optional[float] = Field(None, description="""connects a quantity value to a number""", json_schema_extra = { "linkml_meta": {'alias': 'has_numeric_value', + has_numeric_value: Optional[float] = Field(default=None, description="""connects a quantity value to a number""", json_schema_extra = { "linkml_meta": {'alias': 'has_numeric_value', 'definition_uri': 'https://w3id.org/biolink/vocab/has_numeric_value', 'domain': 'quantity value', 'domain_of': ['quantity value'], @@ -1410,7 +1406,7 @@ class Entity(ConfiguredBaseModel): 'definition_uri': 'https://w3id.org/biolink/vocab/Entity', 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1431,7 +1427,7 @@ class Entity(ConfiguredBaseModel): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -1449,7 +1445,7 @@ class Entity(ConfiguredBaseModel): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Entity","biolink:Entity"]] = Field(["biolink:Entity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Entity","biolink:Entity"]] = Field(default=["biolink:Entity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -1470,7 +1466,7 @@ class Entity(ConfiguredBaseModel): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -1489,7 +1485,7 @@ class Entity(ConfiguredBaseModel): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -1524,7 +1520,7 @@ class Entity(ConfiguredBaseModel): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -1545,7 +1541,7 @@ class Entity(ConfiguredBaseModel): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -1639,7 +1635,7 @@ class Entity(ConfiguredBaseModel): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -1662,7 +1658,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -1683,7 +1679,7 @@ class NamedThing(Entity): 'dcid:Thing'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -1704,7 +1700,7 @@ class NamedThing(Entity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -1722,7 +1718,7 @@ class NamedThing(Entity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/NamedThing","biolink:NamedThing"]] = Field(["biolink:NamedThing"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/NamedThing","biolink:NamedThing"]] = Field(default=["biolink:NamedThing"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -1743,7 +1739,7 @@ class NamedThing(Entity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -1762,7 +1758,7 @@ class NamedThing(Entity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -1797,7 +1793,7 @@ class NamedThing(Entity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -1818,7 +1814,7 @@ class NamedThing(Entity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -1912,7 +1908,7 @@ class NamedThing(Entity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -1929,7 +1925,7 @@ class NamedThing(Entity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1946,7 +1942,7 @@ class NamedThing(Entity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -1965,7 +1961,7 @@ class NamedThing(Entity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -1982,7 +1978,7 @@ class NamedThing(Entity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -2014,7 +2010,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -2032,7 +2028,7 @@ class Attribute(NamedThing, OntologyClass): 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'id_prefixes': ['EDAM-DATA', 'EDAM-FORMAT', 'EDAM-OPERATION', 'EDAM-TOPIC'], 'in_subset': ['samples'], - 'mixins': ['OntologyClass'], + 'mixins': ['ontology class'], 'slot_usage': {'name': {'description': "The human-readable 'attribute name' " 'can be set to a string which reflects ' 'its context of interpretation, e.g. ' @@ -2042,7 +2038,7 @@ class Attribute(NamedThing, OntologyClass): "attribute type' slot ontology term.", 'name': 'name'}}}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -2063,7 +2059,7 @@ class Attribute(NamedThing, OntologyClass): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Attribute","biolink:Attribute"]] = Field(["biolink:Attribute"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Attribute","biolink:Attribute"]] = Field(default=["biolink:Attribute"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -2084,7 +2080,7 @@ class Attribute(NamedThing, OntologyClass): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -2103,7 +2099,7 @@ class Attribute(NamedThing, OntologyClass): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -2124,7 +2120,7 @@ class Attribute(NamedThing, OntologyClass): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -2218,7 +2214,7 @@ class Attribute(NamedThing, OntologyClass): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -2235,7 +2231,7 @@ class Attribute(NamedThing, OntologyClass): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2252,7 +2248,7 @@ class Attribute(NamedThing, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -2271,7 +2267,7 @@ class Attribute(NamedThing, OntologyClass): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2288,7 +2284,7 @@ class Attribute(NamedThing, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -2314,27 +2310,49 @@ class Attribute(NamedThing, OntologyClass): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - attribute_name: Optional[str] = Field(None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', - 'domain': 'attribute', - 'domain_of': ['attribute'], + 'domain': 'entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', + 'named thing', + 'organism taxon', + 'information content entity', + 'dataset', + 'physical entity', + 'activity', + 'procedure', + 'material sample', + 'biological entity', + 'gene or gene product', + 'gene', + 'genome', + 'Donor', + 'BrainSlab', + 'TissueSample', + 'DissociatedCellSample', + 'EnrichedCellSample', + 'BarcodedCellSample', + 'AmplifiedCdna', + 'Library', + 'LibraryAliquot', + 'LibraryPool', + 'DissectionRoiPolygon'], 'exact_mappings': ['gff3:Name', 'gpi:DB_Object_Name'], 'in_subset': ['translator_minimal', 'samples'], - 'is_a': 'name', - 'is_usage_slot': True, 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], - 'slot_uri': 'rdfs:label', - 'usage_slot_name': 'name'} }) - has_attribute_type: str = Field(..., description="""connects an attribute to a class that describes it""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute_type', + 'slot_uri': 'rdfs:label'} }) + has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute_type', 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute_type', 'domain': 'attribute', 'domain_of': ['attribute'], 'in_subset': ['samples'], 'narrow_mappings': ['LOINC:has_modality_type', 'LOINC:has_view_type'], 'slot_uri': 'biolink:has_attribute_type'} }) - has_quantitative_value: Optional[List[QuantityValue]] = Field(None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_quantitative_value', + has_quantitative_value: Optional[List[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_quantitative_value', 'definition_uri': 'https://w3id.org/biolink/vocab/has_quantitative_value', 'domain': 'attribute', 'domain_of': ['attribute'], @@ -2344,13 +2362,13 @@ class Attribute(NamedThing, OntologyClass): 'SNOMED:has_presentation_strength_denominator_value', 'SNOMED:has_presentation_strength_numerator_value'], 'slot_uri': 'biolink:has_quantitative_value'} }) - has_qualitative_value: Optional[str] = Field(None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_qualitative_value', + has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""", json_schema_extra = { "linkml_meta": {'alias': 'has_qualitative_value', 'definition_uri': 'https://w3id.org/biolink/vocab/has_qualitative_value', 'domain': 'attribute', 'domain_of': ['attribute'], 'in_subset': ['samples'], 'slot_uri': 'biolink:has_qualitative_value'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -2368,42 +2386,13 @@ class Attribute(NamedThing, OntologyClass): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - name: Optional[str] = Field(None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""", json_schema_extra = { "linkml_meta": {'alias': 'name', - 'definition_uri': 'https://w3id.org/biolink/vocab/name', - 'domain': 'entity', - 'domain_of': ['entity', - 'named thing', - 'organism taxon', - 'information content entity', - 'dataset', - 'physical entity', - 'activity', - 'procedure', - 'material sample', - 'biological entity', - 'macromolecular machine mixin', - 'gene or gene product', - 'gene', - 'genome', - 'Donor', - 'BrainSlab', - 'TissueSample', - 'DissociatedCellSample', - 'EnrichedCellSample', - 'BarcodedCellSample', - 'AmplifiedCdna', - 'Library', - 'LibraryAliquot', - 'LibraryPool', - 'DissectionRoiPolygon'], - 'slot_uri': 'rdfs:label'} }) @field_validator('category') def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -2421,7 +2410,7 @@ class TaxonomicRank(OntologyClass): 'id_prefixes': ['TAXRANK'], 'mappings': ['WIKIDATA:Q427626']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -2458,7 +2447,7 @@ class OrganismTaxon(NamedThing): 'narrow_mappings': ['dcid:BiologicalSpecies'], 'values_from': ['NCBITaxon']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -2479,7 +2468,7 @@ class OrganismTaxon(NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -2497,7 +2486,7 @@ class OrganismTaxon(NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/OrganismTaxon","biolink:OrganismTaxon"]] = Field(["biolink:OrganismTaxon"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/OrganismTaxon","biolink:OrganismTaxon"]] = Field(default=["biolink:OrganismTaxon"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -2518,7 +2507,7 @@ class OrganismTaxon(NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -2537,7 +2526,7 @@ class OrganismTaxon(NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -2572,7 +2561,7 @@ class OrganismTaxon(NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -2593,7 +2582,7 @@ class OrganismTaxon(NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -2687,7 +2676,7 @@ class OrganismTaxon(NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -2704,7 +2693,7 @@ class OrganismTaxon(NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2721,7 +2710,7 @@ class OrganismTaxon(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -2740,7 +2729,7 @@ class OrganismTaxon(NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -2757,7 +2746,7 @@ class OrganismTaxon(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -2783,7 +2772,7 @@ class OrganismTaxon(NamedThing): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - has_taxonomic_rank: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'has_taxonomic_rank', + has_taxonomic_rank: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'has_taxonomic_rank', 'definition_uri': 'https://w3id.org/biolink/vocab/has_taxonomic_rank', 'domain': 'named thing', 'domain_of': ['organism taxon'], @@ -2796,7 +2785,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -2828,7 +2817,7 @@ class InformationContentEntity(NamedThing): 'STY:T171', 'STY:T185']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -2849,7 +2838,7 @@ class InformationContentEntity(NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -2867,7 +2856,7 @@ class InformationContentEntity(NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/InformationContentEntity","biolink:InformationContentEntity"]] = Field(["biolink:InformationContentEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/InformationContentEntity","biolink:InformationContentEntity"]] = Field(default=["biolink:InformationContentEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -2888,7 +2877,7 @@ class InformationContentEntity(NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -2907,7 +2896,7 @@ class InformationContentEntity(NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -2942,7 +2931,7 @@ class InformationContentEntity(NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -2963,7 +2952,7 @@ class InformationContentEntity(NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -3057,7 +3046,7 @@ class InformationContentEntity(NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -3074,7 +3063,7 @@ class InformationContentEntity(NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3091,7 +3080,7 @@ class InformationContentEntity(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -3110,7 +3099,7 @@ class InformationContentEntity(NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3127,7 +3116,7 @@ class InformationContentEntity(NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -3153,7 +3142,7 @@ class InformationContentEntity(NamedThing): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - license: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'license', + license: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'license', 'definition_uri': 'https://w3id.org/biolink/vocab/license', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], @@ -3161,21 +3150,21 @@ class InformationContentEntity(NamedThing): 'is_a': 'node property', 'narrow_mappings': ['WIKIDATA_PROPERTY:P275'], 'slot_uri': 'biolink:license'} }) - rights: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'rights', + rights: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'rights', 'definition_uri': 'https://w3id.org/biolink/vocab/rights', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:rights'], 'is_a': 'node property', 'slot_uri': 'biolink:rights'} }) - format: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'format', + format: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'format', 'definition_uri': 'https://w3id.org/biolink/vocab/format', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:format', 'WIKIDATA_PROPERTY:P2701'], 'is_a': 'node property', 'slot_uri': 'biolink:format'} }) - creation_date: Optional[date] = Field(None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', + creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', 'aliases': ['publication date'], 'definition_uri': 'https://w3id.org/biolink/vocab/creation_date', 'domain': 'named thing', @@ -3189,7 +3178,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -3209,7 +3198,7 @@ class Dataset(InformationContentEntity): 'dcid:Dataset'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema'}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -3230,7 +3219,7 @@ class Dataset(InformationContentEntity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -3248,7 +3237,7 @@ class Dataset(InformationContentEntity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Dataset","biolink:Dataset"]] = Field(["biolink:Dataset"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Dataset","biolink:Dataset"]] = Field(default=["biolink:Dataset"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -3269,7 +3258,7 @@ class Dataset(InformationContentEntity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -3288,7 +3277,7 @@ class Dataset(InformationContentEntity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -3323,7 +3312,7 @@ class Dataset(InformationContentEntity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -3344,7 +3333,7 @@ class Dataset(InformationContentEntity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -3438,7 +3427,7 @@ class Dataset(InformationContentEntity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -3455,7 +3444,7 @@ class Dataset(InformationContentEntity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3472,7 +3461,7 @@ class Dataset(InformationContentEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -3491,7 +3480,7 @@ class Dataset(InformationContentEntity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3508,7 +3497,7 @@ class Dataset(InformationContentEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -3534,7 +3523,7 @@ class Dataset(InformationContentEntity): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - license: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'license', + license: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'license', 'definition_uri': 'https://w3id.org/biolink/vocab/license', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], @@ -3542,21 +3531,21 @@ class Dataset(InformationContentEntity): 'is_a': 'node property', 'narrow_mappings': ['WIKIDATA_PROPERTY:P275'], 'slot_uri': 'biolink:license'} }) - rights: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'rights', + rights: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'rights', 'definition_uri': 'https://w3id.org/biolink/vocab/rights', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:rights'], 'is_a': 'node property', 'slot_uri': 'biolink:rights'} }) - format: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'format', + format: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'format', 'definition_uri': 'https://w3id.org/biolink/vocab/format', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:format', 'WIKIDATA_PROPERTY:P2701'], 'is_a': 'node property', 'slot_uri': 'biolink:format'} }) - creation_date: Optional[date] = Field(None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', + creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', 'aliases': ['publication date'], 'definition_uri': 'https://w3id.org/biolink/vocab/creation_date', 'domain': 'named thing', @@ -3570,7 +3559,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -3610,10 +3599,10 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'definition_uri': 'https://w3id.org/biolink/vocab/PhysicalEntity', 'exact_mappings': ['STY:T072'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', - 'mixins': ['PhysicalEssence'], + 'mixins': ['physical essence'], 'narrow_mappings': ['STY:T073']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -3634,7 +3623,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -3652,7 +3641,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/PhysicalEntity","biolink:PhysicalEntity"]] = Field(["biolink:PhysicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/PhysicalEntity","biolink:PhysicalEntity"]] = Field(default=["biolink:PhysicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -3673,7 +3662,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -3692,7 +3681,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -3727,7 +3716,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -3748,7 +3737,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -3842,7 +3831,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -3859,7 +3848,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3876,7 +3865,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -3895,7 +3884,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -3912,7 +3901,7 @@ class PhysicalEntity(PhysicalEssence, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -3944,7 +3933,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -3986,7 +3975,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'definition_uri': 'https://w3id.org/biolink/vocab/Activity', 'exact_mappings': ['prov:Activity', 'NCIT:C43431', 'STY:T052'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', - 'mixins': ['ActivityAndBehavior'], + 'mixins': ['activity and behavior'], 'narrow_mappings': ['STY:T056', 'STY:T057', 'STY:T064', @@ -3995,7 +3984,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'STY:T065', 'STY:T058']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -4016,7 +4005,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -4034,7 +4023,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Activity","biolink:Activity"]] = Field(["biolink:Activity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Activity","biolink:Activity"]] = Field(default=["biolink:Activity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -4055,7 +4044,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -4074,7 +4063,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4109,7 +4098,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -4130,7 +4119,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -4224,7 +4213,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -4241,7 +4230,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4258,7 +4247,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -4277,7 +4266,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4294,7 +4283,7 @@ class Activity(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -4326,7 +4315,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -4343,10 +4332,10 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['UMLSSG:PROC', 'dcid:MedicalProcedure'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'id_prefixes': ['CPT'], - 'mixins': ['ActivityAndBehavior'], + 'mixins': ['activity and behavior'], 'narrow_mappings': ['STY:T059', 'STY:T060', 'STY:T061', 'STY:T063']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -4367,7 +4356,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -4385,7 +4374,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Procedure","biolink:Procedure"]] = Field(["biolink:Procedure"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Procedure","biolink:Procedure"]] = Field(default=["biolink:Procedure"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -4406,7 +4395,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -4425,7 +4414,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4460,7 +4449,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -4481,7 +4470,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -4575,7 +4564,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -4592,7 +4581,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4609,7 +4598,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -4628,7 +4617,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4645,7 +4634,7 @@ class Procedure(ActivityAndBehavior, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -4677,7 +4666,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -4707,9 +4696,9 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['OBI:0000747', 'SIO:001050'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'id_prefixes': ['BIOSAMPLE', 'GOLD.META'], - 'mixins': ['SubjectOfInvestigation']}) + 'mixins': ['subject of investigation']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -4730,7 +4719,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -4748,7 +4737,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/MaterialSample","biolink:MaterialSample"]] = Field(["biolink:MaterialSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/MaterialSample","biolink:MaterialSample"]] = Field(default=["biolink:MaterialSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -4769,7 +4758,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -4788,7 +4777,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -4823,7 +4812,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -4844,7 +4833,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -4938,7 +4927,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -4955,7 +4944,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -4972,7 +4961,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -4991,7 +4980,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5008,7 +4997,7 @@ class MaterialSample(SubjectOfInvestigation, PhysicalEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -5040,7 +5029,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -5057,12 +5046,14 @@ class ThingWithTaxon(ConfiguredBaseModel): 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'mixin': True}) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5072,7 +5063,8 @@ class ThingWithTaxon(ConfiguredBaseModel): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5088,13 +5080,13 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'class_uri': 'biolink:BiologicalEntity', 'definition_uri': 'https://w3id.org/biolink/vocab/BiologicalEntity', 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', - 'mixins': ['ThingWithTaxon'], + 'mixins': ['thing with taxon'], 'narrow_mappings': ['WIKIDATA:Q28845870', 'STY:T050', 'SIO:010046', 'STY:T129']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -5115,7 +5107,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -5133,7 +5125,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/BiologicalEntity","biolink:BiologicalEntity"]] = Field(["biolink:BiologicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/BiologicalEntity","biolink:BiologicalEntity"]] = Field(default=["biolink:BiologicalEntity"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -5154,7 +5146,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -5173,7 +5165,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5208,7 +5200,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -5229,7 +5221,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -5323,7 +5315,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -5340,7 +5332,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5357,7 +5349,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -5376,7 +5368,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5393,7 +5385,7 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -5419,12 +5411,14 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5434,7 +5428,8 @@ class BiologicalEntity(ThingWithTaxon, NamedThing): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5448,7 +5443,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -5464,7 +5459,7 @@ class GenomicEntity(ConfiguredBaseModel): 'mixin': True, 'narrow_mappings': ['STY:T028', 'GENO:0000897']}) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -5493,7 +5488,7 @@ class MacromolecularMachineMixin(ConfiguredBaseModel): 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'mixin': True}) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5540,7 +5535,7 @@ class GeneOrGeneProduct(MacromolecularMachineMixin): 'id_prefixes': ['CHEMBL.TARGET', 'IUPHAR.FAMILY'], 'mixin': True}) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5605,14 +5600,14 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'AspGD', 'PHARMGKB.GENE'], 'in_subset': ['translator_minimal', 'model_organism_database'], - 'mixins': ['GeneOrGeneProduct', - 'GenomicEntity', - 'ChemicalEntityOrGeneOrGeneProduct', - 'PhysicalEssence', - 'OntologyClass'], + 'mixins': ['gene or gene product', + 'genomic entity', + 'chemical entity or gene or gene product', + 'physical essence', + 'ontology class'], 'narrow_mappings': ['bioschemas:gene']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -5633,7 +5628,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -5651,7 +5646,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Gene","biolink:Gene"]] = Field(["biolink:Gene"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Gene","biolink:Gene"]] = Field(default=["biolink:Gene"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -5672,7 +5667,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -5691,7 +5686,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -5726,7 +5721,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -5747,7 +5742,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -5841,7 +5836,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -5858,7 +5853,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5875,7 +5870,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -5892,7 +5887,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -5918,12 +5913,14 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5933,7 +5930,8 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -5941,14 +5939,14 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - symbol: Optional[str] = Field(None, description="""Symbol for a particular thing""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', + symbol: Optional[str] = Field(default=None, description="""Symbol for a particular thing""", json_schema_extra = { "linkml_meta": {'alias': 'symbol', 'definition_uri': 'https://w3id.org/biolink/vocab/symbol', 'domain': 'named thing', 'domain_of': ['gene'], 'exact_mappings': ['AGRKB:symbol', 'gpi:DB_Object_Symbol'], 'is_a': 'node property', 'slot_uri': 'biolink:symbol'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -5967,7 +5965,7 @@ class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -5979,7 +5977,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -5997,9 +5995,9 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['SO:0001026', 'SIO:000984', 'WIKIDATA:Q7020'], 'from_schema': 'https://w3id.org/biolink/bican-biolink-schema', 'in_subset': ['model_organism_database'], - 'mixins': ['GenomicEntity', 'PhysicalEssence', 'OntologyClass']}) + 'mixins': ['genomic entity', 'physical essence', 'ontology class']}) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -6020,7 +6018,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -6038,7 +6036,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://w3id.org/biolink/vocab/Genome","biolink:Genome"]] = Field(["biolink:Genome"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://w3id.org/biolink/vocab/Genome","biolink:Genome"]] = Field(default=["biolink:Genome"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -6059,7 +6057,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -6078,7 +6076,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -6113,7 +6111,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -6134,7 +6132,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -6228,7 +6226,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -6245,7 +6243,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -6262,7 +6260,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -6281,7 +6279,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -6298,7 +6296,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -6324,12 +6322,14 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -6339,7 +6339,8 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -6347,7 +6348,7 @@ class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass): 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - has_biological_sequence: Optional[str] = Field(None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', + has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""", json_schema_extra = { "linkml_meta": {'alias': 'has_biological_sequence', 'definition_uri': 'https://w3id.org/biolink/vocab/has_biological_sequence', 'domain': 'named thing', 'domain_of': ['genomic entity', 'gene', 'genome'], @@ -6359,7 +6360,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -6375,7 +6376,7 @@ class ProvActivity(ConfiguredBaseModel): 'from_schema': 'https://identifiers.org/brain-bican/genome-prov-schema', 'mixin': True}) - used: Optional[str] = Field(None, description="""Usage is the beginning of utilizing an entity by an activity. Before usage, the activity had not begun to utilize this entity and could not have been affected by the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[str] = Field(default=None, description="""Usage is the beginning of utilizing an entity by an activity. Before usage, the activity had not begun to utilize this entity and could not have been affected by the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -6397,7 +6398,7 @@ class ProvEntity(ConfiguredBaseModel): 'from_schema': 'https://identifiers.org/brain-bican/genome-prov-schema', 'mixin': True}) - was_derived_from: Optional[str] = Field(None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -6410,7 +6411,7 @@ class ProvEntity(ConfiguredBaseModel): 'LibraryPool', 'DigitalAsset'], 'slot_uri': 'prov:wasDerivedFrom'} }) - was_generated_by: Optional[str] = Field(None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -6429,9 +6430,9 @@ class Checksum(Entity): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://identifiers.org/brain-bican/bican-core-schema'}) - checksum_algorithm: Optional[DigestType] = Field(None, description="""The type of cryptographic hash function used to calculate the checksum value.""", json_schema_extra = { "linkml_meta": {'alias': 'checksum_algorithm', 'domain_of': ['checksum']} }) - value: Optional[str] = Field(None, description="""The checksum value obtained from a specific cryotographic hash function.""", json_schema_extra = { "linkml_meta": {'alias': 'value', 'domain_of': ['checksum']} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + checksum_algorithm: Optional[DigestType] = Field(default=None, description="""The type of cryptographic hash function used to calculate the checksum value.""", json_schema_extra = { "linkml_meta": {'alias': 'checksum_algorithm', 'domain_of': ['checksum']} }) + value: Optional[str] = Field(default=None, description="""The checksum value obtained from a specific cryotographic hash function.""", json_schema_extra = { "linkml_meta": {'alias': 'value', 'domain_of': ['checksum']} }) + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -6452,7 +6453,7 @@ class Checksum(Entity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -6470,7 +6471,7 @@ class Checksum(Entity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/Checksum","bican:Checksum"]] = Field(["bican:Checksum"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/Checksum","bican:Checksum"]] = Field(default=["bican:Checksum"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -6491,7 +6492,7 @@ class Checksum(Entity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -6510,7 +6511,7 @@ class Checksum(Entity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -6545,7 +6546,7 @@ class Checksum(Entity): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -6566,7 +6567,7 @@ class Checksum(Entity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -6660,7 +6661,7 @@ class Checksum(Entity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -6683,7 +6684,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -6697,7 +6698,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): """ linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'exact_mappings': ['NIMP:Donor'], 'from_schema': 'https://identifiers.org/brain-bican/library-generation-schema', - 'mixins': ['ThingWithTaxon', 'ProvEntity'], + 'mixins': ['thing with taxon', 'ProvEntity'], 'slot_usage': {'name': {'description': 'Name of person or organism that is ' 'the source of a biological sample for ' 'scientific study. Many biological ' @@ -6707,10 +6708,13 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'local_name_value': 'donor_local_id'}}, 'name': 'name'}}}) - name: Optional[str] = Field(None, description="""Name of person or organism that is the source of a biological sample for scientific study. Many biological samples are generated from a single donor.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of person or organism that is the source of a biological sample for scientific study. Many biological samples are generated from a single donor.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -6720,7 +6724,6 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -6735,50 +6738,56 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'LibraryAliquot', 'LibraryPool', 'DissectionRoiPolygon'], + 'exact_mappings': ['gff3:Name', 'gpi:DB_Object_Name'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'donor_local_id'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - biological_sex: Optional[Sex] = Field(None, description="""Biological sex of donor at birth""", json_schema_extra = { "linkml_meta": {'alias': 'biological_sex', + biological_sex: Optional[Sex] = Field(default=None, description="""Biological sex of donor at birth""", json_schema_extra = { "linkml_meta": {'alias': 'biological_sex', 'domain_of': ['Donor'], 'exact_mappings': ['NIMP:PD-LXUBTM45'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'sex'}}, 'slot_uri': 'bican:632d3d3f-f85b-4efc-a1ab-010fe417ae81'} }) - age_at_death_description: Optional[str] = Field(None, description="""Text description of the age of death following typical scientific convention for the species or developmental stage. For example: P56, E11.5""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_description', + age_at_death_description: Optional[str] = Field(default=None, description="""Text description of the age of death following typical scientific convention for the species or developmental stage. For example: P56, E11.5""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_description', 'domain_of': ['Donor'], 'exact_mappings': ['NIMP:PD-ZJZJLE33'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'age_at_death_description'}}, 'slot_uri': 'bican:0630a265-4a63-48f4-8853-66b929002306'} }) - age_at_death_reference_point: Optional[AgeAtDeathReferencePoint] = Field(None, description="""The reference point for an age interval; for example, birth or conception.""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_reference_point', + age_at_death_reference_point: Optional[AgeAtDeathReferencePoint] = Field(default=None, description="""The reference point for an age interval; for example, birth or conception.""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_reference_point', 'domain_of': ['Donor'], 'exact_mappings': ['NIMP:PD-RARAGG39'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'age_at_death_reference_point'}}, 'slot_uri': 'bican:3bed1f94-9d82-4ed7-afdf-79d896b24dbb'} }) - age_at_death_unit: Optional[AgeAtDeathUnit] = Field(None, description="""The unit used for representing the donor age from the reference point.""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_unit', + age_at_death_unit: Optional[AgeAtDeathUnit] = Field(default=None, description="""The unit used for representing the donor age from the reference point.""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_unit', 'domain_of': ['Donor'], 'exact_mappings': ['NIMP:PD-AVAVEV39'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'age_at_death_unit'}}, 'slot_uri': 'bican:b5436e99-f0a7-4c30-825d-56b88ee2ac1d'} }) - age_at_death_value: Optional[float] = Field(None, description="""The value representing the donor age from the reference point.""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_value', + age_at_death_value: Optional[float] = Field(default=None, description="""The value representing the donor age from the reference point.""", json_schema_extra = { "linkml_meta": {'alias': 'age_at_death_value', 'domain_of': ['Donor'], 'exact_mappings': ['NIMP:PD-FTFTCP24'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'age_at_death'}}, 'slot_uri': 'bican:57e24d3c-c9c7-4ef3-9809-a35802d563ec'} }) - species: Optional[str] = Field(None, description="""Species of donor.""", json_schema_extra = { "linkml_meta": {'alias': 'donor_species', + donor_species: Optional[str] = Field(default=None, description="""Species of donor.""", json_schema_extra = { "linkml_meta": {'alias': 'donor_species', 'domain_of': ['Donor'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'donor_species'}}, 'slot_uri': 'bican:6837cb02-6bd7-4fb8-838c-9062ead96ba4'} }) - in_taxon: Optional[List[str]] = Field(None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', + in_taxon: Optional[List[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon', 'aliases': ['instance of', 'is organism source of gene product', 'organism has gene', 'gene found in organism', 'gene product has organism source'], + 'annotations': {'canonical_predicate': {'tag': 'canonical_predicate', + 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -6788,7 +6797,8 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'is_a': 'related to at instance level', 'narrow_mappings': ['RO:0002160'], 'slot_uri': 'biolink:in_taxon'} }) - in_taxon_label: Optional[str] = Field(None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""", json_schema_extra = { "linkml_meta": {'alias': 'in_taxon_label', + 'annotations': {'denormalized': {'tag': 'denormalized', 'value': True}}, 'definition_uri': 'https://w3id.org/biolink/vocab/in_taxon_label', 'domain': 'thing with taxon', 'domain_of': ['thing with taxon', 'biological entity', 'gene', 'genome'], @@ -6796,7 +6806,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'in_subset': ['translator_minimal'], 'is_a': 'node property', 'slot_uri': 'biolink:in_taxon_label'} }) - was_derived_from: Optional[str] = Field(None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -6809,7 +6819,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'LibraryPool', 'DigitalAsset'], 'slot_uri': 'prov:wasDerivedFrom'} }) - was_generated_by: Optional[str] = Field(None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -6820,7 +6830,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -6841,7 +6851,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -6859,7 +6869,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/Donor","bican:Donor"]] = Field(["bican:Donor"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/Donor","bican:Donor"]] = Field(default=["bican:Donor"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -6880,7 +6890,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -6899,7 +6909,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -6920,7 +6930,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -7014,7 +7024,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -7031,7 +7041,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -7048,7 +7058,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -7067,7 +7077,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -7084,7 +7094,7 @@ class Donor(ProvEntity, ThingWithTaxon, PhysicalEntity): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -7116,7 +7126,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -7152,7 +7162,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'exact_mappings': ['NIMP:has_parent'], 'name': 'was_derived_from'}}}) - was_derived_from: Optional[str] = Field(None, description="""The donor from which the brain slab was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""The donor from which the brain slab was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'any_of': [{'range': 'Donor'}, {'range': 'BrainSlab'}], 'domain_of': ['ProvEntity', 'BrainSlab', @@ -7167,10 +7177,13 @@ class BrainSlab(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Name of a thick flat piece of brain tissue obtained by slicing a whole brain, brain hemisphere or subdivision with a blade at regular interval. When multiple brain slabs are obtained from the slicing process, an ordinal is assigned to provide information about the relative positioning of the slabs.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of a thick flat piece of brain tissue obtained by slicing a whole brain, brain hemisphere or subdivision with a blade at regular interval. When multiple brain slabs are obtained from the slicing process, an ordinal is assigned to provide information about the relative positioning of the slabs.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -7180,7 +7193,6 @@ class BrainSlab(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -7195,10 +7207,14 @@ class BrainSlab(ProvEntity, MaterialSample): 'LibraryAliquot', 'LibraryPool', 'DissectionRoiPolygon'], + 'exact_mappings': ['gff3:Name', 'gpi:DB_Object_Name'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - was_generated_by: Optional[str] = Field(None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -7209,7 +7225,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -7230,7 +7246,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -7248,7 +7264,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/BrainSlab","bican:BrainSlab"]] = Field(["bican:BrainSlab"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/BrainSlab","bican:BrainSlab"]] = Field(default=["bican:BrainSlab"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -7269,7 +7285,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -7288,7 +7304,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -7309,7 +7325,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -7403,7 +7419,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -7420,7 +7436,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -7437,7 +7453,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -7456,7 +7472,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -7473,7 +7489,7 @@ class BrainSlab(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -7505,7 +7521,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -7543,7 +7559,7 @@ class TissueSample(ProvEntity, MaterialSample): 'name': 'was_generated_by', 'range': 'TissueDissection'}}}) - was_derived_from: Optional[str] = Field(None, description="""The donor or brain slab from which the tissue sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""The donor or brain slab from which the tissue sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -7557,7 +7573,7 @@ class TissueSample(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - was_generated_by: Optional[str] = Field(None, description="""The dissection process from which the tissue sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The dissection process from which the tissue sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -7568,10 +7584,13 @@ class TissueSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - name: Optional[str] = Field(None, description="""Identifier name for final intact piece of tissue before cell or nuclei prep. This piece of tissue will be used in dissociation and has an ROI associated with it.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Identifier name for final intact piece of tissue before cell or nuclei prep. This piece of tissue will be used in dissociation and has an ROI associated with it.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -7581,7 +7600,6 @@ class TissueSample(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -7597,17 +7615,20 @@ class TissueSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-LJCRCC35'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'tissue_sample_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:2e4ca2fc-2d77-4d19-af45-d0fb7bbc2269'} }) - dissection_was_guided_by: Optional[str] = Field(None, description="""The dissection ROI polygon that was used to guide the dissection.""", json_schema_extra = { "linkml_meta": {'alias': 'dissection_was_guided_by', + dissection_was_guided_by: Optional[str] = Field(default=None, description="""The dissection ROI polygon that was used to guide the dissection.""", json_schema_extra = { "linkml_meta": {'alias': 'dissection_was_guided_by', 'domain_of': ['TissueSample'], 'exact_mappings': ['NIMP:has_parent']} }) - structure: Optional[List[str]] = Field(default_factory=list, description="""Strucure of tissue sample.""", json_schema_extra = { "linkml_meta": {'alias': 'tissue_sample_structure', + tissue_sample_structure: Optional[List[str]] = Field(default=None, description="""Strucure of tissue sample.""", json_schema_extra = { "linkml_meta": {'alias': 'tissue_sample_structure', 'domain_of': ['TissueSample'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'structure'}}} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -7628,7 +7649,7 @@ class TissueSample(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -7646,7 +7667,7 @@ class TissueSample(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/TissueSample","bican:TissueSample"]] = Field(["bican:TissueSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/TissueSample","bican:TissueSample"]] = Field(default=["bican:TissueSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -7667,7 +7688,7 @@ class TissueSample(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -7686,7 +7707,7 @@ class TissueSample(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -7707,7 +7728,7 @@ class TissueSample(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -7801,7 +7822,7 @@ class TissueSample(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -7818,7 +7839,7 @@ class TissueSample(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -7835,7 +7856,7 @@ class TissueSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -7854,7 +7875,7 @@ class TissueSample(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -7871,7 +7892,7 @@ class TissueSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -7903,7 +7924,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -7942,7 +7963,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'name': 'was_generated_by', 'range': 'CellDissociation'}}}) - was_generated_by: Optional[str] = Field(None, description="""The cell dissociation process from which the dissociated cell sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The cell dissociation process from which the dissociated cell sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -7953,7 +7974,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - was_derived_from: Optional[List[str]] = Field(default_factory=list, description="""The input tissue sample(s) from which dissociated cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[List[str]] = Field(default=None, description="""The input tissue sample(s) from which dissociated cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -7967,10 +7988,13 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Name of a collection of dissociated cells or nuclei derived from dissociation of a tissue sample.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of a collection of dissociated cells or nuclei derived from dissociation of a tissue sample.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -7980,7 +8004,6 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -7996,23 +8019,26 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-RQRWHS40'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'dissociated_cell_sample_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:65e2c7da-9eb4-45b2-8ccb-d69ef9785ee2'} }) - cell_prep_type: Optional[DissociatedCellSampleCellPrepType] = Field(None, description="""The type of cell preparation. For example: Cells, Nuclei. This is a property of dissociated_cell_sample.""", json_schema_extra = { "linkml_meta": {'alias': 'dissociated cell sample cell prep type', + dissociated_cell_sample_cell_prep_type: Optional[DissociatedCellSampleCellPrepType] = Field(default=None, description="""The type of cell preparation. For example: Cells, Nuclei. This is a property of dissociated_cell_sample.""", json_schema_extra = { "linkml_meta": {'alias': 'dissociated cell sample cell prep type', 'domain_of': ['DissociatedCellSample'], 'exact_mappings': ['NIMP:PD-RELLGO26'], 'in_subset': ['analysis', 'tracking'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'dissociated_cell_sample_cell_prep_type'}}, 'slot_uri': 'bican:baae4ac3-f959-4594-b943-3a82ec19bd34'} }) - cell_source_oligo_name: Optional[DissociatedCellSampleCellLabelBarcode] = Field(None, description="""Name of cell source oligo used in cell plexing. The oligo molecularly tags all the cells in the dissociated cell sample and allows separate dissociated cell samples to be combined downstream in the barcoded cell sample. The oligo name is associated with a sequence in a lookup table. This sequence will be needed during alignment to associate reads with the parent source dissociated cell sample.""", json_schema_extra = { "linkml_meta": {'alias': 'dissociated cell oligo tag name', + dissociated_cell_oligo_tag_name: Optional[DissociatedCellSampleCellLabelBarcode] = Field(default=None, description="""Name of cell source oligo used in cell plexing. The oligo molecularly tags all the cells in the dissociated cell sample and allows separate dissociated cell samples to be combined downstream in the barcoded cell sample. The oligo name is associated with a sequence in a lookup table. This sequence will be needed during alignment to associate reads with the parent source dissociated cell sample.""", json_schema_extra = { "linkml_meta": {'alias': 'dissociated cell oligo tag name', 'domain_of': ['DissociatedCellSample', 'EnrichedCellSample'], 'exact_mappings': ['NIMP:PD-CFCFPS27'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'dissociated_cell_sample_cell_label_barcode'}}, 'slot_uri': 'bican:184abbaf-baff-4b5f-b51e-dd38de6006af'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -8033,7 +8059,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -8051,7 +8077,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/DissociatedCellSample","bican:DissociatedCellSample"]] = Field(["bican:DissociatedCellSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/DissociatedCellSample","bican:DissociatedCellSample"]] = Field(default=["bican:DissociatedCellSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -8072,7 +8098,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -8091,7 +8117,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -8112,7 +8138,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -8206,7 +8232,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -8223,7 +8249,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -8240,7 +8266,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -8259,7 +8285,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -8276,7 +8302,7 @@ class DissociatedCellSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -8308,7 +8334,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -8353,7 +8379,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'by.', 'name': 'was_generated_by'}}}) - was_generated_by: Optional[str] = Field(None, description="""The cell enrichment or sample splitting process from which the enriched cell sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The cell enrichment or sample splitting process from which the enriched cell sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'any_of': [{'range': 'CellEnrichment'}, {'range': 'EnrichedCellSampleSplitting'}], 'domain_of': ['ProvEntity', @@ -8366,7 +8392,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - was_derived_from: Optional[List[str]] = Field(default_factory=list, description="""The dissociated or enriched cell sample(s) from which the enriched cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[List[str]] = Field(default=None, description="""The dissociated or enriched cell sample(s) from which the enriched cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -8382,10 +8408,13 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'exactly_one_of': [{'range': 'DissociatedCellSample'}, {'range': 'EnrichedCellSample'}], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Name of collection of enriched cells or nuclei after enrichment process (usually via FACS using the Enrichment Plan) applied to dissociated_cell_sample.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of collection of enriched cells or nuclei after enrichment process (usually via FACS using the Enrichment Plan) applied to dissociated_cell_sample.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -8395,7 +8424,6 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -8411,27 +8439,30 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-BERWTM41'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'enriched_cell_sample_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:bb3fc701-23a7-45c1-890d-7471730e0ec1'} }) - enrichment_population: Optional[str] = Field(None, description="""Actual percentage of cells as a result of using set of fluorescent marker label(s) to enrich dissociated_cell_sample with desired mix of cell populations. This plan can also be used to describe 'No FACS' where no enrichment was performed. This is a property of enriched_cell_prep_container.""", json_schema_extra = { "linkml_meta": {'alias': 'enrichment population', + enrichment_population: Optional[str] = Field(default=None, description="""Actual percentage of cells as a result of using set of fluorescent marker label(s) to enrich dissociated_cell_sample with desired mix of cell populations. This plan can also be used to describe 'No FACS' where no enrichment was performed. This is a property of enriched_cell_prep_container.""", json_schema_extra = { "linkml_meta": {'alias': 'enrichment population', 'domain_of': ['EnrichedCellSample'], 'exact_mappings': ['NIMP:PD-TZTZPI37'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'enrichment_population'}}, 'slot_uri': 'bican:875f1c70-f5aa-45e3-94b9-5e482f6c4830'} }) - cell_source_oligo_name: Optional[str] = Field(None, description="""Name of cell source oligo used in cell plexing. The oligo molecularly tags all the cells in the enriched cell sample and allows separate enriched cell samples to be combined downstream in the barcoded cell sample. The oligo name is associated with a sequence in a lookup table. This sequence will be needed during alignment to associate reads with the parent source enriched cell sample.""", json_schema_extra = { "linkml_meta": {'alias': 'cell_source_oligo_name', + cell_source_oligo_name: Optional[str] = Field(default=None, description="""Name of cell source oligo used in cell plexing. The oligo molecularly tags all the cells in the enriched cell sample and allows separate enriched cell samples to be combined downstream in the barcoded cell sample. The oligo name is associated with a sequence in a lookup table. This sequence will be needed during alignment to associate reads with the parent source enriched cell sample.""", json_schema_extra = { "linkml_meta": {'alias': 'cell_source_oligo_name', 'domain_of': ['DissociatedCellSample', 'EnrichedCellSample'], 'exact_mappings': ['NIMP:PD-CFCFPS27'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'enriched_cell_sample_cell_label_barcode'}}} }) - histone_modification_marker: Optional[str] = Field(None, description="""Histone modification marker antibodies (eg H3K27ac, H3K27me3, H3K9me3) used in conjunction with an Enriched Cell Source Barcode in order to combine multiple Enriched Cell Populations before Barcoded Cell Sample step for 10xMultiome method. Each of the Histone antibodies captures an essential part of the epigenome.""", json_schema_extra = { "linkml_meta": {'alias': 'histone_modification_marker', + histone_modification_marker: Optional[str] = Field(default=None, description="""Histone modification marker antibodies (eg H3K27ac, H3K27me3, H3K9me3) used in conjunction with an Enriched Cell Source Barcode in order to combine multiple Enriched Cell Populations before Barcoded Cell Sample step for 10xMultiome method. Each of the Histone antibodies captures an essential part of the epigenome.""", json_schema_extra = { "linkml_meta": {'alias': 'histone_modification_marker', 'domain_of': ['EnrichedCellSample'], 'exact_mappings': ['NIMP:PD-ESESLW44'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'histone_modification_marker'}}} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -8452,7 +8483,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -8470,7 +8501,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/EnrichedCellSample","bican:EnrichedCellSample"]] = Field(["bican:EnrichedCellSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/EnrichedCellSample","bican:EnrichedCellSample"]] = Field(default=["bican:EnrichedCellSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -8491,7 +8522,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -8510,7 +8541,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -8531,7 +8562,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -8625,7 +8656,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -8642,7 +8673,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -8659,7 +8690,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -8678,7 +8709,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -8695,7 +8726,7 @@ class EnrichedCellSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -8727,7 +8758,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -8774,7 +8805,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'name': 'was_generated_by', 'range': 'CellBarcoding'}}}) - was_generated_by: Optional[str] = Field(None, description="""The barcoding process from which the barcoded cell sample is generated from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The barcoding process from which the barcoded cell sample is generated from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -8785,7 +8816,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - was_derived_from: Optional[List[str]] = Field(default_factory=list, description="""The input dissociated or enriched cell sample(s) from which the barcoded cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[List[str]] = Field(default=None, description="""The input dissociated or enriched cell sample(s) from which the barcoded cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -8801,10 +8832,13 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'exactly_one_of': [{'range': 'DissociatedCellSample'}, {'range': 'EnrichedCellSample'}], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Name of a collection of barcoded cells. Input will be either dissociated_cell_sample or enriched_cell_sample. Cell barcodes are only guaranteed to be unique within this one collection. One dissociated_cell_sample or enriched_cell_sample can lead to multiple barcoded_cell_samples.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of a collection of barcoded cells. Input will be either dissociated_cell_sample or enriched_cell_sample. Cell barcodes are only guaranteed to be unique within this one collection. One dissociated_cell_sample or enriched_cell_sample can lead to multiple barcoded_cell_samples.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -8814,7 +8848,6 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -8830,17 +8863,20 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-XEMDJF38'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'barcoded_cell_sample_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:4c0e6380-e53f-4173-a474-d41e836fefe3'} }) - number_of_expected_cells: Optional[int] = Field(None, description="""Expected number of cells/nuclei of a barcoded_cell_sample that will be barcoded and available for sequencing. This is a derived number from 'Barcoded cell input quantity count' that is dependent on the \"capture rate\" of the barcoding method. It is usually a calculated fraction of the 'Barcoded cell input quantity count' going into the barcoding method.""", json_schema_extra = { "linkml_meta": {'alias': 'expected cell capture', + expected_cell_capture: Optional[int] = Field(default=None, description="""Expected number of cells/nuclei of a barcoded_cell_sample that will be barcoded and available for sequencing. This is a derived number from 'Barcoded cell input quantity count' that is dependent on the \"capture rate\" of the barcoding method. It is usually a calculated fraction of the 'Barcoded cell input quantity count' going into the barcoding method.""", json_schema_extra = { "linkml_meta": {'alias': 'expected cell capture', 'domain_of': ['BarcodedCellSample'], 'exact_mappings': ['NIMP:PD-ONONEV39'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'barcoded_cell_sample_number_of_expected_cells'}}, 'slot_uri': 'bican:f10e928d-5a2b-4943-af18-d8fe5d05528d'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -8861,7 +8897,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -8879,7 +8915,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/BarcodedCellSample","bican:BarcodedCellSample"]] = Field(["bican:BarcodedCellSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/BarcodedCellSample","bican:BarcodedCellSample"]] = Field(default=["bican:BarcodedCellSample"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -8900,7 +8936,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -8919,7 +8955,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -8940,7 +8976,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -9034,7 +9070,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -9051,7 +9087,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -9068,7 +9104,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -9087,7 +9123,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -9104,7 +9140,7 @@ class BarcodedCellSample(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -9136,7 +9172,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -9181,7 +9217,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'name': 'was_generated_by', 'range': 'CdnaAmplification'}}}) - was_generated_by: Optional[str] = Field(None, description="""The cDNA amplification process from which the amplified cDNA was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The cDNA amplification process from which the amplified cDNA was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -9192,7 +9228,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - was_derived_from: Optional[str] = Field(None, description="""The input barcoded cell sample from which amplified cDNA was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""The input barcoded cell sample from which amplified cDNA was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -9206,10 +9242,13 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Name of a collection of cDNA molecules derived and amplified from an input barcoded_cell_sample. These cDNA molecules represent the gene expression of each cell, with all cDNA molecules from a given cell retaining that cell's unique barcode from the cell barcoding step. This is a necessary step for GEX methods but is not used for ATAC methods.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of a collection of cDNA molecules derived and amplified from an input barcoded_cell_sample. These cDNA molecules represent the gene expression of each cell, with all cDNA molecules from a given cell retaining that cell's unique barcode from the cell barcoding step. This is a necessary step for GEX methods but is not used for ATAC methods.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -9219,7 +9258,6 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -9235,31 +9273,34 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-YAAGGG39'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'amplified_cdna_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:e2606a11-114e-472f-9e05-33f9b6fc3089'} }) - quantity_ng: Optional[float] = Field(None, description="""Amount of cDNA produced after cDNA amplification measured in nanograms.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA amplified quantity ng', + amplified_cDNA_amplified_quantity_ng: Optional[float] = Field(default=None, description="""Amount of cDNA produced after cDNA amplification measured in nanograms.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA amplified quantity ng', 'domain_of': ['AmplifiedCdna', 'Library'], 'exact_mappings': ['NIMP:PD-TITIIC26'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'amplified_cdna_amplified_quantity_ng'}}, 'slot_uri': 'bican:0db79d05-8612-4896-b9d3-eb1558841449'} }) - pass_fail_result: Optional[AmplifiedCdnaRnaAmplificationPassFail] = Field(None, description="""Pass or Fail result based on qualitative assessment of cDNA yield and size.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA RNA amplification pass-fail', + amplified_cDNA_RNA_amplification_pass_fail: Optional[AmplifiedCdnaRnaAmplificationPassFail] = Field(default=None, description="""Pass or Fail result based on qualitative assessment of cDNA yield and size.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA RNA amplification pass-fail', 'domain_of': ['AmplifiedCdna', 'Library'], 'exact_mappings': ['NIMP:PD-XXXXFQ31'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'amplified_cdna_rna_amplification_pass_fail'}}, 'slot_uri': 'bican:bc62bdb2-7dc8-4404-bb84-ce0bbcae59e5'} }) - percent_cdna_longer_than_400bp: Optional[float] = Field(None, description="""QC metric to measure mRNA degradation of cDNA. Higher % is higher quality starting material. Over 400bp is used as a universal cutoff for intact (full length) vs degraded cDNA and is a common output from Bioanalyzer and Fragment Analyzer elecropheragrams.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA percent cDNA longer than 400bp', + amplified_cDNA_percent_cDNA_longer_than_400bp: Optional[float] = Field(default=None, description="""QC metric to measure mRNA degradation of cDNA. Higher % is higher quality starting material. Over 400bp is used as a universal cutoff for intact (full length) vs degraded cDNA and is a common output from Bioanalyzer and Fragment Analyzer elecropheragrams.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA percent cDNA longer than 400bp', 'domain_of': ['AmplifiedCdna'], 'exact_mappings': ['NIMP:PD-JJJJWD35'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'amplified_cdna_percent_cdna_longer_than_400bp'}}, 'slot_uri': 'bican:8d150467-f69e-461c-b54c-bcfd22f581e5'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -9280,7 +9321,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -9298,7 +9339,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/AmplifiedCdna","bican:AmplifiedCdna"]] = Field(["bican:AmplifiedCdna"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/AmplifiedCdna","bican:AmplifiedCdna"]] = Field(default=["bican:AmplifiedCdna"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -9319,7 +9360,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -9338,7 +9379,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -9359,7 +9400,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -9453,7 +9494,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -9470,7 +9511,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -9487,7 +9528,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -9506,7 +9547,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -9523,7 +9564,7 @@ class AmplifiedCdna(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -9555,7 +9596,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -9598,7 +9639,7 @@ class Library(ProvEntity, MaterialSample): 'name': 'was_generated_by', 'range': 'LibraryConstruction'}}}) - was_generated_by: Optional[str] = Field(None, description="""The library construction process from which the library was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The library construction process from which the library was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -9609,7 +9650,7 @@ class Library(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - was_derived_from: Optional[str] = Field(None, description="""The input barcoded cell sample or amplified cDNA from which the library was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""The input barcoded cell sample or amplified cDNA from which the library was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'any_of': [{'range': 'BarcodedCellSample'}, {'range': 'AmplifiedCdna'}], 'domain_of': ['ProvEntity', 'BrainSlab', @@ -9624,10 +9665,13 @@ class Library(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Name of a library, which is a collection of fragmented and barcode-indexed DNA molecules for sequencing. An index or barcode is typically introduced to enable identification of library origin to allow libraries to be pooled together for sequencing.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of a library, which is a collection of fragmented and barcode-indexed DNA molecules for sequencing. An index or barcode is typically introduced to enable identification of library origin to allow libraries to be pooled together for sequencing.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -9637,7 +9681,6 @@ class Library(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -9653,50 +9696,53 @@ class Library(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-AJJUCC35'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:f717e254-3630-4342-be7b-4d56376e7afe'} }) - average_size_bp: Optional[int] = Field(None, description="""Average size of the library in terms of base pairs. This is used to calculate the molarity before pooling and sequencing.""", json_schema_extra = { "linkml_meta": {'alias': 'library avg size bp', + library_avg_size_bp: Optional[int] = Field(default=None, description="""Average size of the library in terms of base pairs. This is used to calculate the molarity before pooling and sequencing.""", json_schema_extra = { "linkml_meta": {'alias': 'library avg size bp', 'domain_of': ['Library'], 'exact_mappings': ['NIMP:PD-VJVJLC46'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_avg_size_bp'}}, 'slot_uri': 'bican:f851eba9-56d1-4472-9d0c-d7f8bc33000a'} }) - concentration_nm: Optional[float] = Field(None, description="""Concentration of library in terms of nM (nMol/L). Number of molecules is needed for accurate pooling of the libraries and for generating the number of target reads/cell in sequencing.""", json_schema_extra = { "linkml_meta": {'alias': 'library concentration nm', + library_concentration_nm: Optional[float] = Field(default=None, description="""Concentration of library in terms of nM (nMol/L). Number of molecules is needed for accurate pooling of the libraries and for generating the number of target reads/cell in sequencing.""", json_schema_extra = { "linkml_meta": {'alias': 'library concentration nm', 'domain_of': ['Library'], 'exact_mappings': ['NIMP:PD-DCDCLD43'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_concentration_nm'}}, 'slot_uri': 'bican:90805b3f-f380-4f23-b159-e7eaa0c8f052'} }) - pass_fail_result: Optional[LibraryPrepPassFail] = Field(None, description="""Pass or Fail result based on qualitative assessment of library yield and size.""", json_schema_extra = { "linkml_meta": {'alias': 'library prep pass-fail', + library_prep_pass_fail: Optional[LibraryPrepPassFail] = Field(default=None, description="""Pass or Fail result based on qualitative assessment of library yield and size.""", json_schema_extra = { "linkml_meta": {'alias': 'library prep pass-fail', 'domain_of': ['AmplifiedCdna', 'Library'], 'exact_mappings': ['NIMP:PD-QHQHQB42'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_prep_pass_fail'}}, 'slot_uri': 'bican:6817ede2-7ead-402d-9dbc-131aca627c6c'} }) - quantity_fmol: Optional[float] = Field(None, description="""Amount of library generated in terms of femtomoles""", json_schema_extra = { "linkml_meta": {'alias': 'library quantification fmol', + library_quantification_fmol: Optional[float] = Field(default=None, description="""Amount of library generated in terms of femtomoles""", json_schema_extra = { "linkml_meta": {'alias': 'library quantification fmol', 'domain_of': ['Library'], 'exact_mappings': ['NIMP:PD-JYJYDK42'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_quantification_fmol'}}, 'slot_uri': 'bican:4c09ada7-c116-48bc-8fb1-0dcf5c4b939a'} }) - quantity_ng: Optional[float] = Field(None, description="""Amount of library generated in terms of nanograms""", json_schema_extra = { "linkml_meta": {'alias': 'library quantification ng', + library_quantification_ng: Optional[float] = Field(default=None, description="""Amount of library generated in terms of nanograms""", json_schema_extra = { "linkml_meta": {'alias': 'library quantification ng', 'domain_of': ['AmplifiedCdna', 'Library'], 'exact_mappings': ['NIMP:PD-TNTNXP37'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_quantification_ng'}}, 'slot_uri': 'bican:318b2d3a-dae7-4c63-bfbb-93862b92f63e'} }) - r1_r2_index: Optional[LibraryR1R2Index] = Field(None, description="""Name of the pair of library indexes used for sequencing. Indexes allow libraries to be pooled together for sequencing. Sequencing output (fastq) are demultiplexed by using the indexes for each library. The name will be associated with the sequences of i7, i5, and i5as, which are needed by SeqCores for demultiplexing. The required direction of the sequence (sense or antisense) of the index can differ depending on sequencing instruments.""", json_schema_extra = { "linkml_meta": {'alias': 'R1_R2 index name', + R1_R2_index_name: Optional[LibraryR1R2Index] = Field(default=None, description="""Name of the pair of library indexes used for sequencing. Indexes allow libraries to be pooled together for sequencing. Sequencing output (fastq) are demultiplexed by using the indexes for each library. The name will be associated with the sequences of i7, i5, and i5as, which are needed by SeqCores for demultiplexing. The required direction of the sequence (sense or antisense) of the index can differ depending on sequencing instruments.""", json_schema_extra = { "linkml_meta": {'alias': 'R1_R2 index name', 'domain_of': ['Library'], 'exact_mappings': ['NIMP:PD-VLLMWZ60'], 'in_subset': ['analysis', 'tracking'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_r1_r2_index'}}, 'slot_uri': 'bican:c94b5d8a-e92d-47af-8c0e-ea3b58be4d06'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -9717,7 +9763,7 @@ class Library(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -9735,7 +9781,7 @@ class Library(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/Library","bican:Library"]] = Field(["bican:Library"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/Library","bican:Library"]] = Field(default=["bican:Library"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -9756,7 +9802,7 @@ class Library(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -9775,7 +9821,7 @@ class Library(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -9796,7 +9842,7 @@ class Library(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -9890,7 +9936,7 @@ class Library(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -9907,7 +9953,7 @@ class Library(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -9924,7 +9970,7 @@ class Library(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -9943,7 +9989,7 @@ class Library(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -9960,7 +10006,7 @@ class Library(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -9992,7 +10038,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -10030,7 +10076,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'name': 'was_derived_from', 'range': 'Library'}}}) - was_derived_from: Optional[str] = Field(None, description="""The input library from which the library aliquot was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""The input library from which the library aliquot was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -10044,10 +10090,13 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""One library in the library pool. Each Library_aliquot_name in a library pool will have a unique R1/R2 index to allow for sequencing together then separating the sequencing output by originating library aliquot through the process of demultiplexing. The resulting demultiplexed fastq files will include the library_aliquot_name.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""One library in the library pool. Each Library_aliquot_name in a library pool will have a unique R1/R2 index to allow for sequencing together then separating the sequencing output by originating library aliquot through the process of demultiplexing. The resulting demultiplexed fastq files will include the library_aliquot_name.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -10057,7 +10106,6 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -10073,10 +10121,13 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-XCXCCC35'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_aliquot_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:34191bad-d167-4335-8224-ade897d3728e'} }) - was_generated_by: Optional[str] = Field(None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -10087,7 +10138,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -10108,7 +10159,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -10126,7 +10177,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryAliquot","bican:LibraryAliquot"]] = Field(["bican:LibraryAliquot"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryAliquot","bican:LibraryAliquot"]] = Field(default=["bican:LibraryAliquot"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -10147,7 +10198,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -10166,7 +10217,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -10187,7 +10238,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -10281,7 +10332,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -10298,7 +10349,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -10315,7 +10366,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -10334,7 +10385,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -10351,7 +10402,7 @@ class LibraryAliquot(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -10383,7 +10434,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -10427,7 +10478,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'name': 'was_generated_by', 'range': 'LibraryPooling'}}}) - was_generated_by: Optional[str] = Field(None, description="""The pooling process from which the library pool was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The pooling process from which the library pool was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -10438,7 +10489,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - was_derived_from: Optional[List[str]] = Field(default_factory=list, description="""The input aliquot(s) from which the library pool was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[List[str]] = Field(default=None, description="""The input aliquot(s) from which the library pool was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -10452,10 +10503,13 @@ class LibraryPool(ProvEntity, MaterialSample): 'DigitalAsset'], 'exact_mappings': ['NIMP:has_parent'], 'slot_uri': 'prov:wasDerivedFrom'} }) - name: Optional[str] = Field(None, description="""Library lab's library pool name. For some labs this may be the same as \"Libray pool tube local name\". Other labs distinguish between the local tube label of the library pool and the library pool name provided to SeqCore for tracking. Local Pool Name is used to communicate sequencing status between SeqCore and Library Labs.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Library lab's library pool name. For some labs this may be the same as \"Libray pool tube local name\". Other labs distinguish between the local tube label of the library pool and the library pool name provided to SeqCore for tracking. Local Pool Name is used to communicate sequencing status between SeqCore and Library Labs.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -10465,7 +10519,6 @@ class LibraryPool(ProvEntity, MaterialSample): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -10481,17 +10534,20 @@ class LibraryPool(ProvEntity, MaterialSample): 'LibraryPool', 'DissectionRoiPolygon'], 'exact_mappings': ['NIMP:PD-KKIAPA48'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_pool_local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'bican:29e0578b-6427-4c93-b29b-bde27fbadeec'} }) - local_tube_id: Optional[str] = Field(None, description="""Library Pool Tube local name. Label of the tube containing the library pool, which is made up of multiple library_aliquots. This is a Library Lab local tube name, before the pool is aliquoted to the Seq Core provided tube 'Library Pool Tube Name'.""", json_schema_extra = { "linkml_meta": {'alias': 'library_pool_tube_internal_label', + library_pool_tube_internal_label: Optional[str] = Field(default=None, description="""Library Pool Tube local name. Label of the tube containing the library pool, which is made up of multiple library_aliquots. This is a Library Lab local tube name, before the pool is aliquoted to the Seq Core provided tube 'Library Pool Tube Name'.""", json_schema_extra = { "linkml_meta": {'alias': 'library_pool_tube_internal_label', 'domain_of': ['LibraryPool'], 'exact_mappings': ['NIMP:PD-WNYWPA48'], 'in_subset': ['analysis', 'tracking'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_pool_local_tube_id'}}, 'slot_uri': 'bican:f1fdea98-7849-4def-a62f-a04cbbf98922'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -10512,7 +10568,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -10530,7 +10586,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryPool","bican:LibraryPool"]] = Field(["bican:LibraryPool"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryPool","bican:LibraryPool"]] = Field(default=["bican:LibraryPool"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -10551,7 +10607,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -10570,7 +10626,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -10591,7 +10647,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -10685,7 +10741,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -10702,7 +10758,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -10719,7 +10775,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -10738,7 +10794,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -10755,7 +10811,7 @@ class LibraryPool(ProvEntity, MaterialSample): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -10787,7 +10843,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -10808,7 +10864,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'name': 'used', 'range': 'BrainSlab'}}}) - used: Optional[str] = Field(None, description="""The brain slab that was annotated by the delineation process.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[str] = Field(default=None, description="""The brain slab that was annotated by the delineation process.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -10820,7 +10876,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -10841,7 +10897,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -10859,7 +10915,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/DissectionRoiDelineation","bican:DissectionRoiDelineation"]] = Field(["bican:DissectionRoiDelineation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/DissectionRoiDelineation","bican:DissectionRoiDelineation"]] = Field(default=["bican:DissectionRoiDelineation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -10880,7 +10936,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -10899,7 +10955,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -10934,7 +10990,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -10955,7 +11011,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -11049,7 +11105,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -11066,7 +11122,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -11083,7 +11139,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -11102,7 +11158,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -11119,7 +11175,7 @@ class DissectionRoiDelineation(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -11151,7 +11207,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -11168,20 +11224,10 @@ class TissueDissection(ProvActivity, Procedure): 'mixins': ['ProvActivity'], 'slot_usage': {'used': {'description': 'The brain slab from which the tissue ' 'sample was dissected from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'name': 'used', 'range': 'BrainSlab'}}}) - used: Optional[str] = Field(None, description="""The brain slab from which the tissue sample was dissected from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[str] = Field(default=None, description="""The brain slab from which the tissue sample was dissected from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -11193,8 +11239,8 @@ class TissueDissection(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - was_guided_by: Optional[str] = Field(None, description="""The dissection ROI polygon which was used to guide the tissue dissection.""", json_schema_extra = { "linkml_meta": {'alias': 'was_guided_by', 'domain_of': ['TissueDissection']} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + was_guided_by: Optional[str] = Field(default=None, description="""The dissection ROI polygon which was used to guide the tissue dissection.""", json_schema_extra = { "linkml_meta": {'alias': 'was_guided_by', 'domain_of': ['TissueDissection']} }) + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -11215,7 +11261,7 @@ class TissueDissection(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -11233,7 +11279,7 @@ class TissueDissection(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/TissueDissection","bican:TissueDissection"]] = Field(["bican:TissueDissection"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/TissueDissection","bican:TissueDissection"]] = Field(default=["bican:TissueDissection"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -11254,7 +11300,7 @@ class TissueDissection(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -11273,7 +11319,7 @@ class TissueDissection(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -11308,7 +11354,7 @@ class TissueDissection(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -11329,7 +11375,7 @@ class TissueDissection(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -11423,7 +11469,7 @@ class TissueDissection(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -11440,7 +11486,7 @@ class TissueDissection(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -11457,7 +11503,7 @@ class TissueDissection(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -11476,7 +11522,7 @@ class TissueDissection(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -11493,7 +11539,7 @@ class TissueDissection(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -11525,7 +11571,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -11543,21 +11589,11 @@ class CellDissociation(ProvActivity, Procedure): 'slot_usage': {'used': {'description': 'The input tissue sample(s) from which ' 'the dissociated cell sample was ' 'derived from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'multivalued': True, 'name': 'used', 'range': 'TissueSample'}}}) - used: Optional[List[str]] = Field(default_factory=list, description="""The input tissue sample(s) from which the dissociated cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[List[str]] = Field(default=None, description="""The input tissue sample(s) from which the dissociated cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -11569,7 +11605,7 @@ class CellDissociation(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - process_date: Optional[str] = Field(None, description="""Date of cell dissociation process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', + process_date: Optional[str] = Field(default=None, description="""Date of cell dissociation process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', 'domain_of': ['CellDissociation', 'CellEnrichment', 'CellBarcoding', @@ -11579,7 +11615,7 @@ class CellDissociation(ProvActivity, Procedure): 'exact_mappings': ['NIMP:PD-BUBUFE27'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'dissociated_cell_sample_preparation_date'}}} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -11600,7 +11636,7 @@ class CellDissociation(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -11618,7 +11654,7 @@ class CellDissociation(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/CellDissociation","bican:CellDissociation"]] = Field(["bican:CellDissociation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/CellDissociation","bican:CellDissociation"]] = Field(default=["bican:CellDissociation"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -11639,7 +11675,7 @@ class CellDissociation(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -11658,7 +11694,7 @@ class CellDissociation(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -11693,7 +11729,7 @@ class CellDissociation(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -11714,7 +11750,7 @@ class CellDissociation(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -11808,7 +11844,7 @@ class CellDissociation(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -11825,7 +11861,7 @@ class CellDissociation(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -11842,7 +11878,7 @@ class CellDissociation(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -11861,7 +11897,7 @@ class CellDissociation(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -11878,7 +11914,7 @@ class CellDissociation(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -11910,7 +11946,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -11928,21 +11964,11 @@ class CellEnrichment(ProvActivity, Procedure): 'slot_usage': {'used': {'description': 'The input dissociated cell sample(s) ' 'from which the enriched cell sample ' 'was derived from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'multivalued': True, 'name': 'used', 'range': 'DissociatedCellSample'}}}) - used: Optional[List[str]] = Field(default_factory=list, description="""The input dissociated cell sample(s) from which the enriched cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[List[str]] = Field(default=None, description="""The input dissociated cell sample(s) from which the enriched cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -11954,7 +11980,7 @@ class CellEnrichment(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - process_date: Optional[str] = Field(None, description="""Date of cell enrichment process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', + process_date: Optional[str] = Field(default=None, description="""Date of cell enrichment process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', 'domain_of': ['CellDissociation', 'CellEnrichment', 'CellBarcoding', @@ -11964,7 +11990,7 @@ class CellEnrichment(ProvActivity, Procedure): 'exact_mappings': ['NIMP:PD-PFPFFC28'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'enriched_cell_sample_preparation_date'}}} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -11985,7 +12011,7 @@ class CellEnrichment(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -12003,7 +12029,7 @@ class CellEnrichment(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/CellEnrichment","bican:CellEnrichment"]] = Field(["bican:CellEnrichment"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/CellEnrichment","bican:CellEnrichment"]] = Field(default=["bican:CellEnrichment"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -12024,7 +12050,7 @@ class CellEnrichment(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -12043,7 +12069,7 @@ class CellEnrichment(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -12078,7 +12104,7 @@ class CellEnrichment(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -12099,7 +12125,7 @@ class CellEnrichment(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -12193,7 +12219,7 @@ class CellEnrichment(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -12210,7 +12236,7 @@ class CellEnrichment(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -12227,7 +12253,7 @@ class CellEnrichment(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -12246,7 +12272,7 @@ class CellEnrichment(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -12263,7 +12289,7 @@ class CellEnrichment(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -12295,7 +12321,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -12313,20 +12339,10 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'slot_usage': {'used': {'description': 'The enrichment cell sample splitting ' 'process from which the enriched cell ' 'sample was generated by.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'name': 'used', 'range': 'EnrichedCellSample'}}}) - used: Optional[str] = Field(None, description="""The enrichment cell sample splitting process from which the enriched cell sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[str] = Field(default=None, description="""The enrichment cell sample splitting process from which the enriched cell sample was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -12338,7 +12354,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -12359,7 +12375,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -12377,7 +12393,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/EnrichedCellSampleSplitting","bican:EnrichedCellSampleSplitting"]] = Field(["bican:EnrichedCellSampleSplitting"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/EnrichedCellSampleSplitting","bican:EnrichedCellSampleSplitting"]] = Field(default=["bican:EnrichedCellSampleSplitting"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -12398,7 +12414,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -12417,7 +12433,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -12452,7 +12468,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -12473,7 +12489,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -12567,7 +12583,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -12584,7 +12600,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -12601,7 +12617,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -12620,7 +12636,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -12637,7 +12653,7 @@ class EnrichedCellSampleSplitting(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -12669,7 +12685,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -12688,22 +12704,12 @@ class CellBarcoding(ProvActivity, Procedure): 'cell sample(s) from which the ' 'barcoded cell sample was derived ' 'from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'exactly_one_of': [{'range': 'DissociatedCellSample'}, {'range': 'EnrichedCellSample'}], 'multivalued': True, 'name': 'used'}}}) - used: Optional[List[str]] = Field(default_factory=list, description="""The input dissociated or enriched cell sample(s) from which the barcoded cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[List[str]] = Field(default=None, description="""The input dissociated or enriched cell sample(s) from which the barcoded cell sample was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -12717,21 +12723,21 @@ class CellBarcoding(ProvActivity, Procedure): 'exactly_one_of': [{'range': 'DissociatedCellSample'}, {'range': 'EnrichedCellSample'}], 'slot_uri': 'prov:used'} }) - port_well: Optional[str] = Field(None, description="""Specific position of the loaded port of the 10x chip. An Enriched or Dissociated Cell Sample is loaded into a port on a chip (creating a Barcoded Cell Sample). Can be left null for non-10x methods.""", json_schema_extra = { "linkml_meta": {'alias': 'barcoded cell sample port well', + barcoded_cell_sample_port_well: Optional[str] = Field(default=None, description="""Specific position of the loaded port of the 10x chip. An Enriched or Dissociated Cell Sample is loaded into a port on a chip (creating a Barcoded Cell Sample). Can be left null for non-10x methods.""", json_schema_extra = { "linkml_meta": {'alias': 'barcoded cell sample port well', 'domain_of': ['CellBarcoding'], 'exact_mappings': ['NIMP:PD-KJKJZK32'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'barcoded_cell_sample_port_well'}}, 'slot_uri': 'bican:aca38100-d245-4be4-9be3-ba27192779fe'} }) - input_quantity: Optional[int] = Field(None, description="""Number of enriched or dissociated cells/nuclei going into the barcoding process.""", json_schema_extra = { "linkml_meta": {'alias': 'barcoded cell input quantity count', + barcoded_cell_input_quantity_count: Optional[int] = Field(default=None, description="""Number of enriched or dissociated cells/nuclei going into the barcoding process.""", json_schema_extra = { "linkml_meta": {'alias': 'barcoded cell input quantity count', 'domain_of': ['CellBarcoding'], 'exact_mappings': ['NIMP:PD-ZZZZWQ40'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'barcoded_cell_input_quantity_count'}}, 'slot_uri': 'bican:aa534269-7c9b-4b63-b990-eea8cda56d0e'} }) - process_date: Optional[str] = Field(None, description="""Date of cell barcoding process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', + process_date: Optional[str] = Field(default=None, description="""Date of cell barcoding process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', 'domain_of': ['CellDissociation', 'CellEnrichment', 'CellBarcoding', @@ -12741,12 +12747,12 @@ class CellBarcoding(ProvActivity, Procedure): 'exact_mappings': ['NIMP:PD-SHSHZS25'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'barcoded_cell_sample_preparation_date'}}} }) - method: Optional[BarcodedCellSampleTechnique] = Field(None, description="""Standardized nomenclature to describe the general barcoding method used. For example: Multiome, ATAC Only, GEX Only or snm3C-seq.""", json_schema_extra = { "linkml_meta": {'alias': 'method', + method: Optional[BarcodedCellSampleTechnique] = Field(default=None, description="""Standardized nomenclature to describe the general barcoding method used. For example: Multiome, ATAC Only, GEX Only or snm3C-seq.""", json_schema_extra = { "linkml_meta": {'alias': 'method', 'domain_of': ['CellBarcoding', 'LibraryConstruction'], 'exact_mappings': ['NIMP:PD-TDTDDF25'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'barcoded_cell_sample_technique'}}} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -12767,7 +12773,7 @@ class CellBarcoding(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -12785,7 +12791,7 @@ class CellBarcoding(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/CellBarcoding","bican:CellBarcoding"]] = Field(["bican:CellBarcoding"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/CellBarcoding","bican:CellBarcoding"]] = Field(default=["bican:CellBarcoding"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -12806,7 +12812,7 @@ class CellBarcoding(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -12825,7 +12831,7 @@ class CellBarcoding(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -12860,7 +12866,7 @@ class CellBarcoding(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -12881,7 +12887,7 @@ class CellBarcoding(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -12975,7 +12981,7 @@ class CellBarcoding(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -12992,7 +12998,7 @@ class CellBarcoding(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -13009,7 +13015,7 @@ class CellBarcoding(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -13028,7 +13034,7 @@ class CellBarcoding(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -13045,7 +13051,7 @@ class CellBarcoding(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -13077,7 +13083,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -13095,20 +13101,10 @@ class CdnaAmplification(ProvActivity, Procedure): 'slot_usage': {'used': {'description': 'The input barcoded cell sample from ' 'which amplified cDNA was derived ' 'from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'name': 'used', 'range': 'BarcodedCellSample'}}}) - used: Optional[str] = Field(None, description="""The input barcoded cell sample from which amplified cDNA was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[str] = Field(default=None, description="""The input barcoded cell sample from which amplified cDNA was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -13120,14 +13116,14 @@ class CdnaAmplification(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - pcr_cycles: Optional[int] = Field(None, description="""Number of PCR cycles used during cDNA amplification for this cDNA.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA PCR cycles', + amplified_cDNA_PCR_cycles: Optional[int] = Field(default=None, description="""Number of PCR cycles used during cDNA amplification for this cDNA.""", json_schema_extra = { "linkml_meta": {'alias': 'amplified cDNA PCR cycles', 'domain_of': ['CdnaAmplification'], 'exact_mappings': ['NIMP:PD-OKOKQD38'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'amplified_cdna_pcr_cycles'}}, 'slot_uri': 'bican:3827634c-3f8f-4760-b358-86ce4b030238'} }) - process_date: Optional[date] = Field(None, description="""Date of cDNA amplification.""", json_schema_extra = { "linkml_meta": {'alias': 'cDNA amplification process date', + cDNA_amplification_process_date: Optional[date] = Field(default=None, description="""Date of cDNA amplification.""", json_schema_extra = { "linkml_meta": {'alias': 'cDNA amplification process date', 'domain_of': ['CellDissociation', 'CellEnrichment', 'CellBarcoding', @@ -13138,14 +13134,14 @@ class CdnaAmplification(ProvActivity, Procedure): 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'amplified_cdna_preparation_date'}}, 'slot_uri': 'bican:6cc333e7-9b98-497f-b7b1-eae904db2400'} }) - set: Optional[str] = Field(None, description="""cDNA amplification set, containing multiple amplified_cDNA_names that were processed at the same time.""", json_schema_extra = { "linkml_meta": {'alias': 'cDNA amplification set', + cDNA_amplification_set: Optional[str] = Field(default=None, description="""cDNA amplification set, containing multiple amplified_cDNA_names that were processed at the same time.""", json_schema_extra = { "linkml_meta": {'alias': 'cDNA amplification set', 'domain_of': ['CdnaAmplification', 'LibraryConstruction'], 'exact_mappings': ['NIMP:PD-SCSCTM41'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'cdna_amplification_set'}}, 'slot_uri': 'bican:42e98a88-50b3-4ea2-871b-2142f6a0dfdd'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -13166,7 +13162,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -13184,7 +13180,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/CdnaAmplification","bican:CdnaAmplification"]] = Field(["bican:CdnaAmplification"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/CdnaAmplification","bican:CdnaAmplification"]] = Field(default=["bican:CdnaAmplification"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -13205,7 +13201,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -13224,7 +13220,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -13259,7 +13255,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -13280,7 +13276,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -13374,7 +13370,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -13391,7 +13387,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -13408,7 +13404,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -13427,7 +13423,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -13444,7 +13440,7 @@ class CdnaAmplification(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -13476,7 +13472,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -13496,19 +13492,9 @@ class LibraryConstruction(ProvActivity, Procedure): 'description': 'The input barcoded cell sample or ' 'amplified cDNA from which the library ' 'was derived from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'name': 'used'}}}) - used: Optional[str] = Field(None, description="""The input barcoded cell sample or amplified cDNA from which the library was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[str] = Field(default=None, description="""The input barcoded cell sample or amplified cDNA from which the library was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'any_of': [{'range': 'BarcodedCellSample'}, {'range': 'AmplifiedCdna'}], 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', @@ -13521,14 +13507,14 @@ class LibraryConstruction(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - method: Optional[LibraryTechnique] = Field(None, description="""Standardized nomenclature to describe the specific library method used. This specifies the alignment method required for the library. For example, 10xV3.1 (for RNASeq single assay), 10xMult-GEX (for RNASeq multiome assay), and 10xMult-ATAC (for ATACSeq multiome assay).""", json_schema_extra = { "linkml_meta": {'alias': 'library method', + library_method: Optional[LibraryTechnique] = Field(default=None, description="""Standardized nomenclature to describe the specific library method used. This specifies the alignment method required for the library. For example, 10xV3.1 (for RNASeq single assay), 10xMult-GEX (for RNASeq multiome assay), and 10xMult-ATAC (for ATACSeq multiome assay).""", json_schema_extra = { "linkml_meta": {'alias': 'library method', 'domain_of': ['CellBarcoding', 'LibraryConstruction'], 'exact_mappings': ['NIMP:PD-AJAJCN35'], 'in_subset': ['analysis', 'tracking', 'alignment'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_technique'}}, 'slot_uri': 'bican:7b60d59e-fdd7-4b27-a2d4-cae9b69103a6'} }) - process_date: Optional[date] = Field(None, description="""Date of library construction.""", json_schema_extra = { "linkml_meta": {'alias': 'library creation date', + library_creation_date: Optional[date] = Field(default=None, description="""Date of library construction.""", json_schema_extra = { "linkml_meta": {'alias': 'library creation date', 'domain_of': ['CellDissociation', 'CellEnrichment', 'CellBarcoding', @@ -13539,21 +13525,21 @@ class LibraryConstruction(ProvActivity, Procedure): 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_preparation_date'}}, 'slot_uri': 'bican:9c2f575d-1b64-451d-894f-656861afe07a'} }) - input_quantity_ng: Optional[float] = Field(None, description="""Amount of cDNA going into library construction in nanograms.""", json_schema_extra = { "linkml_meta": {'alias': 'library input ng', + library_input_ng: Optional[float] = Field(default=None, description="""Amount of cDNA going into library construction in nanograms.""", json_schema_extra = { "linkml_meta": {'alias': 'library input ng', 'domain_of': ['LibraryConstruction'], 'exact_mappings': ['NIMP:PD-AFAFXP37'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_input_ng'}}, 'slot_uri': 'bican:e4d31d97-722d-4771-a0e4-e6062190f2c1'} }) - set: Optional[str] = Field(None, description="""Library set, containing multiple library_names that were processed at the same time.""", json_schema_extra = { "linkml_meta": {'alias': 'library prep set', + library_prep_set: Optional[str] = Field(default=None, description="""Library set, containing multiple library_names that were processed at the same time.""", json_schema_extra = { "linkml_meta": {'alias': 'library prep set', 'domain_of': ['CdnaAmplification', 'LibraryConstruction'], 'exact_mappings': ['NIMP:PD-PCPCVR50'], 'in_subset': ['analysis'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_prep_set'}}, 'slot_uri': 'bican:b124ffa9-9134-4a61-a30d-bb191b2fc7fa'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -13574,7 +13560,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -13592,7 +13578,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryConstruction","bican:LibraryConstruction"]] = Field(["bican:LibraryConstruction"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryConstruction","bican:LibraryConstruction"]] = Field(default=["bican:LibraryConstruction"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -13613,7 +13599,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -13632,7 +13618,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -13667,7 +13653,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -13688,7 +13674,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -13782,7 +13768,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -13799,7 +13785,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -13816,7 +13802,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -13835,7 +13821,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -13852,7 +13838,7 @@ class LibraryConstruction(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -13884,7 +13870,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -13901,21 +13887,11 @@ class LibraryPooling(ProvActivity, Procedure): 'mixins': ['ProvActivity'], 'slot_usage': {'used': {'description': 'The input aliquot(s) from which the ' 'library pool was derived from.', - 'domain_of': ['ProvActivity', - 'DissectionRoiDelineation', - 'TissueDissection', - 'CellDissociation', - 'CellEnrichment', - 'EnrichedCellSampleSplitting', - 'CellBarcoding', - 'CdnaAmplification', - 'LibraryConstruction', - 'LibraryPooling'], 'multivalued': True, 'name': 'used', 'range': 'LibraryAliquot'}}}) - used: Optional[List[str]] = Field(default_factory=list, description="""The input aliquot(s) from which the library pool was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', + used: Optional[List[str]] = Field(default=None, description="""The input aliquot(s) from which the library pool was derived from.""", json_schema_extra = { "linkml_meta": {'alias': 'used', 'domain_of': ['ProvActivity', 'DissectionRoiDelineation', 'TissueDissection', @@ -13927,7 +13903,7 @@ class LibraryPooling(ProvActivity, Procedure): 'LibraryConstruction', 'LibraryPooling'], 'slot_uri': 'prov:used'} }) - process_date: Optional[str] = Field(None, description="""Date of library pooling process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', + process_date: Optional[str] = Field(default=None, description="""Date of library pooling process.""", json_schema_extra = { "linkml_meta": {'alias': 'process_date', 'domain_of': ['CellDissociation', 'CellEnrichment', 'CellBarcoding', @@ -13937,7 +13913,7 @@ class LibraryPooling(ProvActivity, Procedure): 'exact_mappings': ['NIMP:PD-XUXUNM35'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'library_pool_preparation_date'}}} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -13958,7 +13934,7 @@ class LibraryPooling(ProvActivity, Procedure): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -13976,7 +13952,7 @@ class LibraryPooling(ProvActivity, Procedure): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryPooling","bican:LibraryPooling"]] = Field(["bican:LibraryPooling"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/LibraryPooling","bican:LibraryPooling"]] = Field(default=["bican:LibraryPooling"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -13997,7 +13973,7 @@ class LibraryPooling(ProvActivity, Procedure): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -14016,7 +13992,7 @@ class LibraryPooling(ProvActivity, Procedure): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -14051,7 +14027,7 @@ class LibraryPooling(ProvActivity, Procedure): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -14072,7 +14048,7 @@ class LibraryPooling(ProvActivity, Procedure): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -14166,7 +14142,7 @@ class LibraryPooling(ProvActivity, Procedure): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -14183,7 +14159,7 @@ class LibraryPooling(ProvActivity, Procedure): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -14200,7 +14176,7 @@ class LibraryPooling(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -14219,7 +14195,7 @@ class LibraryPooling(ProvActivity, Procedure): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -14236,7 +14212,7 @@ class LibraryPooling(ProvActivity, Procedure): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -14268,7 +14244,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -14288,31 +14264,6 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'brain slab image delineating a region ' 'of interest (ROI) for a tissue sample ' 'dissectioning.', - 'domain_of': ['entity', - 'named thing', - 'organism taxon', - 'information content entity', - 'dataset', - 'physical entity', - 'activity', - 'procedure', - 'material sample', - 'biological entity', - 'macromolecular machine mixin', - 'gene or gene product', - 'gene', - 'genome', - 'Donor', - 'BrainSlab', - 'TissueSample', - 'DissociatedCellSample', - 'EnrichedCellSample', - 'BarcodedCellSample', - 'AmplifiedCdna', - 'Library', - 'LibraryAliquot', - 'LibraryPool', - 'DissectionRoiPolygon'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'local_name'}}, 'name': 'name'}, @@ -14320,19 +14271,10 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'from which the dissection ' 'ROI polygon was generated ' 'by.', - 'domain_of': ['ProvEntity', - 'TissueSample', - 'DissociatedCellSample', - 'EnrichedCellSample', - 'BarcodedCellSample', - 'AmplifiedCdna', - 'Library', - 'LibraryPool', - 'DissectionRoiPolygon'], 'name': 'was_generated_by', 'range': 'DissectionRoiDelineation'}}}) - was_generated_by: Optional[str] = Field(None, description="""The delineation process from which the dissection ROI polygon was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + was_generated_by: Optional[str] = Field(default=None, description="""The delineation process from which the dissection ROI polygon was generated by.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -14343,10 +14285,13 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - name: Optional[str] = Field(None, description="""Name of a polygon annotated on a brain slab image delineating a region of interest (ROI) for a tissue sample dissectioning.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""Name of a polygon annotated on a brain slab image delineating a region of interest (ROI) for a tissue sample dissectioning.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', - 'domain_of': ['entity', + 'domain_of': ['attribute', + 'entity', + 'macromolecular machine mixin', 'named thing', 'organism taxon', 'information content entity', @@ -14356,7 +14301,6 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'procedure', 'material sample', 'biological entity', - 'macromolecular machine mixin', 'gene or gene product', 'gene', 'genome', @@ -14371,13 +14315,17 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'LibraryAliquot', 'LibraryPool', 'DissectionRoiPolygon'], + 'exact_mappings': ['gff3:Name', 'gpi:DB_Object_Name'], + 'in_subset': ['translator_minimal', 'samples'], 'local_names': {'NIMP': {'local_name_source': 'NIMP', 'local_name_value': 'local_name'}}, + 'mappings': ['rdfs:label'], + 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - annotates: Optional[str] = Field(None, description="""The brain slab that was annotated by the delineation process.""", json_schema_extra = { "linkml_meta": {'alias': 'annotates', + annotates: Optional[str] = Field(default=None, description="""The brain slab that was annotated by the delineation process.""", json_schema_extra = { "linkml_meta": {'alias': 'annotates', 'domain_of': ['DissectionRoiPolygon'], 'exact_mappings': ['NIMP:has_parent']} }) - was_derived_from: Optional[str] = Field(None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -14390,7 +14338,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'LibraryPool', 'DigitalAsset'], 'slot_uri': 'prov:wasDerivedFrom'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -14411,7 +14359,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -14429,7 +14377,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/DissectionRoiPolygon","bican:DissectionRoiPolygon"]] = Field(["bican:DissectionRoiPolygon"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/DissectionRoiPolygon","bican:DissectionRoiPolygon"]] = Field(default=["bican:DissectionRoiPolygon"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -14450,7 +14398,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -14469,7 +14417,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -14490,7 +14438,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -14584,7 +14532,7 @@ class DissectionRoiPolygon(ProvEntity, Entity): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -14607,7 +14555,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v): @@ -14623,7 +14571,7 @@ class DigitalAsset(ProvEntity, Dataset): 'was_derived_from': {'name': 'was_derived_from', 'range': 'LibraryPool'}}}) - was_derived_from: Optional[str] = Field(None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', + was_derived_from: Optional[str] = Field(default=None, description="""A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity.""", json_schema_extra = { "linkml_meta": {'alias': 'was_derived_from', 'domain_of': ['ProvEntity', 'BrainSlab', 'TissueSample', @@ -14636,10 +14584,12 @@ class DigitalAsset(ProvEntity, Dataset): 'LibraryPool', 'DigitalAsset'], 'slot_uri': 'prov:wasDerivedFrom'} }) - digest: Optional[List[str]] = Field(default_factory=list, description="""Stores checksum information.""", json_schema_extra = { "linkml_meta": {'alias': 'digest', 'domain_of': ['DigitalAsset']} }) - content_url: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'content_url', 'domain_of': ['DigitalAsset']} }) - data_type: Optional[str] = Field(None, description="""The type of data in the file""", json_schema_extra = { "linkml_meta": {'alias': 'data_type', 'domain_of': ['DigitalAsset']} }) - was_generated_by: Optional[str] = Field(None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', + digest: Optional[List[Union[Checksum, str]]] = Field(default=None, description="""Stores checksum information.""", json_schema_extra = { "linkml_meta": {'alias': 'digest', + 'any_of': [{'range': 'checksum'}, {'range': 'string'}], + 'domain_of': ['DigitalAsset']} }) + content_url: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'content_url', 'domain_of': ['DigitalAsset']} }) + data_type: Optional[str] = Field(default=None, description="""The type of data in the file""", json_schema_extra = { "linkml_meta": {'alias': 'data_type', 'domain_of': ['DigitalAsset']} }) + was_generated_by: Optional[str] = Field(default=None, description="""Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation.""", json_schema_extra = { "linkml_meta": {'alias': 'was_generated_by', 'domain_of': ['ProvEntity', 'TissueSample', 'DissociatedCellSample', @@ -14650,7 +14600,7 @@ class DigitalAsset(ProvEntity, Dataset): 'LibraryPool', 'DissectionRoiPolygon'], 'slot_uri': 'prov:wasGeneratedBy'} }) - id: str = Field(..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', + id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""", json_schema_extra = { "linkml_meta": {'alias': 'id', 'definition_uri': 'https://w3id.org/biolink/vocab/id', 'domain': 'entity', 'domain_of': ['ontology class', @@ -14671,7 +14621,7 @@ class DigitalAsset(ProvEntity, Dataset): 'exact_mappings': ['AGRKB:primaryId', 'gff3:ID', 'gpi:DB_Object_ID'], 'in_subset': ['translator_minimal'], 'slot_uri': 'biolink:id'} }) - iri: Optional[str] = Field(None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', + iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""", json_schema_extra = { "linkml_meta": {'alias': 'iri', 'definition_uri': 'https://w3id.org/biolink/vocab/iri', 'domain_of': ['attribute', 'entity', @@ -14689,7 +14639,7 @@ class DigitalAsset(ProvEntity, Dataset): 'exact_mappings': ['WIKIDATA_PROPERTY:P854'], 'in_subset': ['translator_minimal', 'samples'], 'slot_uri': 'biolink:iri'} }) - category: List[Literal["https://identifiers.org/brain-bican/vocab/DigitalAsset","bican:DigitalAsset"]] = Field(["bican:DigitalAsset"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', + category: List[Literal["https://identifiers.org/brain-bican/vocab/DigitalAsset","bican:DigitalAsset"]] = Field(default=["bican:DigitalAsset"], 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. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}. NOTE: The category slot was modified to have a curie range and a pattern for bican categories.""", json_schema_extra = { "linkml_meta": {'alias': 'category', 'definition_uri': 'https://w3id.org/biolink/vocab/category', 'designates_type': True, 'domain': 'entity', @@ -14710,7 +14660,7 @@ class DigitalAsset(ProvEntity, Dataset): 'is_a': 'type', 'is_class_field': True, 'slot_uri': 'biolink:category'} }) - type: Optional[List[str]] = Field(default_factory=list, json_schema_extra = { "linkml_meta": {'alias': 'type', + type: Optional[List[str]] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'type', 'definition_uri': 'https://w3id.org/biolink/vocab/type', 'domain': 'entity', 'domain_of': ['entity', @@ -14729,7 +14679,7 @@ class DigitalAsset(ProvEntity, Dataset): 'exact_mappings': ['gff3:type', 'gpi:DB_Object_Type'], 'mappings': ['rdf:type'], 'slot_uri': 'rdf:type'} }) - name: Optional[str] = Field(None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', + name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""", json_schema_extra = { "linkml_meta": {'alias': 'name', 'aliases': ['label', 'display name', 'title'], 'definition_uri': 'https://w3id.org/biolink/vocab/name', 'domain': 'entity', @@ -14764,7 +14714,7 @@ class DigitalAsset(ProvEntity, Dataset): 'mappings': ['rdfs:label'], 'narrow_mappings': ['dct:title', 'WIKIDATA_PROPERTY:P1476'], 'slot_uri': 'rdfs:label'} }) - description: Optional[str] = Field(None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', + description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""", json_schema_extra = { "linkml_meta": {'alias': 'description', 'aliases': ['definition'], 'definition_uri': 'https://w3id.org/biolink/vocab/description', 'domain_of': ['entity', @@ -14785,7 +14735,7 @@ class DigitalAsset(ProvEntity, Dataset): 'mappings': ['dct:description'], 'narrow_mappings': ['gff3:Description'], 'slot_uri': 'dct:description'} }) - has_attribute: Optional[List[str]] = Field(None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', + has_attribute: Optional[List[str]] = Field(default=None, description="""connects any entity to an attribute""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute', 'close_mappings': ['OBI:0001927'], 'definition_uri': 'https://w3id.org/biolink/vocab/has_attribute', 'domain': 'entity', @@ -14879,7 +14829,7 @@ class DigitalAsset(ProvEntity, Dataset): 'UMLS:has_supported_concept_relationship', 'UMLS:may_be_qualified_by'], 'slot_uri': 'biolink:has_attribute'} }) - deprecated: Optional[bool] = Field(None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', + deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""", json_schema_extra = { "linkml_meta": {'alias': 'deprecated', 'definition_uri': 'https://w3id.org/biolink/vocab/deprecated', 'domain_of': ['entity', 'attribute', @@ -14896,7 +14846,7 @@ class DigitalAsset(ProvEntity, Dataset): 'genome'], 'exact_mappings': ['oboInOwl:ObsoleteClass'], 'slot_uri': 'biolink:deprecated'} }) - provided_by: Optional[List[str]] = Field(None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', + provided_by: Optional[List[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes. Used internally to represent how a particular node made its way into a knowledge provider or graph.""", json_schema_extra = { "linkml_meta": {'alias': 'provided_by', 'definition_uri': 'https://w3id.org/biolink/vocab/provided_by', 'domain': 'named thing', 'domain_of': ['named thing', @@ -14913,7 +14863,7 @@ class DigitalAsset(ProvEntity, Dataset): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:provided_by'} }) - xref: Optional[List[str]] = Field(default_factory=list, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', + xref: Optional[List[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings. This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""", json_schema_extra = { "linkml_meta": {'alias': 'xref', 'aliases': ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls'], 'definition_uri': 'https://w3id.org/biolink/vocab/xref', 'domain': 'named thing', @@ -14932,7 +14882,7 @@ class DigitalAsset(ProvEntity, Dataset): 'in_subset': ['translator_minimal'], 'narrow_mappings': ['gff3:Dbxref', 'gpi:DB_Xrefs'], 'slot_uri': 'biolink:xref'} }) - full_name: Optional[str] = Field(None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', + full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'full_name', 'definition_uri': 'https://w3id.org/biolink/vocab/full_name', 'domain': 'named thing', 'domain_of': ['named thing', @@ -14949,7 +14899,7 @@ class DigitalAsset(ProvEntity, Dataset): 'genome'], 'is_a': 'node property', 'slot_uri': 'biolink:full_name'} }) - synonym: Optional[List[str]] = Field(default_factory=list, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', + synonym: Optional[List[str]] = Field(default=None, description="""Alternate human-readable names for a thing""", json_schema_extra = { "linkml_meta": {'alias': 'synonym', 'aliases': ['alias'], 'definition_uri': 'https://w3id.org/biolink/vocab/synonym', 'domain': 'named thing', @@ -14975,7 +14925,7 @@ class DigitalAsset(ProvEntity, Dataset): 'IAO:0000136', 'RXNORM:has_tradename'], 'slot_uri': 'biolink:synonym'} }) - license: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'license', + license: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'license', 'definition_uri': 'https://w3id.org/biolink/vocab/license', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], @@ -14983,21 +14933,21 @@ class DigitalAsset(ProvEntity, Dataset): 'is_a': 'node property', 'narrow_mappings': ['WIKIDATA_PROPERTY:P275'], 'slot_uri': 'biolink:license'} }) - rights: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'rights', + rights: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'rights', 'definition_uri': 'https://w3id.org/biolink/vocab/rights', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:rights'], 'is_a': 'node property', 'slot_uri': 'biolink:rights'} }) - format: Optional[str] = Field(None, json_schema_extra = { "linkml_meta": {'alias': 'format', + format: Optional[str] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'format', 'definition_uri': 'https://w3id.org/biolink/vocab/format', 'domain': 'information content entity', 'domain_of': ['information content entity', 'dataset'], 'exact_mappings': ['dct:format', 'WIKIDATA_PROPERTY:P2701'], 'is_a': 'node property', 'slot_uri': 'biolink:format'} }) - creation_date: Optional[date] = Field(None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', + creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""", json_schema_extra = { "linkml_meta": {'alias': 'creation_date', 'aliases': ['publication date'], 'definition_uri': 'https://w3id.org/biolink/vocab/creation_date', 'domain': 'named thing', @@ -15011,7 +14961,7 @@ def pattern_category(cls, v): pattern=re.compile(r"^bican:[A-Z][A-Za-z]+$") if isinstance(v,list): for element in v: - if not pattern.match(element): + if isinstance(v, str) and not pattern.match(element): raise ValueError(f"Invalid category format: {element}") elif isinstance(v,str): if not pattern.match(v):